@atproto/pds 0.4.19 → 0.4.21
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 +13 -0
- package/dist/api/app/bsky/actor/index.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/index.js +0 -6
- package/dist/api/app/bsky/actor/index.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeed.js +1 -3
- package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/index.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/index.js +0 -20
- package/dist/api/app/bsky/feed/index.js.map +1 -1
- package/dist/api/app/bsky/index.d.ts.map +1 -1
- package/dist/api/app/bsky/index.js +0 -6
- package/dist/api/app/bsky/index.js.map +1 -1
- package/dist/api/app/bsky/notification/index.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/index.js +0 -6
- package/dist/api/app/bsky/notification/index.js.map +1 -1
- package/dist/api/com/atproto/index.d.ts.map +1 -1
- package/dist/api/com/atproto/index.js +0 -2
- package/dist/api/com/atproto/index.js.map +1 -1
- package/dist/api/com/atproto/repo/getRecord.js +1 -1
- package/dist/api/com/atproto/repo/getRecord.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -2
- package/dist/api/index.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +30 -0
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -45
- package/dist/index.js.map +1 -1
- package/dist/pipethrough.d.ts +12 -22
- package/dist/pipethrough.d.ts.map +1 -1
- package/dist/pipethrough.js +159 -81
- package/dist/pipethrough.js.map +1 -1
- package/package.json +8 -8
- package/src/api/app/bsky/actor/index.ts +0 -6
- package/src/api/app/bsky/feed/getFeed.ts +1 -3
- package/src/api/app/bsky/feed/index.ts +0 -20
- package/src/api/app/bsky/index.ts +0 -6
- package/src/api/app/bsky/notification/index.ts +0 -7
- package/src/api/com/atproto/index.ts +0 -2
- package/src/api/com/atproto/repo/getRecord.ts +1 -1
- package/src/api/index.ts +0 -2
- package/src/context.ts +34 -1
- package/src/index.ts +27 -51
- package/src/pipethrough.ts +184 -114
- package/dist/api/app/bsky/actor/getSuggestions.d.ts +0 -4
- package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +0 -1
- package/dist/api/app/bsky/actor/getSuggestions.js +0 -19
- package/dist/api/app/bsky/actor/getSuggestions.js.map +0 -1
- package/dist/api/app/bsky/actor/searchActors.d.ts +0 -4
- package/dist/api/app/bsky/actor/searchActors.d.ts.map +0 -1
- package/dist/api/app/bsky/actor/searchActors.js +0 -17
- package/dist/api/app/bsky/actor/searchActors.js.map +0 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts +0 -4
- package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +0 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +0 -17
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +0 -1
- package/dist/api/app/bsky/feed/getActorFeeds.d.ts +0 -4
- package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getActorFeeds.js +0 -17
- package/dist/api/app/bsky/feed/getActorFeeds.js.map +0 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.d.ts +0 -4
- package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.js +0 -17
- package/dist/api/app/bsky/feed/getFeedGenerator.js.map +0 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.d.ts +0 -4
- package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.js +0 -17
- package/dist/api/app/bsky/feed/getFeedGenerators.js.map +0 -1
- package/dist/api/app/bsky/feed/getLikes.d.ts +0 -4
- package/dist/api/app/bsky/feed/getLikes.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getLikes.js +0 -17
- package/dist/api/app/bsky/feed/getLikes.js.map +0 -1
- package/dist/api/app/bsky/feed/getListFeed.d.ts +0 -4
- package/dist/api/app/bsky/feed/getListFeed.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getListFeed.js +0 -17
- package/dist/api/app/bsky/feed/getListFeed.js.map +0 -1
- package/dist/api/app/bsky/feed/getPosts.d.ts +0 -4
- package/dist/api/app/bsky/feed/getPosts.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getPosts.js +0 -17
- package/dist/api/app/bsky/feed/getPosts.js.map +0 -1
- package/dist/api/app/bsky/feed/getRepostedBy.d.ts +0 -4
- package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getRepostedBy.js +0 -17
- package/dist/api/app/bsky/feed/getRepostedBy.js.map +0 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts +0 -4
- package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js +0 -17
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +0 -1
- package/dist/api/app/bsky/feed/searchPosts.d.ts +0 -4
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/searchPosts.js +0 -17
- package/dist/api/app/bsky/feed/searchPosts.js.map +0 -1
- package/dist/api/app/bsky/feed/sendInteractions.d.ts +0 -4
- package/dist/api/app/bsky/feed/sendInteractions.d.ts.map +0 -1
- package/dist/api/app/bsky/feed/sendInteractions.js +0 -14
- package/dist/api/app/bsky/feed/sendInteractions.js.map +0 -1
- package/dist/api/app/bsky/graph/getBlocks.d.ts +0 -4
- package/dist/api/app/bsky/graph/getBlocks.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getBlocks.js +0 -17
- package/dist/api/app/bsky/graph/getBlocks.js.map +0 -1
- package/dist/api/app/bsky/graph/getFollowers.d.ts +0 -4
- package/dist/api/app/bsky/graph/getFollowers.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getFollowers.js +0 -17
- package/dist/api/app/bsky/graph/getFollowers.js.map +0 -1
- package/dist/api/app/bsky/graph/getFollows.d.ts +0 -4
- package/dist/api/app/bsky/graph/getFollows.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getFollows.js +0 -17
- package/dist/api/app/bsky/graph/getFollows.js.map +0 -1
- package/dist/api/app/bsky/graph/getList.d.ts +0 -4
- package/dist/api/app/bsky/graph/getList.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getList.js +0 -17
- package/dist/api/app/bsky/graph/getList.js.map +0 -1
- package/dist/api/app/bsky/graph/getListBlocks.d.ts +0 -4
- package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getListBlocks.js +0 -17
- package/dist/api/app/bsky/graph/getListBlocks.js.map +0 -1
- package/dist/api/app/bsky/graph/getListMutes.d.ts +0 -4
- package/dist/api/app/bsky/graph/getListMutes.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getListMutes.js +0 -17
- package/dist/api/app/bsky/graph/getListMutes.js.map +0 -1
- package/dist/api/app/bsky/graph/getLists.d.ts +0 -4
- package/dist/api/app/bsky/graph/getLists.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getLists.js +0 -17
- package/dist/api/app/bsky/graph/getLists.js.map +0 -1
- package/dist/api/app/bsky/graph/getMutes.d.ts +0 -4
- package/dist/api/app/bsky/graph/getMutes.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getMutes.js +0 -17
- package/dist/api/app/bsky/graph/getMutes.js.map +0 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts +0 -4
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js +0 -17
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +0 -1
- package/dist/api/app/bsky/graph/index.d.ts +0 -4
- package/dist/api/app/bsky/graph/index.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/index.js +0 -35
- package/dist/api/app/bsky/graph/index.js.map +0 -1
- package/dist/api/app/bsky/graph/muteActor.d.ts +0 -4
- package/dist/api/app/bsky/graph/muteActor.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/muteActor.js +0 -14
- package/dist/api/app/bsky/graph/muteActor.js.map +0 -1
- package/dist/api/app/bsky/graph/muteActorList.d.ts +0 -4
- package/dist/api/app/bsky/graph/muteActorList.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/muteActorList.js +0 -14
- package/dist/api/app/bsky/graph/muteActorList.js.map +0 -1
- package/dist/api/app/bsky/graph/unmuteActor.d.ts +0 -4
- package/dist/api/app/bsky/graph/unmuteActor.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/unmuteActor.js +0 -14
- package/dist/api/app/bsky/graph/unmuteActor.js.map +0 -1
- package/dist/api/app/bsky/graph/unmuteActorList.d.ts +0 -4
- package/dist/api/app/bsky/graph/unmuteActorList.d.ts.map +0 -1
- package/dist/api/app/bsky/graph/unmuteActorList.js +0 -14
- package/dist/api/app/bsky/graph/unmuteActorList.js.map +0 -1
- package/dist/api/app/bsky/labeler/getServices.d.ts +0 -4
- package/dist/api/app/bsky/labeler/getServices.d.ts.map +0 -1
- package/dist/api/app/bsky/labeler/getServices.js +0 -14
- package/dist/api/app/bsky/labeler/getServices.js.map +0 -1
- package/dist/api/app/bsky/labeler/index.d.ts +0 -4
- package/dist/api/app/bsky/labeler/index.d.ts.map +0 -1
- package/dist/api/app/bsky/labeler/index.js +0 -11
- package/dist/api/app/bsky/labeler/index.js.map +0 -1
- package/dist/api/app/bsky/notification/getUnreadCount.d.ts +0 -4
- package/dist/api/app/bsky/notification/getUnreadCount.d.ts.map +0 -1
- package/dist/api/app/bsky/notification/getUnreadCount.js +0 -17
- package/dist/api/app/bsky/notification/getUnreadCount.js.map +0 -1
- package/dist/api/app/bsky/notification/listNotifications.d.ts +0 -4
- package/dist/api/app/bsky/notification/listNotifications.d.ts.map +0 -1
- package/dist/api/app/bsky/notification/listNotifications.js +0 -17
- package/dist/api/app/bsky/notification/listNotifications.js.map +0 -1
- package/dist/api/app/bsky/notification/updateSeen.d.ts +0 -4
- package/dist/api/app/bsky/notification/updateSeen.d.ts.map +0 -1
- package/dist/api/app/bsky/notification/updateSeen.js +0 -14
- package/dist/api/app/bsky/notification/updateSeen.js.map +0 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts +0 -4
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +0 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +0 -18
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +0 -1
- package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts +0 -4
- package/dist/api/app/bsky/unspecced/getTaggedSuggestions.d.ts.map +0 -1
- package/dist/api/app/bsky/unspecced/getTaggedSuggestions.js +0 -18
- package/dist/api/app/bsky/unspecced/getTaggedSuggestions.js.map +0 -1
- package/dist/api/app/bsky/unspecced/index.d.ts +0 -4
- package/dist/api/app/bsky/unspecced/index.d.ts.map +0 -1
- package/dist/api/app/bsky/unspecced/index.js +0 -14
- package/dist/api/app/bsky/unspecced/index.js.map +0 -1
- package/dist/api/com/atproto/moderation/createReport.d.ts +0 -4
- package/dist/api/com/atproto/moderation/createReport.d.ts.map +0 -1
- package/dist/api/com/atproto/moderation/createReport.js +0 -14
- package/dist/api/com/atproto/moderation/createReport.js.map +0 -1
- package/dist/api/com/atproto/moderation/index.d.ts +0 -4
- package/dist/api/com/atproto/moderation/index.d.ts.map +0 -1
- package/dist/api/com/atproto/moderation/index.js +0 -11
- package/dist/api/com/atproto/moderation/index.js.map +0 -1
- package/dist/api/tools/ozone/communication/createTemplate.d.ts +0 -4
- package/dist/api/tools/ozone/communication/createTemplate.d.ts.map +0 -1
- package/dist/api/tools/ozone/communication/createTemplate.js +0 -14
- package/dist/api/tools/ozone/communication/createTemplate.js.map +0 -1
- package/dist/api/tools/ozone/communication/deleteTemplate.d.ts +0 -4
- package/dist/api/tools/ozone/communication/deleteTemplate.d.ts.map +0 -1
- package/dist/api/tools/ozone/communication/deleteTemplate.js +0 -14
- package/dist/api/tools/ozone/communication/deleteTemplate.js.map +0 -1
- package/dist/api/tools/ozone/communication/index.d.ts +0 -4
- package/dist/api/tools/ozone/communication/index.d.ts.map +0 -1
- package/dist/api/tools/ozone/communication/index.js +0 -17
- package/dist/api/tools/ozone/communication/index.js.map +0 -1
- package/dist/api/tools/ozone/communication/listTemplates.d.ts +0 -4
- package/dist/api/tools/ozone/communication/listTemplates.d.ts.map +0 -1
- package/dist/api/tools/ozone/communication/listTemplates.js +0 -14
- package/dist/api/tools/ozone/communication/listTemplates.js.map +0 -1
- package/dist/api/tools/ozone/communication/updateTemplate.d.ts +0 -4
- package/dist/api/tools/ozone/communication/updateTemplate.d.ts.map +0 -1
- package/dist/api/tools/ozone/communication/updateTemplate.js +0 -14
- package/dist/api/tools/ozone/communication/updateTemplate.js.map +0 -1
- package/dist/api/tools/ozone/index.d.ts +0 -4
- package/dist/api/tools/ozone/index.d.ts.map +0 -1
- package/dist/api/tools/ozone/index.js +0 -13
- package/dist/api/tools/ozone/index.js.map +0 -1
- package/dist/api/tools/ozone/moderation/emitEvent.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/emitEvent.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/emitEvent.js +0 -14
- package/dist/api/tools/ozone/moderation/emitEvent.js.map +0 -1
- package/dist/api/tools/ozone/moderation/getEvent.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/getEvent.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/getEvent.js +0 -14
- package/dist/api/tools/ozone/moderation/getEvent.js.map +0 -1
- package/dist/api/tools/ozone/moderation/getRecord.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/getRecord.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/getRecord.js +0 -14
- package/dist/api/tools/ozone/moderation/getRecord.js.map +0 -1
- package/dist/api/tools/ozone/moderation/getRepo.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/getRepo.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/getRepo.js +0 -14
- package/dist/api/tools/ozone/moderation/getRepo.js.map +0 -1
- package/dist/api/tools/ozone/moderation/index.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/index.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/index.js +0 -23
- package/dist/api/tools/ozone/moderation/index.js.map +0 -1
- package/dist/api/tools/ozone/moderation/queryEvents.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/queryEvents.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/queryEvents.js +0 -14
- package/dist/api/tools/ozone/moderation/queryEvents.js.map +0 -1
- package/dist/api/tools/ozone/moderation/queryStatuses.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/queryStatuses.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/queryStatuses.js +0 -14
- package/dist/api/tools/ozone/moderation/queryStatuses.js.map +0 -1
- package/dist/api/tools/ozone/moderation/searchRepos.d.ts +0 -4
- package/dist/api/tools/ozone/moderation/searchRepos.d.ts.map +0 -1
- package/dist/api/tools/ozone/moderation/searchRepos.js +0 -14
- package/dist/api/tools/ozone/moderation/searchRepos.js.map +0 -1
- package/src/api/app/bsky/actor/getSuggestions.ts +0 -17
- package/src/api/app/bsky/actor/searchActors.ts +0 -15
- package/src/api/app/bsky/actor/searchActorsTypeahead.ts +0 -15
- package/src/api/app/bsky/feed/getActorFeeds.ts +0 -15
- package/src/api/app/bsky/feed/getFeedGenerator.ts +0 -15
- package/src/api/app/bsky/feed/getFeedGenerators.ts +0 -15
- package/src/api/app/bsky/feed/getLikes.ts +0 -15
- package/src/api/app/bsky/feed/getListFeed.ts +0 -15
- package/src/api/app/bsky/feed/getPosts.ts +0 -15
- package/src/api/app/bsky/feed/getRepostedBy.ts +0 -15
- package/src/api/app/bsky/feed/getSuggestedFeeds.ts +0 -15
- package/src/api/app/bsky/feed/searchPosts.ts +0 -15
- package/src/api/app/bsky/feed/sendInteractions.ts +0 -13
- package/src/api/app/bsky/graph/getBlocks.ts +0 -15
- package/src/api/app/bsky/graph/getFollowers.ts +0 -15
- package/src/api/app/bsky/graph/getFollows.ts +0 -15
- package/src/api/app/bsky/graph/getList.ts +0 -15
- package/src/api/app/bsky/graph/getListBlocks.ts +0 -15
- package/src/api/app/bsky/graph/getListMutes.ts +0 -15
- package/src/api/app/bsky/graph/getLists.ts +0 -15
- package/src/api/app/bsky/graph/getMutes.ts +0 -15
- package/src/api/app/bsky/graph/getSuggestedFollowsByActor.ts +0 -15
- package/src/api/app/bsky/graph/index.ts +0 -31
- package/src/api/app/bsky/graph/muteActor.ts +0 -13
- package/src/api/app/bsky/graph/muteActorList.ts +0 -13
- package/src/api/app/bsky/graph/unmuteActor.ts +0 -13
- package/src/api/app/bsky/graph/unmuteActorList.ts +0 -13
- package/src/api/app/bsky/labeler/getServices.ts +0 -13
- package/src/api/app/bsky/labeler/index.ts +0 -7
- package/src/api/app/bsky/notification/getUnreadCount.ts +0 -15
- package/src/api/app/bsky/notification/listNotifications.ts +0 -15
- package/src/api/app/bsky/notification/updateSeen.ts +0 -13
- package/src/api/app/bsky/unspecced/getPopularFeedGenerators.ts +0 -16
- package/src/api/app/bsky/unspecced/getTaggedSuggestions.ts +0 -16
- package/src/api/app/bsky/unspecced/index.ts +0 -10
- package/src/api/com/atproto/moderation/createReport.ts +0 -13
- package/src/api/com/atproto/moderation/index.ts +0 -7
- package/src/api/tools/ozone/communication/createTemplate.ts +0 -13
- package/src/api/tools/ozone/communication/deleteTemplate.ts +0 -13
- package/src/api/tools/ozone/communication/index.ts +0 -13
- package/src/api/tools/ozone/communication/listTemplates.ts +0 -13
- package/src/api/tools/ozone/communication/updateTemplate.ts +0 -13
- package/src/api/tools/ozone/index.ts +0 -9
- package/src/api/tools/ozone/moderation/emitEvent.ts +0 -13
- package/src/api/tools/ozone/moderation/getEvent.ts +0 -13
- package/src/api/tools/ozone/moderation/getRecord.ts +0 -13
- package/src/api/tools/ozone/moderation/getRepo.ts +0 -13
- package/src/api/tools/ozone/moderation/index.ts +0 -19
- package/src/api/tools/ozone/moderation/queryEvents.ts +0 -13
- package/src/api/tools/ozone/moderation/queryStatuses.ts +0 -13
- package/src/api/tools/ozone/moderation/searchRepos.ts +0 -13
package/dist/pipethrough.js
CHANGED
|
@@ -26,82 +26,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.parseRes = exports.
|
|
29
|
+
exports.parseRes = exports.parseProxyRes = exports.pipeProxyRes = exports.makeRequest = exports.parseProxyHeader = exports.formatHeaders = exports.formatUrlAndAud = exports.pipethrough = exports.proxyHandler = void 0;
|
|
30
30
|
const ui8 = __importStar(require("uint8arrays"));
|
|
31
31
|
const node_net_1 = __importDefault(require("node:net"));
|
|
32
|
+
const node_stream_1 = __importDefault(require("node:stream"));
|
|
32
33
|
const lexicon_1 = require("@atproto/lexicon");
|
|
33
34
|
const xrpc_server_1 = require("@atproto/xrpc-server");
|
|
34
35
|
const xrpc_1 = require("@atproto/xrpc");
|
|
35
36
|
const lexicons_1 = require("./lexicon/lexicons");
|
|
36
37
|
const logger_1 = require("./logger");
|
|
37
38
|
const common_1 = require("@atproto/common");
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
case lexicons_1.ids.ToolsOzoneModerationGetRecord:
|
|
48
|
-
case lexicons_1.ids.ToolsOzoneModerationGetRepo:
|
|
49
|
-
case lexicons_1.ids.ToolsOzoneModerationQueryEvents:
|
|
50
|
-
case lexicons_1.ids.ToolsOzoneModerationQueryStatuses:
|
|
51
|
-
case lexicons_1.ids.ToolsOzoneModerationSearchRepos:
|
|
52
|
-
return ctx.cfg.modService;
|
|
53
|
-
case lexicons_1.ids.ComAtprotoModerationCreateReport:
|
|
54
|
-
return ctx.cfg.reportService;
|
|
55
|
-
default:
|
|
56
|
-
return ctx.cfg.bskyAppView;
|
|
39
|
+
const proxyHandler = (ctx) => async (req, res, next) => {
|
|
40
|
+
try {
|
|
41
|
+
const { url, aud } = await (0, exports.formatUrlAndAud)(ctx, req);
|
|
42
|
+
const auth = await ctx.authVerifier.access({ req });
|
|
43
|
+
const headers = await (0, exports.formatHeaders)(ctx, req, aud, auth.credentials.did);
|
|
44
|
+
const body = node_stream_1.default.Readable.toWeb(req);
|
|
45
|
+
const reqInit = formatReqInit(req, headers, body);
|
|
46
|
+
const proxyRes = await (0, exports.makeRequest)(url, reqInit);
|
|
47
|
+
await (0, exports.pipeProxyRes)(proxyRes, res);
|
|
57
48
|
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return next(err);
|
|
51
|
+
}
|
|
52
|
+
return next();
|
|
58
53
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
exports.proxyHandler = proxyHandler;
|
|
55
|
+
const pipethrough = async (ctx, req, requester, audOverride) => {
|
|
56
|
+
const { url, aud } = await (0, exports.formatUrlAndAud)(ctx, req, audOverride);
|
|
57
|
+
const headers = await (0, exports.formatHeaders)(ctx, req, aud, requester);
|
|
58
|
+
const reqInit = formatReqInit(req, headers);
|
|
59
|
+
const res = await (0, exports.makeRequest)(url, reqInit);
|
|
60
|
+
return (0, exports.parseProxyRes)(res);
|
|
65
61
|
};
|
|
66
62
|
exports.pipethrough = pipethrough;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const reqInit = {
|
|
70
|
-
method: 'post',
|
|
71
|
-
headers,
|
|
72
|
-
body: new TextEncoder().encode((0, lexicon_1.stringifyLex)(body)),
|
|
73
|
-
duplex: 'half',
|
|
74
|
-
};
|
|
75
|
-
return (0, exports.doProxy)(url, reqInit);
|
|
76
|
-
};
|
|
77
|
-
exports.pipethroughProcedure = pipethroughProcedure;
|
|
78
|
-
const parseProxyHeader = async (ctx, req) => {
|
|
79
|
-
const proxyTo = req.header('atproto-proxy');
|
|
80
|
-
if (!proxyTo)
|
|
81
|
-
return;
|
|
82
|
-
const [did, serviceId] = proxyTo.split('#');
|
|
83
|
-
if (!serviceId) {
|
|
84
|
-
throw new xrpc_server_1.InvalidRequestError('no service id specified');
|
|
85
|
-
}
|
|
86
|
-
const didDoc = await ctx.idResolver.did.resolve(did);
|
|
87
|
-
if (!didDoc) {
|
|
88
|
-
throw new xrpc_server_1.InvalidRequestError('could not resolve proxy did');
|
|
89
|
-
}
|
|
90
|
-
const serviceUrl = (0, common_1.getServiceEndpoint)(didDoc, { id: `#${serviceId}` });
|
|
91
|
-
if (!serviceUrl) {
|
|
92
|
-
throw new xrpc_server_1.InvalidRequestError('could not resolve proxy did service url');
|
|
93
|
-
}
|
|
94
|
-
return { did, serviceUrl };
|
|
95
|
-
};
|
|
96
|
-
exports.parseProxyHeader = parseProxyHeader;
|
|
63
|
+
// Request setup/formatting
|
|
64
|
+
// -------------------
|
|
97
65
|
const REQ_HEADERS_TO_FORWARD = [
|
|
98
66
|
'accept-language',
|
|
99
67
|
'content-type',
|
|
100
68
|
'atproto-accept-labelers',
|
|
69
|
+
'x-bsky-topics',
|
|
101
70
|
];
|
|
102
|
-
const
|
|
71
|
+
const formatUrlAndAud = async (ctx, req, audOverride) => {
|
|
103
72
|
const proxyTo = await (0, exports.parseProxyHeader)(ctx, req);
|
|
104
|
-
const defaultProxy = defaultService(ctx, req
|
|
73
|
+
const defaultProxy = defaultService(ctx, req);
|
|
105
74
|
const serviceUrl = proxyTo?.serviceUrl ?? defaultProxy?.url;
|
|
106
75
|
const aud = audOverride ?? proxyTo?.did ?? defaultProxy?.did;
|
|
107
76
|
if (!serviceUrl || !aud) {
|
|
@@ -111,52 +80,168 @@ const createUrlAndHeaders = async (ctx, req, requester, audOverride, options) =>
|
|
|
111
80
|
if (!ctx.cfg.service.devMode && !isSafeUrl(url)) {
|
|
112
81
|
throw new xrpc_server_1.InvalidRequestError(`Invalid service url: ${url.toString()}`);
|
|
113
82
|
}
|
|
83
|
+
return { url, aud };
|
|
84
|
+
};
|
|
85
|
+
exports.formatUrlAndAud = formatUrlAndAud;
|
|
86
|
+
const formatHeaders = async (ctx, req, aud, requester) => {
|
|
114
87
|
const headers = requester
|
|
115
88
|
? (await ctx.serviceAuthHeaders(requester, aud)).headers
|
|
116
89
|
: {};
|
|
117
|
-
const allowedHeaders = REQ_HEADERS_TO_FORWARD.concat(options?.reqHeadersToForward ?? []);
|
|
118
90
|
// forward select headers to upstream services
|
|
119
|
-
for (const header of
|
|
91
|
+
for (const header of REQ_HEADERS_TO_FORWARD) {
|
|
120
92
|
const val = req.headers[header];
|
|
121
93
|
if (val) {
|
|
122
94
|
headers[header] = val;
|
|
123
95
|
}
|
|
124
96
|
}
|
|
125
|
-
return
|
|
97
|
+
return headers;
|
|
98
|
+
};
|
|
99
|
+
exports.formatHeaders = formatHeaders;
|
|
100
|
+
const formatReqInit = (req, headers, body) => {
|
|
101
|
+
if (req.method === 'GET') {
|
|
102
|
+
return {
|
|
103
|
+
method: 'get',
|
|
104
|
+
headers,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
else if (req.method === 'HEAD') {
|
|
108
|
+
return {
|
|
109
|
+
method: 'head',
|
|
110
|
+
headers,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
else if (req.method === 'POST') {
|
|
114
|
+
return {
|
|
115
|
+
method: 'post',
|
|
116
|
+
headers,
|
|
117
|
+
body,
|
|
118
|
+
duplex: 'half',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
throw new xrpc_server_1.InvalidRequestError('Method not found');
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const parseProxyHeader = async (ctx, req) => {
|
|
126
|
+
const proxyTo = req.header('atproto-proxy');
|
|
127
|
+
if (!proxyTo)
|
|
128
|
+
return;
|
|
129
|
+
const [did, serviceId] = proxyTo.split('#');
|
|
130
|
+
if (!serviceId) {
|
|
131
|
+
throw new xrpc_server_1.InvalidRequestError('no service id specified');
|
|
132
|
+
}
|
|
133
|
+
const didDoc = await ctx.idResolver.did.resolve(did);
|
|
134
|
+
if (!didDoc) {
|
|
135
|
+
throw new xrpc_server_1.InvalidRequestError('could not resolve proxy did');
|
|
136
|
+
}
|
|
137
|
+
const serviceUrl = (0, common_1.getServiceEndpoint)(didDoc, { id: `#${serviceId}` });
|
|
138
|
+
if (!serviceUrl) {
|
|
139
|
+
throw new xrpc_server_1.InvalidRequestError('could not resolve proxy did service url');
|
|
140
|
+
}
|
|
141
|
+
return { did, serviceUrl };
|
|
126
142
|
};
|
|
127
|
-
exports.
|
|
128
|
-
|
|
143
|
+
exports.parseProxyHeader = parseProxyHeader;
|
|
144
|
+
// Sending request
|
|
145
|
+
// -------------------
|
|
146
|
+
const makeRequest = async (url, reqInit) => {
|
|
129
147
|
let res;
|
|
130
|
-
let buffer;
|
|
131
148
|
try {
|
|
132
149
|
res = await fetch(url, reqInit);
|
|
133
|
-
buffer = await res.arrayBuffer();
|
|
134
150
|
}
|
|
135
151
|
catch (err) {
|
|
136
152
|
logger_1.httpLogger.warn({ err }, 'pipethrough network error');
|
|
137
153
|
throw new xrpc_1.XRPCError(xrpc_1.ResponseType.UpstreamFailure);
|
|
138
154
|
}
|
|
139
155
|
if (res.status !== xrpc_1.ResponseType.Success) {
|
|
140
|
-
const
|
|
156
|
+
const arrBuffer = await readArrayBufferRes(res);
|
|
157
|
+
const ui8Buffer = new Uint8Array(arrBuffer);
|
|
141
158
|
const errInfo = safeParseJson(ui8.toString(ui8Buffer, 'utf8'));
|
|
142
159
|
throw new xrpc_1.XRPCError(res.status, safeString(errInfo?.['error']), safeString(errInfo?.['message']), simpleHeaders(res.headers));
|
|
143
160
|
}
|
|
144
|
-
|
|
145
|
-
const resHeaders = makeResHeaders(res);
|
|
146
|
-
return { encoding, buffer, headers: resHeaders };
|
|
161
|
+
return res;
|
|
147
162
|
};
|
|
148
|
-
exports.
|
|
163
|
+
exports.makeRequest = makeRequest;
|
|
164
|
+
// Response parsing/forwarding
|
|
165
|
+
// -------------------
|
|
149
166
|
const RES_HEADERS_TO_FORWARD = [
|
|
150
|
-
'
|
|
167
|
+
'content-type',
|
|
151
168
|
'content-language',
|
|
169
|
+
'atproto-repo-rev',
|
|
152
170
|
'atproto-content-labelers',
|
|
153
171
|
];
|
|
154
|
-
const
|
|
155
|
-
const
|
|
172
|
+
const pipeProxyRes = async (upstreamRes, ownRes) => {
|
|
173
|
+
for (const headerName of RES_HEADERS_TO_FORWARD) {
|
|
174
|
+
const headerVal = upstreamRes.headers.get(headerName);
|
|
175
|
+
if (headerVal) {
|
|
176
|
+
ownRes.setHeader(headerName, headerVal);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (upstreamRes.body) {
|
|
180
|
+
const contentLength = upstreamRes.headers.get('content-length');
|
|
181
|
+
const contentEncoding = upstreamRes.headers.get('content-encoding');
|
|
182
|
+
if (contentLength && (!contentEncoding || contentEncoding === 'identity')) {
|
|
183
|
+
ownRes.setHeader('content-length', contentLength);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
ownRes.setHeader('transfer-encoding', 'chunked');
|
|
187
|
+
}
|
|
188
|
+
ownRes.status(200);
|
|
189
|
+
const resStream = node_stream_1.default.Readable.fromWeb(upstreamRes.body);
|
|
190
|
+
await node_stream_1.default.promises.pipeline(resStream, ownRes);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
ownRes.status(200).end();
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
exports.pipeProxyRes = pipeProxyRes;
|
|
197
|
+
const parseProxyRes = async (res) => {
|
|
198
|
+
const buffer = await readArrayBufferRes(res);
|
|
199
|
+
const encoding = res.headers.get('content-type') ?? 'application/json';
|
|
200
|
+
const resHeaders = RES_HEADERS_TO_FORWARD.reduce((acc, cur) => {
|
|
156
201
|
acc[cur] = res.headers.get(cur) ?? undefined;
|
|
157
202
|
return acc;
|
|
158
203
|
}, {});
|
|
159
|
-
return (0, common_1.noUndefinedVals)(
|
|
204
|
+
return { encoding, buffer, headers: (0, common_1.noUndefinedVals)(resHeaders) };
|
|
205
|
+
};
|
|
206
|
+
exports.parseProxyRes = parseProxyRes;
|
|
207
|
+
// Utils
|
|
208
|
+
// -------------------
|
|
209
|
+
const defaultService = (ctx, req) => {
|
|
210
|
+
const nsid = req.originalUrl.split('?')[0].replace('/xrpc/', '');
|
|
211
|
+
switch (nsid) {
|
|
212
|
+
case lexicons_1.ids.ToolsOzoneCommunicationCreateTemplate:
|
|
213
|
+
case lexicons_1.ids.ToolsOzoneCommunicationDeleteTemplate:
|
|
214
|
+
case lexicons_1.ids.ToolsOzoneCommunicationUpdateTemplate:
|
|
215
|
+
case lexicons_1.ids.ToolsOzoneCommunicationListTemplates:
|
|
216
|
+
case lexicons_1.ids.ToolsOzoneModerationEmitEvent:
|
|
217
|
+
case lexicons_1.ids.ToolsOzoneModerationGetEvent:
|
|
218
|
+
case lexicons_1.ids.ToolsOzoneModerationGetRecord:
|
|
219
|
+
case lexicons_1.ids.ToolsOzoneModerationGetRepo:
|
|
220
|
+
case lexicons_1.ids.ToolsOzoneModerationQueryEvents:
|
|
221
|
+
case lexicons_1.ids.ToolsOzoneModerationQueryStatuses:
|
|
222
|
+
case lexicons_1.ids.ToolsOzoneModerationSearchRepos:
|
|
223
|
+
return ctx.cfg.modService;
|
|
224
|
+
case lexicons_1.ids.ComAtprotoModerationCreateReport:
|
|
225
|
+
return ctx.cfg.reportService;
|
|
226
|
+
default:
|
|
227
|
+
return ctx.cfg.bskyAppView;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const parseRes = (nsid, res) => {
|
|
231
|
+
const buffer = new Uint8Array(res.buffer);
|
|
232
|
+
const json = safeParseJson(ui8.toString(buffer, 'utf8'));
|
|
233
|
+
const lex = json && (0, lexicon_1.jsonToLex)(json);
|
|
234
|
+
return lexicons_1.lexicons.assertValidXrpcOutput(nsid, lex);
|
|
235
|
+
};
|
|
236
|
+
exports.parseRes = parseRes;
|
|
237
|
+
const readArrayBufferRes = async (res) => {
|
|
238
|
+
try {
|
|
239
|
+
return await res.arrayBuffer();
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
logger_1.httpLogger.warn({ err }, 'pipethrough network error');
|
|
243
|
+
throw new xrpc_1.XRPCError(xrpc_1.ResponseType.UpstreamFailure);
|
|
244
|
+
}
|
|
160
245
|
};
|
|
161
246
|
const isSafeUrl = (url) => {
|
|
162
247
|
if (url.protocol !== 'https:')
|
|
@@ -167,13 +252,6 @@ const isSafeUrl = (url) => {
|
|
|
167
252
|
return false;
|
|
168
253
|
return true;
|
|
169
254
|
};
|
|
170
|
-
const parseRes = (nsid, res) => {
|
|
171
|
-
const buffer = new Uint8Array(res.buffer);
|
|
172
|
-
const json = safeParseJson(ui8.toString(buffer, 'utf8'));
|
|
173
|
-
const lex = json && (0, lexicon_1.jsonToLex)(json);
|
|
174
|
-
return lexicons_1.lexicons.assertValidXrpcOutput(nsid, lex);
|
|
175
|
-
};
|
|
176
|
-
exports.parseRes = parseRes;
|
|
177
255
|
const safeString = (str) => {
|
|
178
256
|
return typeof str === 'string' ? str : undefined;
|
|
179
257
|
};
|
package/dist/pipethrough.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipethrough.js","sourceRoot":"","sources":["../src/pipethrough.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iDAAkC;AAClC,wDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"pipethrough.js","sourceRoot":"","sources":["../src/pipethrough.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/pds",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.21",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Reference implementation of atproto Personal Data Server (PDS)",
|
|
6
6
|
"keywords": [
|
|
@@ -43,16 +43,16 @@
|
|
|
43
43
|
"typed-emitter": "^2.1.0",
|
|
44
44
|
"uint8arrays": "3.0.0",
|
|
45
45
|
"zod": "^3.21.4",
|
|
46
|
-
"@atproto/api": "^0.12.
|
|
46
|
+
"@atproto/api": "^0.12.9",
|
|
47
47
|
"@atproto/aws": "^0.2.0",
|
|
48
|
-
"@atproto/common": "^0.4.0",
|
|
49
|
-
"@atproto/crypto": "^0.4.0",
|
|
50
48
|
"@atproto/identity": "^0.4.0",
|
|
51
49
|
"@atproto/lexicon": "^0.4.0",
|
|
52
50
|
"@atproto/repo": "^0.4.0",
|
|
53
51
|
"@atproto/syntax": "^0.3.0",
|
|
54
52
|
"@atproto/xrpc": "^0.5.0",
|
|
55
|
-
"@atproto/xrpc-server": "^0.5.1"
|
|
53
|
+
"@atproto/xrpc-server": "^0.5.1",
|
|
54
|
+
"@atproto/common": "^0.4.0",
|
|
55
|
+
"@atproto/crypto": "^0.4.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@atproto/pds-entryway": "npm:@atproto/pds@0.3.0-entryway.3",
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
"jest": "^28.1.2",
|
|
71
71
|
"ts-node": "^10.8.2",
|
|
72
72
|
"ws": "^8.12.0",
|
|
73
|
-
"@atproto/api": "^0.12.
|
|
74
|
-
"@atproto/
|
|
75
|
-
"@atproto/
|
|
73
|
+
"@atproto/api": "^0.12.9",
|
|
74
|
+
"@atproto/lex-cli": "^0.4.0",
|
|
75
|
+
"@atproto/bsky": "^0.0.51"
|
|
76
76
|
},
|
|
77
77
|
"scripts": {
|
|
78
78
|
"codegen": "lex gen-server ./src/lexicon ../../lexicons/com/atproto/*/* ../../lexicons/app/bsky/*/* ../../lexicons/tools/ozone/*/*",
|
|
@@ -4,17 +4,11 @@ import AppContext from '../../../../context'
|
|
|
4
4
|
import getPreferences from './getPreferences'
|
|
5
5
|
import getProfile from './getProfile'
|
|
6
6
|
import getProfiles from './getProfiles'
|
|
7
|
-
import getSuggestions from './getSuggestions'
|
|
8
7
|
import putPreferences from './putPreferences'
|
|
9
|
-
import searchActors from './searchActors'
|
|
10
|
-
import searchActorsTypeahead from './searchActorsTypeahead'
|
|
11
8
|
|
|
12
9
|
export default function (server: Server, ctx: AppContext) {
|
|
13
10
|
getPreferences(server, ctx)
|
|
14
11
|
getProfile(server, ctx)
|
|
15
12
|
getProfiles(server, ctx)
|
|
16
|
-
getSuggestions(server, ctx)
|
|
17
13
|
putPreferences(server, ctx)
|
|
18
|
-
searchActors(server, ctx)
|
|
19
|
-
searchActorsTypeahead(server, ctx)
|
|
20
14
|
}
|
|
@@ -16,9 +16,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
|
16
16
|
{ feed: params.feed },
|
|
17
17
|
await ctx.appviewAuthHeaders(requester),
|
|
18
18
|
)
|
|
19
|
-
return pipethrough(ctx, req, requester, feed.view.did
|
|
20
|
-
reqHeadersToForward: ['x-bsky-topics'],
|
|
21
|
-
})
|
|
19
|
+
return pipethrough(ctx, req, requester, feed.view.did)
|
|
22
20
|
},
|
|
23
21
|
})
|
|
24
22
|
}
|
|
@@ -1,35 +1,15 @@
|
|
|
1
1
|
import { Server } from '../../../../lexicon'
|
|
2
2
|
import AppContext from '../../../../context'
|
|
3
|
-
import getActorFeeds from './getActorFeeds'
|
|
4
3
|
import getActorLikes from './getActorLikes'
|
|
5
4
|
import getAuthorFeed from './getAuthorFeed'
|
|
6
5
|
import getFeed from './getFeed'
|
|
7
|
-
import getFeedGenerator from './getFeedGenerator'
|
|
8
|
-
import getFeedGenerators from './getFeedGenerators'
|
|
9
|
-
import getLikes from './getLikes'
|
|
10
|
-
import getListFeed from './getListFeed'
|
|
11
|
-
import getPosts from './getPosts'
|
|
12
6
|
import getPostThread from './getPostThread'
|
|
13
|
-
import getRepostedBy from './getRepostedBy'
|
|
14
|
-
import getSuggestedFeeds from './getSuggestedFeeds'
|
|
15
7
|
import getTimeline from './getTimeline'
|
|
16
|
-
import searchPosts from './searchPosts'
|
|
17
|
-
import sendInteractions from './sendInteractions'
|
|
18
8
|
|
|
19
9
|
export default function (server: Server, ctx: AppContext) {
|
|
20
|
-
getActorFeeds(server, ctx)
|
|
21
10
|
getActorLikes(server, ctx)
|
|
22
11
|
getAuthorFeed(server, ctx)
|
|
23
12
|
getFeed(server, ctx)
|
|
24
|
-
getFeedGenerator(server, ctx)
|
|
25
|
-
getFeedGenerators(server, ctx)
|
|
26
|
-
getLikes(server, ctx)
|
|
27
|
-
getListFeed(server, ctx)
|
|
28
|
-
getPosts(server, ctx)
|
|
29
13
|
getPostThread(server, ctx)
|
|
30
|
-
getRepostedBy(server, ctx)
|
|
31
|
-
getSuggestedFeeds(server, ctx)
|
|
32
14
|
getTimeline(server, ctx)
|
|
33
|
-
searchPosts(server, ctx)
|
|
34
|
-
sendInteractions(server, ctx)
|
|
35
15
|
}
|
|
@@ -2,16 +2,10 @@ import { Server } from '../../../lexicon'
|
|
|
2
2
|
import AppContext from '../../../context'
|
|
3
3
|
import actor from './actor'
|
|
4
4
|
import feed from './feed'
|
|
5
|
-
import graph from './graph'
|
|
6
|
-
import labeler from './labeler'
|
|
7
5
|
import notification from './notification'
|
|
8
|
-
import unspecced from './unspecced'
|
|
9
6
|
|
|
10
7
|
export default function (server: Server, ctx: AppContext) {
|
|
11
8
|
actor(server, ctx)
|
|
12
9
|
feed(server, ctx)
|
|
13
|
-
graph(server, ctx)
|
|
14
|
-
labeler(server, ctx)
|
|
15
10
|
notification(server, ctx)
|
|
16
|
-
unspecced(server, ctx)
|
|
17
11
|
}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { Server } from '../../../../lexicon'
|
|
2
2
|
import AppContext from '../../../../context'
|
|
3
|
-
|
|
4
|
-
import getUnreadCount from './getUnreadCount'
|
|
5
|
-
import listNotifications from './listNotifications'
|
|
6
3
|
import registerPush from './registerPush'
|
|
7
|
-
import updateSeen from './updateSeen'
|
|
8
4
|
|
|
9
5
|
export default function (server: Server, ctx: AppContext) {
|
|
10
|
-
getUnreadCount(server, ctx)
|
|
11
|
-
listNotifications(server, ctx)
|
|
12
6
|
registerPush(server, ctx)
|
|
13
|
-
updateSeen(server, ctx)
|
|
14
7
|
}
|
|
@@ -2,7 +2,6 @@ import AppContext from '../../../context'
|
|
|
2
2
|
import { Server } from '../../../lexicon'
|
|
3
3
|
import admin from './admin'
|
|
4
4
|
import identity from './identity'
|
|
5
|
-
import moderation from './moderation'
|
|
6
5
|
import repo from './repo'
|
|
7
6
|
import serverMethods from './server'
|
|
8
7
|
import sync from './sync'
|
|
@@ -11,7 +10,6 @@ import temp from './temp'
|
|
|
11
10
|
export default function (server: Server, ctx: AppContext) {
|
|
12
11
|
admin(server, ctx)
|
|
13
12
|
identity(server, ctx)
|
|
14
|
-
moderation(server, ctx)
|
|
15
13
|
repo(server, ctx)
|
|
16
14
|
serverMethods(server, ctx)
|
|
17
15
|
sync(server, ctx)
|
package/src/api/index.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Server } from '../lexicon'
|
|
2
2
|
import comAtproto from './com/atproto'
|
|
3
3
|
import appBsky from './app/bsky'
|
|
4
|
-
import toolsOzone from './tools/ozone'
|
|
5
4
|
import AppContext from '../context'
|
|
6
5
|
|
|
7
6
|
export default function (server: Server, ctx: AppContext) {
|
|
8
7
|
comAtproto(server, ctx)
|
|
9
8
|
appBsky(server, ctx)
|
|
10
|
-
toolsOzone(server, ctx)
|
|
11
9
|
return server
|
|
12
10
|
}
|
package/src/context.ts
CHANGED
|
@@ -6,7 +6,12 @@ import * as crypto from '@atproto/crypto'
|
|
|
6
6
|
import { IdResolver } from '@atproto/identity'
|
|
7
7
|
import { AtpAgent } from '@atproto/api'
|
|
8
8
|
import { KmsKeypair, S3BlobStore } from '@atproto/aws'
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
RateLimiter,
|
|
11
|
+
RateLimiterCreator,
|
|
12
|
+
RateLimiterOpts,
|
|
13
|
+
createServiceAuthHeaders,
|
|
14
|
+
} from '@atproto/xrpc-server'
|
|
10
15
|
import { ServerConfig, ServerSecrets } from './config'
|
|
11
16
|
import {
|
|
12
17
|
AuthVerifier,
|
|
@@ -39,6 +44,7 @@ export type AppContextOptions = {
|
|
|
39
44
|
sequencer: Sequencer
|
|
40
45
|
backgroundQueue: BackgroundQueue
|
|
41
46
|
redisScratch?: Redis
|
|
47
|
+
ratelimitCreator?: RateLimiterCreator
|
|
42
48
|
crawlers: Crawlers
|
|
43
49
|
appViewAgent?: AtpAgent
|
|
44
50
|
moderationAgent?: AtpAgent
|
|
@@ -62,6 +68,7 @@ export class AppContext {
|
|
|
62
68
|
public sequencer: Sequencer
|
|
63
69
|
public backgroundQueue: BackgroundQueue
|
|
64
70
|
public redisScratch?: Redis
|
|
71
|
+
public ratelimitCreator?: RateLimiterCreator
|
|
65
72
|
public crawlers: Crawlers
|
|
66
73
|
public appViewAgent: AtpAgent | undefined
|
|
67
74
|
public moderationAgent: AtpAgent | undefined
|
|
@@ -84,6 +91,7 @@ export class AppContext {
|
|
|
84
91
|
this.sequencer = opts.sequencer
|
|
85
92
|
this.backgroundQueue = opts.backgroundQueue
|
|
86
93
|
this.redisScratch = opts.redisScratch
|
|
94
|
+
this.ratelimitCreator = opts.ratelimitCreator
|
|
87
95
|
this.crawlers = opts.crawlers
|
|
88
96
|
this.appViewAgent = opts.appViewAgent
|
|
89
97
|
this.moderationAgent = opts.moderationAgent
|
|
@@ -160,6 +168,30 @@ export class AppContext {
|
|
|
160
168
|
? getRedisClient(cfg.redis.address, cfg.redis.password)
|
|
161
169
|
: undefined
|
|
162
170
|
|
|
171
|
+
let ratelimitCreator: RateLimiterCreator | undefined = undefined
|
|
172
|
+
if (cfg.rateLimits.enabled) {
|
|
173
|
+
const bypassSecret = cfg.rateLimits.bypassKey
|
|
174
|
+
const bypassIps = cfg.rateLimits.bypassIps
|
|
175
|
+
if (cfg.rateLimits.mode === 'redis') {
|
|
176
|
+
if (!redisScratch) {
|
|
177
|
+
throw new Error('Redis not set up for ratelimiting mode: `redis`')
|
|
178
|
+
}
|
|
179
|
+
ratelimitCreator = (opts: RateLimiterOpts) =>
|
|
180
|
+
RateLimiter.redis(redisScratch, {
|
|
181
|
+
bypassSecret,
|
|
182
|
+
bypassIps,
|
|
183
|
+
...opts,
|
|
184
|
+
})
|
|
185
|
+
} else {
|
|
186
|
+
ratelimitCreator = (opts: RateLimiterOpts) =>
|
|
187
|
+
RateLimiter.memory({
|
|
188
|
+
bypassSecret,
|
|
189
|
+
bypassIps,
|
|
190
|
+
...opts,
|
|
191
|
+
})
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
163
195
|
const appViewAgent = cfg.bskyAppView
|
|
164
196
|
? new AtpAgent({ service: cfg.bskyAppView.url })
|
|
165
197
|
: undefined
|
|
@@ -231,6 +263,7 @@ export class AppContext {
|
|
|
231
263
|
sequencer,
|
|
232
264
|
backgroundQueue,
|
|
233
265
|
redisScratch,
|
|
266
|
+
ratelimitCreator,
|
|
234
267
|
crawlers,
|
|
235
268
|
appViewAgent,
|
|
236
269
|
moderationAgent,
|