@atproto/bsky 0.1.6 → 0.2.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 +58 -0
- package/dist/api/app/bsky/actor/getProfile.js +1 -1
- package/dist/api/app/bsky/actor/getProfile.js.map +1 -1
- package/dist/api/app/bsky/actor/getProfiles.js +1 -1
- package/dist/api/app/bsky/actor/getProfiles.js.map +1 -1
- package/dist/api/app/bsky/actor/getSuggestions.js +2 -2
- package/dist/api/app/bsky/actor/getSuggestions.js.map +1 -1
- package/dist/api/app/bsky/embed/getEmbedExternalView.d.ts.map +1 -1
- package/dist/api/app/bsky/embed/getEmbedExternalView.js +132 -53
- package/dist/api/app/bsky/embed/getEmbedExternalView.js.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/getAuthorFeed.js +4 -2
- package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js +2 -2
- package/dist/api/app/bsky/graph/getSuggestedFollowsByActor.js.map +1 -1
- package/dist/api/app/bsky/notification/constants.d.ts +4 -1
- package/dist/api/app/bsky/notification/constants.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/constants.js +3 -0
- package/dist/api/app/bsky/notification/constants.js.map +1 -1
- package/dist/api/app/bsky/notification/getGroupedNotifications.js +19 -7
- package/dist/api/app/bsky/notification/getGroupedNotifications.js.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.d.ts.map +1 -1
- package/dist/api/app/bsky/notification/grouping/spotlight.js +114 -80
- package/dist/api/app/bsky/notification/grouping/spotlight.js.map +1 -1
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js +3 -2
- package/dist/api/app/bsky/notification/listActivitySubscriptions.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.d.ts +4 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.d.ts.map +1 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js +142 -0
- package/dist/api/app/bsky/unspecced/getAtmosphereExploreTab.js.map +1 -0
- 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.js +4 -1
- package/dist/api/internal/bsky/actor/getProfiles.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/data-plane/server/indexing/index.d.ts +3 -1
- package/dist/data-plane/server/indexing/index.d.ts.map +1 -1
- package/dist/data-plane/server/indexing/index.js +2 -0
- package/dist/data-plane/server/indexing/index.js.map +1 -1
- package/dist/data-plane/server/indexing/plugins/profile-link.d.ts +8 -0
- package/dist/data-plane/server/indexing/plugins/profile-link.d.ts.map +1 -0
- package/dist/data-plane/server/indexing/plugins/profile-link.js +30 -0
- package/dist/data-plane/server/indexing/plugins/profile-link.js.map +1 -0
- package/dist/data-plane/server/routes/records.d.ts.map +1 -1
- package/dist/data-plane/server/routes/records.js +1 -0
- package/dist/data-plane/server/routes/records.js.map +1 -1
- package/dist/hydration/actor.d.ts +4 -1
- package/dist/hydration/actor.d.ts.map +1 -1
- package/dist/hydration/actor.js +11 -0
- package/dist/hydration/actor.js.map +1 -1
- package/dist/hydration/external.d.ts +74 -70
- package/dist/hydration/external.d.ts.map +1 -1
- package/dist/hydration/external.js +79 -133
- package/dist/hydration/external.js.map +1 -1
- package/dist/hydration/hydrator.d.ts +57 -14
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +417 -105
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/lexicons/app/bsky/actor/defs.defs.d.ts +24 -0
- package/dist/lexicons/app/bsky/actor/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor/defs.defs.js +13 -0
- package/dist/lexicons/app/bsky/actor/defs.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/actor/link.d.ts +3 -0
- package/dist/lexicons/app/bsky/actor/link.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/actor/link.defs.d.ts +105 -0
- package/dist/lexicons/app/bsky/actor/link.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/actor/link.defs.js +34 -0
- package/dist/lexicons/app/bsky/actor/link.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/actor/link.js +6 -0
- package/dist/lexicons/app/bsky/actor/link.js.map +1 -0
- package/dist/lexicons/app/bsky/actor/profile.defs.d.ts +14 -0
- package/dist/lexicons/app/bsky/actor/profile.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor/profile.defs.js +3 -0
- package/dist/lexicons/app/bsky/actor/profile.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/actor.d.ts +1 -0
- package/dist/lexicons/app/bsky/actor.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/actor.js +1 -0
- package/dist/lexicons/app/bsky/actor.js.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.js +1 -0
- package/dist/lexicons/app/bsky/authFullApp.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/authManageProfile.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authManageProfile.defs.js +1 -0
- package/dist/lexicons/app/bsky/authManageProfile.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/external.defs.d.ts +130 -0
- package/dist/lexicons/app/bsky/embed/external.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/external.defs.js +135 -0
- package/dist/lexicons/app/bsky/embed/external.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/embed/getEmbedExternalView.defs.d.ts +15 -3
- package/dist/lexicons/app/bsky/embed/getEmbedExternalView.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/embed/getEmbedExternalView.defs.js +18 -3
- package/dist/lexicons/app/bsky/embed/getEmbedExternalView.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/notification/getGroupedNotifications.defs.d.ts +62 -3
- package/dist/lexicons/app/bsky/notification/getGroupedNotifications.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/notification/getGroupedNotifications.defs.js +53 -2
- package/dist/lexicons/app/bsky/notification/getGroupedNotifications.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.d.ts +3 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts +103 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js +95 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.js +6 -0
- package/dist/lexicons/app/bsky/unspecced/getAtmosphereExploreTab.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/index.d.ts +2 -0
- package/dist/lexicons/index.d.ts.map +1 -1
- package/dist/lexicons/index.js +2 -0
- package/dist/lexicons/index.js.map +1 -1
- package/dist/lexicons/place/stream/badge/defs.d.ts +2 -0
- package/dist/lexicons/place/stream/badge/defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/badge/defs.defs.d.ts +131 -0
- package/dist/lexicons/place/stream/badge/defs.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/badge/defs.defs.js +73 -0
- package/dist/lexicons/place/stream/badge/defs.defs.js.map +1 -0
- package/dist/lexicons/place/stream/badge/defs.js +5 -0
- package/dist/lexicons/place/stream/badge/defs.js.map +1 -0
- package/dist/lexicons/place/stream/badge.d.ts +2 -0
- package/dist/lexicons/place/stream/badge.d.ts.map +1 -0
- package/dist/lexicons/place/stream/badge.js +5 -0
- package/dist/lexicons/place/stream/badge.js.map +1 -0
- package/dist/lexicons/place/stream/chat/defs.d.ts +2 -0
- package/dist/lexicons/place/stream/chat/defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/defs.defs.d.ts +44 -0
- package/dist/lexicons/place/stream/chat/defs.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/defs.defs.js +41 -0
- package/dist/lexicons/place/stream/chat/defs.defs.js.map +1 -0
- package/dist/lexicons/place/stream/chat/defs.js +5 -0
- package/dist/lexicons/place/stream/chat/defs.js.map +1 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.d.ts +3 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.defs.d.ts +108 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.defs.js +31 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.defs.js.map +1 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.js +6 -0
- package/dist/lexicons/place/stream/chat/pinnedRecord.js.map +1 -0
- package/dist/lexicons/place/stream/chat/profile.d.ts +3 -0
- package/dist/lexicons/place/stream/chat/profile.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/profile.defs.d.ts +143 -0
- package/dist/lexicons/place/stream/chat/profile.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat/profile.defs.js +62 -0
- package/dist/lexicons/place/stream/chat/profile.defs.js.map +1 -0
- package/dist/lexicons/place/stream/chat/profile.js +6 -0
- package/dist/lexicons/place/stream/chat/profile.js.map +1 -0
- package/dist/lexicons/place/stream/chat.d.ts +4 -0
- package/dist/lexicons/place/stream/chat.d.ts.map +1 -0
- package/dist/lexicons/place/stream/chat.js +7 -0
- package/dist/lexicons/place/stream/chat.js.map +1 -0
- package/dist/lexicons/place/stream/defs.d.ts +2 -0
- package/dist/lexicons/place/stream/defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/defs.defs.d.ts +54 -0
- package/dist/lexicons/place/stream/defs.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/defs.defs.js +40 -0
- package/dist/lexicons/place/stream/defs.defs.js.map +1 -0
- package/dist/lexicons/place/stream/defs.js +5 -0
- package/dist/lexicons/place/stream/defs.js.map +1 -0
- package/dist/lexicons/place/stream/livestream.d.ts +3 -0
- package/dist/lexicons/place/stream/livestream.d.ts.map +1 -0
- package/dist/lexicons/place/stream/livestream.defs.d.ts +312 -0
- package/dist/lexicons/place/stream/livestream.defs.d.ts.map +1 -0
- package/dist/lexicons/place/stream/livestream.defs.js +105 -0
- package/dist/lexicons/place/stream/livestream.defs.js.map +1 -0
- package/dist/lexicons/place/stream/livestream.js +6 -0
- package/dist/lexicons/place/stream/livestream.js.map +1 -0
- package/dist/lexicons/place/stream.d.ts +5 -0
- package/dist/lexicons/place/stream.d.ts.map +1 -0
- package/dist/lexicons/place/stream.js +8 -0
- package/dist/lexicons/place/stream.js.map +1 -0
- package/dist/lexicons/place.d.ts +2 -0
- package/dist/lexicons/place.d.ts.map +1 -0
- package/dist/lexicons/place.js +5 -0
- package/dist/lexicons/place.js.map +1 -0
- package/dist/lexicons/site/standard/document.defs.d.ts +127 -127
- package/dist/lexicons/site/standard/document.defs.d.ts.map +1 -1
- package/dist/lexicons/site/standard/document.defs.js +28 -28
- package/dist/lexicons/site/standard/document.defs.js.map +1 -1
- package/dist/lexicons/site/standard/graph/recommend.defs.d.ts +11 -11
- package/dist/lexicons/site/standard/graph/recommend.defs.d.ts.map +1 -1
- package/dist/lexicons/site/standard/graph/recommend.defs.js +1 -1
- package/dist/lexicons/site/standard/graph/recommend.defs.js.map +1 -1
- package/dist/lexicons/site/standard/publication.defs.d.ts +52 -52
- package/dist/lexicons/site/standard/publication.defs.d.ts.map +1 -1
- package/dist/lexicons/site/standard/publication.defs.js +6 -6
- package/dist/lexicons/site/standard/publication.defs.js.map +1 -1
- package/dist/lexicons/site/standard/theme/basic.defs.d.ts +14 -14
- package/dist/lexicons/site/standard/theme/basic.defs.d.ts.map +1 -1
- package/dist/lexicons/site/standard/theme/basic.defs.js +1 -1
- package/dist/lexicons/site/standard/theme/basic.defs.js.map +1 -1
- package/dist/lexicons/social/grain/defs.d.ts +2 -0
- package/dist/lexicons/social/grain/defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/defs.defs.d.ts +15 -0
- package/dist/lexicons/social/grain/defs.defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/defs.defs.js +14 -0
- package/dist/lexicons/social/grain/defs.defs.js.map +1 -0
- package/dist/lexicons/social/grain/defs.js +5 -0
- package/dist/lexicons/social/grain/defs.js.map +1 -0
- package/dist/lexicons/social/grain/favorite.d.ts +3 -0
- package/dist/lexicons/social/grain/favorite.d.ts.map +1 -0
- package/dist/lexicons/social/grain/favorite.defs.d.ts +72 -0
- package/dist/lexicons/social/grain/favorite.defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/favorite.defs.js +26 -0
- package/dist/lexicons/social/grain/favorite.defs.js.map +1 -0
- package/dist/lexicons/social/grain/favorite.js +6 -0
- package/dist/lexicons/social/grain/favorite.js.map +1 -0
- package/dist/lexicons/social/grain/gallery/item.d.ts +3 -0
- package/dist/lexicons/social/grain/gallery/item.d.ts.map +1 -0
- package/dist/lexicons/social/grain/gallery/item.defs.d.ts +94 -0
- package/dist/lexicons/social/grain/gallery/item.defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/gallery/item.defs.js +29 -0
- package/dist/lexicons/social/grain/gallery/item.defs.js.map +1 -0
- package/dist/lexicons/social/grain/gallery/item.js +6 -0
- package/dist/lexicons/social/grain/gallery/item.js.map +1 -0
- package/dist/lexicons/social/grain/gallery.d.ts +4 -0
- package/dist/lexicons/social/grain/gallery.d.ts.map +1 -0
- package/dist/lexicons/social/grain/gallery.defs.d.ts +98 -0
- package/dist/lexicons/social/grain/gallery.defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/gallery.defs.js +33 -0
- package/dist/lexicons/social/grain/gallery.defs.js.map +1 -0
- package/dist/lexicons/social/grain/gallery.js +7 -0
- package/dist/lexicons/social/grain/gallery.js.map +1 -0
- package/dist/lexicons/social/grain/photo.d.ts +3 -0
- package/dist/lexicons/social/grain/photo.d.ts.map +1 -0
- package/dist/lexicons/social/grain/photo.defs.d.ts +98 -0
- package/dist/lexicons/social/grain/photo.defs.d.ts.map +1 -0
- package/dist/lexicons/social/grain/photo.defs.js +31 -0
- package/dist/lexicons/social/grain/photo.defs.js.map +1 -0
- package/dist/lexicons/social/grain/photo.js +6 -0
- package/dist/lexicons/social/grain/photo.js.map +1 -0
- package/dist/lexicons/social/grain.d.ts +5 -0
- package/dist/lexicons/social/grain.d.ts.map +1 -0
- package/dist/lexicons/social/grain.js +8 -0
- package/dist/lexicons/social/grain.js.map +1 -0
- package/dist/lexicons/social.d.ts +2 -0
- package/dist/lexicons/social.d.ts.map +1 -0
- package/dist/lexicons/social.js +5 -0
- package/dist/lexicons/social.js.map +1 -0
- package/dist/proto/bsky_connect.d.ts +10 -1
- package/dist/proto/bsky_connect.d.ts.map +1 -1
- package/dist/proto/bsky_connect.js +10 -1
- package/dist/proto/bsky_connect.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +34 -0
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +60 -0
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/telemetry/events.d.ts +30 -0
- package/dist/telemetry/events.d.ts.map +1 -1
- package/dist/telemetry/events.js +37 -0
- package/dist/telemetry/events.js.map +1 -1
- package/dist/util/external/index.d.ts +8 -0
- package/dist/util/external/index.d.ts.map +1 -0
- package/dist/util/external/index.js +50 -0
- package/dist/util/external/index.js.map +1 -0
- package/dist/util/{standard-site.d.ts → external/standard-site.d.ts} +30 -4
- package/dist/util/external/standard-site.d.ts.map +1 -0
- package/dist/util/{standard-site.js → external/standard-site.js} +73 -4
- package/dist/util/external/standard-site.js.map +1 -0
- package/dist/views/external.d.ts +8 -0
- package/dist/views/external.d.ts.map +1 -0
- package/dist/views/external.js +260 -0
- package/dist/views/external.js.map +1 -0
- package/dist/views/index.d.ts +12 -6
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +89 -42
- package/dist/views/index.js.map +1 -1
- package/dist/views/profile-link-rules.d.ts +10 -0
- package/dist/views/profile-link-rules.d.ts.map +1 -0
- package/dist/views/profile-link-rules.js +48 -0
- package/dist/views/profile-link-rules.js.map +1 -0
- package/dist/views/types.d.ts +3 -0
- package/dist/views/types.d.ts.map +1 -1
- package/dist/views/types.js.map +1 -1
- package/package.json +4 -4
- package/dist/util/standard-site.d.ts.map +0 -1
- package/dist/util/standard-site.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spotlight.js","sourceRoot":"","sources":["../../../../../../src/api/app/bsky/notification/grouping/spotlight.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport type { DidString } from '@atproto/lex'\nimport { AtUri } from '@atproto/syntax'\nimport { app } from '../../../../../lexicons/index.js'\nimport {\n APPVIEW_NOTIFICATION_REASON,\n NOTIFICATION_REASON,\n} from '../constants.js'\nimport type {\n GroupingResult,\n NotificationGroup,\n NotificationItem,\n} from './grouping.js'\nimport {\n MAX_GROUP_SIZE,\n compareNotificationGroupsNewestFirst,\n isNotificationRead,\n} from './shared.js'\n\nconst MULTI_POST_LIKE_RANGES = [\n { maxItems: 200, requiredPosts: 4 },\n { maxItems: 500, requiredPosts: 8 },\n]\n\ntype SpotlightCandidate = Pick<\n NotificationGroup,\n 'kind' | 'groupingKey' | 'items'\n> & {\n isEligibleAfterTrimming: (\n spotlightItems: NotificationItem[],\n retainedItems: NotificationItem[],\n ) => boolean\n}\n\nexport const buildSpotlight = (\n items: NotificationItem[],\n groups: NotificationGroup[],\n cursor: string | undefined,\n limit: number,\n seenAt: number | undefined,\n): GroupingResult => {\n const noSpotlightPage = { groups, cursor }\n const itemCount = groups.reduce(\n (count, group) => count + group.items.length,\n 0,\n )\n\n // Grouping consumes a continuous raw prefix, even when groups interleave.\n // items contains all fetched notifications, but grouping may stop before consuming them all;\n // itemCount counts notifications included in the ordinary groups, and pageItems contains the notifications on the page.\n const pageItems = items.slice(0, itemCount)\n const spotlight = selectMultiPostLikeSpotlight(pageItems)\n if (!spotlight) return noSpotlightPage\n\n const selectedItems = new Set(spotlight.items)\n const positions = new Map(pageItems.map((item, index) => [item, index]))\n const proposedGroups = mapDefined(\n [\n ...groups.map((group) => ({\n // Filtering may remove notifications from this group; build a new group with only the remaining items and their updated metadata.\n kind: group.kind,\n groupingKey: group.groupingKey,\n items: group.items.filter((item) => !selectedItems.has(item)),\n })),\n spotlight,\n ],\n (group): NotificationGroup | undefined => {\n const newest = group.items[0]\n const oldest = group.items.at(-1)\n if (!newest || !oldest) return\n\n // Filtering may remove notifications from this group; build a new group with only the remaining items and their updated metadata.\n return {\n kind: group.kind,\n groupingKey: group.groupingKey,\n id: newest.id,\n items: group.items,\n actorDids: group.items.map((item) => item.actorDid),\n itemCount: group.items.length,\n indexedAt: newest.raw.indexedAt,\n firstIndexedAt: oldest.raw.indexedAt,\n isRead: isNotificationRead(newest.raw.indexedAt, seenAt),\n }\n },\n ).sort(compareNotificationGroupsNewestFirst)\n\n let retainedItems = pageItems\n const extraGroup = proposedGroups[limit]\n if (extraGroup) {\n const cutoff = positions.get(extraGroup.items[0]!)!\n retainedItems = pageItems.slice(0, cutoff)\n cursor = pageItems[cutoff - 1]!.raw.indexedAt\n // Trimming every group at one raw position preserves the page prefix.\n for (const group of proposedGroups) {\n group.items = group.items.filter((item) => positions.get(item)! < cutoff)\n group.actorDids = group.items.map((item) => item.actorDid)\n group.itemCount = group.items.length\n const oldest = group.items.at(-1)\n if (oldest) group.firstIndexedAt = oldest.raw.indexedAt\n }\n }\n\n const spotlightItems = retainedItems.filter((item) => selectedItems.has(item))\n if (!spotlight.isEligibleAfterTrimming(spotlightItems, retainedItems)) {\n return noSpotlightPage\n }\n\n return {\n cursor,\n groups: proposedGroups.filter((group) => group.items.length > 0),\n }\n}\n\nconst selectMultiPostLikeSpotlight = (\n items: NotificationItem[],\n): SpotlightCandidate | undefined => {\n const range = MULTI_POST_LIKE_RANGES.find(\n ({ maxItems }) => items.length <= maxItems,\n )\n if (!range) return\n\n // Eligibility uses the ordinary page's volume, including after trimming.\n const { requiredPosts } = range\n const likesByTopLiker = getLikeNotificationsByTopLiker(items)\n if (likesByTopLiker.length < requiredPosts) return\n const actorDid = likesByTopLiker[0]!.actorDid\n return {\n kind: APPVIEW_NOTIFICATION_REASON.MULTI_POST_LIKE,\n groupingKey: actorDid,\n items: likesByTopLiker.slice(0, MAX_GROUP_SIZE),\n isEligibleAfterTrimming: (spotlightItems, retainedItems) =>\n // Check if after trimming it still satisfies the requirements.\n spotlightItems.length >= requiredPosts &&\n getLikeNotificationsByTopLiker(retainedItems)[0]?.actorDid === actorDid,\n }\n}\n\nconst getLikeNotificationsByTopLiker = (\n items: NotificationItem[],\n): NotificationItem[] => {\n const likesByActor = new Map<DidString, NotificationItem[]>()\n for (const item of items) {\n if (\n item.raw.reason !== NOTIFICATION_REASON.LIKE ||\n new AtUri(item.raw.reasonSubject).collection !== app.bsky.feed.post.$type\n ) {\n continue\n }\n const likes = likesByActor.get(item.actorDid)\n if (likes) likes.push(item)\n else likesByActor.set(item.actorDid, [item])\n }\n\n // Each actor likes a post once; insertion order breaks ties by newest like.\n let top: NotificationItem[] = []\n for (const likes of likesByActor.values()) {\n if (likes.length > top.length) top = likes\n }\n return top\n}\n"]}
|
|
1
|
+
{"version":3,"file":"spotlight.js","sourceRoot":"","sources":["../../../../../../src/api/app/bsky/notification/grouping/spotlight.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport type { DidString } from '@atproto/lex'\nimport { AtUri } from '@atproto/syntax'\nimport { app } from '../../../../../lexicons/index.js'\nimport {\n APPVIEW_NOTIFICATION_REASON,\n NOTIFICATION_REASON,\n} from '../constants.js'\nimport type {\n GroupingResult,\n NotificationGroup,\n NotificationItem,\n} from './grouping.js'\nimport {\n MAX_GROUP_SIZE,\n compareNotificationGroupsNewestFirst,\n isNotificationRead,\n} from './shared.js'\n\nconst MAX_SPOTLIGHTS = 3\nconst MULTI_POST_RANGES = [\n { maxItems: 200, requiredPosts: 4 },\n { maxItems: 500, requiredPosts: 8 },\n]\nconst SPOTLIGHT_KINDS = {\n [NOTIFICATION_REASON.LIKE]: APPVIEW_NOTIFICATION_REASON.MULTI_POST_LIKE,\n [NOTIFICATION_REASON.REPOST]: APPVIEW_NOTIFICATION_REASON.MULTI_POST_REPOST,\n [NOTIFICATION_REASON.LIKE_VIA_REPOST]:\n APPVIEW_NOTIFICATION_REASON.MULTI_POST_LIKE_VIA_REPOST,\n [NOTIFICATION_REASON.REPOST_VIA_REPOST]:\n APPVIEW_NOTIFICATION_REASON.MULTI_POST_REPOST_VIA_REPOST,\n} as const\ntype SpotlightReason = keyof typeof SPOTLIGHT_KINDS\nconst SPOTLIGHT_REASONS = Object.keys(SPOTLIGHT_KINDS) as SpotlightReason[]\n\ntype SpotlightCandidate = Pick<\n NotificationGroup,\n 'kind' | 'groupingKey' | 'items'\n> & {\n isEligibleAfterTrimming: (\n spotlightItems: NotificationItem[],\n retainedItems: NotificationItem[],\n ) => boolean\n}\n\nexport function buildSpotlight(\n items: NotificationItem[],\n groups: NotificationGroup[],\n cursor: string | undefined,\n limit: number,\n seenAt: number | undefined,\n): GroupingResult {\n // @NOTE Try one spotlight at a time, keeping the last page where all spotlights pass validation.\n let lastGoodPage: GroupingResult = { groups, cursor }\n const itemCount = groups.reduce(\n (count, group) => count + group.items.length,\n 0,\n )\n // @NOTE Grouping consumes a continuous raw prefix, even when groups interleave.\n // items contains all fetched notifications, but grouping may stop before consuming them all;\n // itemCount counts notifications included in the ordinary groups, and pageItems contains the notifications on the page.\n const pageItems = items.slice(0, itemCount)\n const positions = new Map(pageItems.map((item, index) => [item, index]))\n // @NOTE Rank each reason's top actor by full count, then recency, before capping spotlight size.\n const candidates = mapDefined(SPOTLIGHT_REASONS, (reason) =>\n selectSpotlight(pageItems, reason),\n )\n .sort(\n (left, right) =>\n right.items.length - left.items.length ||\n positions.get(left.items[0]!)! - positions.get(right.items[0]!)!,\n )\n .map((candidate) => ({\n ...candidate,\n items: candidate.items.slice(0, MAX_GROUP_SIZE),\n }))\n\n let lastGoodItems = pageItems\n const acceptedSpotlights: SpotlightCandidate[] = []\n for (const candidate of candidates) {\n if (acceptedSpotlights.length === MAX_SPOTLIGHTS) break\n // @NOTE 1. Tentatively add this spotlight using only notifications retained on the last accepted page.\n const candidateItems = candidate.items.filter(\n (item) => positions.get(item)! < lastGoodItems.length,\n )\n const selectedItems = new Set(candidateItems)\n const proposedGroups = mapDefined(\n [\n ...lastGoodPage.groups.map((group) => ({\n // @NOTE Filtering may remove notifications from this group; build a new group with only the remaining items and their updated metadata.\n kind: group.kind,\n groupingKey: group.groupingKey,\n items: group.items.filter((item) => !selectedItems.has(item)),\n })),\n { ...candidate, items: candidateItems },\n ],\n (group): NotificationGroup | undefined => {\n const newest = group.items[0]\n const oldest = group.items.at(-1)\n if (!newest || !oldest) return\n\n // @NOTE Filtering may remove notifications from this group; build a new group with only the remaining items and their updated metadata.\n return {\n kind: group.kind,\n groupingKey: group.groupingKey,\n id: newest.id,\n items: group.items,\n actorDids: group.items.map((item) => item.actorDid),\n itemCount: group.items.length,\n indexedAt: newest.raw.indexedAt,\n firstIndexedAt: oldest.raw.indexedAt,\n isRead: isNotificationRead(newest.raw.indexedAt, seenAt),\n }\n },\n ).sort(compareNotificationGroupsNewestFirst)\n\n // @NOTE 2. Trim the tentative page to the group limit without changing the saved state.\n let retainedItems = lastGoodItems\n let nextCursor = lastGoodPage.cursor\n const extraGroup = proposedGroups[limit]\n if (extraGroup) {\n const cutoff = positions.get(extraGroup.items[0]!)!\n retainedItems = lastGoodItems.slice(0, cutoff)\n nextCursor = pageItems[cutoff - 1]!.raw.indexedAt\n // @NOTE Trimming every group at one raw position preserves the page prefix.\n for (const group of proposedGroups) {\n group.items = group.items.filter(\n (item) => positions.get(item)! < cutoff,\n )\n group.actorDids = group.items.map((item) => item.actorDid)\n group.itemCount = group.items.length\n const oldest = group.items.at(-1)\n if (oldest) group.firstIndexedAt = oldest.raw.indexedAt\n }\n }\n\n const retained = new Set(retainedItems)\n // @NOTE 3. Reject the attempt if any spotlight fails, preserving the previously accepted page and cursor.\n const allEligible = [...acceptedSpotlights, candidate].every((spotlight) =>\n spotlight.isEligibleAfterTrimming(\n spotlight.items.filter((item) => retained.has(item)),\n retainedItems,\n ),\n )\n if (!allEligible) continue\n\n // @NOTE 4. Save the valid page, cursor, and remaining notifications for the next attempt.\n lastGoodPage = {\n cursor: nextCursor,\n groups: proposedGroups.filter((group) => group.items.length > 0),\n }\n lastGoodItems = retainedItems\n acceptedSpotlights.push(candidate)\n }\n\n return lastGoodPage\n}\n\nfunction selectSpotlight(\n items: NotificationItem[],\n reason: SpotlightReason,\n): SpotlightCandidate | undefined {\n const range = MULTI_POST_RANGES.find(\n ({ maxItems }) => items.length <= maxItems,\n )\n if (!range) return\n\n // @NOTE Eligibility uses the ordinary page's volume, including after trimming.\n const { requiredPosts } = range\n const topItems = getNotificationsByTopActor(items, reason)\n if (topItems.length < requiredPosts) return\n const actorDid = topItems[0]!.actorDid\n return {\n kind: SPOTLIGHT_KINDS[reason],\n groupingKey: actorDid,\n items: topItems,\n isEligibleAfterTrimming: (spotlightItems, retainedItems) =>\n // @NOTE Check if after trimming it still satisfies the requirements.\n spotlightItems.length >= requiredPosts &&\n getNotificationsByTopActor(retainedItems, reason)[0]?.actorDid ===\n actorDid,\n }\n}\n\nfunction getNotificationsByTopActor(\n items: NotificationItem[],\n reason: SpotlightReason,\n): NotificationItem[] {\n const collection =\n reason === NOTIFICATION_REASON.LIKE_VIA_REPOST ||\n reason === NOTIFICATION_REASON.REPOST_VIA_REPOST\n ? app.bsky.feed.repost.$type\n : app.bsky.feed.post.$type\n const itemsByActor = new Map<DidString, NotificationItem[]>()\n for (const item of items) {\n if (\n item.raw.reason !== reason ||\n new AtUri(item.raw.reasonSubject).collection !== collection\n ) {\n continue\n }\n const actorItems = itemsByActor.get(item.actorDid)\n if (actorItems) actorItems.push(item)\n else itemsByActor.set(item.actorDid, [item])\n }\n\n // @NOTE Each actor likes or reposts a post once per reason; insertion order breaks ties by newest notification.\n let top: NotificationItem[] = []\n for (const actorItems of itemsByActor.values()) {\n if (actorItems.length > top.length) top = actorItems\n }\n return top\n}\n"]}
|
|
@@ -47,8 +47,9 @@ const skeleton = async (input) => {
|
|
|
47
47
|
const hydration = async (input) => {
|
|
48
48
|
const { ctx, params, skeleton } = input;
|
|
49
49
|
const { dids } = skeleton;
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
return ctx.hydrator.hydrateProfiles(dids, params.hydrateCtx, {
|
|
51
|
+
activitySubscriptions: true,
|
|
52
|
+
});
|
|
52
53
|
};
|
|
53
54
|
const noBlocks = (input) => {
|
|
54
55
|
const { skeleton, hydration, ctx } = input;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listActivitySubscriptions.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/notification/listActivitySubscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAQ5C,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAA;AACnD,OAAO,EAKL,cAAc,GACf,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEzE,MAAM,CAAC,OAAO,WAAW,MAAc,EAAE,GAAe;IACtD,MAAM,yBAAyB,GAAG,cAAc,CAC9C,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,CACb,CAAA;IACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE;QAC1D,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;YACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClD,QAAQ;gBACR,MAAM;aACP,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;gBAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3B,yBAAyB,CACvB,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EACxC,GAAG,CACJ;gBACH,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;aAC9B,CAAC,CAAA;YAEF,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC;aACvD,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,EACpB,KAAuC,EACf,EAAE;IAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAA;IACzC,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAC/B,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GACpB,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;QAClC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;IACJ,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,IAAmB;QACzB,MAAM;KACP,CAAA;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EACrB,KAAuD,EACvD,EAAE;IACF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACvC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;IACzB,
|
|
1
|
+
{"version":3,"file":"listActivitySubscriptions.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/notification/listActivitySubscriptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport type { DidString } from '@atproto/syntax'\nimport type { Server } from '@atproto/xrpc-server'\nimport type { AppContext } from '../../../../context.js'\nimport type {\n HydrateCtxWithViewer,\n Hydrator,\n} from '../../../../hydration/hydrator.js'\nimport { app } from '../../../../lexicons/index.js'\nimport {\n type HydrationFnInput,\n type PresentationFnInput,\n type RulesFnInput,\n type SkeletonFnInput,\n createPipeline,\n} from '../../../../pipeline.js'\nimport type { Views } from '../../../../views/index.js'\nimport { clearlyBadCursor, fillPage, resHeaders } from '../../../util.js'\n\nexport default function (server: Server, ctx: AppContext) {\n const listActivitySubscriptions = createPipeline(\n skeleton,\n hydration,\n noBlocks,\n presentation,\n )\n server.add(app.bsky.notification.listActivitySubscriptions, {\n auth: ctx.authVerifier.standard,\n handler: async ({ params, auth, req }) => {\n const viewer = auth.credentials.iss\n const labelers = ctx.reqLabelers(req)\n const hydrateCtx = await ctx.hydrator.createContext({\n labelers,\n viewer,\n })\n\n const result = await fillPage({\n cursor: params.cursor,\n limit: params.limit,\n fetch: ({ cursor, limit }) =>\n listActivitySubscriptions(\n { ...params, cursor, limit, hydrateCtx },\n ctx,\n ),\n items: (r) => r.subscriptions,\n })\n\n return {\n encoding: 'application/json',\n body: result,\n headers: resHeaders({ labelers: hydrateCtx.labelers }),\n }\n },\n })\n}\n\nconst skeleton = async (\n input: SkeletonFnInput<Context, Params>,\n): Promise<SkeletonState> => {\n const { params, ctx } = input\n const actorDid = params.hydrateCtx.viewer\n if (clearlyBadCursor(params.cursor)) {\n return { actorDid, dids: [] }\n }\n const { dids, cursor } =\n await ctx.hydrator.dataplane.getActivitySubscriptionDids({\n actorDid: params.hydrateCtx.viewer,\n limit: params.limit,\n cursor: params.cursor,\n })\n return {\n actorDid,\n dids: dids as DidString[],\n cursor,\n }\n}\n\nconst hydration = async (\n input: HydrationFnInput<Context, Params, SkeletonState>,\n) => {\n const { ctx, params, skeleton } = input\n const { dids } = skeleton\n return ctx.hydrator.hydrateProfiles(dids, params.hydrateCtx, {\n activitySubscriptions: true,\n })\n}\n\nconst noBlocks = (input: RulesFnInput<Context, Params, SkeletonState>) => {\n const { skeleton, hydration, ctx } = input\n skeleton.dids = skeleton.dids.filter(\n (did) => !ctx.views.viewerBlockExists(did, hydration),\n )\n return skeleton\n}\n\nconst presentation = (\n input: PresentationFnInput<Context, Params, SkeletonState>,\n) => {\n const { ctx, hydration, skeleton } = input\n const { dids, cursor } = skeleton\n const subscriptions = mapDefined(dids, (did) => {\n return ctx.views.profile(did, hydration)\n })\n return { subscriptions, cursor }\n}\n\ntype Context = {\n hydrator: Hydrator\n views: Views\n}\n\ntype Params = app.bsky.notification.listActivitySubscriptions.$Params & {\n hydrateCtx: HydrateCtxWithViewer\n}\n\ntype SkeletonState = {\n actorDid: DidString\n dids: DidString[]\n cursor?: string\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAtmosphereExploreTab.d.ts","sourceRoot":"","sources":["../../../../../src/api/app/bsky/unspecced/getAtmosphereExploreTab.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,MAAM,EAGZ,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AA0BxD,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAyHvD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { mapDefined } from '@atproto/common';
|
|
2
|
+
import { l } from '@atproto/lex';
|
|
3
|
+
import { AtUri } from '@atproto/syntax';
|
|
4
|
+
import { MethodNotImplementedError, UpstreamFailureError, UpstreamTimeoutError, } from '@atproto/xrpc-server';
|
|
5
|
+
import { safeFetchWrap } from '@atproto-labs/fetch-node';
|
|
6
|
+
import { app } from '../../../../lexicons/index.js';
|
|
7
|
+
const MAX_CONFIG_BYTES = 512 * 1024;
|
|
8
|
+
const MAX_ATMOSPHERE_RECORDS = 500;
|
|
9
|
+
const groupSchema = l.object({
|
|
10
|
+
featured: l.boolean(),
|
|
11
|
+
uris: l.array(l.unknown(), { maxLength: 100 }),
|
|
12
|
+
});
|
|
13
|
+
const configSchema = l.object({
|
|
14
|
+
announcementBanner: l.optional(app.bsky.unspecced.getAtmosphereExploreTab.announcementBanner),
|
|
15
|
+
articles: l.optional(l.array(groupSchema, { maxLength: 100 })),
|
|
16
|
+
publications: l.optional(l.array(groupSchema, { maxLength: 100 })),
|
|
17
|
+
photos: l.optional(l.array(groupSchema, { maxLength: 100 })),
|
|
18
|
+
livestreams: l.optional(l.array(groupSchema, { maxLength: 100 })),
|
|
19
|
+
apps: l.optional(l.array(app.bsky.unspecced.getAtmosphereExploreTab.appCard, {
|
|
20
|
+
maxLength: 100,
|
|
21
|
+
})),
|
|
22
|
+
});
|
|
23
|
+
export default function (server, ctx) {
|
|
24
|
+
// @NOTE The wrapper caps decoded response bytes, including compressed bodies.
|
|
25
|
+
const fetchConfig = safeFetchWrap({
|
|
26
|
+
timeout: 5000,
|
|
27
|
+
responseMaxSize: MAX_CONFIG_BYTES,
|
|
28
|
+
});
|
|
29
|
+
server.add(app.bsky.unspecced.getAtmosphereExploreTab, {
|
|
30
|
+
auth: ctx.authVerifier.standardOptional,
|
|
31
|
+
handler: async ({ auth, params, req, signal }) => {
|
|
32
|
+
const service = ctx.cfg.atmosphereExploreTabService;
|
|
33
|
+
if (!service)
|
|
34
|
+
throw new MethodNotImplementedError('Atmosphere Explore service not configured');
|
|
35
|
+
let body;
|
|
36
|
+
try {
|
|
37
|
+
const url = new URL(service);
|
|
38
|
+
if (params.countryCode !== undefined) {
|
|
39
|
+
url.searchParams.set('countryCode', params.countryCode);
|
|
40
|
+
}
|
|
41
|
+
if (params.regionCode !== undefined) {
|
|
42
|
+
url.searchParams.set('regionCode', params.regionCode);
|
|
43
|
+
}
|
|
44
|
+
const response = await fetchConfig(url, {
|
|
45
|
+
headers: { accept: 'application/json' },
|
|
46
|
+
redirect: 'error',
|
|
47
|
+
signal,
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
await response.body?.cancel();
|
|
51
|
+
throw new UpstreamFailureError(`Atmosphere Explore service returned HTTP ${response.status}`);
|
|
52
|
+
}
|
|
53
|
+
body = await response.json();
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err instanceof UpstreamFailureError)
|
|
57
|
+
throw err;
|
|
58
|
+
if (err instanceof Error &&
|
|
59
|
+
(err.name === 'TimeoutError' || err.name === 'AbortError')) {
|
|
60
|
+
throw new UpstreamTimeoutError('Atmosphere Explore request timed out');
|
|
61
|
+
}
|
|
62
|
+
throw new UpstreamFailureError('Unable to fetch Atmosphere Explore configuration');
|
|
63
|
+
}
|
|
64
|
+
const parsed = configSchema.safeParse(body);
|
|
65
|
+
if (!parsed.success)
|
|
66
|
+
throw new UpstreamFailureError('Invalid Atmosphere Explore configuration');
|
|
67
|
+
const config = parsed.value;
|
|
68
|
+
const groups = [
|
|
69
|
+
...(config.articles ?? []),
|
|
70
|
+
...(config.publications ?? []),
|
|
71
|
+
...(config.photos ?? []),
|
|
72
|
+
...(config.livestreams ?? []),
|
|
73
|
+
];
|
|
74
|
+
if (groups.reduce((count, group) => count + group.uris.length, 0) >
|
|
75
|
+
MAX_ATMOSPHERE_RECORDS) {
|
|
76
|
+
throw new UpstreamFailureError('Atmosphere Explore configuration exceeds its record limit');
|
|
77
|
+
}
|
|
78
|
+
const articles = completeGroups(config.articles);
|
|
79
|
+
const publications = completeGroups(config.publications);
|
|
80
|
+
const photos = completeGroups(config.photos);
|
|
81
|
+
const livestreams = completeGroups(config.livestreams);
|
|
82
|
+
const uris = [
|
|
83
|
+
...new Set([...articles, ...publications, ...photos, ...livestreams].map(({ uri }) => uri)),
|
|
84
|
+
];
|
|
85
|
+
const hydrateCtx = await ctx.hydrator.createContext({
|
|
86
|
+
viewer: auth.credentials.iss,
|
|
87
|
+
labelers: ctx.reqLabelers(req),
|
|
88
|
+
});
|
|
89
|
+
const state = await ctx.hydrator.hydrateEmbedExternalViewFromUris(uris, hydrateCtx);
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
const result = {
|
|
92
|
+
announcementBanner: config.announcementBanner,
|
|
93
|
+
articles: mapDefined(articles, ({ featured, uri }) => {
|
|
94
|
+
const view = ctx.views.externalRecordView(uri, state, now);
|
|
95
|
+
return view && app.bsky.embed.external.viewArticle.$isTypeOf(view)
|
|
96
|
+
? { featured, view }
|
|
97
|
+
: undefined;
|
|
98
|
+
}),
|
|
99
|
+
publications: mapDefined(publications, ({ featured, uri }) => {
|
|
100
|
+
const view = ctx.views.externalRecordView(uri, state, now);
|
|
101
|
+
return view &&
|
|
102
|
+
app.bsky.embed.external.viewArticlePublication.$isTypeOf(view)
|
|
103
|
+
? { featured, view }
|
|
104
|
+
: undefined;
|
|
105
|
+
}),
|
|
106
|
+
photos: mapDefined(photos, ({ featured, uri }) => {
|
|
107
|
+
const view = ctx.views.externalRecordView(uri, state, now);
|
|
108
|
+
return view &&
|
|
109
|
+
app.bsky.embed.external.viewGallery.$isTypeOf(view) &&
|
|
110
|
+
view.items.length
|
|
111
|
+
? { featured, view }
|
|
112
|
+
: undefined;
|
|
113
|
+
}),
|
|
114
|
+
livestreams: mapDefined(livestreams, ({ featured, uri }) => {
|
|
115
|
+
const view = ctx.views.externalRecordView(uri, state, now);
|
|
116
|
+
return view && app.bsky.embed.external.viewLivestream.$isTypeOf(view)
|
|
117
|
+
? { featured, view }
|
|
118
|
+
: undefined;
|
|
119
|
+
}),
|
|
120
|
+
apps: config.apps ?? [],
|
|
121
|
+
};
|
|
122
|
+
return { encoding: 'application/json', body: result };
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function completeGroups(groups = []) {
|
|
127
|
+
return mapDefined(groups, ({ featured, uris }) => {
|
|
128
|
+
const uri = recordUri(uris[0]);
|
|
129
|
+
if (!uri)
|
|
130
|
+
return;
|
|
131
|
+
return { featured, uri };
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function recordUri(value) {
|
|
135
|
+
if (!l.isAtUriString(value))
|
|
136
|
+
return;
|
|
137
|
+
const uri = new AtUri(value);
|
|
138
|
+
return uri.collection && uri.rkey && l.isDidString(uri.hostname)
|
|
139
|
+
? value
|
|
140
|
+
: undefined;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=getAtmosphereExploreTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAtmosphereExploreTab.js","sourceRoot":"","sources":["../../../../../src/api/app/bsky/unspecced/getAtmosphereExploreTab.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport { type AtUriString, l } from '@atproto/lex'\nimport { AtUri } from '@atproto/syntax'\nimport {\n MethodNotImplementedError,\n type Server,\n UpstreamFailureError,\n UpstreamTimeoutError,\n} from '@atproto/xrpc-server'\nimport { safeFetchWrap } from '@atproto-labs/fetch-node'\nimport type { AppContext } from '../../../../context.js'\nimport { app } from '../../../../lexicons/index.js'\n\nconst MAX_CONFIG_BYTES = 512 * 1024\nconst MAX_ATMOSPHERE_RECORDS = 500\n\nconst groupSchema = l.object({\n featured: l.boolean(),\n uris: l.array(l.unknown(), { maxLength: 100 }),\n})\nconst configSchema = l.object({\n announcementBanner: l.optional(\n app.bsky.unspecced.getAtmosphereExploreTab.announcementBanner,\n ),\n articles: l.optional(l.array(groupSchema, { maxLength: 100 })),\n publications: l.optional(l.array(groupSchema, { maxLength: 100 })),\n photos: l.optional(l.array(groupSchema, { maxLength: 100 })),\n livestreams: l.optional(l.array(groupSchema, { maxLength: 100 })),\n apps: l.optional(\n l.array(app.bsky.unspecced.getAtmosphereExploreTab.appCard, {\n maxLength: 100,\n }),\n ),\n})\ntype RecordGroup = { featured: boolean; uri: AtUriString }\n\nexport default function (server: Server, ctx: AppContext) {\n // @NOTE The wrapper caps decoded response bytes, including compressed bodies.\n const fetchConfig = safeFetchWrap({\n timeout: 5000,\n responseMaxSize: MAX_CONFIG_BYTES,\n })\n server.add(app.bsky.unspecced.getAtmosphereExploreTab, {\n auth: ctx.authVerifier.standardOptional,\n handler: async ({ auth, params, req, signal }) => {\n const service = ctx.cfg.atmosphereExploreTabService\n if (!service)\n throw new MethodNotImplementedError(\n 'Atmosphere Explore service not configured',\n )\n let body: unknown\n try {\n const url = new URL(service)\n if (params.countryCode !== undefined) {\n url.searchParams.set('countryCode', params.countryCode)\n }\n if (params.regionCode !== undefined) {\n url.searchParams.set('regionCode', params.regionCode)\n }\n const response = await fetchConfig(url, {\n headers: { accept: 'application/json' },\n redirect: 'error',\n signal,\n })\n if (!response.ok) {\n await response.body?.cancel()\n throw new UpstreamFailureError(\n `Atmosphere Explore service returned HTTP ${response.status}`,\n )\n }\n body = await response.json()\n } catch (err) {\n if (err instanceof UpstreamFailureError) throw err\n if (\n err instanceof Error &&\n (err.name === 'TimeoutError' || err.name === 'AbortError')\n ) {\n throw new UpstreamTimeoutError('Atmosphere Explore request timed out')\n }\n throw new UpstreamFailureError(\n 'Unable to fetch Atmosphere Explore configuration',\n )\n }\n const parsed = configSchema.safeParse(body)\n if (!parsed.success)\n throw new UpstreamFailureError(\n 'Invalid Atmosphere Explore configuration',\n )\n const config = parsed.value\n const groups = [\n ...(config.articles ?? []),\n ...(config.publications ?? []),\n ...(config.photos ?? []),\n ...(config.livestreams ?? []),\n ]\n if (\n groups.reduce((count, group) => count + group.uris.length, 0) >\n MAX_ATMOSPHERE_RECORDS\n ) {\n throw new UpstreamFailureError(\n 'Atmosphere Explore configuration exceeds its record limit',\n )\n }\n const articles = completeGroups(config.articles)\n const publications = completeGroups(config.publications)\n const photos = completeGroups(config.photos)\n const livestreams = completeGroups(config.livestreams)\n const uris = [\n ...new Set(\n [...articles, ...publications, ...photos, ...livestreams].map(\n ({ uri }) => uri,\n ),\n ),\n ]\n const hydrateCtx = await ctx.hydrator.createContext({\n viewer: auth.credentials.iss,\n labelers: ctx.reqLabelers(req),\n })\n const state = await ctx.hydrator.hydrateEmbedExternalViewFromUris(\n uris,\n hydrateCtx,\n )\n const now = Date.now()\n const result: app.bsky.unspecced.getAtmosphereExploreTab.$OutputBody = {\n announcementBanner: config.announcementBanner,\n articles: mapDefined(articles, ({ featured, uri }) => {\n const view = ctx.views.externalRecordView(uri, state, now)\n return view && app.bsky.embed.external.viewArticle.$isTypeOf(view)\n ? { featured, view }\n : undefined\n }),\n publications: mapDefined(publications, ({ featured, uri }) => {\n const view = ctx.views.externalRecordView(uri, state, now)\n return view &&\n app.bsky.embed.external.viewArticlePublication.$isTypeOf(view)\n ? { featured, view }\n : undefined\n }),\n photos: mapDefined(photos, ({ featured, uri }) => {\n const view = ctx.views.externalRecordView(uri, state, now)\n return view &&\n app.bsky.embed.external.viewGallery.$isTypeOf(view) &&\n view.items.length\n ? { featured, view }\n : undefined\n }),\n livestreams: mapDefined(livestreams, ({ featured, uri }) => {\n const view = ctx.views.externalRecordView(uri, state, now)\n return view && app.bsky.embed.external.viewLivestream.$isTypeOf(view)\n ? { featured, view }\n : undefined\n }),\n apps: config.apps ?? [],\n }\n return { encoding: 'application/json', body: result }\n },\n })\n}\n\nfunction completeGroups(\n groups: l.Infer<typeof groupSchema>[] = [],\n): RecordGroup[] {\n return mapDefined(groups, ({ featured, uris }) => {\n const uri = recordUri(uris[0])\n if (!uri) return\n return { featured, uri }\n })\n}\n\nfunction recordUri(value: unknown): AtUriString | undefined {\n if (!l.isAtUriString(value)) return\n const uri = new AtUri(value)\n return uri.collection && uri.rkey && l.isDidString(uri.hostname)\n ? value\n : undefined\n}\n"]}
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAwG/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAElD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QA0GvD"}
|
package/dist/api/index.js
CHANGED
|
@@ -75,6 +75,7 @@ import registerPush from './app/bsky/notification/registerPush.js';
|
|
|
75
75
|
import unregisterPush from './app/bsky/notification/unregisterPush.js';
|
|
76
76
|
import updateSeen from './app/bsky/notification/updateSeen.js';
|
|
77
77
|
import getAgeAssuranceState from './app/bsky/unspecced/getAgeAssuranceState.js';
|
|
78
|
+
import getAtmosphereExploreTab from './app/bsky/unspecced/getAtmosphereExploreTab.js';
|
|
78
79
|
import getConfig from './app/bsky/unspecced/getConfig.js';
|
|
79
80
|
import getOnboardingSuggestedStarterPacks from './app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js';
|
|
80
81
|
import getPopularFeedGenerators from './app/bsky/unspecced/getPopularFeedGenerators.js';
|
|
@@ -191,6 +192,7 @@ export default function (server, ctx) {
|
|
|
191
192
|
putPreferencesV2(server, ctx);
|
|
192
193
|
registerPush(server, ctx);
|
|
193
194
|
unregisterPush(server, ctx);
|
|
195
|
+
getAtmosphereExploreTab(server, ctx);
|
|
194
196
|
getConfig(server, ctx);
|
|
195
197
|
getPopularFeedGenerators(server, ctx);
|
|
196
198
|
getTaggedSuggestions(server, ctx);
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Server } from '@atproto/xrpc-server'\nimport type { AppContext } from '../context.js'\nimport getProfile from './app/bsky/actor/getProfile.js'\nimport getProfiles from './app/bsky/actor/getProfiles.js'\nimport getSuggestions from './app/bsky/actor/getSuggestions.js'\nimport searchActors from './app/bsky/actor/searchActors.js'\nimport searchActorsTypeahead from './app/bsky/actor/searchActorsTypeahead.js'\nimport aaBegin from './app/bsky/ageassurance/begin.js'\nimport aaGetConfig from './app/bsky/ageassurance/getConfig.js'\nimport aaGetState from './app/bsky/ageassurance/getState.js'\nimport createBookmark from './app/bsky/bookmark/createBookmark.js'\nimport deleteBookmark from './app/bsky/bookmark/deleteBookmark.js'\nimport getBookmarks from './app/bsky/bookmark/getBookmarks.js'\nimport dismissMatch from './app/bsky/contact/dismissMatch.js'\nimport getMatches from './app/bsky/contact/getMatches.js'\nimport getSyncStatus from './app/bsky/contact/getSyncStatus.js'\nimport importContacts from './app/bsky/contact/importContacts.js'\nimport removeData from './app/bsky/contact/removeData.js'\nimport sendNotification from './app/bsky/contact/sendNotification.js'\nimport startPhoneVerification from './app/bsky/contact/startPhoneVerification.js'\nimport verifyPhone from './app/bsky/contact/verifyPhone.js'\nimport createDraft from './app/bsky/draft/createDraft.js'\nimport deleteDraft from './app/bsky/draft/deleteDraft.js'\nimport getDrafts from './app/bsky/draft/getDrafts.js'\nimport updateDraft from './app/bsky/draft/updateDraft.js'\nimport getEmbedExternalView from './app/bsky/embed/getEmbedExternalView.js'\nimport getActorFeeds from './app/bsky/feed/getActorFeeds.js'\nimport getActorLikes from './app/bsky/feed/getActorLikes.js'\nimport getAuthorFeed from './app/bsky/feed/getAuthorFeed.js'\nimport getFeed from './app/bsky/feed/getFeed.js'\nimport getFeedGenerator from './app/bsky/feed/getFeedGenerator.js'\nimport getFeedGenerators from './app/bsky/feed/getFeedGenerators.js'\nimport getLikes from './app/bsky/feed/getLikes.js'\nimport getListFeed from './app/bsky/feed/getListFeed.js'\nimport getPostThread from './app/bsky/feed/getPostThread.js'\nimport getPosts from './app/bsky/feed/getPosts.js'\nimport getQuotes from './app/bsky/feed/getQuotes.js'\nimport getRepostedBy from './app/bsky/feed/getRepostedBy.js'\nimport getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds.js'\nimport getTimeline from './app/bsky/feed/getTimeline.js'\nimport searchPosts from './app/bsky/feed/searchPosts.js'\nimport searchPostsV2 from './app/bsky/feed/searchPostsV2.js'\nimport getActorStarterPacks from './app/bsky/graph/getActorStarterPacks.js'\nimport getBlocks from './app/bsky/graph/getBlocks.js'\nimport getFollowers from './app/bsky/graph/getFollowers.js'\nimport getFollows from './app/bsky/graph/getFollows.js'\nimport getKnownFollowers from './app/bsky/graph/getKnownFollowers.js'\nimport getList from './app/bsky/graph/getList.js'\nimport getListBlocks from './app/bsky/graph/getListBlocks.js'\nimport getListMutes from './app/bsky/graph/getListMutes.js'\nimport getLists from './app/bsky/graph/getLists.js'\nimport getListsWithMembership from './app/bsky/graph/getListsWithMembership.js'\nimport getMutes from './app/bsky/graph/getMutes.js'\nimport getRelationships from './app/bsky/graph/getRelationships.js'\nimport getStarterPack from './app/bsky/graph/getStarterPack.js'\nimport getStarterPacks from './app/bsky/graph/getStarterPacks.js'\nimport getStarterPacksWithMembership from './app/bsky/graph/getStarterPacksWithMembership.js'\nimport getSuggestedFollowsByActor from './app/bsky/graph/getSuggestedFollowsByActor.js'\nimport muteActor from './app/bsky/graph/muteActor.js'\nimport muteActorList from './app/bsky/graph/muteActorList.js'\nimport muteThread from './app/bsky/graph/muteThread.js'\nimport searchStarterPacks from './app/bsky/graph/searchStarterPacks.js'\nimport searchStarterPacksV2 from './app/bsky/graph/searchStarterPacksV2.js'\nimport unmuteActor from './app/bsky/graph/unmuteActor.js'\nimport unmuteActorList from './app/bsky/graph/unmuteActorList.js'\nimport unmuteThread from './app/bsky/graph/unmuteThread.js'\nimport getLabelerServices from './app/bsky/labeler/getServices.js'\nimport getGroupedNotifications from './app/bsky/notification/getGroupedNotifications.js'\nimport getPreferences from './app/bsky/notification/getPreferences.js'\nimport getUnreadCount from './app/bsky/notification/getUnreadCount.js'\nimport listActivitySubscriptions from './app/bsky/notification/listActivitySubscriptions.js'\nimport listNotifications from './app/bsky/notification/listNotifications.js'\nimport putActivitySubscription from './app/bsky/notification/putActivitySubscription.js'\nimport putPreferences from './app/bsky/notification/putPreferences.js'\nimport putPreferencesV2 from './app/bsky/notification/putPreferencesV2.js'\nimport registerPush from './app/bsky/notification/registerPush.js'\nimport unregisterPush from './app/bsky/notification/unregisterPush.js'\nimport updateSeen from './app/bsky/notification/updateSeen.js'\nimport getAgeAssuranceState from './app/bsky/unspecced/getAgeAssuranceState.js'\nimport getConfig from './app/bsky/unspecced/getConfig.js'\nimport getOnboardingSuggestedStarterPacks from './app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js'\nimport getPopularFeedGenerators from './app/bsky/unspecced/getPopularFeedGenerators.js'\nimport getPostThreadOtherV2 from './app/bsky/unspecced/getPostThreadOtherV2.js'\nimport getPostThreadV2 from './app/bsky/unspecced/getPostThreadV2.js'\nimport getUnspeccedSuggestedFeeds from './app/bsky/unspecced/getSuggestedFeeds.js'\nimport getSuggestedOnboardingUsers from './app/bsky/unspecced/getSuggestedOnboardingUsers.js'\nimport getSuggestedStarterPacks from './app/bsky/unspecced/getSuggestedStarterPacks.js'\nimport getSuggestedUsers from './app/bsky/unspecced/getSuggestedUsers.js'\nimport getSuggestedUsersForDiscover from './app/bsky/unspecced/getSuggestedUsersForDiscover.js'\nimport getSuggestedUsersForExplore from './app/bsky/unspecced/getSuggestedUsersForExplore.js'\nimport getSuggestedUsersForSeeMore from './app/bsky/unspecced/getSuggestedUsersForSeeMore.js'\nimport getTaggedSuggestions from './app/bsky/unspecced/getTaggedSuggestions.js'\nimport getTrendingTopics from './app/bsky/unspecced/getTrendingTopics.js'\nimport getTrends from './app/bsky/unspecced/getTrends.js'\nimport initAgeAssurance from './app/bsky/unspecced/initAgeAssurance.js'\nimport getAccountInfos from './com/atproto/admin/getAccountInfos.js'\nimport getSubjectStatus from './com/atproto/admin/getSubjectStatus.js'\nimport updateSubjectStatus from './com/atproto/admin/updateSubjectStatus.js'\nimport resolveHandle from './com/atproto/identity/resolveHandle.js'\nimport queryLabels from './com/atproto/label/queryLabels.js'\nimport getRecord from './com/atproto/repo/getRecord.js'\nimport fetchLabels from './com/atproto/temp/fetchLabels.js'\nimport internalGetProfiles from './internal/bsky/actor/getProfiles.js'\n\nexport * as health from './health.js'\n\nexport * as wellKnown from './well-known.js'\n\nexport * as blobResolver from './blob-resolver.js'\n\nexport * as external from './external.js'\n\nexport * as sitemap from './sitemap.js'\n\nexport default function (server: Server, ctx: AppContext) {\n // app.bsky\n getTimeline(server, ctx)\n createBookmark(server, ctx)\n deleteBookmark(server, ctx)\n getBookmarks(server, ctx)\n createDraft(server, ctx)\n deleteDraft(server, ctx)\n getDrafts(server, ctx)\n updateDraft(server, ctx)\n getEmbedExternalView(server, ctx)\n dismissMatch(server, ctx)\n getMatches(server, ctx)\n getSyncStatus(server, ctx)\n importContacts(server, ctx)\n removeData(server, ctx)\n sendNotification(server, ctx)\n startPhoneVerification(server, ctx)\n verifyPhone(server, ctx)\n getActorFeeds(server, ctx)\n getSuggestedFeeds(server, ctx)\n getAuthorFeed(server, ctx)\n getFeed(server, ctx)\n getFeedGenerator(server, ctx)\n getFeedGenerators(server, ctx)\n getLikes(server, ctx)\n getListFeed(server, ctx)\n getQuotes(server, ctx)\n getPostThread(server, ctx)\n getPostThreadOtherV2(server, ctx)\n getPostThreadV2(server, ctx)\n getPosts(server, ctx)\n searchPosts(server, ctx)\n searchPostsV2(server, ctx)\n getActorLikes(server, ctx)\n getProfile(server, ctx)\n getProfiles(server, ctx)\n getRepostedBy(server, ctx)\n getActorStarterPacks(server, ctx)\n getBlocks(server, ctx)\n getListBlocks(server, ctx)\n getFollowers(server, ctx)\n getKnownFollowers(server, ctx)\n getFollows(server, ctx)\n getList(server, ctx)\n getLists(server, ctx)\n getListsWithMembership(server, ctx)\n getListMutes(server, ctx)\n getMutes(server, ctx)\n getRelationships(server, ctx)\n getStarterPack(server, ctx)\n getStarterPacks(server, ctx)\n getStarterPacksWithMembership(server, ctx)\n searchStarterPacks(server, ctx)\n searchStarterPacksV2(server, ctx)\n muteActor(server, ctx)\n unmuteActor(server, ctx)\n muteActorList(server, ctx)\n unmuteActorList(server, ctx)\n muteThread(server, ctx)\n unmuteThread(server, ctx)\n getSuggestedFollowsByActor(server, ctx)\n getTrendingTopics(server, ctx)\n getTrends(server, ctx)\n getOnboardingSuggestedStarterPacks(server, ctx)\n getSuggestedOnboardingUsers(server, ctx)\n getSuggestedStarterPacks(server, ctx)\n getSuggestedUsers(server, ctx)\n getSuggestedUsersForDiscover(server, ctx)\n getSuggestedUsersForExplore(server, ctx)\n getSuggestedUsersForSeeMore(server, ctx)\n getUnspeccedSuggestedFeeds(server, ctx)\n getLabelerServices(server, ctx)\n searchActors(server, ctx)\n searchActorsTypeahead(server, ctx)\n getSuggestions(server, ctx)\n getPreferences(server, ctx)\n getUnreadCount(server, ctx)\n listActivitySubscriptions(server, ctx)\n listNotifications(server, ctx)\n getGroupedNotifications(server, ctx)\n putActivitySubscription(server, ctx)\n updateSeen(server, ctx)\n putPreferences(server, ctx)\n putPreferencesV2(server, ctx)\n registerPush(server, ctx)\n unregisterPush(server, ctx)\n getConfig(server, ctx)\n getPopularFeedGenerators(server, ctx)\n getTaggedSuggestions(server, ctx)\n getAgeAssuranceState(server, ctx)\n initAgeAssurance(server, ctx)\n aaGetConfig(server, ctx)\n aaGetState(server, ctx)\n aaBegin(server, ctx)\n // com.atproto\n getSubjectStatus(server, ctx)\n updateSubjectStatus(server, ctx)\n getAccountInfos(server, ctx)\n resolveHandle(server, ctx)\n getRecord(server, ctx)\n fetchLabels(server, ctx)\n queryLabels(server, ctx)\n // internal.bsky\n internalGetProfiles(server, ctx)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Server } from '@atproto/xrpc-server'\nimport type { AppContext } from '../context.js'\nimport getProfile from './app/bsky/actor/getProfile.js'\nimport getProfiles from './app/bsky/actor/getProfiles.js'\nimport getSuggestions from './app/bsky/actor/getSuggestions.js'\nimport searchActors from './app/bsky/actor/searchActors.js'\nimport searchActorsTypeahead from './app/bsky/actor/searchActorsTypeahead.js'\nimport aaBegin from './app/bsky/ageassurance/begin.js'\nimport aaGetConfig from './app/bsky/ageassurance/getConfig.js'\nimport aaGetState from './app/bsky/ageassurance/getState.js'\nimport createBookmark from './app/bsky/bookmark/createBookmark.js'\nimport deleteBookmark from './app/bsky/bookmark/deleteBookmark.js'\nimport getBookmarks from './app/bsky/bookmark/getBookmarks.js'\nimport dismissMatch from './app/bsky/contact/dismissMatch.js'\nimport getMatches from './app/bsky/contact/getMatches.js'\nimport getSyncStatus from './app/bsky/contact/getSyncStatus.js'\nimport importContacts from './app/bsky/contact/importContacts.js'\nimport removeData from './app/bsky/contact/removeData.js'\nimport sendNotification from './app/bsky/contact/sendNotification.js'\nimport startPhoneVerification from './app/bsky/contact/startPhoneVerification.js'\nimport verifyPhone from './app/bsky/contact/verifyPhone.js'\nimport createDraft from './app/bsky/draft/createDraft.js'\nimport deleteDraft from './app/bsky/draft/deleteDraft.js'\nimport getDrafts from './app/bsky/draft/getDrafts.js'\nimport updateDraft from './app/bsky/draft/updateDraft.js'\nimport getEmbedExternalView from './app/bsky/embed/getEmbedExternalView.js'\nimport getActorFeeds from './app/bsky/feed/getActorFeeds.js'\nimport getActorLikes from './app/bsky/feed/getActorLikes.js'\nimport getAuthorFeed from './app/bsky/feed/getAuthorFeed.js'\nimport getFeed from './app/bsky/feed/getFeed.js'\nimport getFeedGenerator from './app/bsky/feed/getFeedGenerator.js'\nimport getFeedGenerators from './app/bsky/feed/getFeedGenerators.js'\nimport getLikes from './app/bsky/feed/getLikes.js'\nimport getListFeed from './app/bsky/feed/getListFeed.js'\nimport getPostThread from './app/bsky/feed/getPostThread.js'\nimport getPosts from './app/bsky/feed/getPosts.js'\nimport getQuotes from './app/bsky/feed/getQuotes.js'\nimport getRepostedBy from './app/bsky/feed/getRepostedBy.js'\nimport getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds.js'\nimport getTimeline from './app/bsky/feed/getTimeline.js'\nimport searchPosts from './app/bsky/feed/searchPosts.js'\nimport searchPostsV2 from './app/bsky/feed/searchPostsV2.js'\nimport getActorStarterPacks from './app/bsky/graph/getActorStarterPacks.js'\nimport getBlocks from './app/bsky/graph/getBlocks.js'\nimport getFollowers from './app/bsky/graph/getFollowers.js'\nimport getFollows from './app/bsky/graph/getFollows.js'\nimport getKnownFollowers from './app/bsky/graph/getKnownFollowers.js'\nimport getList from './app/bsky/graph/getList.js'\nimport getListBlocks from './app/bsky/graph/getListBlocks.js'\nimport getListMutes from './app/bsky/graph/getListMutes.js'\nimport getLists from './app/bsky/graph/getLists.js'\nimport getListsWithMembership from './app/bsky/graph/getListsWithMembership.js'\nimport getMutes from './app/bsky/graph/getMutes.js'\nimport getRelationships from './app/bsky/graph/getRelationships.js'\nimport getStarterPack from './app/bsky/graph/getStarterPack.js'\nimport getStarterPacks from './app/bsky/graph/getStarterPacks.js'\nimport getStarterPacksWithMembership from './app/bsky/graph/getStarterPacksWithMembership.js'\nimport getSuggestedFollowsByActor from './app/bsky/graph/getSuggestedFollowsByActor.js'\nimport muteActor from './app/bsky/graph/muteActor.js'\nimport muteActorList from './app/bsky/graph/muteActorList.js'\nimport muteThread from './app/bsky/graph/muteThread.js'\nimport searchStarterPacks from './app/bsky/graph/searchStarterPacks.js'\nimport searchStarterPacksV2 from './app/bsky/graph/searchStarterPacksV2.js'\nimport unmuteActor from './app/bsky/graph/unmuteActor.js'\nimport unmuteActorList from './app/bsky/graph/unmuteActorList.js'\nimport unmuteThread from './app/bsky/graph/unmuteThread.js'\nimport getLabelerServices from './app/bsky/labeler/getServices.js'\nimport getGroupedNotifications from './app/bsky/notification/getGroupedNotifications.js'\nimport getPreferences from './app/bsky/notification/getPreferences.js'\nimport getUnreadCount from './app/bsky/notification/getUnreadCount.js'\nimport listActivitySubscriptions from './app/bsky/notification/listActivitySubscriptions.js'\nimport listNotifications from './app/bsky/notification/listNotifications.js'\nimport putActivitySubscription from './app/bsky/notification/putActivitySubscription.js'\nimport putPreferences from './app/bsky/notification/putPreferences.js'\nimport putPreferencesV2 from './app/bsky/notification/putPreferencesV2.js'\nimport registerPush from './app/bsky/notification/registerPush.js'\nimport unregisterPush from './app/bsky/notification/unregisterPush.js'\nimport updateSeen from './app/bsky/notification/updateSeen.js'\nimport getAgeAssuranceState from './app/bsky/unspecced/getAgeAssuranceState.js'\nimport getAtmosphereExploreTab from './app/bsky/unspecced/getAtmosphereExploreTab.js'\nimport getConfig from './app/bsky/unspecced/getConfig.js'\nimport getOnboardingSuggestedStarterPacks from './app/bsky/unspecced/getOnboardingSuggestedStarterPacks.js'\nimport getPopularFeedGenerators from './app/bsky/unspecced/getPopularFeedGenerators.js'\nimport getPostThreadOtherV2 from './app/bsky/unspecced/getPostThreadOtherV2.js'\nimport getPostThreadV2 from './app/bsky/unspecced/getPostThreadV2.js'\nimport getUnspeccedSuggestedFeeds from './app/bsky/unspecced/getSuggestedFeeds.js'\nimport getSuggestedOnboardingUsers from './app/bsky/unspecced/getSuggestedOnboardingUsers.js'\nimport getSuggestedStarterPacks from './app/bsky/unspecced/getSuggestedStarterPacks.js'\nimport getSuggestedUsers from './app/bsky/unspecced/getSuggestedUsers.js'\nimport getSuggestedUsersForDiscover from './app/bsky/unspecced/getSuggestedUsersForDiscover.js'\nimport getSuggestedUsersForExplore from './app/bsky/unspecced/getSuggestedUsersForExplore.js'\nimport getSuggestedUsersForSeeMore from './app/bsky/unspecced/getSuggestedUsersForSeeMore.js'\nimport getTaggedSuggestions from './app/bsky/unspecced/getTaggedSuggestions.js'\nimport getTrendingTopics from './app/bsky/unspecced/getTrendingTopics.js'\nimport getTrends from './app/bsky/unspecced/getTrends.js'\nimport initAgeAssurance from './app/bsky/unspecced/initAgeAssurance.js'\nimport getAccountInfos from './com/atproto/admin/getAccountInfos.js'\nimport getSubjectStatus from './com/atproto/admin/getSubjectStatus.js'\nimport updateSubjectStatus from './com/atproto/admin/updateSubjectStatus.js'\nimport resolveHandle from './com/atproto/identity/resolveHandle.js'\nimport queryLabels from './com/atproto/label/queryLabels.js'\nimport getRecord from './com/atproto/repo/getRecord.js'\nimport fetchLabels from './com/atproto/temp/fetchLabels.js'\nimport internalGetProfiles from './internal/bsky/actor/getProfiles.js'\n\nexport * as health from './health.js'\n\nexport * as wellKnown from './well-known.js'\n\nexport * as blobResolver from './blob-resolver.js'\n\nexport * as external from './external.js'\n\nexport * as sitemap from './sitemap.js'\n\nexport default function (server: Server, ctx: AppContext) {\n // app.bsky\n getTimeline(server, ctx)\n createBookmark(server, ctx)\n deleteBookmark(server, ctx)\n getBookmarks(server, ctx)\n createDraft(server, ctx)\n deleteDraft(server, ctx)\n getDrafts(server, ctx)\n updateDraft(server, ctx)\n getEmbedExternalView(server, ctx)\n dismissMatch(server, ctx)\n getMatches(server, ctx)\n getSyncStatus(server, ctx)\n importContacts(server, ctx)\n removeData(server, ctx)\n sendNotification(server, ctx)\n startPhoneVerification(server, ctx)\n verifyPhone(server, ctx)\n getActorFeeds(server, ctx)\n getSuggestedFeeds(server, ctx)\n getAuthorFeed(server, ctx)\n getFeed(server, ctx)\n getFeedGenerator(server, ctx)\n getFeedGenerators(server, ctx)\n getLikes(server, ctx)\n getListFeed(server, ctx)\n getQuotes(server, ctx)\n getPostThread(server, ctx)\n getPostThreadOtherV2(server, ctx)\n getPostThreadV2(server, ctx)\n getPosts(server, ctx)\n searchPosts(server, ctx)\n searchPostsV2(server, ctx)\n getActorLikes(server, ctx)\n getProfile(server, ctx)\n getProfiles(server, ctx)\n getRepostedBy(server, ctx)\n getActorStarterPacks(server, ctx)\n getBlocks(server, ctx)\n getListBlocks(server, ctx)\n getFollowers(server, ctx)\n getKnownFollowers(server, ctx)\n getFollows(server, ctx)\n getList(server, ctx)\n getLists(server, ctx)\n getListsWithMembership(server, ctx)\n getListMutes(server, ctx)\n getMutes(server, ctx)\n getRelationships(server, ctx)\n getStarterPack(server, ctx)\n getStarterPacks(server, ctx)\n getStarterPacksWithMembership(server, ctx)\n searchStarterPacks(server, ctx)\n searchStarterPacksV2(server, ctx)\n muteActor(server, ctx)\n unmuteActor(server, ctx)\n muteActorList(server, ctx)\n unmuteActorList(server, ctx)\n muteThread(server, ctx)\n unmuteThread(server, ctx)\n getSuggestedFollowsByActor(server, ctx)\n getTrendingTopics(server, ctx)\n getTrends(server, ctx)\n getOnboardingSuggestedStarterPacks(server, ctx)\n getSuggestedOnboardingUsers(server, ctx)\n getSuggestedStarterPacks(server, ctx)\n getSuggestedUsers(server, ctx)\n getSuggestedUsersForDiscover(server, ctx)\n getSuggestedUsersForExplore(server, ctx)\n getSuggestedUsersForSeeMore(server, ctx)\n getUnspeccedSuggestedFeeds(server, ctx)\n getLabelerServices(server, ctx)\n searchActors(server, ctx)\n searchActorsTypeahead(server, ctx)\n getSuggestions(server, ctx)\n getPreferences(server, ctx)\n getUnreadCount(server, ctx)\n listActivitySubscriptions(server, ctx)\n listNotifications(server, ctx)\n getGroupedNotifications(server, ctx)\n putActivitySubscription(server, ctx)\n updateSeen(server, ctx)\n putPreferences(server, ctx)\n putPreferencesV2(server, ctx)\n registerPush(server, ctx)\n unregisterPush(server, ctx)\n getAtmosphereExploreTab(server, ctx)\n getConfig(server, ctx)\n getPopularFeedGenerators(server, ctx)\n getTaggedSuggestions(server, ctx)\n getAgeAssuranceState(server, ctx)\n initAgeAssurance(server, ctx)\n aaGetConfig(server, ctx)\n aaGetState(server, ctx)\n aaBegin(server, ctx)\n // com.atproto\n getSubjectStatus(server, ctx)\n updateSubjectStatus(server, ctx)\n getAccountInfos(server, ctx)\n resolveHandle(server, ctx)\n getRecord(server, ctx)\n fetchLabels(server, ctx)\n queryLabels(server, ctx)\n // internal.bsky\n internalGetProfiles(server, ctx)\n}\n"]}
|
|
@@ -30,7 +30,10 @@ const skeleton = async (input) => {
|
|
|
30
30
|
};
|
|
31
31
|
const hydration = async (input) => {
|
|
32
32
|
const { ctx, params, skeleton } = input;
|
|
33
|
-
return ctx.hydrator.hydrateProfilesDetailed(skeleton.dids, params.hydrateCtx, {
|
|
33
|
+
return ctx.hydrator.hydrateProfilesDetailed(skeleton.dids, params.hydrateCtx, {
|
|
34
|
+
knownFollowersDids: skeleton.socialProofDids,
|
|
35
|
+
activitySubscriptions: true,
|
|
36
|
+
});
|
|
34
37
|
};
|
|
35
38
|
const presentation = (input) => {
|
|
36
39
|
const { ctx, skeleton, hydration } = input;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProfiles.js","sourceRoot":"","sources":["../../../../../src/api/internal/bsky/actor/getProfiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAS5C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAGjE,MAAM,CAAC,OAAO,WAAW,MAAc,EAAE,GAAe;IACtD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAC9E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC1C,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;gBAC7B,QAAQ;gBACR,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC1C,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,CAAA;YAEhE,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,MAAM;aACb,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,KAGvB,EAA0B,EAAE;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,gEAAgE;IAChE,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAChE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAChB,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EAAE,KAIxB,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACvC,OAAO,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CACzC,QAAQ,CAAC,IAAI,EACb,MAAM,CAAC,UAAU,EACjB,
|
|
1
|
+
{"version":3,"file":"getProfiles.js","sourceRoot":"","sources":["../../../../../src/api/internal/bsky/actor/getProfiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAS5C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAGjE,MAAM,CAAC,OAAO,WAAW,MAAc,EAAE,GAAe;IACtD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAC9E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC1C,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;QAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;gBAC7B,QAAQ;gBACR,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC1C,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,CAAA;YAEhE,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,MAAM;aACb,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,KAAK,EAAE,KAGvB,EAA0B,EAAE;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,gEAAgE;IAChE,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAChE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAChB,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EAAE,KAIxB,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACvC,OAAO,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CACzC,QAAQ,CAAC,IAAI,EACb,MAAM,CAAC,UAAU,EACjB;QACE,kBAAkB,EAAE,QAAQ,CAAC,eAAe;QAC5C,qBAAqB,EAAE,IAAI;KAC5B,CACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAKrB,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CACjD,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAC1C,CAAA;IACD,OAAO,EAAE,QAAQ,EAAE,CAAA;AACrB,CAAC,CAAA","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport type { DidString } from '@atproto/syntax'\nimport type { Server } from '@atproto/xrpc-server'\nimport type { AppContext } from '../../../../context.js'\nimport type {\n HydrateCtx,\n HydrationState,\n Hydrator,\n} from '../../../../hydration/hydrator.js'\nimport { internal } from '../../../../lexicons/index.js'\nimport { createPipeline, noRules } from '../../../../pipeline.js'\nimport type { Views } from '../../../../views/index.js'\n\nexport default function (server: Server, ctx: AppContext) {\n const getProfiles = createPipeline(skeleton, hydration, noRules, presentation)\n server.add(internal.bsky.actor.getProfiles, {\n auth: ctx.authVerifier.role,\n handler: async ({ params, req }) => {\n const labelers = ctx.reqLabelers(req)\n const hydrateCtx = await ctx.hydrator.createContext({\n viewer: params.viewer ?? null,\n labelers,\n includeTakedowns: params.includeTakedowns,\n })\n\n const result = await getProfiles({ ...params, hydrateCtx }, ctx)\n\n return {\n encoding: 'application/json',\n body: result,\n }\n },\n })\n}\n\nconst skeleton = async (input: {\n ctx: Context\n params: Params\n}): Promise<SkeletonState> => {\n const { params } = input\n const dids = params.dids\n const didSet = new Set(dids)\n // social proof is only hydrated for dids present in both inputs\n const socialProofDids = (params.socialProof ?? []).filter((did) =>\n didSet.has(did),\n )\n return { dids, socialProofDids }\n}\n\nconst hydration = async (input: {\n ctx: Context\n params: Params\n skeleton: SkeletonState\n}) => {\n const { ctx, params, skeleton } = input\n return ctx.hydrator.hydrateProfilesDetailed(\n skeleton.dids,\n params.hydrateCtx,\n {\n knownFollowersDids: skeleton.socialProofDids,\n activitySubscriptions: true,\n },\n )\n}\n\nconst presentation = (input: {\n ctx: Context\n params: Params\n skeleton: SkeletonState\n hydration: HydrationState\n}) => {\n const { ctx, skeleton, hydration } = input\n const profiles = mapDefined(skeleton.dids, (did) =>\n ctx.views.profileDetailed(did, hydration),\n )\n return { profiles }\n}\n\ntype Context = {\n hydrator: Hydrator\n views: Views\n}\n\ntype Params = internal.bsky.actor.getProfiles.$Params & {\n hydrateCtx: HydrateCtx\n}\n\ntype SkeletonState = {\n dids: DidString[]\n socialProofDids: DidString[]\n}\n"]}
|
package/dist/config.d.ts
CHANGED
|
@@ -54,11 +54,13 @@ export interface ServerConfigValues {
|
|
|
54
54
|
rolodexApiKey?: string;
|
|
55
55
|
rolodexHttpVersion?: '1.1' | '2';
|
|
56
56
|
rolodexIgnoreBadTls?: boolean;
|
|
57
|
+
externalRecordsSafeDomains?: string[];
|
|
57
58
|
searchUrl?: string;
|
|
58
59
|
searchTagsHide: Set<string>;
|
|
59
60
|
searchTagsHideAll: Set<string>;
|
|
60
61
|
suggestionsUrl?: string;
|
|
61
62
|
suggestionsApiKey?: string;
|
|
63
|
+
atmosphereExploreTabService?: string;
|
|
62
64
|
topicsUrl?: string;
|
|
63
65
|
topicsApiKey?: string;
|
|
64
66
|
irisUrl?: string;
|
|
@@ -148,6 +150,7 @@ export declare class ServerConfig {
|
|
|
148
150
|
get searchTagsHideAll(): Set<string>;
|
|
149
151
|
get suggestionsUrl(): string | undefined;
|
|
150
152
|
get suggestionsApiKey(): string | undefined;
|
|
153
|
+
get atmosphereExploreTabService(): string | undefined;
|
|
151
154
|
get topicsUrl(): string | undefined;
|
|
152
155
|
get topicsApiKey(): string | undefined;
|
|
153
156
|
get irisUrl(): string | undefined;
|
|
@@ -200,6 +203,7 @@ export declare class ServerConfig {
|
|
|
200
203
|
get debugFieldAllowedDids(): Set<string>;
|
|
201
204
|
get draftsLimit(): number;
|
|
202
205
|
get searchV2OverrideHeader(): string | undefined;
|
|
206
|
+
get externalRecordsSafeDomains(): string[];
|
|
203
207
|
}
|
|
204
208
|
export {};
|
|
205
209
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -51,6 +51,7 @@ export class ServerConfig {
|
|
|
51
51
|
const searchTagsHideAll = new Set(envList(process.env.BSKY_SEARCH_TAGS_HIDE_ALL));
|
|
52
52
|
const suggestionsUrl = process.env.BSKY_SUGGESTIONS_URL || undefined;
|
|
53
53
|
const suggestionsApiKey = process.env.BSKY_SUGGESTIONS_API_KEY || undefined;
|
|
54
|
+
const atmosphereExploreTabService = process.env.BSKY_ATMOSPHERE_EXPLORE_TAB_SERVICE || undefined;
|
|
54
55
|
const topicsUrl = process.env.BSKY_TOPICS_URL || undefined;
|
|
55
56
|
const topicsApiKey = process.env.BSKY_TOPICS_API_KEY;
|
|
56
57
|
const irisUrl = process.env.BSKY_IRIS_URL || undefined;
|
|
@@ -95,6 +96,9 @@ export class ServerConfig {
|
|
|
95
96
|
const rolodexHttpVersion = process.env.BSKY_ROLODEX_HTTP_VERSION || '2';
|
|
96
97
|
const rolodexIgnoreBadTls = process.env.BSKY_ROLODEX_IGNORE_BAD_TLS === 'true';
|
|
97
98
|
assert(rolodexHttpVersion === '1.1' || rolodexHttpVersion === '2');
|
|
99
|
+
const externalRecordsSafeDomains = envList(process.env.BSKY_EXTERNAL_RECORDS_SAFE_DOMAINS)
|
|
100
|
+
.map((value) => value.trim())
|
|
101
|
+
.filter(Boolean);
|
|
98
102
|
const blobRateLimitBypassKey = process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_KEY || undefined;
|
|
99
103
|
// single domain would be e.g. "mypds.com", subdomains are supported with a leading dot e.g. ".mypds.com"
|
|
100
104
|
const blobRateLimitBypassHostname = process.env.BSKY_BLOB_RATE_LIMIT_BYPASS_HOSTNAME || undefined;
|
|
@@ -211,6 +215,7 @@ export class ServerConfig {
|
|
|
211
215
|
searchTagsHideAll,
|
|
212
216
|
suggestionsUrl,
|
|
213
217
|
suggestionsApiKey,
|
|
218
|
+
atmosphereExploreTabService,
|
|
214
219
|
topicsUrl,
|
|
215
220
|
topicsApiKey,
|
|
216
221
|
irisUrl,
|
|
@@ -243,6 +248,7 @@ export class ServerConfig {
|
|
|
243
248
|
rolodexApiKey,
|
|
244
249
|
rolodexHttpVersion,
|
|
245
250
|
rolodexIgnoreBadTls,
|
|
251
|
+
externalRecordsSafeDomains,
|
|
246
252
|
blobRateLimitBypassKey,
|
|
247
253
|
blobRateLimitBypassHostname,
|
|
248
254
|
adminPasswords,
|
|
@@ -372,6 +378,9 @@ export class ServerConfig {
|
|
|
372
378
|
get suggestionsApiKey() {
|
|
373
379
|
return this.cfg.suggestionsApiKey;
|
|
374
380
|
}
|
|
381
|
+
get atmosphereExploreTabService() {
|
|
382
|
+
return this.cfg.atmosphereExploreTabService;
|
|
383
|
+
}
|
|
375
384
|
get topicsUrl() {
|
|
376
385
|
return this.cfg.topicsUrl;
|
|
377
386
|
}
|
|
@@ -528,6 +537,9 @@ export class ServerConfig {
|
|
|
528
537
|
get searchV2OverrideHeader() {
|
|
529
538
|
return this.cfg.searchV2OverrideHeader;
|
|
530
539
|
}
|
|
540
|
+
get externalRecordsSafeDomains() {
|
|
541
|
+
return this.cfg.externalRecordsSafeDomains ?? [];
|
|
542
|
+
}
|
|
531
543
|
}
|
|
532
544
|
function envList(str) {
|
|
533
545
|
if (str === undefined || str.length === 0)
|