@atproto/pds 0.4.19 → 0.4.21
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|