@atproto/bsky 0.3.13 → 0.5.0
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 +61 -0
- package/dist/api/app/bsky/actor/getProfile.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getProfile.js +1 -0
- package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.js +1 -0
- package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
- package/dist/api/app/bsky/actor/getSuggestions.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/getSuggestions.js +1 -0
- package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActors.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActors.js +1 -0
- package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.d.ts.map +1 -1
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js +1 -0
- package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
- package/dist/api/app/bsky/bookmark/getBookmarks.d.ts.map +1 -1
- package/dist/api/app/bsky/bookmark/getBookmarks.js +1 -0
- package/dist/api/app/bsky/bookmark/getBookmarks.js.map +1 -1
- package/dist/api/app/bsky/contact/getMatches.d.ts.map +1 -1
- package/dist/api/app/bsky/contact/getMatches.js +1 -0
- package/dist/api/app/bsky/contact/getMatches.js.map +1 -1
- package/dist/api/app/bsky/contact/importContacts.d.ts.map +1 -1
- package/dist/api/app/bsky/contact/importContacts.js +1 -0
- package/dist/api/app/bsky/contact/importContacts.js.map +1 -1
- package/dist/api/app/bsky/feed/getActorFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getActorFeeds.js +5 -1
- package/dist/api/app/bsky/feed/getActorFeeds.js.map +1 -1
- package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getActorLikes.js +1 -0
- package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.js +1 -0
- package/dist/api/app/bsky/feed/getAuthorFeed.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 -0
- package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.js +5 -1
- package/dist/api/app/bsky/feed/getFeedGenerator.js.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.js +5 -1
- package/dist/api/app/bsky/feed/getFeedGenerators.js.map +1 -1
- package/dist/api/app/bsky/feed/getLikes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getLikes.js +1 -0
- package/dist/api/app/bsky/feed/getLikes.js.map +1 -1
- package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getListFeed.js +1 -0
- package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
- package/dist/api/app/bsky/feed/getPostThread.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getPostThread.js +1 -0
- package/dist/api/app/bsky/feed/getPostThread.js.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getPosts.js +5 -1
- package/dist/api/app/bsky/feed/getPosts.js.map +1 -1
- package/dist/api/app/bsky/feed/getQuotes.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getQuotes.js +1 -0
- package/dist/api/app/bsky/feed/getQuotes.js.map +1 -1
- package/dist/api/app/bsky/feed/getRepostedBy.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getRepostedBy.js +1 -0
- package/dist/api/app/bsky/feed/getRepostedBy.js.map +1 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js +5 -1
- package/dist/api/app/bsky/feed/getSuggestedFeeds.js.map +1 -1
- package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getTimeline.js +1 -0
- package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +1 -0
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPostsV2.js +1 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -1
- package/dist/api/app/bsky/graph/getActorStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getActorStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/getActorStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/getBlocks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getBlocks.js +5 -1
- package/dist/api/app/bsky/graph/getBlocks.js.map +1 -1
- package/dist/api/app/bsky/graph/getFollowers.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getFollowers.js +1 -0
- package/dist/api/app/bsky/graph/getFollowers.js.map +1 -1
- package/dist/api/app/bsky/graph/getFollows.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getFollows.js +1 -0
- package/dist/api/app/bsky/graph/getFollows.js.map +1 -1
- package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getKnownFollowers.js +1 -0
- package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -1
- package/dist/api/app/bsky/graph/getList.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getList.js +1 -0
- package/dist/api/app/bsky/graph/getList.js.map +1 -1
- package/dist/api/app/bsky/graph/getListBlocks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListBlocks.js +5 -1
- package/dist/api/app/bsky/graph/getListBlocks.js.map +1 -1
- package/dist/api/app/bsky/graph/getListMutes.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListMutes.js +5 -1
- package/dist/api/app/bsky/graph/getListMutes.js.map +1 -1
- package/dist/api/app/bsky/graph/getLists.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getLists.js +1 -0
- package/dist/api/app/bsky/graph/getLists.js.map +1 -1
- package/dist/api/app/bsky/graph/getListsWithMembership.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getListsWithMembership.js +1 -0
- package/dist/api/app/bsky/graph/getListsWithMembership.js.map +1 -1
- package/dist/api/app/bsky/graph/getMutes.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getMutes.js +5 -1
- package/dist/api/app/bsky/graph/getMutes.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPack.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPack.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPack.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js +1 -0
- package/dist/api/app/bsky/graph/getStarterPacksWithMembership.js.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js +1 -0
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacks.js +1 -0
- package/dist/api/app/bsky/graph/searchStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacksV2.d.ts.map +1 -1
- package/dist/api/app/bsky/graph/searchStarterPacksV2.js +1 -0
- package/dist/api/app/bsky/graph/searchStarterPacksV2.js.map +1 -1
- package/dist/api/app/bsky/labeler/getServices.d.ts.map +1 -1
- package/dist/api/app/bsky/labeler/getServices.js +1 -0
- package/dist/api/app/bsky/labeler/getServices.js.map +1 -1
- package/dist/api/app/bsky/notification/getGroupedNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/getGroupedNotifications.js +41 -20
- package/dist/api/app/bsky/notification/getGroupedNotifications.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts +4 -3
- package/dist/api/app/bsky/notification/grouping/algoGravity.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoGravity.js +53 -42
- package/dist/api/app/bsky/notification/grouping/algoGravity.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts +4 -3
- package/dist/api/app/bsky/notification/grouping/algoLookback.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/algoLookback.js +56 -42
- package/dist/api/app/bsky/notification/grouping/algoLookback.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/grouping.d.ts +12 -2
- package/dist/api/app/bsky/notification/grouping/grouping.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/grouping.js +20 -6
- package/dist/api/app/bsky/notification/grouping/grouping.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts +2 -2
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.js +35 -22
- package/dist/api/app/bsky/notification/grouping/spotlight.js.map +1 -1
- package/dist/api/app/bsky/notification/listActivitySubscriptions.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js +1 -0
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/listNotifications.js +5 -1
- package/dist/api/app/bsky/notification/listNotifications.js.map +1 -1
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts +16 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.js +124 -0
- package/dist/api/app/bsky/unspecced/atmosphere-grouping.js.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts +32 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.js +201 -0
- package/dist/api/app/bsky/unspecced/atmosphere-hydration.js.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts +6 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.js +164 -0
- package/dist/api/app/bsky/unspecced/atmosphere-pagination.js.map +1 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js +120 -55
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts +4 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js +30 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js +4 -7
- package/dist/api/app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js +1 -0
- package/dist/api/app/bsky/unspecced/getPopularFeedGenerators.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js +1 -0
- package/dist/api/app/bsky/unspecced/getPostThreadOtherV2.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -0
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js +4 -7
- package/dist/api/app/bsky/unspecced/getSuggestedFeeds.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedOnboardingUsers.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js +4 -7
- package/dist/api/app/bsky/unspecced/getSuggestedStarterPacks.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js +2 -19
- package/dist/api/app/bsky/unspecced/getSuggestedUsers.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForDiscover.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForExplore.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js +1 -0
- package/dist/api/app/bsky/unspecced/getSuggestedUsersForSeeMore.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrendingTopics.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrendingTopics.js +6 -2
- package/dist/api/app/bsky/unspecced/getTrendingTopics.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrends.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getTrends.js +6 -2
- package/dist/api/app/bsky/unspecced/getTrends.js.map +1 -1
- package/dist/api/blob-resolver.d.ts.map +1 -1
- package/dist/api/blob-resolver.js +9 -8
- 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/api/internal/bsky/actor/getProfiles.d.ts.map +1 -1
- package/dist/api/internal/bsky/actor/getProfiles.js +1 -0
- package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
- package/dist/config.d.ts +2 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -16
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +0 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +0 -3
- package/dist/context.js.map +1 -1
- package/dist/feature-gates/gates.d.ts +0 -4
- package/dist/feature-gates/gates.d.ts.map +1 -1
- package/dist/feature-gates/gates.js +0 -4
- package/dist/feature-gates/gates.js.map +1 -1
- package/dist/hydration/external.d.ts +58 -45
- package/dist/hydration/external.d.ts.map +1 -1
- package/dist/hydration/external.js +134 -114
- package/dist/hydration/external.js.map +1 -1
- package/dist/hydration/hydrator.d.ts +15 -9
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +170 -210
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/image/server.d.ts.map +1 -1
- package/dist/image/server.js +12 -1
- package/dist/image/server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -19
- package/dist/index.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts +29 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js +2 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts +85 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js +29 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js +6 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereTimeline.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts +1 -0
- package/dist/lexicons/app/bsky/unspecced.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/unspecced.js +1 -0
- package/dist/lexicons/app/bsky/unspecced.js.map +1 -1
- package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.d.ts +2 -2
- package/dist/lexicons/tools/ozone/moderation/emitEvent.defs.js.map +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.d.ts.map +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.js +1 -1
- package/dist/lexicons/tools/ozone/report/closeReports.defs.js.map +1 -1
- package/dist/telemetry/events.d.ts +14 -6
- package/dist/telemetry/events.d.ts.map +1 -1
- package/dist/telemetry/events.js +40 -5
- package/dist/telemetry/events.js.map +1 -1
- package/dist/util/external/standard-site.d.ts +2 -3
- package/dist/util/external/standard-site.d.ts.map +1 -1
- package/dist/util/external/standard-site.js +2 -3
- package/dist/util/external/standard-site.js.map +1 -1
- package/dist/util/uris.d.ts +5 -2
- package/dist/util/uris.d.ts.map +1 -1
- package/dist/util/uris.js +14 -1
- package/dist/util/uris.js.map +1 -1
- package/dist/views/external.d.ts +5 -0
- package/dist/views/external.d.ts.map +1 -1
- package/dist/views/external.js +38 -11
- package/dist/views/external.js.map +1 -1
- package/dist/views/index.d.ts +2 -2
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +17 -11
- package/dist/views/index.js.map +1 -1
- package/package.json +13 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAa3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,EAAE,MAAY,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,UAAU,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAI5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAa3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,UAAU,EACf,EAAE,MAAY,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzC,UAAU,CAsJZ;AAsBD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,QAAQ,CAAC,EAAE,MAAM,EAW5B;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM;;OAcvB;IAEK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,iBAWzC;IAEK,KAAK,CAAC,MAAM,EAAE,MAAM,iBAGzB;IAEK,QAAQ,kBAEb;CACF"}
|
package/dist/image/server.js
CHANGED
|
@@ -21,6 +21,8 @@ export function createMiddleware(ctx, { prefix = '/' } = {}) {
|
|
|
21
21
|
return (req, res, next) => next();
|
|
22
22
|
}
|
|
23
23
|
const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation);
|
|
24
|
+
// @TODO this should be from configuration
|
|
25
|
+
const imageMaxSize = 100 * 1024 * 1024; // 100 MB
|
|
24
26
|
return async (req, res, next) => {
|
|
25
27
|
if (res.destroyed)
|
|
26
28
|
return;
|
|
@@ -72,9 +74,18 @@ export function createMiddleware(ctx, { prefix = '/' } = {}) {
|
|
|
72
74
|
if (isImageMime(upstream.headers['content-type']) === false) {
|
|
73
75
|
throw createError(400, 'Not an image');
|
|
74
76
|
}
|
|
77
|
+
const contentLength = upstream.headers['content-length']
|
|
78
|
+
? Number(upstream.headers['content-length'])
|
|
79
|
+
: undefined;
|
|
80
|
+
if (contentLength && contentLength > imageMaxSize) {
|
|
81
|
+
throw createError(400, 'Image too large');
|
|
82
|
+
}
|
|
75
83
|
const streams = [
|
|
76
84
|
// decompress
|
|
77
|
-
...createDecoders(upstream.headers['content-encoding']
|
|
85
|
+
...createDecoders(upstream.headers['content-encoding'], {
|
|
86
|
+
maxSize: imageMaxSize,
|
|
87
|
+
maxSizeError: () => createError(400, 'Image too large'),
|
|
88
|
+
}),
|
|
78
89
|
// verify
|
|
79
90
|
new VerifyCidTransform(cid),
|
|
80
91
|
// upscale
|
package/dist/image/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream'\nimport { pipeline as pipelinePromise } from 'node:stream/promises'\nimport createError, { isHttpError } from 'http-errors'\nimport {\n VerifyCidError,\n VerifyCidTransform,\n createDecoders,\n fanOut,\n isErrnoException,\n} from '@atproto/common'\nimport { BlobNotFoundError } from '@atproto/repo'\nimport { type StreamBlobOptions, streamBlob } from '../api/blob-resolver.js'\nimport type { AppContext } from '../context.js'\nimport type { Middleware } from '../util/http.js'\nimport log from './logger.js'\nimport { createImageProcessor, createImageUpscaler } from './sharp.js'\nimport { BadPathError, ImageUriBuilder } from './uri.js'\nimport { type Options, formatsToMimes } from './util.js'\n\nexport function createMiddleware(\n ctx: AppContext,\n { prefix = '/' }: { prefix?: string } = {},\n): Middleware {\n if (!prefix.startsWith('/') || !prefix.endsWith('/')) {\n throw new TypeError('Prefix must start and end with a slash')\n }\n\n // If there is a CDN, we don't need to serve images\n if (ctx.cfg.cdnUrl) {\n return (req, res, next) => next()\n }\n\n const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation)\n\n return async (req, res, next) => {\n if (res.destroyed) return\n if (req.method !== 'GET' && req.method !== 'HEAD') return next()\n if (!req.url?.startsWith(prefix)) return next()\n const { 0: path, 1: _search } = req.url.slice(prefix.length - 1).split('?')\n if (!path.startsWith('/') || path === '/') return next()\n\n try {\n const options = ImageUriBuilder.getOptions(path)\n const outputType = getMime(options.format)\n\n const cacheKey = [options.did, options.cid, options.preset].join('::')\n\n // Cached flow\n\n try {\n const cachedImage = await cache.get(cacheKey)\n res.statusCode = 200\n res.setHeader('x-cache', 'hit')\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('content-length', cachedImage.size)\n await pipelinePromise(cachedImage, res)\n return\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error({ cacheKey, err }, 'failed to serve cached image')\n }\n\n if (res.headersSent || res.destroyed) {\n res.destroy()\n return // nothing we can do...\n } else {\n // Ignore and move on to non-cached flow.\n res.removeHeader('x-cache')\n res.removeHeader('content-type')\n res.removeHeader('cache-control')\n res.removeHeader('content-length')\n }\n }\n\n // Non-cached flow\n\n const streamOptions: StreamBlobOptions = {\n did: options.did,\n cid: options.cid,\n }\n\n await streamBlob(ctx, streamOptions, (upstream, { did, cid, url }) => {\n // Definitely not an image ? Let's fail right away.\n if (isImageMime(upstream.headers['content-type']) === false) {\n throw createError(400, 'Not an image')\n }\n\n const streams = [\n // decompress\n ...createDecoders(upstream.headers['content-encoding']),\n // verify\n new VerifyCidTransform(cid),\n // upscale\n createImageUpscaler(options),\n // format (jpeg/webp)\n createImageProcessor(options).once('info', (info) => {\n // @NOTE sharp does emit this in time to be set as a header\n if (!res.destroyed && !res.headersSent) {\n res.setHeader('content-length', info.size)\n }\n }),\n // send downstream and save to cache in parallel. Applies backpressure\n // based on slowest consumer, avoiding memory pressure.\n fanOut(res, (branch) => {\n void cache\n .put(cacheKey, branch)\n .finally(() => {\n // Fail-safe: Make sure that the fanOut is no longer waiting for\n // this branch to drain (note that the cache implementation\n // should do this automatically).\n branch.destroy()\n })\n .catch((err: unknown) => {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'failed to cache processed image',\n )\n })\n }),\n ]\n\n res.statusCode = 200\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('x-cache', 'miss')\n\n pipeline(streams, (err) => {\n if (err) {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'blob resolution failed during transmission',\n )\n }\n })\n\n return streams[0]!\n })\n } catch (err) {\n if (res.headersSent || res.destroyed) {\n res.destroy()\n } else {\n res.removeHeader('content-type')\n res.removeHeader('content-length')\n res.removeHeader('cache-control')\n res.removeHeader('x-cache')\n\n if (err instanceof BadPathError) {\n next(createError(400, err))\n } else if (err instanceof VerifyCidError) {\n next(createError(404, 'Blob not found', err))\n } else if (isHttpError(err)) {\n next(err)\n } else {\n next(createError(502, 'Upstream Error', { cause: err }))\n }\n }\n }\n }\n}\n\nfunction isImageMime(\n contentType: string | string[] | undefined,\n): undefined | boolean {\n if (contentType == null || contentType === 'application/octet-stream') {\n return undefined // maybe\n }\n if (Array.isArray(contentType)) {\n if (contentType.length === 0) return undefined // should never happen\n if (contentType.length === 1) return isImageMime(contentType[0])\n return contentType.every(isImageMime) // Should we throw a 502 here?\n }\n return contentType.startsWith('image/')\n}\n\nfunction getMime(format: Options['format']) {\n const mime = formatsToMimes.get(format)\n if (!mime) throw new Error('Unknown format')\n return mime\n}\n\nexport interface BlobCache {\n get(fileId: string): Promise<Readable & { size: number }>\n put(fileId: string, stream: Readable): Promise<void>\n clear(fileId: string): Promise<void>\n clearAll(): Promise<void>\n}\n\nexport class BlobDiskCache implements BlobCache {\n tempDir: string\n constructor(basePath?: string) {\n this.tempDir = basePath || path.join(os.tmpdir(), 'bsky--processed-images')\n if (!path.isAbsolute(this.tempDir)) {\n throw new Error('Must provide an absolute path')\n }\n try {\n fsSync.mkdirSync(this.tempDir, { recursive: true })\n } catch (err) {\n // All good if cache dir already exists\n if (isErrnoException(err) && err.code === 'EEXIST') return\n }\n }\n\n async get(fileId: string) {\n try {\n const handle = await fs.open(path.join(this.tempDir, fileId), 'r')\n const { size } = await handle.stat()\n if (size === 0) {\n throw new BlobNotFoundError()\n }\n return Object.assign(handle.createReadStream(), { size })\n } catch (err) {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n throw new BlobNotFoundError()\n }\n throw err\n }\n }\n\n async put(fileId: string, stream: Readable) {\n const filename = path.join(this.tempDir, fileId)\n try {\n await fs.writeFile(filename, stream, { flag: 'wx' })\n } catch (err) {\n // Do not overwrite existing file, just ignore the error\n if (isErrnoException(err) && err.code === 'EEXIST') return\n throw err\n } finally {\n stream.destroy()\n }\n }\n\n async clear(fileId: string) {\n const filename = path.join(this.tempDir, fileId)\n await fs.rm(filename, { force: true })\n }\n\n async clearAll() {\n await fs.rm(this.tempDir, { recursive: true, force: true })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/image/server.ts"],"names":[],"mappings":"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","sourcesContent":["import fsSync from 'node:fs'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream'\nimport { pipeline as pipelinePromise } from 'node:stream/promises'\nimport createError, { isHttpError } from 'http-errors'\nimport {\n VerifyCidError,\n VerifyCidTransform,\n createDecoders,\n fanOut,\n isErrnoException,\n} from '@atproto/common'\nimport { BlobNotFoundError } from '@atproto/repo'\nimport { type StreamBlobOptions, streamBlob } from '../api/blob-resolver.js'\nimport type { AppContext } from '../context.js'\nimport type { Middleware } from '../util/http.js'\nimport log from './logger.js'\nimport { createImageProcessor, createImageUpscaler } from './sharp.js'\nimport { BadPathError, ImageUriBuilder } from './uri.js'\nimport { type Options, formatsToMimes } from './util.js'\n\nexport function createMiddleware(\n ctx: AppContext,\n { prefix = '/' }: { prefix?: string } = {},\n): Middleware {\n if (!prefix.startsWith('/') || !prefix.endsWith('/')) {\n throw new TypeError('Prefix must start and end with a slash')\n }\n\n // If there is a CDN, we don't need to serve images\n if (ctx.cfg.cdnUrl) {\n return (req, res, next) => next()\n }\n\n const cache = new BlobDiskCache(ctx.cfg.blobCacheLocation)\n\n // @TODO this should be from configuration\n const imageMaxSize = 100 * 1024 * 1024 // 100 MB\n\n return async (req, res, next) => {\n if (res.destroyed) return\n if (req.method !== 'GET' && req.method !== 'HEAD') return next()\n if (!req.url?.startsWith(prefix)) return next()\n const { 0: path, 1: _search } = req.url.slice(prefix.length - 1).split('?')\n if (!path.startsWith('/') || path === '/') return next()\n\n try {\n const options = ImageUriBuilder.getOptions(path)\n const outputType = getMime(options.format)\n\n const cacheKey = [options.did, options.cid, options.preset].join('::')\n\n // Cached flow\n\n try {\n const cachedImage = await cache.get(cacheKey)\n res.statusCode = 200\n res.setHeader('x-cache', 'hit')\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('content-length', cachedImage.size)\n await pipelinePromise(cachedImage, res)\n return\n } catch (err) {\n if (!(err instanceof BlobNotFoundError)) {\n log.error({ cacheKey, err }, 'failed to serve cached image')\n }\n\n if (res.headersSent || res.destroyed) {\n res.destroy()\n return // nothing we can do...\n } else {\n // Ignore and move on to non-cached flow.\n res.removeHeader('x-cache')\n res.removeHeader('content-type')\n res.removeHeader('cache-control')\n res.removeHeader('content-length')\n }\n }\n\n // Non-cached flow\n\n const streamOptions: StreamBlobOptions = {\n did: options.did,\n cid: options.cid,\n }\n\n await streamBlob(ctx, streamOptions, (upstream, { did, cid, url }) => {\n // Definitely not an image ? Let's fail right away.\n if (isImageMime(upstream.headers['content-type']) === false) {\n throw createError(400, 'Not an image')\n }\n\n const contentLength = upstream.headers['content-length']\n ? Number(upstream.headers['content-length'])\n : undefined\n if (contentLength && contentLength > imageMaxSize) {\n throw createError(400, 'Image too large')\n }\n\n const streams = [\n // decompress\n ...createDecoders(upstream.headers['content-encoding'], {\n maxSize: imageMaxSize,\n maxSizeError: () => createError(400, 'Image too large'),\n }),\n // verify\n new VerifyCidTransform(cid),\n // upscale\n createImageUpscaler(options),\n // format (jpeg/webp)\n createImageProcessor(options).once('info', (info) => {\n // @NOTE sharp does emit this in time to be set as a header\n if (!res.destroyed && !res.headersSent) {\n res.setHeader('content-length', info.size)\n }\n }),\n // send downstream and save to cache in parallel. Applies backpressure\n // based on slowest consumer, avoiding memory pressure.\n fanOut(res, (branch) => {\n void cache\n .put(cacheKey, branch)\n .finally(() => {\n // Fail-safe: Make sure that the fanOut is no longer waiting for\n // this branch to drain (note that the cache implementation\n // should do this automatically).\n branch.destroy()\n })\n .catch((err: unknown) => {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'failed to cache processed image',\n )\n })\n }),\n ]\n\n res.statusCode = 200\n res.setHeader('content-type', outputType)\n res.setHeader('cache-control', `public, max-age=31536000`) // 1 year\n res.setHeader('x-cache', 'miss')\n\n pipeline(streams, (err) => {\n if (err) {\n log.warn(\n { err, did, cid: cid.toString(), pds: url.origin },\n 'blob resolution failed during transmission',\n )\n }\n })\n\n return streams[0]!\n })\n } catch (err) {\n if (res.headersSent || res.destroyed) {\n res.destroy()\n } else {\n res.removeHeader('content-type')\n res.removeHeader('content-length')\n res.removeHeader('cache-control')\n res.removeHeader('x-cache')\n\n if (err instanceof BadPathError) {\n next(createError(400, err))\n } else if (err instanceof VerifyCidError) {\n next(createError(404, 'Blob not found', err))\n } else if (isHttpError(err)) {\n next(err)\n } else {\n next(createError(502, 'Upstream Error', { cause: err }))\n }\n }\n }\n }\n}\n\nfunction isImageMime(\n contentType: string | string[] | undefined,\n): undefined | boolean {\n if (contentType == null || contentType === 'application/octet-stream') {\n return undefined // maybe\n }\n if (Array.isArray(contentType)) {\n if (contentType.length === 0) return undefined // should never happen\n if (contentType.length === 1) return isImageMime(contentType[0])\n return contentType.every(isImageMime) // Should we throw a 502 here?\n }\n return contentType.startsWith('image/')\n}\n\nfunction getMime(format: Options['format']) {\n const mime = formatsToMimes.get(format)\n if (!mime) throw new Error('Unknown format')\n return mime\n}\n\nexport interface BlobCache {\n get(fileId: string): Promise<Readable & { size: number }>\n put(fileId: string, stream: Readable): Promise<void>\n clear(fileId: string): Promise<void>\n clearAll(): Promise<void>\n}\n\nexport class BlobDiskCache implements BlobCache {\n tempDir: string\n constructor(basePath?: string) {\n this.tempDir = basePath || path.join(os.tmpdir(), 'bsky--processed-images')\n if (!path.isAbsolute(this.tempDir)) {\n throw new Error('Must provide an absolute path')\n }\n try {\n fsSync.mkdirSync(this.tempDir, { recursive: true })\n } catch (err) {\n // All good if cache dir already exists\n if (isErrnoException(err) && err.code === 'EEXIST') return\n }\n }\n\n async get(fileId: string) {\n try {\n const handle = await fs.open(path.join(this.tempDir, fileId), 'r')\n const { size } = await handle.stat()\n if (size === 0) {\n throw new BlobNotFoundError()\n }\n return Object.assign(handle.createReadStream(), { size })\n } catch (err) {\n if (isErrnoException(err) && err.code === 'ENOENT') {\n throw new BlobNotFoundError()\n }\n throw err\n }\n }\n\n async put(fileId: string, stream: Readable) {\n const filename = path.join(this.tempDir, fileId)\n try {\n await fs.writeFile(filename, stream, { flag: 'wx' })\n } catch (err) {\n // Do not overwrite existing file, just ignore the error\n if (isErrnoException(err) && err.code === 'EEXIST') return\n throw err\n } finally {\n stream.destroy()\n }\n }\n\n async clear(fileId: string) {\n const filename = path.join(this.tempDir, fileId)\n await fs.rm(filename, { force: true })\n }\n\n async clearAll() {\n await fs.rm(this.tempDir, { recursive: true, force: true })\n }\n}\n"]}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAe9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAsBzC,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAe;IAElC,YAAY,IAAI,EAAE;QAChB,GAAG,EAAE,UAAU,CAAA;QACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;QACxB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;KAC5B,EAIA;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAe9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAsBzC,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,qBAAa,WAAW;IACf,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAe;IAElC,YAAY,IAAI,EAAE;QAChB,GAAG,EAAE,UAAU,CAAA;QACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;QACxB,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;KAC5B,EAIA;IAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,OAAO,CAAA;KACpB,GAAG,WAAW,CA4Od;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAalC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAc7B;IAEK,CAAC,MAAM,CAAC,YAAY,CAAC,kBAE1B;CACF;eAEc,WAAW"}
|
package/dist/index.js
CHANGED
|
@@ -86,25 +86,11 @@ export class BskyAppView {
|
|
|
86
86
|
validateResponse: config.debugMode,
|
|
87
87
|
})
|
|
88
88
|
: undefined;
|
|
89
|
-
// @NOTE
|
|
90
|
-
// the request is not bounded here.
|
|
89
|
+
// @NOTE This bounds the connection phase (TCP + TLS) only; once connected,
|
|
90
|
+
// the request is not bounded here. It is kept for the lifetime of the
|
|
91
91
|
// service (pooling connections), and closed on `destroy()`.
|
|
92
|
-
// An unused agent holds no socket, so
|
|
93
|
-
const topicsDispatcher = createUndiciAgent({ connectTimeout: SECOND });
|
|
92
|
+
// An unused agent holds no socket, so it can be built unconditionally.
|
|
94
93
|
const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND });
|
|
95
|
-
const topicsClient = config.topicsUrl
|
|
96
|
-
? new Client({
|
|
97
|
-
service: config.topicsUrl,
|
|
98
|
-
headers: config.topicsApiKey
|
|
99
|
-
? { authorization: `Bearer ${config.topicsApiKey}` }
|
|
100
|
-
: undefined,
|
|
101
|
-
fetch: dispatcherFetch(topicsDispatcher),
|
|
102
|
-
}, {
|
|
103
|
-
// Trust internal services to send us well-formed responses
|
|
104
|
-
strictResponseProcessing: false,
|
|
105
|
-
validateResponse: config.debugMode,
|
|
106
|
-
})
|
|
107
|
-
: undefined;
|
|
108
94
|
const irisClient = config.irisUrl
|
|
109
95
|
? new Client({
|
|
110
96
|
service: config.irisUrl,
|
|
@@ -208,7 +194,6 @@ export class BskyAppView {
|
|
|
208
194
|
dataplaneHostList,
|
|
209
195
|
searchClient,
|
|
210
196
|
suggestionsClient,
|
|
211
|
-
topicsClient,
|
|
212
197
|
irisClient,
|
|
213
198
|
hydrator,
|
|
214
199
|
views,
|
|
@@ -246,7 +231,7 @@ export class BskyAppView {
|
|
|
246
231
|
return new BskyAppView({
|
|
247
232
|
ctx,
|
|
248
233
|
app,
|
|
249
|
-
dispatchers: [
|
|
234
|
+
dispatchers: [irisDispatcher],
|
|
250
235
|
});
|
|
251
236
|
}
|
|
252
237
|
async start() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import events from 'node:events'\nimport type http from 'node:http'\nimport type { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { type HttpTerminator, createHttpTerminator } from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport type { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { Client } from '@atproto/lex'\nimport { createServer } from '@atproto/xrpc-server'\nimport { safeFetchWrap } from '@atproto-labs/fetch-node'\nimport { createBlobDispatcher } from './api/blob-dispatcher.js'\nimport API, {\n blobResolver,\n external,\n health,\n sitemap,\n wellKnown,\n} from './api/index.js'\nimport { AuthVerifier, createPublicKeyObject } from './auth-verifier.js'\nimport { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync.js'\nimport type { ServerConfig } from './config.js'\nimport { AppContext } from './context.js'\nimport {\n authWithApiKey as courierAuth,\n createCourierClient,\n} from './courier.js'\nimport {\n BasicHostList,\n EtcdHostList,\n createDataPlaneClient,\n} from './data-plane/client/index.js'\nimport * as error from './error.js'\nimport { FeatureGatesClient } from './feature-gates/index.js'\nimport { Hydrator } from './hydration/hydrator.js'\nimport * as imageServer from './image/server.js'\nimport { ImageUriBuilder } from './image/uri.js'\nimport { createKwsClient } from './kws.js'\nimport { loggerMiddleware } from './logger.js'\nimport {\n authWithApiKey as rolodexAuth,\n createRolodexClient,\n} from './rolodex.js'\nimport { createStashClient } from './stash.js'\nimport {\n type UndiciAgent,\n createUndiciAgent,\n dispatcherFetch,\n} from './undici.js'\nimport { Views } from './views/index.js'\nimport { VideoUriBuilder } from './views/util.js'\n\nexport { ServerConfig } from './config.js'\nexport type { ServerConfigValues } from './config.js'\nexport { AppContext } from './context.js'\nexport * from './data-plane/index.js'\nexport { BackgroundQueue } from './data-plane/server/background.js'\nexport { Database } from './data-plane/server/db/index.js'\nexport { Redis } from './redis.js'\n\nexport class BskyAppView {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: HttpTerminator\n private dispatchers: UndiciAgent[]\n\n constructor(opts: {\n ctx: AppContext\n app: express.Application\n dispatchers?: UndiciAgent[]\n }) {\n this.ctx = opts.ctx\n this.app = opts.app\n this.dispatchers = opts.dispatchers ?? []\n }\n\n static create(opts: {\n config: ServerConfig\n signingKey: Keypair\n }): BskyAppView {\n const { config, signingKey } = opts\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n // used solely for handle resolution: identity lookups occur on dataplane\n const idResolver = new IdResolver({\n plcUrl: config.didPlcUrl,\n backupNameservers: config.handleResolveNameservers,\n fetch: config.disableSsrfProtection ? globalThis.fetch : undefined,\n })\n\n const imgUriBuilderUrl =\n config.cdnUrl ||\n (config.publicUrl ? `${config.publicUrl}/img` : undefined)\n if (!imgUriBuilderUrl) {\n throw new Error('No image URI builder URL could be determined')\n }\n const imgUriBuilder = new ImageUriBuilder(imgUriBuilderUrl)\n const videoUriBuilder = new VideoUriBuilder({\n playlistUrlPattern:\n config.videoPlaylistUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/playlist.m3u8`,\n thumbnailUrlPattern:\n config.videoThumbnailUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,\n })\n\n const searchClient = config.searchUrl\n ? new Client(\n {\n service: config.searchUrl,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const suggestionsClient = config.suggestionsUrl\n ? new Client(\n {\n service: config.suggestionsUrl,\n headers: config.suggestionsApiKey\n ? { authorization: `Bearer ${config.suggestionsApiKey}` }\n : undefined,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n // @NOTE These bound the connection phase (TCP + TLS) only; once connected,\n // the request is not bounded here. They are kept for the lifetime of the\n // service (pooling connections), and closed on `destroy()`.\n // An unused agent holds no socket, so they can be built unconditionally.\n const topicsDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n\n const topicsClient = config.topicsUrl\n ? new Client(\n {\n service: config.topicsUrl,\n headers: config.topicsApiKey\n ? { authorization: `Bearer ${config.topicsApiKey}` }\n : undefined,\n fetch: dispatcherFetch(topicsDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const irisClient = config.irisUrl\n ? new Client(\n {\n service: config.irisUrl,\n headers: config.irisApiKey\n ? { authorization: `Bearer ${config.irisApiKey}` }\n : undefined,\n fetch: dispatcherFetch(irisDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const etcd = config.etcdHosts.length\n ? new Etcd3({ hosts: config.etcdHosts })\n : undefined\n\n const dataplaneHostList =\n etcd && config.dataplaneUrlsEtcdKeyPrefix\n ? new EtcdHostList(\n etcd,\n config.dataplaneUrlsEtcdKeyPrefix,\n config.dataplaneUrls,\n )\n : new BasicHostList(config.dataplaneUrls)\n\n const featureGatesClient = new FeatureGatesClient({\n growthBookApiHost: config.growthBookApiHost,\n growthBookClientKey: config.growthBookClientKey,\n eventProxyTrackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n\n const dataplane = createDataPlaneClient(dataplaneHostList, {\n httpVersion: config.dataplaneHttpVersion,\n rejectUnauthorized: !config.dataplaneIgnoreBadTls,\n })\n const hydrator = new Hydrator(dataplane, config.labelsFromIssuerDids, {\n debugFieldAllowedDids: config.debugFieldAllowedDids,\n featureGatesClient,\n needsReviewTagSources: [config.modServiceDid],\n })\n const views = new Views({\n imgUriBuilder: imgUriBuilder,\n videoUriBuilder: videoUriBuilder,\n indexedAtEpoch: config.indexedAtEpoch,\n threadTagsBumpDown: [...config.threadTagsBumpDown],\n threadTagsHide: [...config.threadTagsHide],\n visibilityTagHide: config.visibilityTagHide,\n visibilityTagRankPrefix: config.visibilityTagRankPrefix,\n })\n\n const bsyncClient = createBsyncClient({\n baseUrl: config.bsyncUrl,\n httpVersion: config.bsyncHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.bsyncIgnoreBadTls },\n interceptors: config.bsyncApiKey ? [bsyncAuth(config.bsyncApiKey)] : [],\n })\n\n const stashClient = createStashClient(bsyncClient)\n\n const courierClient = config.courierUrl\n ? createCourierClient({\n baseUrl: config.courierUrl,\n httpVersion: config.courierHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.courierIgnoreBadTls },\n interceptors: config.courierApiKey\n ? [courierAuth(config.courierApiKey)]\n : [],\n })\n : undefined\n\n const rolodexClient = config.rolodexUrl\n ? createRolodexClient({\n baseUrl: config.rolodexUrl,\n httpVersion: config.rolodexHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },\n interceptors: config.rolodexApiKey\n ? [rolodexAuth(config.rolodexApiKey)]\n : [],\n })\n : undefined\n\n const kwsClient = config.kws ? createKwsClient(config.kws) : undefined\n\n const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex\n ? createPublicKeyObject(config.entrywayJwtPublicKeyHex)\n : undefined\n const bffJwtSecret = config.bffJwtSecret\n ? Buffer.from(config.bffJwtSecret, 'utf8')\n : undefined\n const authVerifier = new AuthVerifier(dataplane, {\n ownDid: config.serverDid,\n alternateAudienceDids: config.alternateAudienceDids,\n modServiceDid: config.modServiceDid,\n adminPasses: config.adminPasswords,\n entrywayJwtPublicKey,\n bffJwtSecret,\n })\n\n const blobDispatcher = createBlobDispatcher(config)\n // Egress to hosts named in DID documents, where the destination is chosen by\n // the account being resolved. Same policy as blobDispatcher: https only,\n // unicast addresses only, re-checked per hop by the dispatcher. Redirects\n // stay enabled because xrpcRequestInit sets `redirect: 'follow'`.\n const federatedFetch = (\n config.disableSsrfProtection\n ? globalThis.fetch\n : safeFetchWrap({\n allowIpHost: false,\n allowImplicitRedirect: true,\n responseMaxSize: 5 * 1024 * 1024,\n })\n ) as typeof globalThis.fetch\n\n const ctx = new AppContext({\n cfg: config,\n etcd,\n dataplane,\n dataplaneHostList,\n searchClient,\n suggestionsClient,\n topicsClient,\n irisClient,\n hydrator,\n views,\n signingKey,\n idResolver,\n bsyncClient,\n stashClient,\n courierClient,\n rolodexClient,\n authVerifier,\n featureGatesClient,\n blobDispatcher,\n federatedFetch,\n kwsClient,\n })\n\n const server = createServer([], {\n validateResponse: config.debugMode,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(blobResolver.createMiddleware(ctx))\n app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }))\n\n if (config.dataplaneUrls.length > 0 || config.dataplaneUrlsEtcdKeyPrefix) {\n app.use(sitemap.createRouter(ctx))\n }\n\n app.use(server.router)\n app.use(error.handler)\n app.use('/external', external.createRouter(ctx))\n\n return new BskyAppView({\n ctx,\n app,\n dispatchers: [topicsDispatcher, irisDispatcher],\n })\n }\n\n async start(): Promise<http.Server> {\n if (this.ctx.dataplaneHostList instanceof EtcdHostList) {\n await this.ctx.dataplaneHostList.connect()\n }\n this.ctx.featureGatesClient.start() // lazy, no await\n const server = this.app.listen(this.ctx.cfg.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.cfg.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n try {\n await this.ctx.featureGatesClient.destroy()\n } finally {\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.etcd?.close()\n } finally {\n await Promise.all(this.dispatchers.map((d) => d.close()))\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default BskyAppView\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import events from 'node:events'\nimport type http from 'node:http'\nimport type { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport { Etcd3 } from 'etcd3'\nimport express from 'express'\nimport { type HttpTerminator, createHttpTerminator } from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport type { Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { Client } from '@atproto/lex'\nimport { createServer } from '@atproto/xrpc-server'\nimport { safeFetchWrap } from '@atproto-labs/fetch-node'\nimport { createBlobDispatcher } from './api/blob-dispatcher.js'\nimport API, {\n blobResolver,\n external,\n health,\n sitemap,\n wellKnown,\n} from './api/index.js'\nimport { AuthVerifier, createPublicKeyObject } from './auth-verifier.js'\nimport { authWithApiKey as bsyncAuth, createBsyncClient } from './bsync.js'\nimport type { ServerConfig } from './config.js'\nimport { AppContext } from './context.js'\nimport {\n authWithApiKey as courierAuth,\n createCourierClient,\n} from './courier.js'\nimport {\n BasicHostList,\n EtcdHostList,\n createDataPlaneClient,\n} from './data-plane/client/index.js'\nimport * as error from './error.js'\nimport { FeatureGatesClient } from './feature-gates/index.js'\nimport { Hydrator } from './hydration/hydrator.js'\nimport * as imageServer from './image/server.js'\nimport { ImageUriBuilder } from './image/uri.js'\nimport { createKwsClient } from './kws.js'\nimport { loggerMiddleware } from './logger.js'\nimport {\n authWithApiKey as rolodexAuth,\n createRolodexClient,\n} from './rolodex.js'\nimport { createStashClient } from './stash.js'\nimport {\n type UndiciAgent,\n createUndiciAgent,\n dispatcherFetch,\n} from './undici.js'\nimport { Views } from './views/index.js'\nimport { VideoUriBuilder } from './views/util.js'\n\nexport { ServerConfig } from './config.js'\nexport type { ServerConfigValues } from './config.js'\nexport { AppContext } from './context.js'\nexport * from './data-plane/index.js'\nexport { BackgroundQueue } from './data-plane/server/background.js'\nexport { Database } from './data-plane/server/db/index.js'\nexport { Redis } from './redis.js'\n\nexport class BskyAppView {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: HttpTerminator\n private dispatchers: UndiciAgent[]\n\n constructor(opts: {\n ctx: AppContext\n app: express.Application\n dispatchers?: UndiciAgent[]\n }) {\n this.ctx = opts.ctx\n this.app = opts.app\n this.dispatchers = opts.dispatchers ?? []\n }\n\n static create(opts: {\n config: ServerConfig\n signingKey: Keypair\n }): BskyAppView {\n const { config, signingKey } = opts\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n // used solely for handle resolution: identity lookups occur on dataplane\n const idResolver = new IdResolver({\n plcUrl: config.didPlcUrl,\n backupNameservers: config.handleResolveNameservers,\n fetch: config.disableSsrfProtection ? globalThis.fetch : undefined,\n })\n\n const imgUriBuilderUrl =\n config.cdnUrl ||\n (config.publicUrl ? `${config.publicUrl}/img` : undefined)\n if (!imgUriBuilderUrl) {\n throw new Error('No image URI builder URL could be determined')\n }\n const imgUriBuilder = new ImageUriBuilder(imgUriBuilderUrl)\n const videoUriBuilder = new VideoUriBuilder({\n playlistUrlPattern:\n config.videoPlaylistUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/playlist.m3u8`,\n thumbnailUrlPattern:\n config.videoThumbnailUrlPattern ||\n `${config.publicUrl}/vid/%s/%s/thumbnail.jpg`,\n })\n\n const searchClient = config.searchUrl\n ? new Client(\n {\n service: config.searchUrl,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const suggestionsClient = config.suggestionsUrl\n ? new Client(\n {\n service: config.suggestionsUrl,\n headers: config.suggestionsApiKey\n ? { authorization: `Bearer ${config.suggestionsApiKey}` }\n : undefined,\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n // @NOTE This bounds the connection phase (TCP + TLS) only; once connected,\n // the request is not bounded here. It is kept for the lifetime of the\n // service (pooling connections), and closed on `destroy()`.\n // An unused agent holds no socket, so it can be built unconditionally.\n const irisDispatcher = createUndiciAgent({ connectTimeout: SECOND })\n\n const irisClient = config.irisUrl\n ? new Client(\n {\n service: config.irisUrl,\n headers: config.irisApiKey\n ? { authorization: `Bearer ${config.irisApiKey}` }\n : undefined,\n fetch: dispatcherFetch(irisDispatcher),\n },\n {\n // Trust internal services to send us well-formed responses\n strictResponseProcessing: false,\n validateResponse: config.debugMode,\n },\n )\n : undefined\n\n const etcd = config.etcdHosts.length\n ? new Etcd3({ hosts: config.etcdHosts })\n : undefined\n\n const dataplaneHostList =\n etcd && config.dataplaneUrlsEtcdKeyPrefix\n ? new EtcdHostList(\n etcd,\n config.dataplaneUrlsEtcdKeyPrefix,\n config.dataplaneUrls,\n )\n : new BasicHostList(config.dataplaneUrls)\n\n const featureGatesClient = new FeatureGatesClient({\n growthBookApiHost: config.growthBookApiHost,\n growthBookClientKey: config.growthBookClientKey,\n eventProxyTrackingEndpoint: config.eventProxyTrackingEndpoint,\n })\n\n const dataplane = createDataPlaneClient(dataplaneHostList, {\n httpVersion: config.dataplaneHttpVersion,\n rejectUnauthorized: !config.dataplaneIgnoreBadTls,\n })\n const hydrator = new Hydrator(dataplane, config.labelsFromIssuerDids, {\n debugFieldAllowedDids: config.debugFieldAllowedDids,\n featureGatesClient,\n needsReviewTagSources: [config.modServiceDid],\n })\n const views = new Views({\n imgUriBuilder: imgUriBuilder,\n videoUriBuilder: videoUriBuilder,\n indexedAtEpoch: config.indexedAtEpoch,\n threadTagsBumpDown: [...config.threadTagsBumpDown],\n threadTagsHide: [...config.threadTagsHide],\n visibilityTagHide: config.visibilityTagHide,\n visibilityTagRankPrefix: config.visibilityTagRankPrefix,\n })\n\n const bsyncClient = createBsyncClient({\n baseUrl: config.bsyncUrl,\n httpVersion: config.bsyncHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.bsyncIgnoreBadTls },\n interceptors: config.bsyncApiKey ? [bsyncAuth(config.bsyncApiKey)] : [],\n })\n\n const stashClient = createStashClient(bsyncClient)\n\n const courierClient = config.courierUrl\n ? createCourierClient({\n baseUrl: config.courierUrl,\n httpVersion: config.courierHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.courierIgnoreBadTls },\n interceptors: config.courierApiKey\n ? [courierAuth(config.courierApiKey)]\n : [],\n })\n : undefined\n\n const rolodexClient = config.rolodexUrl\n ? createRolodexClient({\n baseUrl: config.rolodexUrl,\n httpVersion: config.rolodexHttpVersion ?? '2',\n nodeOptions: { rejectUnauthorized: !config.rolodexIgnoreBadTls },\n interceptors: config.rolodexApiKey\n ? [rolodexAuth(config.rolodexApiKey)]\n : [],\n })\n : undefined\n\n const kwsClient = config.kws ? createKwsClient(config.kws) : undefined\n\n const entrywayJwtPublicKey = config.entrywayJwtPublicKeyHex\n ? createPublicKeyObject(config.entrywayJwtPublicKeyHex)\n : undefined\n const bffJwtSecret = config.bffJwtSecret\n ? Buffer.from(config.bffJwtSecret, 'utf8')\n : undefined\n const authVerifier = new AuthVerifier(dataplane, {\n ownDid: config.serverDid,\n alternateAudienceDids: config.alternateAudienceDids,\n modServiceDid: config.modServiceDid,\n adminPasses: config.adminPasswords,\n entrywayJwtPublicKey,\n bffJwtSecret,\n })\n\n const blobDispatcher = createBlobDispatcher(config)\n // Egress to hosts named in DID documents, where the destination is chosen by\n // the account being resolved. Same policy as blobDispatcher: https only,\n // unicast addresses only, re-checked per hop by the dispatcher. Redirects\n // stay enabled because xrpcRequestInit sets `redirect: 'follow'`.\n const federatedFetch = (\n config.disableSsrfProtection\n ? globalThis.fetch\n : safeFetchWrap({\n allowIpHost: false,\n allowImplicitRedirect: true,\n responseMaxSize: 5 * 1024 * 1024,\n })\n ) as typeof globalThis.fetch\n\n const ctx = new AppContext({\n cfg: config,\n etcd,\n dataplane,\n dataplaneHostList,\n searchClient,\n suggestionsClient,\n irisClient,\n hydrator,\n views,\n signingKey,\n idResolver,\n bsyncClient,\n stashClient,\n courierClient,\n rolodexClient,\n authVerifier,\n featureGatesClient,\n blobDispatcher,\n federatedFetch,\n kwsClient,\n })\n\n const server = createServer([], {\n validateResponse: config.debugMode,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(blobResolver.createMiddleware(ctx))\n app.use(imageServer.createMiddleware(ctx, { prefix: '/img/' }))\n\n if (config.dataplaneUrls.length > 0 || config.dataplaneUrlsEtcdKeyPrefix) {\n app.use(sitemap.createRouter(ctx))\n }\n\n app.use(server.router)\n app.use(error.handler)\n app.use('/external', external.createRouter(ctx))\n\n return new BskyAppView({\n ctx,\n app,\n dispatchers: [irisDispatcher],\n })\n }\n\n async start(): Promise<http.Server> {\n if (this.ctx.dataplaneHostList instanceof EtcdHostList) {\n await this.ctx.dataplaneHostList.connect()\n }\n this.ctx.featureGatesClient.start() // lazy, no await\n const server = this.app.listen(this.ctx.cfg.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.cfg.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n try {\n await this.ctx.featureGatesClient.destroy()\n } finally {\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.etcd?.close()\n } finally {\n await Promise.all(this.dispatchers.map((d) => d.close()))\n }\n }\n }\n }\n\n async [Symbol.asyncDispose]() {\n await this.destroy()\n }\n}\n\nexport default BskyAppView\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { l } from "@atproto/lex";
|
|
2
2
|
import * as EmbedExternal from "../embed/external.defs.js";
|
|
3
|
+
import * as ActorDefs from "../actor/defs.defs.js";
|
|
3
4
|
declare const $nsid = "app.bsky.unspecced.getAtmosphereExploreTab";
|
|
4
5
|
type $nsid = typeof $nsid;
|
|
5
6
|
export { $nsid };
|
|
@@ -86,6 +87,9 @@ declare const livestreamList: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosph
|
|
|
86
87
|
export { livestreamList };
|
|
87
88
|
type ArticleItem = {
|
|
88
89
|
$type?: "app.bsky.unspecced.getAtmosphereExploreTab#articleItem";
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated . Retained for compatibility; always false.
|
|
92
|
+
*/
|
|
89
93
|
"featured": boolean;
|
|
90
94
|
"view": EmbedExternal.ViewArticle;
|
|
91
95
|
};
|
|
@@ -94,6 +98,9 @@ declare const articleItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphere
|
|
|
94
98
|
export { articleItem };
|
|
95
99
|
type PublicationItem = {
|
|
96
100
|
$type?: "app.bsky.unspecced.getAtmosphereExploreTab#publicationItem";
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated . Retained for compatibility; always false.
|
|
103
|
+
*/
|
|
97
104
|
"featured": boolean;
|
|
98
105
|
"view": EmbedExternal.ViewArticlePublication;
|
|
99
106
|
};
|
|
@@ -102,6 +109,9 @@ declare const publicationItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosp
|
|
|
102
109
|
export { publicationItem };
|
|
103
110
|
type GalleryItem = {
|
|
104
111
|
$type?: "app.bsky.unspecced.getAtmosphereExploreTab#galleryItem";
|
|
112
|
+
/**
|
|
113
|
+
* @deprecated . Retained for compatibility; always false.
|
|
114
|
+
*/
|
|
105
115
|
"featured": boolean;
|
|
106
116
|
"view": EmbedExternal.ViewGallery;
|
|
107
117
|
};
|
|
@@ -110,6 +120,9 @@ declare const galleryItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphere
|
|
|
110
120
|
export { galleryItem };
|
|
111
121
|
type LivestreamItem = {
|
|
112
122
|
$type?: "app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem";
|
|
123
|
+
/**
|
|
124
|
+
* @deprecated . Retained for compatibility; always false.
|
|
125
|
+
*/
|
|
113
126
|
"featured": boolean;
|
|
114
127
|
"view": EmbedExternal.ViewLivestream;
|
|
115
128
|
};
|
|
@@ -134,12 +147,28 @@ type AppCard = {
|
|
|
134
147
|
"id"?: string;
|
|
135
148
|
"title"?: string;
|
|
136
149
|
"description"?: string;
|
|
150
|
+
/**
|
|
151
|
+
* Compatibility field. The profile avatar when available, otherwise the editorial logo.
|
|
152
|
+
*/
|
|
137
153
|
"logo"?: l.UriString;
|
|
154
|
+
/**
|
|
155
|
+
* Compatibility field. The profile banner when available, otherwise the editorial background image.
|
|
156
|
+
*/
|
|
138
157
|
"backgroundImage"?: l.UriString;
|
|
158
|
+
/**
|
|
159
|
+
* @deprecated . Retained for compatibility.
|
|
160
|
+
*/
|
|
139
161
|
"overlayColor"?: string;
|
|
162
|
+
/**
|
|
163
|
+
* @deprecated . Retained for compatibility.
|
|
164
|
+
*/
|
|
140
165
|
"textColor"?: string;
|
|
141
166
|
"url"?: l.UriString;
|
|
142
167
|
"category"?: string;
|
|
168
|
+
/**
|
|
169
|
+
* The app's account profile, when available.
|
|
170
|
+
*/
|
|
171
|
+
"profile"?: ActorDefs.ProfileViewDetailed;
|
|
143
172
|
};
|
|
144
173
|
export type { AppCard };
|
|
145
174
|
declare const appCard: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereExploreTab#appCard", l.Validator<AppCard, AppCard>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAtmosphereExploreTab.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,KAAK,aAAa,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getAtmosphereExploreTab.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { l } from "@atproto/lex";
|
|
5
5
|
import * as EmbedExternal from "../embed/external.defs.js";
|
|
6
|
+
import * as ActorDefs from "../actor/defs.defs.js";
|
|
6
7
|
const $nsid = "app.bsky.unspecced.getAtmosphereExploreTab";
|
|
7
8
|
export { $nsid };
|
|
8
9
|
export const $params = /*#__PURE__*/ l.params({ "langs": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({ "format": "language" }))), "countryCode": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()), "regionCode": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()) });
|
|
@@ -30,6 +31,6 @@ const livestreamItem = /*#__PURE__*/ l.typedObject($nsid, "livestreamItem", /*#_
|
|
|
30
31
|
export { livestreamItem };
|
|
31
32
|
const announcementBanner = /*#__PURE__*/ l.typedObject($nsid, "announcementBanner", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "image": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })) }));
|
|
32
33
|
export { announcementBanner };
|
|
33
|
-
const appCard = /*#__PURE__*/ l.typedObject($nsid, "appCard", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "logo": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "backgroundImage": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "category": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })) }));
|
|
34
|
+
const appCard = /*#__PURE__*/ l.typedObject($nsid, "appCard", /*#__PURE__*/ l.object({ "id": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "title": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "description": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "logo": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "backgroundImage": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "overlayColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "textColor": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "url": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "format": "uri", "maxLength": 4096 })), "category": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({ "maxLength": 4096 })), "profile": /*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref((() => ActorDefs.profileViewDetailed))) }));
|
|
34
35
|
export { appCard };
|
|
35
36
|
//# sourceMappingURL=getAtmosphereExploreTab.defs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAtmosphereExploreTab.defs.js","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * THIS FILE WAS GENERATED BY \"@atproto/lex\". DO NOT EDIT.\n */\n\nimport { l } from \"@atproto/lex\";\nimport * as EmbedExternal from \"../embed/external.defs.js\";\n\nconst $nsid = \"app.bsky.unspecced.getAtmosphereExploreTab\";\n\ntype $nsid = typeof $nsid;\n\nexport { $nsid };\n\nexport const $params = /*#__PURE__*/ l.params({\"langs\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({\"format\":\"language\"}), )),\"countryCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),\"regionCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())});\n\nexport type $Params = l.InferOutput<typeof $params>;\n\nexport const $output = /*#__PURE__*/ l.jsonPayload({\"announcementBanner\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<AnnouncementBanner>((() => announcementBanner) as any)),\"articles\":/*#__PURE__*/ l.ref<ArticleList>((() => articleList) as any),\"publications\":/*#__PURE__*/ l.ref<PublicationList>((() => publicationList) as any),\"photos\":/*#__PURE__*/ l.ref<GalleryList>((() => galleryList) as any),\"livestreams\":/*#__PURE__*/ l.ref<LivestreamList>((() => livestreamList) as any),\"apps\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<AppCard>((() => appCard) as any), {\"maxLength\":100})});\n\nexport type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;\nexport type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;\n\n/** Get Atmosphere Explore content. Articles are recommended when algorithmic recommendations are enabled for the request, and curated otherwise; other sections are curated. Authentication is optional; authenticated requests include viewer-specific profile state. */\nconst main = /*#__PURE__*/ l.query($nsid, $params, $output);\n\nexport { main };\n\nconst $lxm = $nsid;\n\ntype $lxm = typeof $lxm;\n\nexport { $lxm };\n\ntype ArticleList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleList\";\"items\":(ArticleItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { ArticleList };\n\nconst articleList = /*#__PURE__*/ l.typedObject<ArticleList>($nsid, \"articleList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<ArticleItem>((() => articleItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { articleList };\n\ntype PublicationList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationList\";\"items\":(PublicationItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { PublicationList };\n\nconst publicationList = /*#__PURE__*/ l.typedObject<PublicationList>($nsid, \"publicationList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<PublicationItem>((() => publicationItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { publicationList };\n\ntype GalleryList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryList\";\"items\":(GalleryItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { GalleryList };\n\nconst galleryList = /*#__PURE__*/ l.typedObject<GalleryList>($nsid, \"galleryList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<GalleryItem>((() => galleryItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { galleryList };\n\ntype LivestreamList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamList\";\"items\":(LivestreamItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { LivestreamList };\n\nconst livestreamList = /*#__PURE__*/ l.typedObject<LivestreamList>($nsid, \"livestreamList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<LivestreamItem>((() => livestreamItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { livestreamList };\n\ntype ArticleItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewArticle };\n\nexport type { ArticleItem };\n\nconst articleItem = /*#__PURE__*/ l.typedObject<ArticleItem>($nsid, \"articleItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticle>((() => EmbedExternal.viewArticle) as any)}));\n\nexport { articleItem };\n\ntype PublicationItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewArticlePublication };\n\nexport type { PublicationItem };\n\nconst publicationItem = /*#__PURE__*/ l.typedObject<PublicationItem>($nsid, \"publicationItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticlePublication>((() => EmbedExternal.viewArticlePublication) as any)}));\n\nexport { publicationItem };\n\ntype GalleryItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewGallery };\n\nexport type { GalleryItem };\n\nconst galleryItem = /*#__PURE__*/ l.typedObject<GalleryItem>($nsid, \"galleryItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewGallery>((() => EmbedExternal.viewGallery) as any)}));\n\nexport { galleryItem };\n\ntype LivestreamItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem\";\"featured\":boolean;\"view\":EmbedExternal.ViewLivestream };\n\nexport type { LivestreamItem };\n\nconst livestreamItem = /*#__PURE__*/ l.typedObject<LivestreamItem>($nsid, \"livestreamItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewLivestream>((() => EmbedExternal.viewLivestream) as any)}));\n\nexport { livestreamItem };\n\ntype AnnouncementBanner = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#announcementBanner\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"url\"?:l.UriString;\"image\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string };\n\nexport type { AnnouncementBanner };\n\nconst announcementBanner = /*#__PURE__*/ l.typedObject<AnnouncementBanner>($nsid, \"announcementBanner\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"image\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { announcementBanner };\n\ntype AppCard = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#appCard\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"logo\"?:l.UriString;\"backgroundImage\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string;\"url\"?:l.UriString;\"category\"?:string };\n\nexport type { AppCard };\n\nconst appCard = /*#__PURE__*/ l.typedObject<AppCard>($nsid, \"appCard\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"logo\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"backgroundImage\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"category\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { appCard };\n"]}
|
|
1
|
+
{"version":3,"file":"getAtmosphereExploreTab.defs.js","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * THIS FILE WAS GENERATED BY \"@atproto/lex\". DO NOT EDIT.\n */\n\nimport { l } from \"@atproto/lex\";\nimport * as EmbedExternal from \"../embed/external.defs.js\";\nimport * as ActorDefs from \"../actor/defs.defs.js\";\n\nconst $nsid = \"app.bsky.unspecced.getAtmosphereExploreTab\";\n\ntype $nsid = typeof $nsid;\n\nexport { $nsid };\n\nexport const $params = /*#__PURE__*/ l.params({\"langs\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.array(/*#__PURE__*/ l.string({\"format\":\"language\"}), )),\"countryCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string()),\"regionCode\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())});\n\nexport type $Params = l.InferOutput<typeof $params>;\n\nexport const $output = /*#__PURE__*/ l.jsonPayload({\"announcementBanner\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<AnnouncementBanner>((() => announcementBanner) as any)),\"articles\":/*#__PURE__*/ l.ref<ArticleList>((() => articleList) as any),\"publications\":/*#__PURE__*/ l.ref<PublicationList>((() => publicationList) as any),\"photos\":/*#__PURE__*/ l.ref<GalleryList>((() => galleryList) as any),\"livestreams\":/*#__PURE__*/ l.ref<LivestreamList>((() => livestreamList) as any),\"apps\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<AppCard>((() => appCard) as any), {\"maxLength\":100})});\n\nexport type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;\nexport type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;\n\n/** Get Atmosphere Explore content. Articles are recommended when algorithmic recommendations are enabled for the request, and curated otherwise; other sections are curated. Authentication is optional; authenticated requests include viewer-specific profile state. */\nconst main = /*#__PURE__*/ l.query($nsid, $params, $output);\n\nexport { main };\n\nconst $lxm = $nsid;\n\ntype $lxm = typeof $lxm;\n\nexport { $lxm };\n\ntype ArticleList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleList\";\"items\":(ArticleItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { ArticleList };\n\nconst articleList = /*#__PURE__*/ l.typedObject<ArticleList>($nsid, \"articleList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<ArticleItem>((() => articleItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { articleList };\n\ntype PublicationList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationList\";\"items\":(PublicationItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { PublicationList };\n\nconst publicationList = /*#__PURE__*/ l.typedObject<PublicationList>($nsid, \"publicationList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<PublicationItem>((() => publicationItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { publicationList };\n\ntype GalleryList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryList\";\"items\":(GalleryItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { GalleryList };\n\nconst galleryList = /*#__PURE__*/ l.typedObject<GalleryList>($nsid, \"galleryList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<GalleryItem>((() => galleryItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { galleryList };\n\ntype LivestreamList = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamList\";\"items\":(LivestreamItem)[];\n\n /**\n * Snowflake for this list's recommendation, use when submitting recommendation events. Omitted when the list is not algorithmically recommended.\n */\n \"recIdStr\"?:string };\n\nexport type { LivestreamList };\n\nconst livestreamList = /*#__PURE__*/ l.typedObject<LivestreamList>($nsid, \"livestreamList\", /*#__PURE__*/ l.object({\"items\":/*#__PURE__*/ l.array(/*#__PURE__*/ l.ref<LivestreamItem>((() => livestreamItem) as any), ),\"recIdStr\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string())}));\n\nexport { livestreamList };\n\ntype ArticleItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#articleItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewArticle };\n\nexport type { ArticleItem };\n\nconst articleItem = /*#__PURE__*/ l.typedObject<ArticleItem>($nsid, \"articleItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticle>((() => EmbedExternal.viewArticle) as any)}));\n\nexport { articleItem };\n\ntype PublicationItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#publicationItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewArticlePublication };\n\nexport type { PublicationItem };\n\nconst publicationItem = /*#__PURE__*/ l.typedObject<PublicationItem>($nsid, \"publicationItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewArticlePublication>((() => EmbedExternal.viewArticlePublication) as any)}));\n\nexport { publicationItem };\n\ntype GalleryItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#galleryItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewGallery };\n\nexport type { GalleryItem };\n\nconst galleryItem = /*#__PURE__*/ l.typedObject<GalleryItem>($nsid, \"galleryItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewGallery>((() => EmbedExternal.viewGallery) as any)}));\n\nexport { galleryItem };\n\ntype LivestreamItem = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#livestreamItem\";\n\n /**\n * @deprecated . Retained for compatibility; always false.\n */\n \"featured\":boolean;\"view\":EmbedExternal.ViewLivestream };\n\nexport type { LivestreamItem };\n\nconst livestreamItem = /*#__PURE__*/ l.typedObject<LivestreamItem>($nsid, \"livestreamItem\", /*#__PURE__*/ l.object({\"featured\":/*#__PURE__*/ l.boolean(),\"view\":/*#__PURE__*/ l.ref<EmbedExternal.ViewLivestream>((() => EmbedExternal.viewLivestream) as any)}));\n\nexport { livestreamItem };\n\ntype AnnouncementBanner = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#announcementBanner\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\"url\"?:l.UriString;\"image\"?:l.UriString;\"overlayColor\"?:string;\"textColor\"?:string };\n\nexport type { AnnouncementBanner };\n\nconst announcementBanner = /*#__PURE__*/ l.typedObject<AnnouncementBanner>($nsid, \"announcementBanner\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"image\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096}))}));\n\nexport { announcementBanner };\n\ntype AppCard = { $type?: \"app.bsky.unspecced.getAtmosphereExploreTab#appCard\";\"id\"?:string;\"title\"?:string;\"description\"?:string;\n\n /**\n * Compatibility field. The profile avatar when available, otherwise the editorial logo.\n */\n \"logo\"?:l.UriString;\n\n /**\n * Compatibility field. The profile banner when available, otherwise the editorial background image.\n */\n \"backgroundImage\"?:l.UriString;\n\n /**\n * @deprecated . Retained for compatibility.\n */\n \"overlayColor\"?:string;\n\n /**\n * @deprecated . Retained for compatibility.\n */\n \"textColor\"?:string;\"url\"?:l.UriString;\"category\"?:string;\n\n /**\n * The app's account profile, when available.\n */\n \"profile\"?:ActorDefs.ProfileViewDetailed };\n\nexport type { AppCard };\n\nconst appCard = /*#__PURE__*/ l.typedObject<AppCard>($nsid, \"appCard\", /*#__PURE__*/ l.object({\"id\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"title\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"description\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"logo\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"backgroundImage\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"overlayColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"textColor\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"url\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"format\":\"uri\",\"maxLength\":4096})),\"category\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.string({\"maxLength\":4096})),\"profile\":/*#__PURE__*/ l.optional(/*#__PURE__*/ l.ref<ActorDefs.ProfileViewDetailed>((() => ActorDefs.profileViewDetailed) as any))}));\n\nexport { appCard };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAtmosphereTimeline.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereTimeline.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { l } from "@atproto/lex";
|
|
2
|
+
import * as EmbedExternal from "../embed/external.defs.js";
|
|
3
|
+
import * as FeedDefs from "../feed/defs.defs.js";
|
|
4
|
+
import * as ActorDefs from "../actor/defs.defs.js";
|
|
5
|
+
declare const $nsid = "app.bsky.unspecced.getAtmosphereTimeline";
|
|
6
|
+
type $nsid = typeof $nsid;
|
|
7
|
+
export { $nsid };
|
|
8
|
+
export declare const $params: l.ParamsSchema<{
|
|
9
|
+
readonly cursor: l.OptionalSchema<l.StringSchema<{}>>;
|
|
10
|
+
}>;
|
|
11
|
+
export type $Params = l.InferOutput<typeof $params>;
|
|
12
|
+
export declare const $output: l.Payload<"application/json", l.ObjectSchema<{
|
|
13
|
+
cursor: l.OptionalSchema<l.StringSchema<{}>>;
|
|
14
|
+
feed: l.ArraySchema<l.TypedUnionSchema<readonly [l.TypedRefSchema<l.TypedObjectValidator<ActivityItem, ActivityItem>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityItemOverflow, ActivityItemOverflow>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityGroup, ActivityGroup>>], false>>;
|
|
15
|
+
}>>;
|
|
16
|
+
export type $Output<B = l.BinaryData> = l.InferPayload<typeof $output, B>;
|
|
17
|
+
export type $OutputBody<B = l.BinaryData> = l.InferPayloadBody<typeof $output, B>;
|
|
18
|
+
/** Get the authenticated viewer's Atmosphere activity timeline. Grouping and related activity are limited to the returned page. */
|
|
19
|
+
declare const main: l.Query<"app.bsky.unspecced.getAtmosphereTimeline", l.ParamsSchema<{
|
|
20
|
+
readonly cursor: l.OptionalSchema<l.StringSchema<{}>>;
|
|
21
|
+
}>, l.Payload<"application/json", l.ObjectSchema<{
|
|
22
|
+
cursor: l.OptionalSchema<l.StringSchema<{}>>;
|
|
23
|
+
feed: l.ArraySchema<l.TypedUnionSchema<readonly [l.TypedRefSchema<l.TypedObjectValidator<ActivityItem, ActivityItem>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityItemOverflow, ActivityItemOverflow>>, l.TypedRefSchema<l.TypedObjectValidator<ActivityGroup, ActivityGroup>>], false>>;
|
|
24
|
+
}>>, undefined>;
|
|
25
|
+
export { main };
|
|
26
|
+
declare const $lxm = "app.bsky.unspecced.getAtmosphereTimeline";
|
|
27
|
+
type $lxm = typeof $lxm;
|
|
28
|
+
export { $lxm };
|
|
29
|
+
type ActivityRecord = {
|
|
30
|
+
$type?: "app.bsky.unspecced.getAtmosphereTimeline#activityRecord";
|
|
31
|
+
"uri": l.AtUriString;
|
|
32
|
+
"cid": l.CidString;
|
|
33
|
+
"indexedAt": l.DatetimeString;
|
|
34
|
+
};
|
|
35
|
+
export type { ActivityRecord };
|
|
36
|
+
declare const activityRecord: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityRecord", l.Validator<ActivityRecord, ActivityRecord>>;
|
|
37
|
+
export { activityRecord };
|
|
38
|
+
type ViewerState = {
|
|
39
|
+
$type?: "app.bsky.unspecced.getAtmosphereTimeline#viewerState";
|
|
40
|
+
"subscribed": boolean;
|
|
41
|
+
};
|
|
42
|
+
export type { ViewerState };
|
|
43
|
+
declare const viewerState: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#viewerState", l.Validator<ViewerState, ViewerState>>;
|
|
44
|
+
export { viewerState };
|
|
45
|
+
type ActivityItem = {
|
|
46
|
+
$type?: "app.bsky.unspecced.getAtmosphereTimeline#activityItem";
|
|
47
|
+
"record": ActivityRecord;
|
|
48
|
+
"collection": l.NsidString;
|
|
49
|
+
"viewerState": ViewerState;
|
|
50
|
+
"view"?: l.$Typed<EmbedExternal.ViewArticle> | l.$Typed<EmbedExternal.ViewArticlePublication> | l.$Typed<EmbedExternal.ViewGallery> | l.$Typed<EmbedExternal.ViewLivestream> | l.$Typed<FeedDefs.PostView> | l.Unknown$TypedObject;
|
|
51
|
+
/**
|
|
52
|
+
* Recommendations and shares attached to this article. Attached activities do not themselves contain related activity.
|
|
53
|
+
*/
|
|
54
|
+
"relatedActivity"?: (ActivityItem)[];
|
|
55
|
+
};
|
|
56
|
+
export type { ActivityItem };
|
|
57
|
+
declare const activityItem: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityItem", l.Validator<ActivityItem, ActivityItem>>;
|
|
58
|
+
export { activityItem };
|
|
59
|
+
/** Distinct additional activities omitted from this page for an author and collection, without hydrating the omitted records. */
|
|
60
|
+
type ActivityItemOverflow = {
|
|
61
|
+
$type?: "app.bsky.unspecced.getAtmosphereTimeline#activityItemOverflow";
|
|
62
|
+
"count": number;
|
|
63
|
+
"collection": l.NsidString;
|
|
64
|
+
"associatedProfiles": (ActorDefs.ProfileViewBasic)[];
|
|
65
|
+
};
|
|
66
|
+
export type { ActivityItemOverflow };
|
|
67
|
+
/** Distinct additional activities omitted from this page for an author and collection, without hydrating the omitted records. */
|
|
68
|
+
declare const activityItemOverflow: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityItemOverflow", l.Validator<ActivityItemOverflow, ActivityItemOverflow>>;
|
|
69
|
+
export { activityItemOverflow };
|
|
70
|
+
/** Two or more activities of the same collection, within a fixed window anchored at the newest member. The group occupies the newest member's position. */
|
|
71
|
+
type ActivityGroup = {
|
|
72
|
+
$type?: "app.bsky.unspecced.getAtmosphereTimeline#activityGroup";
|
|
73
|
+
"id": string;
|
|
74
|
+
"groupBy": "subject" | "actor" | l.UnknownString;
|
|
75
|
+
"collection": l.NsidString;
|
|
76
|
+
"indexedAt": l.DatetimeString;
|
|
77
|
+
"items": (ActivityItem)[];
|
|
78
|
+
"subject"?: l.AtUriString;
|
|
79
|
+
"actor"?: l.DidString;
|
|
80
|
+
};
|
|
81
|
+
export type { ActivityGroup };
|
|
82
|
+
/** Two or more activities of the same collection, within a fixed window anchored at the newest member. The group occupies the newest member's position. */
|
|
83
|
+
declare const activityGroup: l.TypedObjectSchema<"app.bsky.unspecced.getAtmosphereTimeline#activityGroup", l.Validator<ActivityGroup, ActivityGroup>>;
|
|
84
|
+
export { activityGroup };
|
|
85
|
+
//# sourceMappingURL=getAtmosphereTimeline.defs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAtmosphereTimeline.defs.d.ts","sourceRoot":"","sources":["../../../../../src/lexicons/app/bsky/unspecced/getAtmosphereTimeline.defs.ts"],"names":[],"mappings":"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"}
|