Commit Graph

596 Commits

Author SHA1 Message Date
Alex Gleason d49c63bb1a
Move statuses view into its own file 2023-10-06 15:37:31 -05:00
Alex Gleason 0b77e7d888
Add views/mastodon/accounts.ts, views/mastodon/emojis.ts 2023-10-06 15:28:02 -05:00
Alex Gleason cb1141784e
views.ts: fix wrong import of toAccount 2023-10-06 15:19:27 -05:00
Alex Gleason 981d0ee693
views/attachment.ts -> views/mastodon/attachments.ts 2023-10-06 15:19:13 -05:00
Alex Gleason 180fdbd1c9
nostr-to-activitypub.ts --> activitypub/actor.ts 2023-10-06 15:09:01 -05:00
Alex Gleason 1662f616ef
Move unfurl code to a separate module 2023-10-06 15:05:22 -05:00
Alex Gleason db17f84937
Move emojiTagSchema into schemas/nostr.ts 2023-10-06 12:39:22 -05:00
Alex Gleason 9ca3ec08a3
Delete `transformers` directory, rename `views` 2023-10-06 12:02:24 -05:00
Alex Gleason a15e28e48f
Add Sentry hono middleware 2023-10-05 20:04:27 -05:00
Alex Gleason d646598879
Add Sentry integration 2023-10-05 16:08:12 -05:00
Alex Gleason 233f671326
Subscription: fix it with nostr-machina 2023-10-04 16:09:23 -05:00
Alex Gleason 0f9ff5bcaa
relay: fix querying by ids and authors 2023-09-11 19:45:27 -05:00
Alex Gleason 62ac9bffa3
accounts: set nip05 during update_credentials 2023-09-11 18:44:44 -05:00
Alex Gleason 93d8e0b22b
accounts: support updating avatar and banner 2023-09-11 18:02:17 -05:00
Alex Gleason d2760bc706
media: refactor upload code into a separate module 2023-09-11 17:49:38 -05:00
Alex Gleason 55d5197136
timelines: 3 seconds --> 1 second 2023-09-11 17:26:47 -05:00
Alex Gleason a44fb4c84f
Use default avatar and banner from repo, instead of linking out to image 2023-09-11 15:36:09 -05:00
Alex Gleason 737c9f0364
csp: load any media over https, not just local media 2023-09-11 15:16:26 -05:00
Alex Gleason 94671b6a98
s3: create the client instance from a function each time (so missing config doesn't crash it) 2023-09-11 14:42:29 -05:00
Alex Gleason ef96fa539a
Render status account from pubkey 2023-09-11 09:46:41 -05:00
Alex Gleason 31114b6094
accounts: return a blank account for verify_credentials if it isn't resolved 2023-09-11 09:08:15 -05:00
Alex Gleason 1b2f4d9a54
accounts: return token after registering account 2023-09-11 07:17:00 -05:00
Alex Gleason 10a804b60e
Remove POW requirement for now 2023-09-11 05:57:50 -05:00
Alex Gleason bacb872a18
Add /api not implemented controller 2023-09-11 04:55:15 -05:00
Alex Gleason a5bf09ed2b
Resolve any file in public/ 2023-09-11 04:14:08 -05:00
Alex Gleason 9cda8e3000
csp: use template literals to avoid escaping single quotes 2023-09-11 04:07:54 -05:00
Alex Gleason 4310bb7157
Add a CSP 2023-09-11 04:04:55 -05:00
Alex Gleason 8a9f8454bf
Serve a frontend through Ditto 2023-09-11 00:19:56 -05:00
Alex Gleason 82c4f0827e
Make registrations configurable by env 2023-09-10 23:44:30 -05:00
Alex Gleason 0adb6f5eba
Add messages to HTTPException's 2023-09-10 19:43:07 -05:00
Alex Gleason 75dd2652d2
app: remove unused account search fallback endpoint 2023-09-10 19:42:41 -05:00
Alex Gleason e3f11545b7
/api/v1/acccounts --> /api/v1/accounts 2023-09-10 19:23:50 -05:00
Alex Gleason 2d7398e9d1
nip98: fix pow check 2023-09-10 17:11:13 -05:00
Alex Gleason 607ef4b980
Make POW configurable, expose over the API 2023-09-10 15:38:49 -05:00
Alex Gleason 052c00821d
Enable registrations, require proof-of-work 2023-09-10 15:07:31 -05:00
Alex Gleason b9476ccbd6
pipeline: delete unattached-media rows when authoring an event 2023-09-09 22:27:37 -05:00
Alex Gleason 0d343fa190
db/unattached-media: refactor queries, DRY 2023-09-09 22:03:02 -05:00
Alex Gleason 43499f2dfd
media: add attachment view, unify types 2023-09-09 21:33:12 -05:00
Alex Gleason cf9a754b02
media: pukey --> pubkey, fix adding media tags to event 2023-09-09 20:12:47 -05:00
Alex Gleason 0b867afd8e
unattached-media: delete orphaned attachments after 15 minutes 2023-09-09 19:27:39 -05:00
Alex Gleason 46b9deffce
utils: add ipfs module 2023-09-09 19:13:42 -05:00
Alex Gleason e8053ba072
unattached-media: cid --> url 2023-09-09 18:12:54 -05:00
Alex Gleason c88b174d02
Add unattached_media table, insert one when uploading a file 2023-09-09 17:41:30 -05:00
Alex Gleason c6b20e68f6
db/events: refactor filterIndexableTags function 2023-09-09 16:24:53 -05:00
Alex Gleason f8b2efb484
db/events: refactor insertEvent into smaller functions 2023-09-09 16:08:30 -05:00
Alex Gleason 96ff31719e
db/events: pass EventData, index all media from local users 2023-09-09 15:48:03 -05:00
Alex Gleason d24318fd0d
db/events: index "media" tags, rearrange conditionals to optimize processing 2023-09-09 15:39:49 -05:00
Alex Gleason 6e139985ac
db/events: add a baseline 200 character limit to tag values 2023-09-09 15:31:43 -05:00
Alex Gleason fe08aaa2a3
db/events: use stricter tagConditions to not pollute the database 2023-09-09 15:29:17 -05:00
Alex Gleason b5a84627c8
statuses: enable posting with media attachments 2023-09-08 18:45:00 -05:00
Alex Gleason dcc9d05ee5
auth98: fix nsec flow 2023-09-08 18:29:26 -05:00
Alex Gleason 527e276340
Fix nip98 signing (validate proof), skip validating payload for media requests 2023-09-08 18:22:38 -05:00
Alex Gleason 969d8bfe7f
Add media endpoints, require nip98 proof to upload them 2023-09-08 17:00:07 -05:00
Alex Gleason 2c943872a8
media: enforce a filesize limit on uploads 2023-09-08 16:48:27 -05:00
Alex Gleason acc18adffb
media: return the appropriate Attachment type 2023-09-08 16:15:34 -05:00
Alex Gleason 8ae89462b7
Add a configUploader module to select the uploader based on config 2023-09-08 16:04:55 -05:00
Alex Gleason 34acc99000
Add a precheck file to throw when config is wrong 2023-09-08 15:48:00 -05:00
Alex Gleason 4f57ac0352
uploads: make uploader and media URL configurable 2023-09-08 15:20:57 -05:00
Alex Gleason 014b9f6d29
uploaders: allow deleting files by CID 2023-09-08 15:01:52 -05:00
Alex Gleason c40f10539d
ipfs: make API URL configurable, reorganize config 2023-09-07 19:22:28 -05:00
Alex Gleason c4af44d582
Move s3 to separate uploader module, add ipfs uploader 2023-09-07 16:59:05 -05:00
Alex Gleason 4622b52f78
mediaController: get cid, fix permissions, host on /ipfs 2023-09-06 22:10:28 -05:00
Alex Gleason 3fc60c78d2
Add a mediaController for s3 uploads 2023-09-06 17:55:46 -05:00
Alex Gleason 5f82f4f11b
client: use the same pool as the firehose 2023-09-06 01:18:07 -05:00
Alex Gleason 17c75e6761
Move pool to a separate module (to avoid importing firehose in tests) 2023-09-05 22:00:32 -05:00
Alex Gleason f2ccb5254e
cron: run cleanupEvents on startup 2023-09-05 21:52:16 -05:00
Alex Gleason a69b7f54f8
pipeline: broadcast deletions to all known relays 2023-09-05 21:45:30 -05:00
Alex Gleason e2b88d57d9
pipeline: process kind 5 deletion events 2023-09-05 21:24:59 -05:00
Alex Gleason 22ddc7b1a8
pipeline: remove unnecessary async keyword from trackHashtags 2023-09-05 20:35:58 -05:00
Alex Gleason 48195f02b3
pipeline: don't store event if a deletion for it exists 2023-09-05 20:31:34 -05:00
Alex Gleason 97a3478b1a
cron: change cleanupEvents to every 15 minutes 2023-09-05 17:48:50 -05:00
Alex Gleason a46381849f
db/events: delete FTS rows when deleting events 2023-09-05 17:25:54 -05:00
Alex Gleason a25d6c9755
db: pragma, enable fk constraints, enable autovacuum full 2023-09-05 17:25:14 -05:00
Alex Gleason 02049ed9d1
pipeline: fix isFresh comparison 2023-09-05 17:10:20 -05:00
Alex Gleason 5c02fd0773
db/relays: normalize url before inserting 2023-09-05 16:58:34 -05:00
Alex Gleason 2ff40c8fc5
db/events: rework tags, make event_id a FK to events again, drop value_2 and value_3 2023-09-05 16:55:16 -05:00
Alex Gleason 4708839fd6
db: improve output of migrations, exit on failure 2023-09-05 16:05:02 -05:00
Alex Gleason cdffe42cfd
db/events: delete tags during deleteFilters 2023-09-05 13:23:45 -05:00
Alex Gleason df17f62ecb
db/events: try fixing types in CI? 2023-09-05 12:31:59 -05:00
Alex Gleason aea07fd28a
db/events: fix type error 2023-09-04 22:16:43 -05:00
Alex Gleason 5d19c21f51
cron: delete old remote events every hour 2023-09-04 19:46:39 -05:00
Alex Gleason 08dd5fa4eb
db/events: fix `local: false` filter 2023-09-04 17:17:47 -05:00
Alex Gleason 8ec215402f
db/migrations: fix `down` in 003_events_admin to drop the new "admin" column, not the "relays" table (whoops) 2023-09-04 13:20:07 -05:00
Alex Gleason 25e023aaf2
db/users: add indexes on users.pubkey and users.username 2023-09-04 13:18:11 -05:00
Alex Gleason 561ae9532a
db/events: getFiltersQuery, break to multiple lines for readability 2023-09-04 13:04:20 -05:00
Alex Gleason 1f06035bf2
db/events: getFiltersQuery, improve variable names 2023-09-04 13:03:10 -05:00
Alex Gleason e377d7b3ce
events/db: add a deleteFilters function to delete all events from the local db matching the filters 2023-09-04 12:58:35 -05:00
Alex Gleason 5a3d112396
frontendConfigController: add a #d filter 2023-09-03 19:18:05 -05:00
Alex Gleason 7686371183
Implement frontend configurations 2023-09-03 18:49:45 -05:00
Alex Gleason 3c45a4a3aa
sign: simplify awaitSignedEvent (remove unnecessary conditional, rearrange error, fix crash) 2023-09-02 22:39:35 -05:00
Alex Gleason 93f06fd342
config: preserve query params in Conf.local 2023-09-02 22:38:21 -05:00
Alex Gleason b81091f5da
auth98: requireProof --> requireAdmin 2023-09-02 20:52:17 -05:00
Alex Gleason f7d74c97ca
db/users: add `admin` column 2023-09-02 20:52:02 -05:00
Alex Gleason c8a5da086e
sign: ensure the NIP-46 result matches the template 2023-09-02 20:09:28 -05:00
Alex Gleason 007565b513
eventSchema: ensure the event ID matches its hash 2023-09-02 19:40:28 -05:00
Alex Gleason 7595dfa2e5
auth98: make requireProof obtain the event over NIP-46 2023-09-02 19:33:13 -05:00
Alex Gleason c8d6389132
sign: refactor the unnecessarily complex awaitSignedEvent function 2023-09-02 18:56:42 -05:00
Alex Gleason 61f5acc937
nip98: add a dedicated nip98 module, refactor auth98.ts 2023-09-02 18:32:01 -05:00
Alex Gleason 4c41ce8c0a
@/nip05.ts --> @/utils/nip05.ts 2023-09-02 13:43:01 -05:00
Alex Gleason 4ff27ddc04
Add /api/v1/favourites 2023-09-01 13:14:27 -05:00
Alex Gleason 54481ab96b
Fix unfurl timeout 2023-08-30 21:40:52 -05:00
Alex Gleason b9fc663db4
Switch to my fork of deno-sqlite with FTS support 2023-08-30 17:29:45 -05:00
Alex Gleason 3cd6b6f3f3
db/events: index profiles in search 2023-08-30 17:09:44 -05:00
Alex Gleason e976f51d55
schemas/nostr: add `search` key to filters 2023-08-30 16:19:21 -05:00
Alex Gleason af76d8cbae
Bump kysely-deno-sqlite to v1.0.1, remove `as any` from database type 2023-08-30 16:12:39 -05:00
Alex Gleason b7b5e67118
search: refactor/cleanup searchController 2023-08-30 15:40:18 -05:00
Alex Gleason 080cfe817b
search: support account_id query param 2023-08-30 15:31:07 -05:00
Alex Gleason 799a9c1e9a
search: support searching by account_id 2023-08-30 15:22:39 -05:00
Alex Gleason 8079679f18
search: support MastoAPI params, improve performance, improve value lookup 2023-08-30 15:02:28 -05:00
Alex Gleason 675010ddec
search: fix FTS special characters, optimize search 2023-08-30 14:03:16 -05:00
Alex Gleason df14ff66bc
search: search use FTS to search for statuses 2023-08-30 12:16:04 -05:00
Alex Gleason 5e9a3dd8d1
db/events: only index kind 1 events in search 2023-08-30 12:07:49 -05:00
Alex Gleason 02e1a4ce58
db/events: support "search" filter 2023-08-30 12:04:45 -05:00
Alex Gleason 9b67d7a7c0
Add followers/following endpoints
Fixes https://gitlab.com/soapbox-pub/ditto/-/issues/69
2023-08-30 10:27:45 -05:00
Alex Gleason 728f0bd657
accounts: followers/following & status counts
Fixes https://gitlab.com/soapbox-pub/ditto/-/issues/68
2023-08-30 09:50:51 -05:00
Alex Gleason b27b84e3fb
Add favourited_by and reblogged_by controllers 2023-08-29 18:08:00 -05:00
Alex Gleason 9b761ff960
firehose: apparently the `since` filter is essential 2023-08-29 16:40:23 -05:00
Alex Gleason ad823e587a
accounts: remove unecessary sort call 2023-08-29 15:29:12 -05:00
Alex Gleason d01dbcbfee
relay: add support for NIP-45 COUNT 2023-08-29 15:24:07 -05:00
Alex Gleason fc1ed59002
firehose: use `limit: 0` instead of `since` 2023-08-29 14:53:12 -05:00
Alex Gleason 9d714b6173
Pass viewerPubkey to toStatus in more places 2023-08-29 14:48:28 -05:00
Alex Gleason 2ee29bf1e2
Make favourites stick, refactor some async logic in threads 2023-08-29 14:44:59 -05:00
Alex Gleason d4612d5f21
toStatus: make status counters work (local db only) 2023-08-29 14:13:41 -05:00
Alex Gleason 95761e2eef
schema: add comments 2023-08-29 13:28:16 -05:00
Alex Gleason 2841d4f399
queries: remove unused import 2023-08-29 13:25:58 -05:00
Alex Gleason 77b09baa8c
db/events: don't throw on duplicate events 2023-08-29 13:20:21 -05:00
Alex Gleason ebd933126a
webfinger: fix import order 2023-08-29 13:14:03 -05:00
Alex Gleason d21ec6d241
apps: use AppController type 2023-08-29 13:04:38 -05:00
Alex Gleason 4d211d637e
timelines: add DRY renderStatuses function 2023-08-29 13:01:47 -05:00
Alex Gleason 4216a7931a
Add `paginated` helper function, DRY pagination code 2023-08-29 12:55:00 -05:00
Alex Gleason ce4a330812
Rename timeline controllers, homeController --> homeTimelineController, etc 2023-08-29 12:41:14 -05:00
Alex Gleason ccb8c534ca
Add hashtag timeline 2023-08-28 19:51:21 -05:00
Alex Gleason a075c533e6
Make notifications kind of work 2023-08-28 15:56:38 -05:00
Alex Gleason 2029c73eab
requireAuth --> requirePubkey 2023-08-28 15:38:32 -05:00
Alex Gleason dfbad6b2e7
Add boilerplate notifications controller, fix import order in app.ts 2023-08-28 14:23:27 -05:00
Alex Gleason e18aa878bb
streaming: reorder tag params 2023-08-28 13:37:15 -05:00
Alex Gleason e6d1494a10
streaming: make user stream mostly work, in a kind of hacky way 2023-08-28 13:34:15 -05:00
Alex Gleason e8a7dfef2b
Remove uneeded session ID from auth token 2023-08-28 13:00:00 -05:00
Alex Gleason f25284daa9
streaming: support hashtag timeline 2023-08-28 12:42:28 -05:00
Alex Gleason 2e8b26cf4f
Remove legacy stream.ts module 2023-08-27 10:07:13 -05:00
Alex Gleason 320d2f493e
change .positive() to .nonnegative() !!! 2023-08-26 23:13:48 -05:00
Alex Gleason 0a9b53bbc1
sign: fix parsing connect response from string to JSON 2023-08-26 22:49:32 -05:00
Alex Gleason 655004e775
Rework web signer to use NIP-46 events 2023-08-26 18:03:59 -05:00
Alex Gleason 1806cf2286
filter: treat the admin pubkey as local 2023-08-26 17:31:52 -05:00
Alex Gleason 9cd1ca1861
streaming: don't forget to close the subscription when the socket closes 2023-08-26 15:57:51 -05:00
Alex Gleason c13b7f4af7
subs: allow any object in place of the socket 2023-08-26 15:55:16 -05:00
Alex Gleason 67bba508af
utils/web: make `tags` optional 2023-08-26 15:22:49 -05:00
Alex Gleason 1b2a486c65
pipeline: don't store ephemeral events 2023-08-26 13:40:10 -05:00
Alex Gleason 2aefdc4bd1
kinds: improve detection of legacy kinds 2023-08-26 13:25:32 -05:00
Alex Gleason fdc39297fd
Add kinds module to classify events by kind 2023-08-26 13:18:58 -05:00
Alex Gleason 63def1d62c
utils: add return types (to improve readability) 2023-08-26 12:58:17 -05:00
Alex Gleason 7570b0dee4
utils: new Date().getTime() --> Date.now() 2023-08-26 12:56:07 -05:00
Alex Gleason e17111a859
utils/web: PendingEvent --> EventStub 2023-08-26 12:52:24 -05:00
Alex Gleason 60cecafdb5
Remove admin.ts, move to sign.ts, add createAdminEvent function 2023-08-26 12:48:08 -05:00
Alex Gleason 3c279175bc
instance: actually, put all this under a nostr key 2023-08-26 12:28:25 -05:00
Alex Gleason baf4c00fee
instance: add urls.nostr_relay and pubkey properties to instance 2023-08-26 12:01:46 -05:00
Alex Gleason 887c68f052
config: add comments to all config options 2023-08-26 11:55:16 -05:00
Alex Gleason 9da03aa053
streaming: socket.addEventListener('open', ...) --> socket.onopen, etc 2023-08-25 17:17:26 -05:00
Alex Gleason a93d77c851
streaming: add `stream` param to streaming events 2023-08-25 16:17:45 -05:00
Alex Gleason b60e84d29b
relay: only send if socket is open 2023-08-25 15:09:16 -05:00
Alex Gleason f7cd67c572
Make MastoAPI streaming work for public feeds 2023-08-25 14:59:37 -05:00
Alex Gleason d1117f5513
relay: improve variable names in handleReq 2023-08-25 13:42:58 -05:00
Alex Gleason c18d7b952f
Move filter types into filter.ts 2023-08-25 13:38:21 -05:00
Alex Gleason baace5ea2d
Refactor streaming to use async iterators 2023-08-25 13:35:20 -05:00
Alex Gleason 00c531bbff
relay: close sub when socket is closed 2023-08-24 18:43:14 -05:00
Alex Gleason f9de6932ac
utils: remove unused import 2023-08-24 17:42:28 -05:00
Alex Gleason 2f7914f044
pipeline: skip previously encountered events 2023-08-24 17:39:24 -05:00
Alex Gleason a0dff12ca0
pipeline: don't stream events older than 10 seconds 2023-08-24 17:26:46 -05:00
Alex Gleason f1c465beea
pipeline: optimize database calls 2023-08-24 17:16:44 -05:00
Alex Gleason 658dd397f5
relay: respect "local: true" filter 2023-08-24 15:28:13 -05:00
Alex Gleason a676b71d23
relay: make Nostr streaming work 2023-08-23 23:25:38 -05:00
Alex Gleason bcfc3e2414
Use createEvent in more places 2023-08-19 22:25:45 -05:00
Alex Gleason a82ae40c43
db/events: don't add tags to query unless they exist 2023-08-19 15:26:41 -05:00
Alex Gleason 98b6a4b222
Increase NIP-05 lookup timeout to 2s 2023-08-19 14:56:40 -05:00
Alex Gleason f198779ebe Merge branch 'sync' into 'develop'
Sync the user on verify_credentials

Closes #11

See merge request soapbox-pub/ditto!17
2023-08-19 19:09:09 +00:00
Alex Gleason 23928c0024
Move hono-related functions until utils/web 2023-08-19 14:05:08 -05:00
Alex Gleason eb4aebedd7
Sync the user on verify_credentials
Fixes https://gitlab.com/soapbox-pub/ditto/-/issues/11
2023-08-19 13:57:17 -05:00
Alex Gleason c08c801e71
Make following work 2023-08-19 13:37:44 -05:00
Alex Gleason b087d08306
Make the local timeline correctly filter only local users 2023-08-19 13:01:05 -05:00
Alex Gleason c37dd2c2b5
db/events: skip undefined filter values 2023-08-19 12:59:22 -05:00
Alex Gleason fecd69bf8f
mixer: don't use the client pool for local filters 2023-08-19 12:38:20 -05:00
Alex Gleason 05a7a773fe
getFilters: return immediately if filters are empty 2023-08-19 12:37:42 -05:00
Alex Gleason 719b703e7c
client: remove `publish` function, create statuses through pipeline 2023-08-17 20:54:11 -05:00
Alex Gleason 0158a6979e
Publish events through pipeline 2023-08-17 20:45:50 -05:00
Alex Gleason 85345bc157
firehose: catch pipeline crash 2023-08-17 20:28:23 -05:00
Alex Gleason 0f70f5c76f
Add a RelayError class, improve relay error handling 2023-08-17 20:24:16 -05:00
Alex Gleason dc49c305bd
Move isLocallyFollowed to queries.ts 2023-08-17 19:32:05 -05:00
Alex Gleason 2011ca6e1d
pipeline: remove redundant console.log 2023-08-17 18:08:05 -05:00
Alex Gleason 45abaf14a4
pipeline: refactor, use pipeline from relay 2023-08-17 18:07:25 -05:00
Alex Gleason 51881efde0
Push events from the client through the pipeline 2023-08-17 16:48:58 -05:00
Alex Gleason 87c67c0a39
Add pipeline module 2023-08-17 16:47:22 -05:00
Alex Gleason 299a1a0db0
Refactor some code that uses getFilters to import the whole module under a namespace 2023-08-17 15:41:27 -05:00
Alex Gleason 4f9b5c1431
statusController: remove unnecessary "as Event" 2023-08-17 14:57:46 -05:00
Alex Gleason 4f37a1b9f8
queries: don't unnecessarily sort things 2023-08-17 14:55:00 -05:00
Alex Gleason 7330cd10e2
Refactor getEvent to take an opts object 2023-08-17 14:51:49 -05:00
Alex Gleason 054a399f23
queries: reduce getFollows timeout to 1s 2023-08-17 13:19:36 -05:00
Alex Gleason c516f007a5
queries: remove unnecessary "as Event" assertions 2023-08-17 13:18:46 -05:00
Alex Gleason 5a27d791e3
queries: make getFeed accept a pubkey instead of event3 2023-08-17 13:15:47 -05:00
Alex Gleason 870a6f5261
Add queries module for getting events for certain application needs 2023-08-17 13:12:38 -05:00
Alex Gleason a35bc1eef3
db/events: use opts.limit 2023-08-16 21:58:46 -05:00