@atproto/bsky 0.0.243 → 0.0.245
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 +28 -0
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +5 -3
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts +4 -0
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js +169 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -0
- package/dist/api/app/bsky/notification/putPreferencesV2.js +4 -1
- package/dist/api/app/bsky/notification/putPreferencesV2.js.map +1 -1
- package/dist/api/app/bsky/notification/util.d.ts +1 -0
- package/dist/api/app/bsky/notification/util.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/util.js +7 -7
- package/dist/api/app/bsky/notification/util.js.map +1 -1
- package/dist/api/blob-dispatcher.d.ts.map +1 -1
- package/dist/api/blob-dispatcher.js +9 -8
- package/dist/api/blob-dispatcher.js.map +1 -1
- package/dist/api/blob-resolver.d.ts +1 -1
- package/dist/api/blob-resolver.d.ts.map +1 -1
- package/dist/api/blob-resolver.js +0 -1
- package/dist/api/blob-resolver.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/data-plane/bsync/index.d.ts +2 -0
- package/dist/data-plane/bsync/index.d.ts.map +1 -1
- package/dist/data-plane/bsync/index.js +7 -10
- package/dist/data-plane/bsync/index.js.map +1 -1
- package/dist/data-plane/server/background.d.ts +12 -8
- package/dist/data-plane/server/background.d.ts.map +1 -1
- package/dist/data-plane/server/background.js +32 -14
- package/dist/data-plane/server/background.js.map +1 -1
- package/dist/data-plane/server/index.d.ts +2 -0
- package/dist/data-plane/server/index.d.ts.map +1 -1
- package/dist/data-plane/server/index.js +7 -10
- package/dist/data-plane/server/index.js.map +1 -1
- package/dist/data-plane/server/indexing/index.d.ts +2 -2
- package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/index.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/block.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/block.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/block.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/chat-declaration.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/chat-declaration.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/feed-generator.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/feed-generator.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/follow.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/follow.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/follow.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/germ-declaration.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/germ-declaration.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/labeler.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/labeler.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/labeler.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/like.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/like.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/like.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-block.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/list-block.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-block.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-item.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/list-item.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list-item.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/list.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/list.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/notif-declaration.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/notif-declaration.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post-gate.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/post-gate.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post-gate.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/post.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/post.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/profile.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/profile.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/profile.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/repost.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/repost.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/repost.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/starter-pack.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/starter-pack.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/status.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/status.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/status.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/thread-gate.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/thread-gate.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/verification.d.ts +1 -1
- package/dist/data-plane/server/indexing/plugins/verification.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/plugins/verification.js.map +1 -1
- package/dist/data-plane/server/indexing/processor.d.ts +1 -1
- package/dist/data-plane/server/indexing/processor.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/processor.js.map +1 -1
- package/dist/data-plane/server/routes/notifs.d.ts.map +1 -1
- package/dist/data-plane/server/routes/notifs.js +1 -8
- package/dist/data-plane/server/routes/notifs.js.map +1 -1
- package/dist/data-plane/server/routes/search.js +3 -2
- package/dist/data-plane/server/routes/search.js.map +1 -1
- package/dist/data-plane/server/subscription.d.ts +13 -12
- package/dist/data-plane/server/subscription.d.ts.map +1 -1
- package/dist/data-plane/server/subscription.js +59 -26
- package/dist/data-plane/server/subscription.js.map +1 -1
- package/dist/feature-gates/index.d.ts +2 -1
- package/dist/feature-gates/index.d.ts.map +1 -1
- package/dist/feature-gates/index.js +9 -6
- package/dist/feature-gates/index.js.map +1 -1
- package/dist/feature-gates/metrics.d.ts +3 -3
- package/dist/feature-gates/metrics.d.ts.map +1 -1
- package/dist/feature-gates/metrics.js +8 -8
- package/dist/feature-gates/metrics.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.js +1 -0
- package/dist/lexicons/app/bsky/authFullApp.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/authViewAll.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authViewAll.defs.js +1 -0
- package/dist/lexicons/app/bsky/authViewAll.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/feed/searchPostsV2.d.ts +3 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.d.ts +158 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.js +73 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.js +6 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.js.map +1 -0
- package/dist/lexicons/app/bsky/feed.d.ts +1 -0
- package/dist/lexicons/app/bsky/feed.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/feed.js +1 -0
- package/dist/lexicons/app/bsky/feed.js.map +1 -1
- package/dist/lexicons/app/bsky/notification/defs.defs.d.ts +5 -0
- package/dist/lexicons/app/bsky/notification/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/notification/defs.defs.js +1 -0
- package/dist/lexicons/app/bsky/notification/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/actor/declaration.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts +4 -6
- package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/actor/defs.defs.js +2 -3
- package/dist/lexicons/chat/bsky/actor/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts +64 -70
- package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/defs.defs.js +32 -35
- package/dist/lexicons/chat/bsky/convo/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts +6 -6
- package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/defs.defs.js +3 -3
- package/dist/lexicons/chat/bsky/moderation/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/notification/defs.d.ts +2 -0
- package/dist/lexicons/chat/bsky/notification/defs.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/defs.defs.d.ts +20 -0
- package/dist/lexicons/chat/bsky/notification/defs.defs.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/defs.defs.js +19 -0
- package/dist/lexicons/chat/bsky/notification/defs.defs.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification/defs.js +5 -0
- package/dist/lexicons/chat/bsky/notification/defs.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.d.ts +3 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.defs.d.ts +18 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.defs.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.defs.js +16 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.defs.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.js +6 -0
- package/dist/lexicons/chat/bsky/notification/getPreferences.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.d.ts +3 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.defs.d.ts +27 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.defs.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.defs.js +22 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.defs.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.js +6 -0
- package/dist/lexicons/chat/bsky/notification/putPreferences.js.map +1 -0
- package/dist/lexicons/chat/bsky/notification.d.ts +4 -0
- package/dist/lexicons/chat/bsky/notification.d.ts.map +1 -0
- package/dist/lexicons/chat/bsky/notification.js +7 -0
- package/dist/lexicons/chat/bsky/notification.js.map +1 -0
- package/dist/lexicons/chat/bsky.d.ts +1 -0
- package/dist/lexicons/chat/bsky.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky.js +1 -0
- package/dist/lexicons/chat/bsky.js.map +1 -1
- package/dist/lexicons/tools/ozone/report/defs.defs.d.ts +4 -0
- package/dist/lexicons/tools/ozone/report/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/tools/ozone/report/defs.defs.js +2 -0
- package/dist/lexicons/tools/ozone/report/defs.defs.js.map +1 -1
- package/dist/lexicons/tools/ozone/report/queryActivities.d.ts +3 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.d.ts.map +1 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.defs.d.ts +42 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.defs.d.ts.map +1 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.defs.js +31 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.defs.js.map +1 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.js +6 -0
- package/dist/lexicons/tools/ozone/report/queryActivities.js.map +1 -0
- package/dist/lexicons/tools/ozone/report.d.ts +1 -0
- package/dist/lexicons/tools/ozone/report.d.ts.map +1 -1
- package/dist/lexicons/tools/ozone/report.js +1 -0
- package/dist/lexicons/tools/ozone/report.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +51 -55
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +67 -74
- package/dist/proto/bsky_pb.js.map +1 -1
- package/package.json +9 -9
- package/proto/bsky.proto +21 -18
- package/src/api/app/bsky/actor/searchActorsTypeahead.ts +5 -3
- package/src/api/app/bsky/feed/searchPostsV2.ts +232 -0
- package/src/api/app/bsky/notification/putPreferencesV2.ts +4 -1
- package/src/api/app/bsky/notification/util.ts +7 -11
- package/src/api/blob-dispatcher.ts +12 -8
- package/src/api/blob-resolver.ts +0 -1
- package/src/api/index.ts +2 -0
- package/src/data-plane/bsync/index.ts +12 -10
- package/src/data-plane/server/background.ts +49 -18
- package/src/data-plane/server/index.ts +12 -10
- package/src/data-plane/server/indexing/index.ts +1 -1
- package/src/data-plane/server/indexing/plugins/block.ts +4 -1
- package/src/data-plane/server/indexing/plugins/chat-declaration.ts +4 -1
- package/src/data-plane/server/indexing/plugins/feed-generator.ts +4 -1
- package/src/data-plane/server/indexing/plugins/follow.ts +4 -1
- package/src/data-plane/server/indexing/plugins/germ-declaration.ts +4 -1
- package/src/data-plane/server/indexing/plugins/labeler.ts +4 -1
- package/src/data-plane/server/indexing/plugins/like.ts +4 -1
- package/src/data-plane/server/indexing/plugins/list-block.ts +4 -1
- package/src/data-plane/server/indexing/plugins/list-item.ts +4 -1
- package/src/data-plane/server/indexing/plugins/list.ts +4 -1
- package/src/data-plane/server/indexing/plugins/notif-declaration.ts +4 -1
- package/src/data-plane/server/indexing/plugins/post-gate.ts +4 -1
- package/src/data-plane/server/indexing/plugins/post.ts +4 -1
- package/src/data-plane/server/indexing/plugins/profile.ts +4 -1
- package/src/data-plane/server/indexing/plugins/repost.ts +4 -1
- package/src/data-plane/server/indexing/plugins/starter-pack.ts +4 -1
- package/src/data-plane/server/indexing/plugins/status.ts +4 -1
- package/src/data-plane/server/indexing/plugins/thread-gate.ts +4 -1
- package/src/data-plane/server/indexing/plugins/verification.ts +4 -1
- package/src/data-plane/server/indexing/processor.ts +1 -1
- package/src/data-plane/server/routes/notifs.ts +0 -14
- package/src/data-plane/server/routes/search.ts +3 -2
- package/src/data-plane/server/subscription.ts +74 -31
- package/src/feature-gates/index.ts +10 -6
- package/src/feature-gates/metrics.test.ts +12 -12
- package/src/feature-gates/metrics.ts +8 -8
- package/src/index.ts +16 -9
- package/tests/_util.ts +8 -25
- package/tests/admin/admin-auth.test.ts +2 -2
- package/tests/admin/moderation.test.ts +1 -1
- package/tests/auth.test.ts +4 -6
- package/tests/blob-resolver.test.ts +4 -5
- package/tests/data-plane/db.test.ts +1 -1
- package/tests/data-plane/duplicate-records.test.ts +1 -1
- package/tests/data-plane/handle-invalidation.test.ts +2 -2
- package/tests/data-plane/indexing.test.ts +24 -21
- package/tests/data-plane/subscription.test.ts +1 -1
- package/tests/data-plane/thread-mutes.test.ts +2 -2
- package/tests/entryway-auth.test.ts +4 -5
- package/tests/feed-generation.test.ts +5 -5
- package/tests/image/server.test.ts +1 -1
- package/tests/label-hydration.test.ts +3 -5
- package/tests/postgates.test.ts +3 -6
- package/tests/query-labels.test.ts +3 -5
- package/tests/redis-cache.test.ts +1 -3
- package/tests/server.test.ts +11 -16
- package/tests/sitemap.test.ts +3 -4
- package/tests/stash.test.ts +12 -8
- package/tests/utils.test.ts +3 -13
- package/tests/views/account-deactivation.test.ts +3 -5
- package/tests/views/actor-likes.test.ts +3 -5
- package/tests/views/actor-search.test.ts +6 -7
- package/tests/views/age-assurance-v2.test.ts +9 -6
- package/tests/views/age-assurance.test.ts +30 -36
- package/tests/views/author-feed.test.ts +4 -6
- package/tests/views/block-lists.test.ts +3 -5
- package/tests/views/blocks.test.ts +3 -5
- package/tests/views/bookmarks.test.ts +4 -4
- package/tests/views/drafts.test.ts +7 -14
- package/tests/views/feed-hidden-replies.test.ts +3 -6
- package/tests/views/feed-view-post.test.ts +3 -6
- package/tests/views/follows.test.ts +4 -6
- package/tests/views/get-config.test.ts +4 -7
- package/tests/views/get-suggested-onboarding-users.test.ts +11 -9
- package/tests/views/get-suggested-starter-packs.test.ts +11 -9
- package/tests/views/get-trends.test.ts +15 -9
- package/tests/views/internal-actor.test.ts +3 -6
- package/tests/views/known-followers.test.ts +3 -6
- package/tests/views/labeler-service.test.ts +3 -5
- package/tests/views/labels-needs-review.test.ts +3 -6
- package/tests/views/labels-takedown.test.ts +3 -4
- package/tests/views/likes.test.ts +4 -6
- package/tests/views/list-feed.test.ts +3 -5
- package/tests/views/lists.test.ts +3 -5
- package/tests/views/mute-lists.test.ts +3 -5
- package/tests/views/mutes.test.ts +4 -5
- package/tests/views/notifications.test.ts +12 -11
- package/tests/views/post-search.test.ts +3 -24
- package/tests/views/posts-debug.test.ts +11 -6
- package/tests/views/posts.test.ts +3 -4
- package/tests/views/profile-debug.test.ts +11 -5
- package/tests/views/profile.test.ts +11 -5
- package/tests/views/quotes.test.ts +4 -6
- package/tests/views/reposts.test.ts +4 -6
- package/tests/views/starter-packs.test.ts +3 -6
- package/tests/views/suggestions.test.ts +9 -13
- package/tests/views/thread-v2.test.ts +3 -5
- package/tests/views/thread.test.ts +3 -7
- package/tests/views/threadgating.test.ts +3 -5
- package/tests/views/timeline.test.ts +4 -5
- package/tests/views/verification.test.ts +4 -6
- package/tsconfig.build.tsbuildinfo +1 -1
- package/vitest.config.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/bsky",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.245",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Reference implementation of app.bsky App View (Bluesky API)",
|
|
6
6
|
"keywords": [
|
|
@@ -46,19 +46,19 @@
|
|
|
46
46
|
"structured-headers": "^1.0.1",
|
|
47
47
|
"typed-emitter": "^2.1.0",
|
|
48
48
|
"uint8arrays": "^5.0.0",
|
|
49
|
-
"undici": "^
|
|
49
|
+
"undici": "^8.5.0",
|
|
50
50
|
"zod": "3.23.8",
|
|
51
|
-
"@atproto-labs/
|
|
52
|
-
"@atproto/api": "^0.20.16",
|
|
51
|
+
"@atproto-labs/fetch-node": "^0.3.2",
|
|
53
52
|
"@atproto/common": "^0.6.3",
|
|
54
|
-
"@atproto-labs/
|
|
55
|
-
"@atproto/
|
|
53
|
+
"@atproto-labs/xrpc-utils": "^0.1.1",
|
|
54
|
+
"@atproto/api": "^0.20.18",
|
|
56
55
|
"@atproto/did": "^0.5.1",
|
|
56
|
+
"@atproto/crypto": "^0.5.1",
|
|
57
57
|
"@atproto/identity": "^0.5.1",
|
|
58
|
-
"@atproto/repo": "^0.10.1",
|
|
59
58
|
"@atproto/lex": "^0.1.4",
|
|
60
|
-
"@atproto/sync": "^0.3.
|
|
59
|
+
"@atproto/sync": "^0.3.3",
|
|
61
60
|
"@atproto/syntax": "^0.6.2",
|
|
61
|
+
"@atproto/repo": "^0.10.1",
|
|
62
62
|
"@atproto/xrpc-server": "^0.11.2"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@types/qs": "^6.9.7",
|
|
74
74
|
"ts-node": "^10.8.2",
|
|
75
75
|
"vitest": "^4.0.16",
|
|
76
|
-
"@atproto/pds": "^0.5.
|
|
76
|
+
"@atproto/pds": "^0.5.7"
|
|
77
77
|
},
|
|
78
78
|
"type": "module",
|
|
79
79
|
"exports": {
|
package/proto/bsky.proto
CHANGED
|
@@ -815,20 +815,12 @@ message NotificationPreference {
|
|
|
815
815
|
NotificationChannelPush push = 2;
|
|
816
816
|
}
|
|
817
817
|
|
|
818
|
-
enum ChatNotificationInclude {
|
|
819
|
-
CHAT_NOTIFICATION_INCLUDE_UNSPECIFIED = 0;
|
|
820
|
-
CHAT_NOTIFICATION_INCLUDE_ALL = 1;
|
|
821
|
-
CHAT_NOTIFICATION_INCLUDE_ACCEPTED = 2;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
message ChatNotificationPreference {
|
|
825
|
-
ChatNotificationInclude include = 1;
|
|
826
|
-
NotificationChannelPush push = 2;
|
|
827
|
-
}
|
|
828
|
-
|
|
829
818
|
message NotificationPreferences {
|
|
830
819
|
bytes entry = 1;
|
|
831
|
-
|
|
820
|
+
|
|
821
|
+
reserved 2; // formerly "chat". This is now stored on the chat service.
|
|
822
|
+
reserved "chat";
|
|
823
|
+
|
|
832
824
|
FilterableNotificationPreference follow = 3;
|
|
833
825
|
FilterableNotificationPreference like = 4;
|
|
834
826
|
FilterableNotificationPreference like_via_repost = 5;
|
|
@@ -1144,10 +1136,10 @@ enum SearchQueryLanguage {
|
|
|
1144
1136
|
SEARCH_QUERY_LANGUAGE_ZH = 2; // Chinese (smartcn)
|
|
1145
1137
|
SEARCH_QUERY_LANGUAGE_KO = 3; // Korean (nori)
|
|
1146
1138
|
SEARCH_QUERY_LANGUAGE_TH = 4; // Thai
|
|
1139
|
+
SEARCH_QUERY_LANGUAGE_AR = 5; // Arabic
|
|
1147
1140
|
}
|
|
1148
1141
|
|
|
1149
|
-
// Shared request params
|
|
1150
|
-
|
|
1142
|
+
// Shared request params for paginated methods
|
|
1151
1143
|
message SearchParams {
|
|
1152
1144
|
string query = 1;
|
|
1153
1145
|
string viewer = 2;
|
|
@@ -1157,6 +1149,13 @@ message SearchParams {
|
|
|
1157
1149
|
string cursor = 4;
|
|
1158
1150
|
}
|
|
1159
1151
|
|
|
1152
|
+
// Shared params for typeahead-style searches, which aren't paginated.
|
|
1153
|
+
message SearchTypeaheadParams {
|
|
1154
|
+
string query = 1;
|
|
1155
|
+
string viewer = 2;
|
|
1156
|
+
int32 limit = 3;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1160
1159
|
// Shared result types
|
|
1161
1160
|
|
|
1162
1161
|
// SearchRecordResult represents a generic result hit corresponding to a record.
|
|
@@ -1195,7 +1194,8 @@ message PostsFilters {
|
|
|
1195
1194
|
// Content filters
|
|
1196
1195
|
repeated string domains = 3;
|
|
1197
1196
|
repeated string urls = 4;
|
|
1198
|
-
|
|
1197
|
+
// Canonical request field for posts embedding these AT-URI records.
|
|
1198
|
+
repeated string embedded_at_uris = 5;
|
|
1199
1199
|
repeated string hashtags = 6;
|
|
1200
1200
|
}
|
|
1201
1201
|
|
|
@@ -1246,6 +1246,11 @@ message SearchPostsV2Request {
|
|
|
1246
1246
|
message SearchPostsV2Response {
|
|
1247
1247
|
repeated SearchRecordResult posts = 1;
|
|
1248
1248
|
PageInfo page_info = 2;
|
|
1249
|
+
// Detected CJK/Thai/Arabic languages of the query, usually one. Han-only text
|
|
1250
|
+
// returns ["zh", "ja"] since it's ambiguous between Chinese and Japanese.
|
|
1251
|
+
// set query_language on the request to disambiguate.
|
|
1252
|
+
// Currently left empty for other scripts (e.g. Latin-based languages like English).
|
|
1253
|
+
repeated string detected_query_languages = 3;
|
|
1249
1254
|
}
|
|
1250
1255
|
|
|
1251
1256
|
message SearchActorsV2Request {
|
|
@@ -1258,9 +1263,7 @@ message SearchActorsV2Response {
|
|
|
1258
1263
|
}
|
|
1259
1264
|
|
|
1260
1265
|
message SearchActorsTypeaheadRequest {
|
|
1261
|
-
|
|
1262
|
-
string query = 2;
|
|
1263
|
-
int32 limit = 3;
|
|
1266
|
+
SearchTypeaheadParams params = 1;
|
|
1264
1267
|
}
|
|
1265
1268
|
|
|
1266
1269
|
message SearchActorsTypeaheadResponse {
|
|
@@ -95,9 +95,11 @@ const skeletonV2 = async (
|
|
|
95
95
|
const term = params.q ?? params.term ?? ''
|
|
96
96
|
|
|
97
97
|
const res = await ctx.dataplane.searchActorsTypeahead({
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
params: {
|
|
99
|
+
query: term,
|
|
100
|
+
viewer: params.hydrateCtx.viewer ?? undefined,
|
|
101
|
+
limit: params.limit,
|
|
102
|
+
},
|
|
101
103
|
})
|
|
102
104
|
return {
|
|
103
105
|
dids: res.actors.map(({ did }) => did as DidString),
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Timestamp } from '@bufbuild/protobuf'
|
|
2
|
+
import { mapDefined } from '@atproto/common'
|
|
3
|
+
import { AtUriString } from '@atproto/lex'
|
|
4
|
+
import { InvalidRequestError, Server } from '@atproto/xrpc-server'
|
|
5
|
+
import { AppContext } from '../../../../context.js'
|
|
6
|
+
import { DataPlaneClient } from '../../../../data-plane/index.js'
|
|
7
|
+
import {
|
|
8
|
+
PostSearchQuery,
|
|
9
|
+
parsePostSearchQuery,
|
|
10
|
+
} from '../../../../data-plane/server/util.js'
|
|
11
|
+
import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator.js'
|
|
12
|
+
import { parseString } from '../../../../hydration/util.js'
|
|
13
|
+
import { app } from '../../../../lexicons/index.js'
|
|
14
|
+
import {
|
|
15
|
+
HydrationFnInput,
|
|
16
|
+
PresentationFnInput,
|
|
17
|
+
RulesFnInput,
|
|
18
|
+
SkeletonFnInput,
|
|
19
|
+
createPipeline,
|
|
20
|
+
} from '../../../../pipeline.js'
|
|
21
|
+
import {
|
|
22
|
+
SearchQueryLanguage,
|
|
23
|
+
SearchSortOrder,
|
|
24
|
+
} from '../../../../proto/bsky_pb.js'
|
|
25
|
+
import { uriToDid as creatorFromUri } from '../../../../util/uris.js'
|
|
26
|
+
import { Views } from '../../../../views/index.js'
|
|
27
|
+
import { resHeaders, resolveSearchV2Override } from '../../../util.js'
|
|
28
|
+
|
|
29
|
+
export default function (server: Server, ctx: AppContext) {
|
|
30
|
+
const searchPostsV2 = createPipeline(
|
|
31
|
+
skeleton,
|
|
32
|
+
hydration,
|
|
33
|
+
noBlocksOrTagged,
|
|
34
|
+
presentation,
|
|
35
|
+
)
|
|
36
|
+
server.add(app.bsky.feed.searchPostsV2, {
|
|
37
|
+
auth: ctx.authVerifier.standard,
|
|
38
|
+
handler: async ({ auth, params, req }) => {
|
|
39
|
+
const { viewer, isModService, skipViewerBlocks } =
|
|
40
|
+
ctx.authVerifier.parseCreds(auth)
|
|
41
|
+
|
|
42
|
+
const labelers = ctx.reqLabelers(req)
|
|
43
|
+
const hydrateCtx = await ctx.hydrator.createContext({
|
|
44
|
+
labelers,
|
|
45
|
+
viewer,
|
|
46
|
+
skipViewerBlocks,
|
|
47
|
+
features: ctx.featureGatesClient.scope(
|
|
48
|
+
ctx.featureGatesClient.parseUserContextFromHandler({
|
|
49
|
+
viewer,
|
|
50
|
+
req,
|
|
51
|
+
}),
|
|
52
|
+
),
|
|
53
|
+
})
|
|
54
|
+
const isV2Enabled =
|
|
55
|
+
hydrateCtx.features.checkGate(
|
|
56
|
+
hydrateCtx.features.Gate.SearchV2Enable,
|
|
57
|
+
) || resolveSearchV2Override(req, ctx.cfg)
|
|
58
|
+
if (!isV2Enabled) {
|
|
59
|
+
throw new InvalidRequestError('Search v2 is not enabled')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const results = await searchPostsV2(
|
|
63
|
+
{
|
|
64
|
+
...params,
|
|
65
|
+
hydrateCtx,
|
|
66
|
+
isModService,
|
|
67
|
+
},
|
|
68
|
+
ctx,
|
|
69
|
+
)
|
|
70
|
+
return {
|
|
71
|
+
encoding: 'application/json',
|
|
72
|
+
body: results,
|
|
73
|
+
headers: resHeaders({ labelers: hydrateCtx.labelers }),
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const skeleton = async (
|
|
80
|
+
inputs: SkeletonFnInput<Context, Params>,
|
|
81
|
+
): Promise<Skeleton> => {
|
|
82
|
+
const { ctx, params } = inputs
|
|
83
|
+
const query = params.query ?? ''
|
|
84
|
+
const parsedQuery = parsePostSearchQuery(query, {
|
|
85
|
+
author: params.authors?.[0],
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
const res = await ctx.dataplane.searchPostsV2({
|
|
89
|
+
params: {
|
|
90
|
+
query,
|
|
91
|
+
viewer: params.hydrateCtx.viewer ?? undefined,
|
|
92
|
+
limit: params.limit,
|
|
93
|
+
cursor: params.cursor,
|
|
94
|
+
},
|
|
95
|
+
sort: postSortToV2(params.sort),
|
|
96
|
+
filters: {
|
|
97
|
+
authors: params.authors ?? [],
|
|
98
|
+
mentions: params.mentions ?? [],
|
|
99
|
+
domains: params.domains ?? [],
|
|
100
|
+
urls: params.urls ?? [],
|
|
101
|
+
embeddedAtUris: params.embeddedAtUris ?? [],
|
|
102
|
+
hashtags: params.hashtags ?? [],
|
|
103
|
+
},
|
|
104
|
+
exclude: {
|
|
105
|
+
authors: params.excludeAuthors ?? [],
|
|
106
|
+
mentions: params.excludeMentions ?? [],
|
|
107
|
+
domains: params.excludeDomains ?? [],
|
|
108
|
+
urls: params.excludeUrls ?? [],
|
|
109
|
+
embeddedAtUris: params.excludeEmbeddedAtUris ?? [],
|
|
110
|
+
hashtags: params.excludeHashtags ?? [],
|
|
111
|
+
},
|
|
112
|
+
since: parseTimestamp(params.since),
|
|
113
|
+
until: parseTimestamp(params.until),
|
|
114
|
+
allTime: params.allTime,
|
|
115
|
+
language: params.language,
|
|
116
|
+
hasMedia: params.hasMedia,
|
|
117
|
+
hasVideo: params.hasVideo,
|
|
118
|
+
replyParentUri: params.replyParentUri,
|
|
119
|
+
threadRootUri: params.threadRootUri,
|
|
120
|
+
excludeReplies: params.excludeReplies,
|
|
121
|
+
repliesOnly: params.repliesOnly,
|
|
122
|
+
following: params.following,
|
|
123
|
+
queryLanguage: queryLanguageToV2(params.queryLanguage),
|
|
124
|
+
})
|
|
125
|
+
return {
|
|
126
|
+
posts: res.posts.map(({ uri }) => uri as AtUriString),
|
|
127
|
+
cursor: parseString(res.pageInfo?.cursor),
|
|
128
|
+
hitsTotal: res.pageInfo?.hitsTotal
|
|
129
|
+
? Number(res.pageInfo.hitsTotal)
|
|
130
|
+
: undefined,
|
|
131
|
+
detectedQueryLanguages: res.detectedQueryLanguages,
|
|
132
|
+
parsedQuery,
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const hydration = async (
|
|
137
|
+
inputs: HydrationFnInput<Context, Params, Skeleton>,
|
|
138
|
+
) => {
|
|
139
|
+
const { ctx, params, skeleton } = inputs
|
|
140
|
+
return ctx.hydrator.hydratePosts(
|
|
141
|
+
skeleton.posts.map((uri) => ({ uri })),
|
|
142
|
+
params.hydrateCtx,
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const noBlocksOrTagged = (inputs: RulesFnInput<Context, Params, Skeleton>) => {
|
|
147
|
+
const { ctx, params, skeleton, hydration } = inputs
|
|
148
|
+
const { parsedQuery } = skeleton
|
|
149
|
+
|
|
150
|
+
skeleton.posts = skeleton.posts.filter((uri) => {
|
|
151
|
+
const post = hydration.posts?.get(uri)
|
|
152
|
+
if (!post) return
|
|
153
|
+
|
|
154
|
+
const creator = creatorFromUri(uri)
|
|
155
|
+
const isCuratedSearch = params.sort === 'top'
|
|
156
|
+
const isPostByViewer = creator === params.hydrateCtx.viewer
|
|
157
|
+
|
|
158
|
+
if (isPostByViewer) return true
|
|
159
|
+
if (params.isModService) return true
|
|
160
|
+
|
|
161
|
+
if (ctx.views.viewerBlockExists(creator, hydration)) return false
|
|
162
|
+
|
|
163
|
+
const tagged = [...ctx.cfg.searchTagsHide].some((t) => post.tags.has(t))
|
|
164
|
+
|
|
165
|
+
if (isCuratedSearch && tagged) return false
|
|
166
|
+
if (!(parsedQuery.author || params.authors?.length) && tagged) return false
|
|
167
|
+
return true
|
|
168
|
+
})
|
|
169
|
+
return skeleton
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const presentation = (
|
|
173
|
+
inputs: PresentationFnInput<Context, Params, Skeleton>,
|
|
174
|
+
) => {
|
|
175
|
+
const { ctx, skeleton, hydration } = inputs
|
|
176
|
+
const posts = mapDefined(skeleton.posts, (uri) => {
|
|
177
|
+
const post = hydration.posts?.get(uri)
|
|
178
|
+
if (!post) return
|
|
179
|
+
|
|
180
|
+
return ctx.views.post(uri, hydration)
|
|
181
|
+
})
|
|
182
|
+
return {
|
|
183
|
+
posts,
|
|
184
|
+
cursor: skeleton.cursor,
|
|
185
|
+
hitsTotal: skeleton.hitsTotal,
|
|
186
|
+
detectedQueryLanguages: skeleton.detectedQueryLanguages,
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
type Context = {
|
|
191
|
+
cfg: AppContext['cfg']
|
|
192
|
+
dataplane: DataPlaneClient
|
|
193
|
+
hydrator: Hydrator
|
|
194
|
+
views: Views
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
type Params = app.bsky.feed.searchPostsV2.$Params & {
|
|
198
|
+
hydrateCtx: HydrateCtx
|
|
199
|
+
isModService: boolean
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
type Skeleton = {
|
|
203
|
+
posts: AtUriString[]
|
|
204
|
+
hitsTotal?: number
|
|
205
|
+
cursor?: string
|
|
206
|
+
detectedQueryLanguages?: string[]
|
|
207
|
+
parsedQuery: PostSearchQuery
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const postSortToV2 = (sort: string): SearchSortOrder => {
|
|
211
|
+
if (sort === 'top') return SearchSortOrder.TOP
|
|
212
|
+
if (sort === 'recent') return SearchSortOrder.RECENT
|
|
213
|
+
return SearchSortOrder.UNSPECIFIED
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const queryLanguageToV2 = (
|
|
217
|
+
lang: string | undefined,
|
|
218
|
+
): SearchQueryLanguage | undefined => {
|
|
219
|
+
if (lang === 'ja') return SearchQueryLanguage.JA
|
|
220
|
+
if (lang === 'zh') return SearchQueryLanguage.ZH
|
|
221
|
+
if (lang === 'ko') return SearchQueryLanguage.KO
|
|
222
|
+
if (lang === 'th') return SearchQueryLanguage.TH
|
|
223
|
+
if (lang === 'ar') return SearchQueryLanguage.AR
|
|
224
|
+
return undefined
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const parseTimestamp = (value: string | undefined): Timestamp | undefined => {
|
|
228
|
+
if (!value) return undefined
|
|
229
|
+
const date = new Date(value)
|
|
230
|
+
if (isNaN(date.getTime())) return undefined
|
|
231
|
+
return Timestamp.fromDate(date)
|
|
232
|
+
}
|
|
@@ -5,7 +5,7 @@ import { AppContext } from '../../../../context.js'
|
|
|
5
5
|
import { app } from '../../../../lexicons/index.js'
|
|
6
6
|
import { GetNotificationPreferencesResponse } from '../../../../proto/bsky_pb.js'
|
|
7
7
|
import { Namespaces } from '../../../../stash.js'
|
|
8
|
-
import { protobufToLex } from './util.js'
|
|
8
|
+
import { DEFAULT_CHAT_PREFERENCE, protobufToLex } from './util.js'
|
|
9
9
|
|
|
10
10
|
export default function (server: Server, ctx: AppContext) {
|
|
11
11
|
server.add(app.bsky.notification.putPreferencesV2, {
|
|
@@ -57,5 +57,8 @@ const computePreferences = async (
|
|
|
57
57
|
|
|
58
58
|
const currentPreferences = protobufToLex(res.preferences[0])
|
|
59
59
|
const preferences = { ...currentPreferences, ...input.body }
|
|
60
|
+
// NOTE: See the deprecation notice on the lexicon. This field returns a static default value and shouldn't be used.
|
|
61
|
+
// Use the chat.bsky.notification.defs#preferences type instead.
|
|
62
|
+
preferences.chat = DEFAULT_CHAT_PREFERENCE
|
|
60
63
|
return preferences
|
|
61
64
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { app } from '../../../../lexicons/index.js'
|
|
2
2
|
import {
|
|
3
|
-
ChatNotificationInclude,
|
|
4
|
-
ChatNotificationPreference,
|
|
5
3
|
FilterableNotificationPreference,
|
|
6
4
|
NotificationInclude,
|
|
7
5
|
NotificationPreference,
|
|
@@ -71,15 +69,11 @@ const ensurePreferences = (
|
|
|
71
69
|
}
|
|
72
70
|
}
|
|
73
71
|
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
include:
|
|
79
|
-
p?.include === ChatNotificationInclude.ACCEPTED ? 'accepted' : 'all',
|
|
80
|
-
push: p?.push?.enabled,
|
|
72
|
+
export const DEFAULT_CHAT_PREFERENCE: app.bsky.notification.defs.ChatPreference =
|
|
73
|
+
{
|
|
74
|
+
include: 'all',
|
|
75
|
+
push: true,
|
|
81
76
|
}
|
|
82
|
-
}
|
|
83
77
|
|
|
84
78
|
const protobufFilterablePreferenceToLex = (
|
|
85
79
|
p?: DeepPartial<FilterableNotificationPreference>,
|
|
@@ -104,7 +98,9 @@ export const protobufToLex = (
|
|
|
104
98
|
res: DeepPartial<NotificationPreferences>,
|
|
105
99
|
): app.bsky.notification.defs.Preferences => {
|
|
106
100
|
return ensurePreferences({
|
|
107
|
-
|
|
101
|
+
// NOTE: See the deprecation notice on the lexicon. This field returns a static default value and shouldn't be used.
|
|
102
|
+
// Use the chat.bsky.notification.defs#preferences type instead.
|
|
103
|
+
chat: DEFAULT_CHAT_PREFERENCE,
|
|
108
104
|
follow: protobufFilterablePreferenceToLex(res.follow),
|
|
109
105
|
like: protobufFilterablePreferenceToLex(res.like),
|
|
110
106
|
likeViaRepost: protobufFilterablePreferenceToLex(res.likeViaRepost),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Agent, Dispatcher, Pool,
|
|
1
|
+
import { Agent, Dispatcher, Pool, interceptors } from 'undici'
|
|
2
2
|
import { isUnicastIp, unicastLookup } from '@atproto-labs/fetch-node'
|
|
3
3
|
import { ServerConfig } from '../config.js'
|
|
4
4
|
import { RETRYABLE_HTTP_STATUS_CODES } from '../util/retry.js'
|
|
@@ -27,11 +27,15 @@ export function createBlobDispatcher(cfg: ServerConfig): Dispatcher {
|
|
|
27
27
|
},
|
|
28
28
|
})
|
|
29
29
|
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
return baseDispatcher.compose(
|
|
31
|
+
interceptors.redirect({
|
|
32
|
+
maxRedirections: 10,
|
|
33
|
+
throwOnMaxRedirect: true,
|
|
34
|
+
}),
|
|
35
|
+
interceptors.retry({
|
|
36
|
+
statusCodes: [...RETRYABLE_HTTP_STATUS_CODES],
|
|
37
|
+
methods: ['GET', 'HEAD'],
|
|
38
|
+
maxRetries: cfg.proxyMaxRetries,
|
|
39
|
+
}),
|
|
40
|
+
)
|
|
37
41
|
}
|
package/src/api/blob-resolver.ts
CHANGED
package/src/api/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ import getRepostedBy from './app/bsky/feed/getRepostedBy.js'
|
|
|
39
39
|
import getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds.js'
|
|
40
40
|
import getTimeline from './app/bsky/feed/getTimeline.js'
|
|
41
41
|
import searchPosts from './app/bsky/feed/searchPosts.js'
|
|
42
|
+
import searchPostsV2 from './app/bsky/feed/searchPostsV2.js'
|
|
42
43
|
import getActorStarterPacks from './app/bsky/graph/getActorStarterPacks.js'
|
|
43
44
|
import getBlocks from './app/bsky/graph/getBlocks.js'
|
|
44
45
|
import getFollowers from './app/bsky/graph/getFollowers.js'
|
|
@@ -142,6 +143,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
|
142
143
|
getPostThreadV2(server, ctx)
|
|
143
144
|
getPosts(server, ctx)
|
|
144
145
|
searchPosts(server, ctx)
|
|
146
|
+
searchPostsV2(server, ctx)
|
|
145
147
|
getActorLikes(server, ctx)
|
|
146
148
|
getProfile(server, ctx)
|
|
147
149
|
getProfiles(server, ctx)
|
|
@@ -4,6 +4,8 @@ import http from 'node:http'
|
|
|
4
4
|
import { ConnectRouter } from '@connectrpc/connect'
|
|
5
5
|
import { expressConnectMiddleware } from '@connectrpc/connect-express'
|
|
6
6
|
import express from 'express'
|
|
7
|
+
// eslint-disable-next-line import/default
|
|
8
|
+
import httpTerminator from 'http-terminator'
|
|
7
9
|
import { TID } from '@atproto/common'
|
|
8
10
|
import { lexParse } from '@atproto/lex'
|
|
9
11
|
import { AtUri } from '@atproto/syntax'
|
|
@@ -20,7 +22,11 @@ import { Database } from '../server/db/index.js'
|
|
|
20
22
|
import { countAll, excluded } from '../server/db/util.js'
|
|
21
23
|
|
|
22
24
|
export class MockBsync {
|
|
23
|
-
|
|
25
|
+
private terminator: httpTerminator.HttpTerminator
|
|
26
|
+
|
|
27
|
+
constructor(public server: http.Server) {
|
|
28
|
+
this.terminator = httpTerminator.createHttpTerminator({ server })
|
|
29
|
+
}
|
|
24
30
|
|
|
25
31
|
static async create(db: Database, port: number) {
|
|
26
32
|
const app = express()
|
|
@@ -32,15 +38,11 @@ export class MockBsync {
|
|
|
32
38
|
}
|
|
33
39
|
|
|
34
40
|
async destroy() {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
resolve()
|
|
41
|
-
}
|
|
42
|
-
})
|
|
43
|
-
})
|
|
41
|
+
await this.terminator.terminate()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async [Symbol.asyncDispose]() {
|
|
45
|
+
await this.destroy()
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
48
|
|
|
@@ -1,35 +1,66 @@
|
|
|
1
1
|
import PQueue from 'p-queue'
|
|
2
2
|
import { dbLogger } from '../../logger.js'
|
|
3
|
-
import { Database } from './db/index.js'
|
|
4
3
|
|
|
5
4
|
// A simple queue for in-process, out-of-band/backgrounded work
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
queue: InstanceType<typeof PQueue> = new PQueue()
|
|
9
|
-
destroyed = false
|
|
10
|
-
constructor(public db: Database) {}
|
|
6
|
+
type Task<TContext> = (ctx: TContext, signal: AbortSignal) => Promise<void>
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
export type BackgroundQueueOptions = NonNullable<
|
|
9
|
+
ConstructorParameters<typeof PQueue>[0]
|
|
10
|
+
> & {
|
|
11
|
+
concurrency: number
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// @NOTE Keep this in sync with the BackgroundQueue in
|
|
15
|
+
// - packages/bsky/src/data-plane/server/background.ts
|
|
16
|
+
// - packages/ozone/src/background.ts
|
|
17
|
+
// - packages/pds/src/background.ts
|
|
18
|
+
export class BackgroundQueue<TContext = unknown> {
|
|
19
|
+
private abortController = new AbortController()
|
|
20
|
+
private queue: PQueue
|
|
21
|
+
|
|
22
|
+
public get signal(): AbortSignal {
|
|
23
|
+
return this.abortController.signal
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public get destroyed() {
|
|
27
|
+
return this.signal.aborted
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
constructor(
|
|
31
|
+
private readonly context: TContext,
|
|
32
|
+
options?: BackgroundQueueOptions,
|
|
33
|
+
) {
|
|
34
|
+
this.queue = new PQueue(options)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
add(task: Task<TContext>) {
|
|
38
|
+
if (this.destroyed) return
|
|
39
|
+
|
|
40
|
+
this.queue.add<void>(async () => {
|
|
41
|
+
try {
|
|
42
|
+
// The task will receive a signal allowing it to abort if the
|
|
43
|
+
// backgroundQueue is destroyed.
|
|
44
|
+
await task(this.context, this.signal)
|
|
45
|
+
} catch (err) {
|
|
19
46
|
dbLogger.error({ err }, 'background queue task failed')
|
|
20
|
-
}
|
|
47
|
+
}
|
|
48
|
+
})
|
|
21
49
|
}
|
|
22
50
|
|
|
23
51
|
async processAll() {
|
|
24
|
-
|
|
52
|
+
const { queue } = this
|
|
53
|
+
while (queue.size || queue.pending) await queue.onIdle()
|
|
25
54
|
}
|
|
26
55
|
|
|
27
56
|
// On destroy we stop accepting new tasks, but complete all pending/in-progress tasks.
|
|
28
57
|
// The application calls this only once http connections have drained (tasks no longer being added).
|
|
29
58
|
async destroy() {
|
|
30
|
-
this.destroyed
|
|
31
|
-
|
|
59
|
+
if (this.destroyed) {
|
|
60
|
+
dbLogger.warn('BackgroundQueue.destroy() called multiple times')
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
this.abortController.abort()
|
|
64
|
+
return this.processAll()
|
|
32
65
|
}
|
|
33
66
|
}
|
|
34
|
-
|
|
35
|
-
type Task = (db: Database) => Promise<void>
|
|
@@ -2,6 +2,8 @@ import events from 'node:events'
|
|
|
2
2
|
import http from 'node:http'
|
|
3
3
|
import { expressConnectMiddleware } from '@connectrpc/connect-express'
|
|
4
4
|
import express from 'express'
|
|
5
|
+
// eslint-disable-next-line import/default
|
|
6
|
+
import httpTerminator from 'http-terminator'
|
|
5
7
|
import { IdResolver, MemoryCache } from '@atproto/identity'
|
|
6
8
|
import { Database, DatabaseSchema } from './db/index.js'
|
|
7
9
|
import createRoutes from './routes/index.js'
|
|
@@ -11,10 +13,14 @@ export type { DatabaseSchema }
|
|
|
11
13
|
export { RepoSubscription } from './subscription.js'
|
|
12
14
|
|
|
13
15
|
export class DataPlaneServer {
|
|
16
|
+
private terminator: httpTerminator.HttpTerminator
|
|
17
|
+
|
|
14
18
|
constructor(
|
|
15
19
|
public server: http.Server,
|
|
16
20
|
public idResolver: IdResolver,
|
|
17
|
-
) {
|
|
21
|
+
) {
|
|
22
|
+
this.terminator = httpTerminator.createHttpTerminator({ server })
|
|
23
|
+
}
|
|
18
24
|
|
|
19
25
|
static async create(db: Database, port: number, plcUrl?: string) {
|
|
20
26
|
const app = express()
|
|
@@ -28,14 +34,10 @@ export class DataPlaneServer {
|
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
async destroy() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
resolve()
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
|
-
})
|
|
37
|
+
await this.terminator.terminate()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async [Symbol.asyncDispose]() {
|
|
41
|
+
await this.destroy()
|
|
40
42
|
}
|
|
41
43
|
}
|
|
@@ -62,7 +62,7 @@ export class IndexingService {
|
|
|
62
62
|
constructor(
|
|
63
63
|
public db: Database,
|
|
64
64
|
public idResolver: IdResolver,
|
|
65
|
-
public background: BackgroundQueue
|
|
65
|
+
public background: BackgroundQueue<Database>,
|
|
66
66
|
) {
|
|
67
67
|
this.records = {
|
|
68
68
|
post: Post.makePlugin(this.db, this.background),
|
|
@@ -67,7 +67,10 @@ const notifsForDelete = () => {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export type PluginType = ReturnType<typeof makePlugin>
|
|
70
|
-
export const makePlugin = (
|
|
70
|
+
export const makePlugin = (
|
|
71
|
+
db: Database,
|
|
72
|
+
background: BackgroundQueue<Database>,
|
|
73
|
+
) => {
|
|
71
74
|
return new RecordProcessor(db, background, {
|
|
72
75
|
schema: app.bsky.graph.block.main,
|
|
73
76
|
insertFn,
|