@atproto/bsky 0.0.251 → 0.0.253
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/api/age-assurance/const.js +19 -19
- package/dist/api/age-assurance/const.js.map +1 -1
- package/dist/kws.d.ts +8 -0
- package/dist/kws.d.ts.map +1 -1
- package/dist/kws.js +53 -4
- package/dist/kws.js.map +1 -1
- package/package.json +28 -23
- package/bin/migration-create.ts +0 -46
- package/buf.gen.yaml +0 -12
- package/proto/bsky.proto +0 -1907
- package/proto/courier.proto +0 -84
- package/proto/rolodex.proto +0 -116
- package/src/api/age-assurance/const.ts +0 -203
- package/src/api/age-assurance/index.ts +0 -34
- package/src/api/age-assurance/kws/age-verified.test.ts +0 -98
- package/src/api/age-assurance/kws/age-verified.ts +0 -81
- package/src/api/age-assurance/kws/const.ts +0 -33
- package/src/api/age-assurance/kws/external-payload.test.ts +0 -72
- package/src/api/age-assurance/kws/external-payload.ts +0 -149
- package/src/api/age-assurance/redirects/kws-age-verified.ts +0 -107
- package/src/api/age-assurance/stash.ts +0 -23
- package/src/api/age-assurance/types.ts +0 -10
- package/src/api/age-assurance/util.ts +0 -68
- package/src/api/age-assurance/webhooks/kws-age-verified.ts +0 -75
- package/src/api/app/bsky/actor/getProfile.ts +0 -106
- package/src/api/app/bsky/actor/getProfiles.ts +0 -99
- package/src/api/app/bsky/actor/getSuggestions.ts +0 -163
- package/src/api/app/bsky/actor/searchActors.ts +0 -171
- package/src/api/app/bsky/actor/searchActorsTypeahead.ts +0 -164
- package/src/api/app/bsky/ageassurance/begin.ts +0 -175
- package/src/api/app/bsky/ageassurance/getConfig.ts +0 -16
- package/src/api/app/bsky/ageassurance/getState.ts +0 -58
- package/src/api/app/bsky/bookmark/createBookmark.ts +0 -39
- package/src/api/app/bsky/bookmark/deleteBookmark.ts +0 -32
- package/src/api/app/bsky/bookmark/getBookmarks.ts +0 -97
- package/src/api/app/bsky/bookmark/util.ts +0 -13
- package/src/api/app/bsky/contact/dismissMatch.ts +0 -26
- package/src/api/app/bsky/contact/getMatches.ts +0 -111
- package/src/api/app/bsky/contact/getSyncStatus.ts +0 -38
- package/src/api/app/bsky/contact/importContacts.ts +0 -119
- package/src/api/app/bsky/contact/removeData.ts +0 -25
- package/src/api/app/bsky/contact/sendNotification.ts +0 -33
- package/src/api/app/bsky/contact/startPhoneVerification.ts +0 -26
- package/src/api/app/bsky/contact/util.ts +0 -92
- package/src/api/app/bsky/contact/verifyPhone.ts +0 -29
- package/src/api/app/bsky/draft/createDraft.ts +0 -45
- package/src/api/app/bsky/draft/deleteDraft.ts +0 -20
- package/src/api/app/bsky/draft/getDrafts.ts +0 -44
- package/src/api/app/bsky/draft/updateDraft.ts +0 -26
- package/src/api/app/bsky/embed/getEmbedExternalView.ts +0 -154
- package/src/api/app/bsky/feed/getActorFeeds.ts +0 -101
- package/src/api/app/bsky/feed/getActorLikes.ts +0 -128
- package/src/api/app/bsky/feed/getAuthorFeed.ts +0 -279
- package/src/api/app/bsky/feed/getFeed.ts +0 -282
- package/src/api/app/bsky/feed/getFeedGenerator.ts +0 -68
- package/src/api/app/bsky/feed/getFeedGenerators.ts +0 -86
- package/src/api/app/bsky/feed/getLikes.ts +0 -151
- package/src/api/app/bsky/feed/getListFeed.ts +0 -147
- package/src/api/app/bsky/feed/getPostThread.ts +0 -156
- package/src/api/app/bsky/feed/getPosts.ts +0 -100
- package/src/api/app/bsky/feed/getQuotes.ts +0 -122
- package/src/api/app/bsky/feed/getRepostedBy.ts +0 -121
- package/src/api/app/bsky/feed/getSuggestedFeeds.ts +0 -39
- package/src/api/app/bsky/feed/getTimeline.ts +0 -127
- package/src/api/app/bsky/feed/searchPosts.ts +0 -274
- package/src/api/app/bsky/feed/searchPostsV2.ts +0 -243
- package/src/api/app/bsky/graph/getActorStarterPacks.ts +0 -103
- package/src/api/app/bsky/graph/getBlocks.ts +0 -94
- package/src/api/app/bsky/graph/getFollowers.ts +0 -153
- package/src/api/app/bsky/graph/getFollows.ts +0 -151
- package/src/api/app/bsky/graph/getKnownFollowers.ts +0 -123
- package/src/api/app/bsky/graph/getList.ts +0 -152
- package/src/api/app/bsky/graph/getListBlocks.ts +0 -87
- package/src/api/app/bsky/graph/getListMutes.ts +0 -87
- package/src/api/app/bsky/graph/getLists.ts +0 -125
- package/src/api/app/bsky/graph/getListsWithMembership.ts +0 -146
- package/src/api/app/bsky/graph/getMutes.ts +0 -87
- package/src/api/app/bsky/graph/getRelationships.ts +0 -58
- package/src/api/app/bsky/graph/getStarterPack.ts +0 -82
- package/src/api/app/bsky/graph/getStarterPacks.ts +0 -86
- package/src/api/app/bsky/graph/getStarterPacksWithMembership.ts +0 -136
- package/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +0 -171
- package/src/api/app/bsky/graph/muteActor.ts +0 -24
- package/src/api/app/bsky/graph/muteActorList.ts +0 -19
- package/src/api/app/bsky/graph/muteThread.ts +0 -19
- package/src/api/app/bsky/graph/searchStarterPacks.ts +0 -169
- package/src/api/app/bsky/graph/unmuteActor.ts +0 -21
- package/src/api/app/bsky/graph/unmuteActorList.ts +0 -19
- package/src/api/app/bsky/graph/unmuteThread.ts +0 -19
- package/src/api/app/bsky/labeler/getServices.ts +0 -41
- package/src/api/app/bsky/notification/getPreferences.ts +0 -49
- package/src/api/app/bsky/notification/getUnreadCount.ts +0 -83
- package/src/api/app/bsky/notification/listActivitySubscriptions.ts +0 -116
- package/src/api/app/bsky/notification/listNotifications.ts +0 -272
- package/src/api/app/bsky/notification/putActivitySubscription.ts +0 -69
- package/src/api/app/bsky/notification/putPreferences.ts +0 -17
- package/src/api/app/bsky/notification/putPreferencesV2.ts +0 -64
- package/src/api/app/bsky/notification/registerPush.ts +0 -40
- package/src/api/app/bsky/notification/unregisterPush.ts +0 -39
- package/src/api/app/bsky/notification/updateSeen.ts +0 -52
- package/src/api/app/bsky/notification/util.ts +0 -134
- package/src/api/app/bsky/unspecced/getAgeAssuranceState.ts +0 -48
- package/src/api/app/bsky/unspecced/getConfig.ts +0 -20
- package/src/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.ts +0 -162
- package/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +0 -91
- package/src/api/app/bsky/unspecced/getPostThreadOtherV2.ts +0 -126
- package/src/api/app/bsky/unspecced/getPostThreadV2.ts +0 -148
- package/src/api/app/bsky/unspecced/getSuggestedFeeds.ts +0 -100
- package/src/api/app/bsky/unspecced/getSuggestedOnboardingUsers.ts +0 -143
- package/src/api/app/bsky/unspecced/getSuggestedStarterPacks.ts +0 -165
- package/src/api/app/bsky/unspecced/getSuggestedUsers.ts +0 -183
- package/src/api/app/bsky/unspecced/getSuggestedUsersForDiscover.ts +0 -175
- package/src/api/app/bsky/unspecced/getSuggestedUsersForExplore.ts +0 -178
- package/src/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.ts +0 -178
- package/src/api/app/bsky/unspecced/getTaggedSuggestions.ts +0 -27
- package/src/api/app/bsky/unspecced/getTrendingTopics.ts +0 -96
- package/src/api/app/bsky/unspecced/getTrends.ts +0 -162
- package/src/api/app/bsky/unspecced/initAgeAssurance.ts +0 -150
- package/src/api/blob-dispatcher.ts +0 -41
- package/src/api/blob-resolver.ts +0 -401
- package/src/api/com/atproto/admin/getAccountInfos.ts +0 -49
- package/src/api/com/atproto/admin/getSubjectStatus.ts +0 -79
- package/src/api/com/atproto/admin/updateSubjectStatus.ts +0 -80
- package/src/api/com/atproto/identity/resolveHandle.ts +0 -19
- package/src/api/com/atproto/label/queryLabels.ts +0 -42
- package/src/api/com/atproto/repo/getRecord.ts +0 -44
- package/src/api/com/atproto/temp/fetchLabels.ts +0 -9
- package/src/api/external.ts +0 -15
- package/src/api/health.ts +0 -47
- package/src/api/index.ts +0 -216
- package/src/api/internal/bsky/actor/getProfiles.ts +0 -87
- package/src/api/kws/api.ts +0 -113
- package/src/api/kws/index.ts +0 -29
- package/src/api/kws/types.ts +0 -78
- package/src/api/kws/util.test.ts +0 -50
- package/src/api/kws/util.ts +0 -109
- package/src/api/kws/webhook.ts +0 -134
- package/src/api/sitemap.ts +0 -76
- package/src/api/util.ts +0 -45
- package/src/api/well-known.ts +0 -44
- package/src/auth-verifier.ts +0 -522
- package/src/bsync.ts +0 -41
- package/src/cache/read-through.ts +0 -157
- package/src/config.ts +0 -719
- package/src/context.ts +0 -143
- package/src/courier.ts +0 -41
- package/src/data-plane/client/hosts.ts +0 -103
- package/src/data-plane/client/index.ts +0 -125
- package/src/data-plane/client/util.test.ts +0 -29
- package/src/data-plane/client/util.ts +0 -74
- package/src/data-plane/index.ts +0 -2
- package/src/data-plane/server/background.ts +0 -66
- package/src/data-plane/server/bsync-subscription.ts +0 -590
- package/src/data-plane/server/db/database-schema.ts +0 -90
- package/src/data-plane/server/db/db.ts +0 -204
- package/src/data-plane/server/db/index.ts +0 -2
- package/src/data-plane/server/db/migrations/20230309T045948368Z-init.ts +0 -305
- package/src/data-plane/server/db/migrations/20230408T152211201Z-notification-init.ts +0 -25
- package/src/data-plane/server/db/migrations/20230417T210628672Z-moderation-init.ts +0 -127
- package/src/data-plane/server/db/migrations/20230420T211446071Z-did-cache.ts +0 -14
- package/src/data-plane/server/db/migrations/20230427T194702079Z-notif-record-index.ts +0 -14
- package/src/data-plane/server/db/migrations/20230605T144730094Z-post-profile-aggs.ts +0 -23
- package/src/data-plane/server/db/migrations/20230607T211442112Z-feed-generator-init.ts +0 -34
- package/src/data-plane/server/db/migrations/20230608T155101190Z-algo-whats-hot-view.ts +0 -85
- package/src/data-plane/server/db/migrations/20230608T201813132Z-mute-lists.ts +0 -78
- package/src/data-plane/server/db/migrations/20230608T205147239Z-mutes.ts +0 -15
- package/src/data-plane/server/db/migrations/20230609T153623961Z-blocks.ts +0 -33
- package/src/data-plane/server/db/migrations/20230609T232122649Z-actor-deletion-indexes.ts +0 -27
- package/src/data-plane/server/db/migrations/20230610T203555962Z-suggested-follows.ts +0 -13
- package/src/data-plane/server/db/migrations/20230611T215300060Z-actor-state.ts +0 -13
- package/src/data-plane/server/db/migrations/20230620T161134972Z-post-langs.ts +0 -9
- package/src/data-plane/server/db/migrations/20230627T212437895Z-optional-handle.ts +0 -15
- package/src/data-plane/server/db/migrations/20230629T220835893Z-remove-post-hierarchy.ts +0 -32
- package/src/data-plane/server/db/migrations/20230703T045536691Z-feed-and-label-indices.ts +0 -31
- package/src/data-plane/server/db/migrations/20230720T164800037Z-posts-cursor-idx.ts +0 -19
- package/src/data-plane/server/db/migrations/20230807T035309811Z-feed-item-delete-invite-for-user-idx.ts +0 -14
- package/src/data-plane/server/db/migrations/20230808T172902639Z-repo-rev.ts +0 -12
- package/src/data-plane/server/db/migrations/20230810T203349843Z-action-duration.ts +0 -23
- package/src/data-plane/server/db/migrations/20230817T195936007Z-native-notifications.ts +0 -16
- package/src/data-plane/server/db/migrations/20230830T205507322Z-suggested-feeds.ts +0 -13
- package/src/data-plane/server/db/migrations/20230904T211011773Z-block-lists.ts +0 -24
- package/src/data-plane/server/db/migrations/20230906T222220386Z-thread-gating.ts +0 -27
- package/src/data-plane/server/db/migrations/20230920T213858047Z-add-tags-to-post.ts +0 -9
- package/src/data-plane/server/db/migrations/20230929T192920807Z-record-cursor-indexes.ts +0 -40
- package/src/data-plane/server/db/migrations/20231003T202833377Z-create-moderation-subject-status.ts +0 -123
- package/src/data-plane/server/db/migrations/20231220T225126090Z-blob-takedowns.ts +0 -66
- package/src/data-plane/server/db/migrations/20240124T023719200Z-tagged-suggestions.ts +0 -15
- package/src/data-plane/server/db/migrations/20240226T225725627Z-labelers.ts +0 -27
- package/src/data-plane/server/db/migrations/20240530T170337073Z-account-deactivation.ts +0 -12
- package/src/data-plane/server/db/migrations/20240606T171229898Z-thread-mutes.ts +0 -15
- package/src/data-plane/server/db/migrations/20240606T222548219Z-starter-packs.ts +0 -45
- package/src/data-plane/server/db/migrations/20240719T203853939Z-priority-notifs.ts +0 -25
- package/src/data-plane/server/db/migrations/20240723T220700077Z-quotes-post-aggs.ts +0 -12
- package/src/data-plane/server/db/migrations/20240723T220703655Z-quotes.ts +0 -28
- package/src/data-plane/server/db/migrations/20240801T193939827Z-post-gate.ts +0 -17
- package/src/data-plane/server/db/migrations/20240808T224251220Z-post-gate-flags.ts +0 -25
- package/src/data-plane/server/db/migrations/20240829T211238293Z-simplify-actor-sync.ts +0 -23
- package/src/data-plane/server/db/migrations/20240831T134810923Z-pinned-posts.ts +0 -17
- package/src/data-plane/server/db/migrations/20241114T153108102Z-add-starter-packs-name.ts +0 -19
- package/src/data-plane/server/db/migrations/20250116T222618297Z-post-embed-video.ts +0 -17
- package/src/data-plane/server/db/migrations/20250207T174822012Z-add-label-exp.ts +0 -9
- package/src/data-plane/server/db/migrations/20250404T163421487Z-verifications.ts +0 -39
- package/src/data-plane/server/db/migrations/20250526T023712742Z-like-repost-via.ts +0 -17
- package/src/data-plane/server/db/migrations/20250528T221913281Z-add-record-tags.ts +0 -9
- package/src/data-plane/server/db/migrations/20250602T190357447Z-add-private-data.ts +0 -22
- package/src/data-plane/server/db/migrations/20250611T140649895Z-add-activity-subscription.ts +0 -22
- package/src/data-plane/server/db/migrations/20250627T025331240Z-add-actor-age-assurance-columns.ts +0 -22
- package/src/data-plane/server/db/migrations/20250812T183735692Z-add-bookmarks.ts +0 -23
- package/src/data-plane/server/db/migrations/20250813T174955711Z-add-post-agg-bookmarks.ts +0 -12
- package/src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts +0 -28
- package/src/data-plane/server/db/migrations/20260112T133951271Z-add-drafts.ts +0 -24
- package/src/data-plane/server/db/migrations/20260604T224952774Z-post-embed-gallery-image.ts +0 -19
- package/src/data-plane/server/db/migrations/index.ts +0 -60
- package/src/data-plane/server/db/migrations/provider.ts +0 -26
- package/src/data-plane/server/db/pagination.ts +0 -341
- package/src/data-plane/server/db/tables/activity-subscription.ts +0 -12
- package/src/data-plane/server/db/tables/actor-block.ts +0 -14
- package/src/data-plane/server/db/tables/actor-state.ts +0 -10
- package/src/data-plane/server/db/tables/actor-sync.ts +0 -9
- package/src/data-plane/server/db/tables/actor.ts +0 -19
- package/src/data-plane/server/db/tables/algo.ts +0 -11
- package/src/data-plane/server/db/tables/blob-takedown.ts +0 -9
- package/src/data-plane/server/db/tables/bookmark.ts +0 -11
- package/src/data-plane/server/db/tables/did-cache.ts +0 -13
- package/src/data-plane/server/db/tables/draft.ts +0 -11
- package/src/data-plane/server/db/tables/duplicate-record.ts +0 -12
- package/src/data-plane/server/db/tables/feed-generator.ts +0 -21
- package/src/data-plane/server/db/tables/feed-item.ts +0 -12
- package/src/data-plane/server/db/tables/follow.ts +0 -15
- package/src/data-plane/server/db/tables/label.ts +0 -13
- package/src/data-plane/server/db/tables/labeler.ts +0 -16
- package/src/data-plane/server/db/tables/like.ts +0 -18
- package/src/data-plane/server/db/tables/list-block.ts +0 -15
- package/src/data-plane/server/db/tables/list-item.ts +0 -16
- package/src/data-plane/server/db/tables/list-mute.ts +0 -9
- package/src/data-plane/server/db/tables/list.ts +0 -19
- package/src/data-plane/server/db/tables/mute.ts +0 -9
- package/src/data-plane/server/db/tables/notification-push-token.ts +0 -10
- package/src/data-plane/server/db/tables/notification.ts +0 -16
- package/src/data-plane/server/db/tables/post-agg.ts +0 -16
- package/src/data-plane/server/db/tables/post-embed.ts +0 -47
- package/src/data-plane/server/db/tables/post-gate.ts +0 -12
- package/src/data-plane/server/db/tables/post.ts +0 -28
- package/src/data-plane/server/db/tables/private-data.ts +0 -13
- package/src/data-plane/server/db/tables/profile-agg.ts +0 -14
- package/src/data-plane/server/db/tables/profile.ts +0 -17
- package/src/data-plane/server/db/tables/quote.ts +0 -15
- package/src/data-plane/server/db/tables/record.ts +0 -15
- package/src/data-plane/server/db/tables/repost.ts +0 -18
- package/src/data-plane/server/db/tables/starter-pack.ts +0 -17
- package/src/data-plane/server/db/tables/subscription.ts +0 -9
- package/src/data-plane/server/db/tables/suggested-feed.ts +0 -10
- package/src/data-plane/server/db/tables/suggested-follow.ts +0 -10
- package/src/data-plane/server/db/tables/tagged-suggestion.ts +0 -11
- package/src/data-plane/server/db/tables/thread-gate.ts +0 -12
- package/src/data-plane/server/db/tables/thread-mute.ts +0 -9
- package/src/data-plane/server/db/tables/verification.ts +0 -20
- package/src/data-plane/server/db/tables/view-param.ts +0 -12
- package/src/data-plane/server/db/types.ts +0 -12
- package/src/data-plane/server/db/util.ts +0 -67
- package/src/data-plane/server/index.ts +0 -44
- package/src/data-plane/server/indexing/index.ts +0 -458
- package/src/data-plane/server/indexing/plugins/block.ts +0 -84
- package/src/data-plane/server/indexing/plugins/chat-declaration.ts +0 -60
- package/src/data-plane/server/indexing/plugins/feed-generator.ts +0 -80
- package/src/data-plane/server/indexing/plugins/follow.ts +0 -132
- package/src/data-plane/server/indexing/plugins/germ-declaration.ts +0 -57
- package/src/data-plane/server/indexing/plugins/labeler.ts +0 -74
- package/src/data-plane/server/indexing/plugins/like.ts +0 -151
- package/src/data-plane/server/indexing/plugins/list-block.ts +0 -84
- package/src/data-plane/server/indexing/plugins/list-item.ts +0 -92
- package/src/data-plane/server/indexing/plugins/list.ts +0 -80
- package/src/data-plane/server/indexing/plugins/notif-declaration.ts +0 -57
- package/src/data-plane/server/indexing/plugins/post-gate.ts +0 -101
- package/src/data-plane/server/indexing/plugins/post.ts +0 -675
- package/src/data-plane/server/indexing/plugins/profile.ts +0 -90
- package/src/data-plane/server/indexing/plugins/repost.ts +0 -176
- package/src/data-plane/server/indexing/plugins/starter-pack.ts +0 -74
- package/src/data-plane/server/indexing/plugins/status.ts +0 -57
- package/src/data-plane/server/indexing/plugins/thread-gate.ts +0 -101
- package/src/data-plane/server/indexing/plugins/verification.ts +0 -113
- package/src/data-plane/server/indexing/processor.ts +0 -292
- package/src/data-plane/server/routes/activity-subscription.ts +0 -84
- package/src/data-plane/server/routes/blocks.ts +0 -127
- package/src/data-plane/server/routes/bookmarks.ts +0 -83
- package/src/data-plane/server/routes/drafts.ts +0 -37
- package/src/data-plane/server/routes/feed-gens.ts +0 -89
- package/src/data-plane/server/routes/feeds.ts +0 -176
- package/src/data-plane/server/routes/follows.ts +0 -141
- package/src/data-plane/server/routes/identity.ts +0 -59
- package/src/data-plane/server/routes/index.ts +0 -67
- package/src/data-plane/server/routes/interactions.ts +0 -120
- package/src/data-plane/server/routes/labels.ts +0 -55
- package/src/data-plane/server/routes/likes.ts +0 -92
- package/src/data-plane/server/routes/lists.ts +0 -88
- package/src/data-plane/server/routes/moderation.ts +0 -102
- package/src/data-plane/server/routes/mutes.ts +0 -195
- package/src/data-plane/server/routes/notifs.ts +0 -239
- package/src/data-plane/server/routes/profile.ts +0 -220
- package/src/data-plane/server/routes/quotes.ts +0 -32
- package/src/data-plane/server/routes/records.ts +0 -119
- package/src/data-plane/server/routes/relationships.ts +0 -174
- package/src/data-plane/server/routes/reposts.ts +0 -76
- package/src/data-plane/server/routes/search.ts +0 -181
- package/src/data-plane/server/routes/site-standard.ts +0 -12
- package/src/data-plane/server/routes/sitemap.ts +0 -43
- package/src/data-plane/server/routes/starter-packs.ts +0 -32
- package/src/data-plane/server/routes/suggestions.ts +0 -175
- package/src/data-plane/server/routes/sync.ts +0 -16
- package/src/data-plane/server/routes/threads.ts +0 -33
- package/src/data-plane/server/subscription.ts +0 -152
- package/src/data-plane/server/util.ts +0 -202
- package/src/error.ts +0 -12
- package/src/etcd.ts +0 -90
- package/src/feature-gates/README.md +0 -83
- package/src/feature-gates/gates.ts +0 -25
- package/src/feature-gates/index.ts +0 -235
- package/src/feature-gates/metrics.test.ts +0 -196
- package/src/feature-gates/metrics.ts +0 -107
- package/src/feature-gates/types.ts +0 -62
- package/src/feature-gates/utils.test.ts +0 -66
- package/src/feature-gates/utils.ts +0 -135
- package/src/hydration/actor.ts +0 -578
- package/src/hydration/external.test.ts +0 -281
- package/src/hydration/external.ts +0 -268
- package/src/hydration/feed.ts +0 -455
- package/src/hydration/graph.ts +0 -354
- package/src/hydration/hydrator.ts +0 -1835
- package/src/hydration/label.ts +0 -207
- package/src/hydration/util.ts +0 -199
- package/src/image/index.ts +0 -2
- package/src/image/invalidator.ts +0 -33
- package/src/image/logger.ts +0 -6
- package/src/image/server.ts +0 -228
- package/src/image/sharp.ts +0 -89
- package/src/image/uri.ts +0 -114
- package/src/image/util.ts +0 -41
- package/src/index.ts +0 -312
- package/src/kws.ts +0 -197
- package/src/logger.ts +0 -40
- package/src/pipeline.ts +0 -60
- package/src/redis.ts +0 -205
- package/src/rolodex.ts +0 -42
- package/src/stash.ts +0 -76
- package/src/util/debug.ts +0 -10
- package/src/util/http.ts +0 -42
- package/src/util/retry.ts +0 -10
- package/src/util/standard-site.test.ts +0 -423
- package/src/util/standard-site.ts +0 -196
- package/src/util/uris.ts +0 -38
- package/src/util.ts +0 -48
- package/src/views/index.ts +0 -2783
- package/src/views/threads-v2.ts +0 -510
- package/src/views/types.ts +0 -193
- package/src/views/util.ts +0 -114
- package/test.env +0 -2
- package/tests/__snapshots__/feed-generation.test.ts.snap +0 -2510
- package/tests/_util.ts +0 -292
- package/tests/admin/admin-auth.test.ts +0 -190
- package/tests/admin/moderation.test.ts +0 -222
- package/tests/auth.test.ts +0 -90
- package/tests/blob-resolver.test.ts +0 -125
- package/tests/data-plane/__snapshots__/indexing.test.ts.snap +0 -887
- package/tests/data-plane/db.test.ts +0 -189
- package/tests/data-plane/duplicate-records.test.ts +0 -156
- package/tests/data-plane/handle-invalidation.test.ts +0 -153
- package/tests/data-plane/indexing.test.ts +0 -827
- package/tests/data-plane/subscription.test.ts +0 -128
- package/tests/data-plane/thread-mutes.test.ts +0 -175
- package/tests/entryway-auth.test.ts +0 -177
- package/tests/etcd.test.ts +0 -302
- package/tests/feed-generation.test.ts +0 -965
- package/tests/hydration/util.test.ts +0 -119
- package/tests/image/server.test.ts +0 -97
- package/tests/image/sharp.test.ts +0 -199
- package/tests/image/uri.test.ts +0 -106
- package/tests/label-hydration.test.ts +0 -245
- package/tests/postgates.test.ts +0 -182
- package/tests/query-labels.test.ts +0 -85
- package/tests/redis-cache.test.ts +0 -230
- package/tests/seed/feed-hidden-replies.ts +0 -63
- package/tests/seed/get-suggested-starter-packs.ts +0 -64
- package/tests/seed/get-trends.ts +0 -71
- package/tests/seed/known-followers.ts +0 -111
- package/tests/seed/postgates.ts +0 -57
- package/tests/server.test.ts +0 -115
- package/tests/sitemap.test.ts +0 -75
- package/tests/stash.test.ts +0 -180
- package/tests/utils.test.ts +0 -36
- package/tests/views/__snapshots__/actor-search.test.ts.snap +0 -155
- package/tests/views/__snapshots__/author-feed.test.ts.snap +0 -6301
- package/tests/views/__snapshots__/block-lists.test.ts.snap +0 -690
- package/tests/views/__snapshots__/blocks.test.ts.snap +0 -462
- package/tests/views/__snapshots__/bookmarks.test.ts.snap +0 -379
- package/tests/views/__snapshots__/follows.test.ts.snap +0 -798
- package/tests/views/__snapshots__/labeler-service.test.ts.snap +0 -233
- package/tests/views/__snapshots__/likes.test.ts.snap +0 -124
- package/tests/views/__snapshots__/list-feed.test.ts.snap +0 -883
- package/tests/views/__snapshots__/lists.test.ts.snap +0 -650
- package/tests/views/__snapshots__/mute-lists.test.ts.snap +0 -705
- package/tests/views/__snapshots__/mutes.test.ts.snap +0 -353
- package/tests/views/__snapshots__/notifications.test.ts.snap +0 -3074
- package/tests/views/__snapshots__/posts.test.ts.snap +0 -1019
- package/tests/views/__snapshots__/profile.test.ts.snap +0 -811
- package/tests/views/__snapshots__/quotes.test.ts.snap +0 -445
- package/tests/views/__snapshots__/reposts.test.ts.snap +0 -112
- package/tests/views/__snapshots__/starter-packs.test.ts.snap +0 -836
- package/tests/views/__snapshots__/thread-v2.test.ts.snap +0 -1298
- package/tests/views/__snapshots__/thread.test.ts.snap +0 -2051
- package/tests/views/__snapshots__/threadgating.test.ts.snap +0 -189
- package/tests/views/__snapshots__/timeline.test.ts.snap +0 -7252
- package/tests/views/account-deactivation.test.ts +0 -81
- package/tests/views/actor-likes.test.ts +0 -138
- package/tests/views/actor-search.test.ts +0 -261
- package/tests/views/age-assurance-v2.test.ts +0 -823
- package/tests/views/age-assurance.test.ts +0 -479
- package/tests/views/author-feed.test.ts +0 -694
- package/tests/views/block-lists.test.ts +0 -661
- package/tests/views/blocks.test.ts +0 -889
- package/tests/views/bookmarks.test.ts +0 -345
- package/tests/views/drafts.test.ts +0 -430
- package/tests/views/feed-hidden-replies.test.ts +0 -243
- package/tests/views/feed-view-post.test.ts +0 -501
- package/tests/views/follows.test.ts +0 -372
- package/tests/views/get-config.test.ts +0 -64
- package/tests/views/get-suggested-onboarding-users.test.ts +0 -193
- package/tests/views/get-suggested-starter-packs.test.ts +0 -137
- package/tests/views/get-trends.test.ts +0 -141
- package/tests/views/internal-actor.test.ts +0 -127
- package/tests/views/known-followers.test.ts +0 -193
- package/tests/views/labeler-service.test.ts +0 -242
- package/tests/views/labels-needs-review.test.ts +0 -316
- package/tests/views/labels-takedown.test.ts +0 -247
- package/tests/views/likes.test.ts +0 -192
- package/tests/views/list-feed.test.ts +0 -195
- package/tests/views/lists.test.ts +0 -412
- package/tests/views/mute-lists.test.ts +0 -509
- package/tests/views/mutes.test.ts +0 -308
- package/tests/views/notifications.test.ts +0 -1581
- package/tests/views/post-search.test.ts +0 -281
- package/tests/views/posts-debug.test.ts +0 -79
- package/tests/views/posts.test.ts +0 -427
- package/tests/views/profile-debug.test.ts +0 -75
- package/tests/views/profile.test.ts +0 -795
- package/tests/views/quotes.test.ts +0 -133
- package/tests/views/reposts.test.ts +0 -112
- package/tests/views/starter-packs.test.ts +0 -395
- package/tests/views/suggestions.test.ts +0 -145
- package/tests/views/thread-v2.test.ts +0 -2005
- package/tests/views/thread.test.ts +0 -637
- package/tests/views/threadgating.test.ts +0 -843
- package/tests/views/timeline.test.ts +0 -328
- package/tests/views/verification.test.ts +0 -296
- package/tsconfig.build.json +0 -10
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.json +0 -7
- package/tsconfig.tests.json +0 -8
- package/vitest.config.ts +0 -10
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
-
await db.schema
|
|
5
|
-
.createTable('bookmark')
|
|
6
|
-
.addColumn('creator', 'varchar', (col) => col.notNull())
|
|
7
|
-
.addColumn('key', 'varchar', (col) => col.notNull())
|
|
8
|
-
.addColumn('subjectUri', 'varchar', (col) => col.notNull())
|
|
9
|
-
.addColumn('subjectCid', 'varchar', (col) => col.notNull())
|
|
10
|
-
.addColumn('indexedAt', 'varchar', (col) => col.notNull())
|
|
11
|
-
// Supports paginating over creator's bookmarks sorting by key.
|
|
12
|
-
.addPrimaryKeyConstraint('bookmark_pkey', ['creator', 'key'])
|
|
13
|
-
// Supports checking for bookmark presence by the creator on specific uris, and supports counting bookmarks by uri.
|
|
14
|
-
.addUniqueConstraint('bookmark_unique_uri_creator', [
|
|
15
|
-
'subjectUri',
|
|
16
|
-
'creator',
|
|
17
|
-
])
|
|
18
|
-
.execute()
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
22
|
-
await db.schema.dropTable('bookmark').execute()
|
|
23
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
-
await db.schema
|
|
5
|
-
.alterTable('post_agg')
|
|
6
|
-
.addColumn('bookmarkCount', 'bigint', (col) => col.notNull().defaultTo(0))
|
|
7
|
-
.execute()
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
11
|
-
await db.schema.alterTable('post_agg').dropColumn('bookmarkCount').execute()
|
|
12
|
-
}
|
package/src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
-
await db.schema
|
|
5
|
-
.alterTable('actor')
|
|
6
|
-
.addColumn('ageAssuranceAccess', 'text')
|
|
7
|
-
.execute()
|
|
8
|
-
await db.schema
|
|
9
|
-
.alterTable('actor')
|
|
10
|
-
.addColumn('ageAssuranceCountryCode', 'text')
|
|
11
|
-
.execute()
|
|
12
|
-
await db.schema
|
|
13
|
-
.alterTable('actor')
|
|
14
|
-
.addColumn('ageAssuranceRegionCode', 'text')
|
|
15
|
-
.execute()
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
19
|
-
await db.schema.alterTable('actor').dropColumn('ageAssuranceAccess').execute()
|
|
20
|
-
await db.schema
|
|
21
|
-
.alterTable('actor')
|
|
22
|
-
.dropColumn('ageAssuranceCountryCode')
|
|
23
|
-
.execute()
|
|
24
|
-
await db.schema
|
|
25
|
-
.alterTable('actor')
|
|
26
|
-
.dropColumn('ageAssuranceRegionCode')
|
|
27
|
-
.execute()
|
|
28
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
-
await db.schema
|
|
5
|
-
.createTable('draft')
|
|
6
|
-
.addColumn('creator', 'varchar', (col) => col.notNull())
|
|
7
|
-
.addColumn('key', 'varchar', (col) => col.notNull())
|
|
8
|
-
.addColumn('createdAt', 'varchar', (col) => col.notNull())
|
|
9
|
-
.addColumn('updatedAt', 'varchar', (col) => col.notNull())
|
|
10
|
-
.addColumn('payload', 'text', (col) => col.notNull())
|
|
11
|
-
.addPrimaryKeyConstraint('draft_pkey', ['creator', 'key'])
|
|
12
|
-
.execute()
|
|
13
|
-
|
|
14
|
-
// Supports getting paginated drafts by updatedAt.
|
|
15
|
-
await db.schema
|
|
16
|
-
.createIndex('draft_creator_updated_at_key_idx')
|
|
17
|
-
.on('draft')
|
|
18
|
-
.columns(['creator', 'updatedAt', 'key'])
|
|
19
|
-
.execute()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
23
|
-
await db.schema.dropTable('draft').execute()
|
|
24
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export async function up(db: Kysely<unknown>): Promise<void> {
|
|
4
|
-
await db.schema
|
|
5
|
-
.createTable('post_embed_gallery_image')
|
|
6
|
-
.addColumn('postUri', 'varchar', (col) => col.notNull())
|
|
7
|
-
.addColumn('position', 'varchar', (col) => col.notNull())
|
|
8
|
-
.addColumn('imageCid', 'varchar', (col) => col.notNull())
|
|
9
|
-
.addColumn('alt', 'varchar', (col) => col.notNull())
|
|
10
|
-
.addPrimaryKeyConstraint('post_embed_gallery_image_pkey', [
|
|
11
|
-
'postUri',
|
|
12
|
-
'position',
|
|
13
|
-
])
|
|
14
|
-
.execute()
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function down(db: Kysely<unknown>): Promise<void> {
|
|
18
|
-
await db.schema.dropTable('post_embed_gallery_image').execute()
|
|
19
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// NOTE this file can be edited by hand, but it is also appended to by the migration:create command.
|
|
2
|
-
// It's important that every migration is exported from here with the proper name. We'd simplify
|
|
3
|
-
// this with kysely's FileMigrationProvider, but it doesn't play nicely with the build process.
|
|
4
|
-
|
|
5
|
-
export * as _20230309T045948368Z from './20230309T045948368Z-init.js'
|
|
6
|
-
export * as _20230408T152211201Z from './20230408T152211201Z-notification-init.js'
|
|
7
|
-
export * as _20230417T210628672Z from './20230417T210628672Z-moderation-init.js'
|
|
8
|
-
export * as _20230420T211446071Z from './20230420T211446071Z-did-cache.js'
|
|
9
|
-
export * as _20230427T194702079Z from './20230427T194702079Z-notif-record-index.js'
|
|
10
|
-
export * as _20230605T144730094Z from './20230605T144730094Z-post-profile-aggs.js'
|
|
11
|
-
export * as _20230607T211442112Z from './20230607T211442112Z-feed-generator-init.js'
|
|
12
|
-
export * as _20230608T155101190Z from './20230608T155101190Z-algo-whats-hot-view.js'
|
|
13
|
-
export * as _20230608T201813132Z from './20230608T201813132Z-mute-lists.js'
|
|
14
|
-
export * as _20230608T205147239Z from './20230608T205147239Z-mutes.js'
|
|
15
|
-
export * as _20230609T153623961Z from './20230609T153623961Z-blocks.js'
|
|
16
|
-
export * as _20230609T232122649Z from './20230609T232122649Z-actor-deletion-indexes.js'
|
|
17
|
-
export * as _20230610T203555962Z from './20230610T203555962Z-suggested-follows.js'
|
|
18
|
-
export * as _20230611T215300060Z from './20230611T215300060Z-actor-state.js'
|
|
19
|
-
export * as _20230620T161134972Z from './20230620T161134972Z-post-langs.js'
|
|
20
|
-
export * as _20230627T212437895Z from './20230627T212437895Z-optional-handle.js'
|
|
21
|
-
export * as _20230629T220835893Z from './20230629T220835893Z-remove-post-hierarchy.js'
|
|
22
|
-
export * as _20230703T045536691Z from './20230703T045536691Z-feed-and-label-indices.js'
|
|
23
|
-
export * as _20230720T164800037Z from './20230720T164800037Z-posts-cursor-idx.js'
|
|
24
|
-
export * as _20230807T035309811Z from './20230807T035309811Z-feed-item-delete-invite-for-user-idx.js'
|
|
25
|
-
export * as _20230808T172902639Z from './20230808T172902639Z-repo-rev.js'
|
|
26
|
-
export * as _20230810T203349843Z from './20230810T203349843Z-action-duration.js'
|
|
27
|
-
export * as _20230817T195936007Z from './20230817T195936007Z-native-notifications.js'
|
|
28
|
-
export * as _20230830T205507322Z from './20230830T205507322Z-suggested-feeds.js'
|
|
29
|
-
export * as _20230904T211011773Z from './20230904T211011773Z-block-lists.js'
|
|
30
|
-
export * as _20230906T222220386Z from './20230906T222220386Z-thread-gating.js'
|
|
31
|
-
export * as _20230920T213858047Z from './20230920T213858047Z-add-tags-to-post.js'
|
|
32
|
-
export * as _20230929T192920807Z from './20230929T192920807Z-record-cursor-indexes.js'
|
|
33
|
-
export * as _20231003T202833377Z from './20231003T202833377Z-create-moderation-subject-status.js'
|
|
34
|
-
export * as _20231220T225126090Z from './20231220T225126090Z-blob-takedowns.js'
|
|
35
|
-
export * as _20240124T023719200Z from './20240124T023719200Z-tagged-suggestions.js'
|
|
36
|
-
export * as _20240226T225725627Z from './20240226T225725627Z-labelers.js'
|
|
37
|
-
export * as _20240530T170337073Z from './20240530T170337073Z-account-deactivation.js'
|
|
38
|
-
export * as _20240606T171229898Z from './20240606T171229898Z-thread-mutes.js'
|
|
39
|
-
export * as _20240606T222548219Z from './20240606T222548219Z-starter-packs.js'
|
|
40
|
-
export * as _20240719T203853939Z from './20240719T203853939Z-priority-notifs.js'
|
|
41
|
-
export * as _20240723T220700077Z from './20240723T220700077Z-quotes-post-aggs.js'
|
|
42
|
-
export * as _20240723T220703655Z from './20240723T220703655Z-quotes.js'
|
|
43
|
-
export * as _20240801T193939827Z from './20240801T193939827Z-post-gate.js'
|
|
44
|
-
export * as _20240808T224251220Z from './20240808T224251220Z-post-gate-flags.js'
|
|
45
|
-
export * as _20240829T211238293Z from './20240829T211238293Z-simplify-actor-sync.js'
|
|
46
|
-
export * as _20240831T134810923Z from './20240831T134810923Z-pinned-posts.js'
|
|
47
|
-
export * as _20241114T153108102Z from './20241114T153108102Z-add-starter-packs-name.js'
|
|
48
|
-
export * as _20250116T222618297Z from './20250116T222618297Z-post-embed-video.js'
|
|
49
|
-
export * as _20250207T174822012Z from './20250207T174822012Z-add-label-exp.js'
|
|
50
|
-
export * as _20250404T163421487Z from './20250404T163421487Z-verifications.js'
|
|
51
|
-
export * as _20250526T023712742Z from './20250526T023712742Z-like-repost-via.js'
|
|
52
|
-
export * as _20250528T221913281Z from './20250528T221913281Z-add-record-tags.js'
|
|
53
|
-
export * as _20250602T190357447Z from './20250602T190357447Z-add-private-data.js'
|
|
54
|
-
export * as _20250611T140649895Z from './20250611T140649895Z-add-activity-subscription.js'
|
|
55
|
-
export * as _20250627T025331240Z from './20250627T025331240Z-add-actor-age-assurance-columns.js'
|
|
56
|
-
export * as _20250812T183735692Z from './20250812T183735692Z-add-bookmarks.js'
|
|
57
|
-
export * as _20250813T174955711Z from './20250813T174955711Z-add-post-agg-bookmarks.js'
|
|
58
|
-
export * as _20251120T004738098Z from './20251120T004738098Z-update-actor-age-assurance-v2.js'
|
|
59
|
-
export * as _20260112T133951271Z from './20260112T133951271Z-add-drafts.js'
|
|
60
|
-
export * as _20260604T224952774Z from './20260604T224952774Z-post-embed-gallery-image.js'
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Kysely } from 'kysely'
|
|
2
|
-
import { Migration, MigrationProvider } from 'kysely/migration'
|
|
3
|
-
|
|
4
|
-
// Passes a context argument to migrations. We use this to thread the dialect into migrations
|
|
5
|
-
|
|
6
|
-
export class CtxMigrationProvider<T> implements MigrationProvider {
|
|
7
|
-
constructor(
|
|
8
|
-
private migrations: Record<string, CtxMigration<T>>,
|
|
9
|
-
private ctx: T,
|
|
10
|
-
) {}
|
|
11
|
-
async getMigrations(): Promise<Record<string, Migration>> {
|
|
12
|
-
const ctxMigrations: Record<string, Migration> = {}
|
|
13
|
-
Object.entries(this.migrations).forEach(([name, migration]) => {
|
|
14
|
-
ctxMigrations[name] = {
|
|
15
|
-
up: async (db) => await migration.up(db, this.ctx),
|
|
16
|
-
down: async (db) => await migration.down?.(db, this.ctx),
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
return ctxMigrations
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface CtxMigration<T> {
|
|
24
|
-
up(db: Kysely<unknown>, ctx: T): Promise<void>
|
|
25
|
-
down?(db: Kysely<unknown>, ctx: T): Promise<void>
|
|
26
|
-
}
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import { SqlBool, sql } from 'kysely'
|
|
2
|
-
import { ensureValidRecordKey } from '@atproto/syntax'
|
|
3
|
-
import { InvalidRequestError } from '@atproto/xrpc-server'
|
|
4
|
-
import { AnyQb, DbRef } from './util.js'
|
|
5
|
-
|
|
6
|
-
type KeysetCursor = { primary: string; secondary: string }
|
|
7
|
-
type KeysetLabeledResult = {
|
|
8
|
-
primary: string | number
|
|
9
|
-
secondary: string | number
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* The GenericKeyset is an abstract class that sets-up the interface and partial implementation
|
|
14
|
-
* of a keyset-paginated cursor with two parts. There are three types involved:
|
|
15
|
-
* - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.
|
|
16
|
-
* - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }
|
|
17
|
-
* - LabeledResult: a Result processed such that the "primary" and "secondary" parts of the cursor are labeled.
|
|
18
|
-
* - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }
|
|
19
|
-
* - Cursor: the two string parts that make-up the packed/string cursor.
|
|
20
|
-
* - E.g. packed cursor '1641038400000__bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }
|
|
21
|
-
*
|
|
22
|
-
* These types relate as such. Implementers define the relations marked with a *:
|
|
23
|
-
* Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor
|
|
24
|
-
* ↳ SQL Condition
|
|
25
|
-
*/
|
|
26
|
-
export abstract class GenericKeyset<R, LR extends KeysetLabeledResult> {
|
|
27
|
-
constructor(
|
|
28
|
-
public primary: DbRef,
|
|
29
|
-
public secondary: DbRef,
|
|
30
|
-
) {}
|
|
31
|
-
abstract labelResult(result: R): LR
|
|
32
|
-
abstract labeledResultToCursor(labeled: LR): KeysetCursor
|
|
33
|
-
abstract cursorToLabeledResult(cursor: KeysetCursor): LR
|
|
34
|
-
packFromResult(results: R | R[]): string | undefined {
|
|
35
|
-
const result = Array.isArray(results) ? results.at(-1) : results
|
|
36
|
-
if (!result) return
|
|
37
|
-
return this.pack(this.labelResult(result))
|
|
38
|
-
}
|
|
39
|
-
pack(labeled?: LR): string | undefined {
|
|
40
|
-
if (!labeled) return
|
|
41
|
-
const cursor = this.labeledResultToCursor(labeled)
|
|
42
|
-
return this.packCursor(cursor)
|
|
43
|
-
}
|
|
44
|
-
unpack(cursorStr?: string): LR | undefined {
|
|
45
|
-
const cursor = this.unpackCursor(cursorStr)
|
|
46
|
-
if (!cursor) return
|
|
47
|
-
return this.cursorToLabeledResult(cursor)
|
|
48
|
-
}
|
|
49
|
-
packCursor(cursor?: KeysetCursor): string | undefined {
|
|
50
|
-
if (!cursor) return
|
|
51
|
-
return `${cursor.primary}__${cursor.secondary}`
|
|
52
|
-
}
|
|
53
|
-
unpackCursor(cursorStr?: string): KeysetCursor | undefined {
|
|
54
|
-
if (!cursorStr) return
|
|
55
|
-
const result = cursorStr.split('__')
|
|
56
|
-
const [primary, secondary, ...others] = result
|
|
57
|
-
if (!primary || !secondary || others.length > 0) {
|
|
58
|
-
throw new InvalidRequestError('Malformed cursor')
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
primary,
|
|
62
|
-
secondary,
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {
|
|
66
|
-
if (labeled === undefined) return
|
|
67
|
-
if (tryIndex) {
|
|
68
|
-
// The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.
|
|
69
|
-
if (direction === 'asc') {
|
|
70
|
-
return sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`
|
|
71
|
-
} else {
|
|
72
|
-
return sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`
|
|
73
|
-
}
|
|
74
|
-
} else {
|
|
75
|
-
// @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the "or" usage.
|
|
76
|
-
if (direction === 'asc') {
|
|
77
|
-
return sql<SqlBool>`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`
|
|
78
|
-
} else {
|
|
79
|
-
return sql<SqlBool>`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
paginate<QB extends AnyQb>(
|
|
84
|
-
qb: QB,
|
|
85
|
-
opts: {
|
|
86
|
-
limit?: number
|
|
87
|
-
cursor?: string
|
|
88
|
-
direction?: 'asc' | 'desc'
|
|
89
|
-
tryIndex?: boolean
|
|
90
|
-
// By default, pg does nullsFirst
|
|
91
|
-
nullsLast?: boolean
|
|
92
|
-
},
|
|
93
|
-
): QB {
|
|
94
|
-
const { limit, cursor, direction = 'desc', tryIndex, nullsLast } = opts
|
|
95
|
-
const keysetSql = this.getSql(this.unpack(cursor), direction, tryIndex)
|
|
96
|
-
return qb
|
|
97
|
-
.$if(!!limit, (q) => q.limit(limit as number))
|
|
98
|
-
.$if(!nullsLast, (q) =>
|
|
99
|
-
q.orderBy(this.primary, direction).orderBy(this.secondary, direction),
|
|
100
|
-
)
|
|
101
|
-
.$if(!!nullsLast, (q) =>
|
|
102
|
-
q
|
|
103
|
-
.orderBy(
|
|
104
|
-
direction === 'asc'
|
|
105
|
-
? sql`${this.primary} asc nulls last`
|
|
106
|
-
: sql`${this.primary} desc nulls last`,
|
|
107
|
-
)
|
|
108
|
-
.orderBy(
|
|
109
|
-
direction === 'asc'
|
|
110
|
-
? sql`${this.secondary} asc nulls last`
|
|
111
|
-
: sql`${this.secondary} desc nulls last`,
|
|
112
|
-
),
|
|
113
|
-
)
|
|
114
|
-
.$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
type SortAtCidResult = { sortAt: string; cid: string }
|
|
119
|
-
type TimeCidLabeledResult = KeysetCursor
|
|
120
|
-
|
|
121
|
-
export class TimeCidKeyset<
|
|
122
|
-
TimeCidResult = SortAtCidResult,
|
|
123
|
-
> extends GenericKeyset<TimeCidResult, TimeCidLabeledResult> {
|
|
124
|
-
labelResult(result: TimeCidResult): TimeCidLabeledResult
|
|
125
|
-
labelResult<TimeCidResult extends SortAtCidResult>(result: TimeCidResult) {
|
|
126
|
-
return { primary: result.sortAt, secondary: result.cid }
|
|
127
|
-
}
|
|
128
|
-
labeledResultToCursor(labeled: TimeCidLabeledResult) {
|
|
129
|
-
return {
|
|
130
|
-
primary: new Date(labeled.primary).getTime().toString(),
|
|
131
|
-
secondary: labeled.secondary,
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
cursorToLabeledResult(cursor: KeysetCursor) {
|
|
135
|
-
const primaryDate = new Date(parseInt(cursor.primary, 10))
|
|
136
|
-
if (isNaN(primaryDate.getTime())) {
|
|
137
|
-
throw new InvalidRequestError('Malformed cursor')
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
primary: primaryDate.toISOString(),
|
|
141
|
-
secondary: cursor.secondary,
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export class CreatedAtDidKeyset extends TimeCidKeyset<{
|
|
147
|
-
createdAt: string
|
|
148
|
-
did: string // dids are treated identically to cids in TimeCidKeyset
|
|
149
|
-
}> {
|
|
150
|
-
labelResult(result: { createdAt: string; did: string }) {
|
|
151
|
-
return { primary: result.createdAt, secondary: result.did }
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export class IndexedAtDidKeyset extends TimeCidKeyset<{
|
|
156
|
-
indexedAt: string
|
|
157
|
-
did: string // dids are treated identically to cids in TimeCidKeyset
|
|
158
|
-
}> {
|
|
159
|
-
labelResult(result: { indexedAt: string; did: string }) {
|
|
160
|
-
return { primary: result.indexedAt, secondary: result.did }
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* This is being deprecated. Use {@link GenericKeyset#paginate} instead.
|
|
166
|
-
*/
|
|
167
|
-
export const paginate = <
|
|
168
|
-
QB extends AnyQb,
|
|
169
|
-
K extends GenericKeyset<unknown, any>,
|
|
170
|
-
>(
|
|
171
|
-
qb: QB,
|
|
172
|
-
opts: {
|
|
173
|
-
limit?: number
|
|
174
|
-
cursor?: string
|
|
175
|
-
direction?: 'asc' | 'desc'
|
|
176
|
-
keyset: K
|
|
177
|
-
tryIndex?: boolean
|
|
178
|
-
// By default, pg does nullsFirst
|
|
179
|
-
nullsLast?: boolean
|
|
180
|
-
},
|
|
181
|
-
): QB => {
|
|
182
|
-
return opts.keyset.paginate(qb, opts)
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
type SingleKeyCursor = {
|
|
186
|
-
primary: string
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
type SingleKeyLabeledResult = {
|
|
190
|
-
primary: string | number
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* GenericSingleKey is similar to {@link GenericKeyset} but for a single key cursor.
|
|
195
|
-
*/
|
|
196
|
-
export abstract class GenericSingleKey<R, LR extends SingleKeyLabeledResult> {
|
|
197
|
-
constructor(public primary: DbRef) {}
|
|
198
|
-
abstract labelResult(result: R): LR
|
|
199
|
-
abstract labeledResultToCursor(labeled: LR): SingleKeyCursor
|
|
200
|
-
abstract cursorToLabeledResult(cursor: SingleKeyCursor): LR
|
|
201
|
-
packFromResult(results: R | R[]): string | undefined {
|
|
202
|
-
const result = Array.isArray(results) ? results.at(-1) : results
|
|
203
|
-
if (!result) return
|
|
204
|
-
return this.pack(this.labelResult(result))
|
|
205
|
-
}
|
|
206
|
-
pack(labeled?: LR): string | undefined {
|
|
207
|
-
if (!labeled) return
|
|
208
|
-
const cursor = this.labeledResultToCursor(labeled)
|
|
209
|
-
return this.packCursor(cursor)
|
|
210
|
-
}
|
|
211
|
-
unpack(cursorStr?: string): LR | undefined {
|
|
212
|
-
const cursor = this.unpackCursor(cursorStr)
|
|
213
|
-
if (!cursor) return
|
|
214
|
-
return this.cursorToLabeledResult(cursor)
|
|
215
|
-
}
|
|
216
|
-
packCursor(cursor?: SingleKeyCursor): string | undefined {
|
|
217
|
-
if (!cursor) return
|
|
218
|
-
return cursor.primary
|
|
219
|
-
}
|
|
220
|
-
unpackCursor(cursorStr?: string): SingleKeyCursor | undefined {
|
|
221
|
-
if (!cursorStr) return
|
|
222
|
-
const result = cursorStr.split('__')
|
|
223
|
-
const [primary, ...others] = result
|
|
224
|
-
if (!primary || others.length > 0) {
|
|
225
|
-
throw new InvalidRequestError('Malformed cursor')
|
|
226
|
-
}
|
|
227
|
-
return {
|
|
228
|
-
primary,
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
getSql(labeled?: LR, direction?: 'asc' | 'desc') {
|
|
232
|
-
if (labeled === undefined) return
|
|
233
|
-
if (direction === 'asc') {
|
|
234
|
-
return sql<SqlBool>`${this.primary} > ${labeled.primary}`
|
|
235
|
-
}
|
|
236
|
-
return sql<SqlBool>`${this.primary} < ${labeled.primary}`
|
|
237
|
-
}
|
|
238
|
-
paginate<QB extends AnyQb>(
|
|
239
|
-
qb: QB,
|
|
240
|
-
opts: {
|
|
241
|
-
limit?: number
|
|
242
|
-
cursor?: string
|
|
243
|
-
direction?: 'asc' | 'desc'
|
|
244
|
-
// By default, pg does nullsFirst
|
|
245
|
-
nullsLast?: boolean
|
|
246
|
-
},
|
|
247
|
-
): QB {
|
|
248
|
-
const { limit, cursor, direction = 'desc', nullsLast } = opts
|
|
249
|
-
const keySql = this.getSql(this.unpack(cursor), direction)
|
|
250
|
-
return qb
|
|
251
|
-
.$if(!!limit, (q) => q.limit(limit as number))
|
|
252
|
-
.$if(!nullsLast, (q) => q.orderBy(this.primary, direction))
|
|
253
|
-
.$if(!!nullsLast, (q) =>
|
|
254
|
-
q.orderBy(
|
|
255
|
-
direction === 'asc'
|
|
256
|
-
? sql`${this.primary} asc nulls last`
|
|
257
|
-
: sql`${this.primary} desc nulls last`,
|
|
258
|
-
),
|
|
259
|
-
)
|
|
260
|
-
.$if(!!keySql, (qb) => (keySql ? qb.where(keySql) : qb)) as QB
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
type SortAtResult = { sortAt: string }
|
|
265
|
-
type TimeLabeledResult = SingleKeyCursor
|
|
266
|
-
|
|
267
|
-
export class IsoTimeKey<TimeResult = SortAtResult> extends GenericSingleKey<
|
|
268
|
-
TimeResult,
|
|
269
|
-
TimeLabeledResult
|
|
270
|
-
> {
|
|
271
|
-
labelResult(result: TimeResult): TimeLabeledResult
|
|
272
|
-
labelResult<TimeResult extends SortAtResult>(result: TimeResult) {
|
|
273
|
-
return { primary: result.sortAt }
|
|
274
|
-
}
|
|
275
|
-
labeledResultToCursor(labeled: TimeLabeledResult) {
|
|
276
|
-
return {
|
|
277
|
-
primary: new Date(labeled.primary).toISOString(),
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
cursorToLabeledResult(cursor: SingleKeyCursor) {
|
|
281
|
-
const primaryDate = new Date(cursor.primary)
|
|
282
|
-
if (isNaN(primaryDate.getTime())) {
|
|
283
|
-
throw new InvalidRequestError('Malformed cursor')
|
|
284
|
-
}
|
|
285
|
-
return {
|
|
286
|
-
primary: primaryDate.toISOString(),
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
export class IsoSortAtKey extends IsoTimeKey<{
|
|
292
|
-
sortAt: string
|
|
293
|
-
}> {
|
|
294
|
-
labelResult(result: { sortAt: string }) {
|
|
295
|
-
return { primary: result.sortAt }
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
export class IsoUpdatedAtKey extends IsoTimeKey<{
|
|
300
|
-
updatedAt: string
|
|
301
|
-
}> {
|
|
302
|
-
labelResult(result: { updatedAt: string }) {
|
|
303
|
-
return { primary: result.updatedAt }
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
type KeyResult = { key: string }
|
|
308
|
-
type RkeyLabeledResult = SingleKeyCursor
|
|
309
|
-
|
|
310
|
-
export class RkeyKey<RkeyResult = KeyResult> extends GenericSingleKey<
|
|
311
|
-
RkeyResult,
|
|
312
|
-
RkeyLabeledResult
|
|
313
|
-
> {
|
|
314
|
-
labelResult(result: RkeyResult): RkeyLabeledResult
|
|
315
|
-
labelResult<RkeyResult extends KeyResult>(result: RkeyResult) {
|
|
316
|
-
return { primary: result }
|
|
317
|
-
}
|
|
318
|
-
labeledResultToCursor(labeled: RkeyLabeledResult) {
|
|
319
|
-
return {
|
|
320
|
-
primary: labeled.primary,
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
cursorToLabeledResult(cursor: SingleKeyCursor) {
|
|
324
|
-
try {
|
|
325
|
-
ensureValidRecordKey(cursor.primary)
|
|
326
|
-
return {
|
|
327
|
-
primary: cursor.primary,
|
|
328
|
-
}
|
|
329
|
-
} catch {
|
|
330
|
-
throw new InvalidRequestError('Malformed cursor')
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
export class StashKeyKey extends RkeyKey<{
|
|
336
|
-
key: string
|
|
337
|
-
}> {
|
|
338
|
-
labelResult(result: { key: string }) {
|
|
339
|
-
return { primary: result.key }
|
|
340
|
-
}
|
|
341
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export const tableName = 'activity_subscription'
|
|
2
|
-
export interface ActivitySubscription {
|
|
3
|
-
creator: string
|
|
4
|
-
subjectDid: string
|
|
5
|
-
// key from the bsync stash.
|
|
6
|
-
key: string
|
|
7
|
-
indexedAt: string
|
|
8
|
-
post: boolean
|
|
9
|
-
reply: boolean
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export type PartialDB = { [tableName]: ActivitySubscription }
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { GeneratedAlways } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export const tableName = 'actor_block'
|
|
4
|
-
export interface ActorBlock {
|
|
5
|
-
uri: string
|
|
6
|
-
cid: string
|
|
7
|
-
creator: string
|
|
8
|
-
subjectDid: string
|
|
9
|
-
createdAt: string
|
|
10
|
-
indexedAt: string
|
|
11
|
-
sortAt: GeneratedAlways<string>
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export type PartialDB = { [tableName]: ActorBlock }
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Generated } from 'kysely'
|
|
2
|
-
|
|
3
|
-
export interface Actor {
|
|
4
|
-
did: string
|
|
5
|
-
handle: string | null
|
|
6
|
-
indexedAt: string
|
|
7
|
-
takedownRef: string | null
|
|
8
|
-
upstreamStatus: string | null
|
|
9
|
-
trustedVerifier: Generated<boolean>
|
|
10
|
-
ageAssuranceStatus: string | null
|
|
11
|
-
ageAssuranceLastInitiatedAt: string | null
|
|
12
|
-
ageAssuranceAccess: string | null
|
|
13
|
-
ageAssuranceCountryCode: string | null
|
|
14
|
-
ageAssuranceRegionCode: string | null
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const tableName = 'actor'
|
|
18
|
-
|
|
19
|
-
export type PartialDB = { [tableName]: Actor }
|