@atproto/bsky 0.0.198 → 0.0.199

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.
Files changed (151) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/api/age-assurance/const.d.ts +11 -0
  3. package/dist/api/age-assurance/const.d.ts.map +1 -0
  4. package/dist/api/age-assurance/const.js +142 -0
  5. package/dist/api/age-assurance/const.js.map +1 -0
  6. package/dist/api/age-assurance/index.d.ts +4 -0
  7. package/dist/api/age-assurance/index.d.ts.map +1 -0
  8. package/dist/api/age-assurance/index.js +24 -0
  9. package/dist/api/age-assurance/index.js.map +1 -0
  10. package/dist/api/age-assurance/kws/age-verified.d.ts +109 -0
  11. package/dist/api/age-assurance/kws/age-verified.d.ts.map +1 -0
  12. package/dist/api/age-assurance/kws/age-verified.js +63 -0
  13. package/dist/api/age-assurance/kws/age-verified.js.map +1 -0
  14. package/dist/api/age-assurance/kws/const.d.ts +13 -0
  15. package/dist/api/age-assurance/kws/const.d.ts.map +1 -0
  16. package/dist/api/age-assurance/kws/const.js +36 -0
  17. package/dist/api/age-assurance/kws/const.js.map +1 -0
  18. package/dist/api/age-assurance/kws/external-payload.d.ts +75 -0
  19. package/dist/api/age-assurance/kws/external-payload.d.ts.map +1 -0
  20. package/dist/api/age-assurance/kws/external-payload.js +124 -0
  21. package/dist/api/age-assurance/kws/external-payload.js.map +1 -0
  22. package/dist/api/age-assurance/kws/external-payload.test.d.ts +2 -0
  23. package/dist/api/age-assurance/kws/external-payload.test.d.ts.map +1 -0
  24. package/dist/api/age-assurance/kws/external-payload.test.js +65 -0
  25. package/dist/api/age-assurance/kws/external-payload.test.js.map +1 -0
  26. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts +4 -0
  27. package/dist/api/age-assurance/redirects/kws-age-verified.d.ts.map +1 -0
  28. package/dist/api/age-assurance/redirects/kws-age-verified.js +76 -0
  29. package/dist/api/age-assurance/redirects/kws-age-verified.js.map +1 -0
  30. package/dist/api/age-assurance/stash.d.ts +4 -0
  31. package/dist/api/age-assurance/stash.d.ts.map +1 -0
  32. package/dist/api/age-assurance/stash.js +19 -0
  33. package/dist/api/age-assurance/stash.js.map +1 -0
  34. package/dist/api/age-assurance/types.d.ts +10 -0
  35. package/dist/api/age-assurance/types.d.ts.map +1 -0
  36. package/dist/api/age-assurance/types.js +3 -0
  37. package/dist/api/age-assurance/types.js.map +1 -0
  38. package/dist/api/age-assurance/util.d.ts +15 -0
  39. package/dist/api/age-assurance/util.d.ts.map +1 -0
  40. package/dist/api/age-assurance/util.js +54 -0
  41. package/dist/api/age-assurance/util.js.map +1 -0
  42. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts +4 -0
  43. package/dist/api/age-assurance/webhooks/kws-age-verified.d.ts.map +1 -0
  44. package/dist/api/age-assurance/webhooks/kws-age-verified.js +63 -0
  45. package/dist/api/age-assurance/webhooks/kws-age-verified.js.map +1 -0
  46. package/dist/api/app/bsky/ageassurance/begin.d.ts +4 -0
  47. package/dist/api/app/bsky/ageassurance/begin.d.ts.map +1 -0
  48. package/dist/api/app/bsky/ageassurance/begin.js +131 -0
  49. package/dist/api/app/bsky/ageassurance/begin.js.map +1 -0
  50. package/dist/api/app/bsky/ageassurance/getConfig.d.ts +4 -0
  51. package/dist/api/app/bsky/ageassurance/getConfig.d.ts.map +1 -0
  52. package/dist/api/app/bsky/ageassurance/getConfig.js +16 -0
  53. package/dist/api/app/bsky/ageassurance/getConfig.js.map +1 -0
  54. package/dist/api/app/bsky/ageassurance/getState.d.ts +4 -0
  55. package/dist/api/app/bsky/ageassurance/getState.d.ts.map +1 -0
  56. package/dist/api/app/bsky/ageassurance/getState.js +42 -0
  57. package/dist/api/app/bsky/ageassurance/getState.js.map +1 -0
  58. package/dist/api/external.d.ts.map +1 -1
  59. package/dist/api/external.js +2 -0
  60. package/dist/api/external.js.map +1 -1
  61. package/dist/api/index.d.ts.map +1 -1
  62. package/dist/api/index.js +8 -2
  63. package/dist/api/index.js.map +1 -1
  64. package/dist/api/kws/api.d.ts.map +1 -1
  65. package/dist/api/kws/api.js +44 -26
  66. package/dist/api/kws/api.js.map +1 -1
  67. package/dist/api/kws/index.d.ts.map +1 -1
  68. package/dist/api/kws/index.js +3 -1
  69. package/dist/api/kws/index.js.map +1 -1
  70. package/dist/api/kws/webhook.d.ts +3 -1
  71. package/dist/api/kws/webhook.d.ts.map +1 -1
  72. package/dist/api/kws/webhook.js +48 -20
  73. package/dist/api/kws/webhook.js.map +1 -1
  74. package/dist/config.d.ts +14 -0
  75. package/dist/config.d.ts.map +1 -1
  76. package/dist/config.js +10 -2
  77. package/dist/config.js.map +1 -1
  78. package/dist/data-plane/bsync/index.d.ts.map +1 -1
  79. package/dist/data-plane/bsync/index.js +22 -0
  80. package/dist/data-plane/bsync/index.js.map +1 -1
  81. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts +4 -0
  82. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.d.ts.map +1 -0
  83. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js +30 -0
  84. package/dist/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.js.map +1 -0
  85. package/dist/data-plane/server/db/migrations/index.d.ts +1 -0
  86. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  87. package/dist/data-plane/server/db/migrations/index.js +2 -1
  88. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  89. package/dist/data-plane/server/db/pagination.d.ts +3 -3
  90. package/dist/data-plane/server/db/tables/actor.d.ts +3 -0
  91. package/dist/data-plane/server/db/tables/actor.d.ts.map +1 -1
  92. package/dist/data-plane/server/db/tables/actor.js.map +1 -1
  93. package/dist/data-plane/server/routes/profile.d.ts.map +1 -1
  94. package/dist/data-plane/server/routes/profile.js +13 -1
  95. package/dist/data-plane/server/routes/profile.js.map +1 -1
  96. package/dist/hydration/hydrator.js +1 -1
  97. package/dist/hydration/hydrator.js.map +1 -1
  98. package/dist/kws.d.ts +35 -0
  99. package/dist/kws.d.ts.map +1 -1
  100. package/dist/kws.js +54 -0
  101. package/dist/kws.js.map +1 -1
  102. package/dist/logger.d.ts +1 -0
  103. package/dist/logger.d.ts.map +1 -1
  104. package/dist/logger.js +2 -1
  105. package/dist/logger.js.map +1 -1
  106. package/dist/proto/bsky_pb.d.ts +8 -0
  107. package/dist/proto/bsky_pb.d.ts.map +1 -1
  108. package/dist/proto/bsky_pb.js +20 -0
  109. package/dist/proto/bsky_pb.js.map +1 -1
  110. package/dist/stash.d.ts +1 -0
  111. package/dist/stash.d.ts.map +1 -1
  112. package/dist/stash.js +1 -0
  113. package/dist/stash.js.map +1 -1
  114. package/dist/util/uris.d.ts +2 -2
  115. package/dist/util/uris.d.ts.map +1 -1
  116. package/package.json +10 -9
  117. package/proto/bsky.proto +1 -0
  118. package/src/api/age-assurance/const.ts +142 -0
  119. package/src/api/age-assurance/index.ts +34 -0
  120. package/src/api/age-assurance/kws/age-verified.ts +75 -0
  121. package/src/api/age-assurance/kws/const.ts +33 -0
  122. package/src/api/age-assurance/kws/external-payload.test.ts +72 -0
  123. package/src/api/age-assurance/kws/external-payload.ts +149 -0
  124. package/src/api/age-assurance/redirects/kws-age-verified.ts +107 -0
  125. package/src/api/age-assurance/stash.ts +22 -0
  126. package/src/api/age-assurance/types.ts +10 -0
  127. package/src/api/age-assurance/util.ts +66 -0
  128. package/src/api/age-assurance/webhooks/kws-age-verified.ts +75 -0
  129. package/src/api/app/bsky/ageassurance/begin.ts +167 -0
  130. package/src/api/app/bsky/ageassurance/getConfig.ts +15 -0
  131. package/src/api/app/bsky/ageassurance/getState.ts +53 -0
  132. package/src/api/external.ts +2 -0
  133. package/src/api/index.ts +6 -0
  134. package/src/api/kws/api.ts +55 -34
  135. package/src/api/kws/index.ts +7 -1
  136. package/src/api/kws/webhook.ts +57 -34
  137. package/src/config.ts +26 -2
  138. package/src/data-plane/bsync/index.ts +31 -0
  139. package/src/data-plane/server/db/migrations/20251120T004738098Z-update-actor-age-assurance-v2.ts +28 -0
  140. package/src/data-plane/server/db/migrations/index.ts +1 -0
  141. package/src/data-plane/server/db/tables/actor.ts +3 -0
  142. package/src/data-plane/server/routes/profile.ts +12 -1
  143. package/src/hydration/hydrator.ts +1 -1
  144. package/src/kws.ts +81 -0
  145. package/src/logger.ts +2 -0
  146. package/src/proto/bsky_pb.ts +12 -0
  147. package/src/stash.ts +3 -0
  148. package/tests/views/age-assurance-v2.test.ts +745 -0
  149. package/tests/views/age-assurance.test.ts +2 -0
  150. package/tsconfig.build.tsbuildinfo +1 -1
  151. package/tsconfig.tests.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hydrator.js","sourceRoot":"","sources":["../../src/hydration/hydrator.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { mapDefined } from '@atproto/common'\nimport { AtUri } from '@atproto/syntax'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { type CheckedFeatureGatesMap, FeatureGateID } from '../feature-gates'\nimport { ids } from '../lexicon/lexicons'\nimport { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile'\nimport { isMain as isEmbedRecord } from '../lexicon/types/app/bsky/embed/record'\nimport { isMain as isEmbedRecordWithMedia } from '../lexicon/types/app/bsky/embed/recordWithMedia'\nimport { isListRule as isThreadgateListRule } from '../lexicon/types/app/bsky/feed/threadgate'\nimport { hydrationLogger } from '../logger'\nimport {\n Bookmark,\n BookmarkInfo,\n Notification,\n RecordRef,\n} from '../proto/bsky_pb'\nimport { ParsedLabelers } from '../util'\nimport { uriToDid, uriToDid as didFromUri } from '../util/uris'\nimport {\n ActivitySubscriptionStates,\n ActorHydrator,\n Actors,\n KnownFollowersStates,\n ProfileAggs,\n ProfileViewerState,\n ProfileViewerStates,\n} from './actor'\nimport {\n FeedGenAggs,\n FeedGenViewerStates,\n FeedGens,\n FeedHydrator,\n FeedItem,\n type GetPostsHydrationOptions,\n Likes,\n Post,\n PostAggs,\n PostViewerStates,\n Postgates,\n Posts,\n Reposts,\n ThreadContexts,\n ThreadRef,\n Threadgates,\n} from './feed'\nimport {\n BlockEntry,\n Follows,\n GraphHydrator,\n ListAggs,\n ListItems,\n ListMembershipState,\n ListMembershipStates,\n ListViewerStates,\n Lists,\n RelationshipPair,\n StarterPackAggs,\n StarterPacks,\n Verifications,\n} from './graph'\nimport {\n LabelHydrator,\n LabelerAggs,\n LabelerViewerStates,\n Labelers,\n Labels,\n} from './label'\nimport {\n HydrationMap,\n ItemRef,\n RecordInfo,\n mergeManyMaps,\n mergeMaps,\n mergeNestedMaps,\n urisByCollection,\n} from './util'\n\nexport class HydrateCtx {\n labelers = this.vals.labelers\n viewer = this.vals.viewer !== null ? serviceRefToDid(this.vals.viewer) : null\n includeTakedowns = this.vals.includeTakedowns\n includeActorTakedowns = this.vals.includeActorTakedowns\n include3pBlocks = this.vals.include3pBlocks\n includeDebugField = this.vals.includeDebugField\n featureGates: CheckedFeatureGatesMap = this.vals.featureGates || new Map()\n constructor(private vals: HydrateCtxVals) {}\n // Convenience with use with dataplane.getActors cache control\n get skipCacheForViewer() {\n if (!this.viewer) return\n return [this.viewer]\n }\n copy<V extends Partial<HydrateCtxVals>>(vals?: V): HydrateCtx & V {\n return new HydrateCtx({ ...this.vals, ...vals }) as HydrateCtx & V\n }\n}\n\nexport type HydrateCtxVals = {\n labelers: ParsedLabelers\n viewer: string | null\n includeTakedowns?: boolean\n includeActorTakedowns?: boolean\n include3pBlocks?: boolean\n includeDebugField?: boolean\n featureGates?: CheckedFeatureGatesMap\n}\n\nexport type HydrationState = {\n ctx?: HydrateCtx\n actors?: Actors\n profileViewers?: ProfileViewerStates\n profileAggs?: ProfileAggs\n posts?: Posts\n postAggs?: PostAggs\n postViewers?: PostViewerStates\n threadContexts?: ThreadContexts\n postBlocks?: PostBlocks\n reposts?: Reposts\n follows?: Follows\n followBlocks?: FollowBlocks\n threadgates?: Threadgates\n postgates?: Postgates\n lists?: Lists\n listAggs?: ListAggs\n listMemberships?: ListMembershipStates\n listViewers?: ListViewerStates\n listItems?: ListItems\n likes?: Likes\n likeBlocks?: LikeBlocks\n labels?: Labels\n feedgens?: FeedGens\n feedgenViewers?: FeedGenViewerStates\n feedgenAggs?: FeedGenAggs\n starterPacks?: StarterPacks\n starterPackAggs?: StarterPackAggs\n labelers?: Labelers\n labelerViewers?: LabelerViewerStates\n labelerAggs?: LabelerAggs\n knownFollowers?: KnownFollowersStates\n activitySubscriptions?: ActivitySubscriptionStates\n bidirectionalBlocks?: BidirectionalBlocks\n verifications?: Verifications\n bookmarks?: Bookmarks\n}\n\nexport type PostBlock = { embed: boolean; parent: boolean; root: boolean }\nexport type PostBlocks = HydrationMap<PostBlock>\ntype PostBlockPairs = {\n embed?: RelationshipPair\n parent?: RelationshipPair\n root?: RelationshipPair\n}\n\nexport type LikeBlock = boolean\nexport type LikeBlocks = HydrationMap<LikeBlock>\n\nexport type FollowBlock = boolean\nexport type FollowBlocks = HydrationMap<FollowBlock>\n\nexport type BidirectionalBlocks = HydrationMap<HydrationMap<boolean>>\n\n// actor DID -> stash key -> bookmark\nexport type Bookmarks = HydrationMap<HydrationMap<Bookmark>>\n\n/**\n * Additional config passed from `ServerConfig` to the `Hydrator` instance.\n * Values within this config object may be passed to other sub-hydrators.\n */\nexport type HydratorConfig = {\n debugFieldAllowedDids: Set<string>\n}\n\nexport class Hydrator {\n actor: ActorHydrator\n feed: FeedHydrator\n graph: GraphHydrator\n label: LabelHydrator\n serviceLabelers: Set<string>\n config: HydratorConfig\n\n constructor(\n public dataplane: DataPlaneClient,\n serviceLabelers: string[] = [],\n config: HydratorConfig,\n ) {\n this.config = config\n this.actor = new ActorHydrator(dataplane)\n this.feed = new FeedHydrator(dataplane)\n this.graph = new GraphHydrator(dataplane)\n this.label = new LabelHydrator(dataplane)\n this.serviceLabelers = new Set(serviceLabelers)\n }\n\n // app.bsky.actor.defs#profileView\n // - profile viewer\n // - list basic\n // Note: builds on the naive profile viewer hydrator and removes references to lists that have been deleted\n async hydrateProfileViewers(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const viewer = ctx.viewer\n if (!viewer) return {}\n const profileViewers = await this.actor.getProfileViewerStatesNaive(\n dids,\n viewer,\n )\n const listUris: string[] = []\n profileViewers.forEach((item) => {\n listUris.push(...listUrisFromProfileViewer(item))\n })\n const listState = await this.hydrateListsBasic(listUris, ctx)\n // if a list no longer exists or is not a mod list, then remove from viewer state\n profileViewers.forEach((item) => {\n removeNonModListsFromProfileViewer(item, listState)\n })\n\n return mergeStates(listState, {\n profileViewers,\n ctx,\n })\n }\n\n // app.bsky.actor.defs#profileView\n // - profile\n // - list basic\n async hydrateProfiles(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const includeTakedowns = ctx.includeTakedowns || ctx.includeActorTakedowns\n const [actors, labels, profileViewersState] = await Promise.all([\n this.actor.getActors(dids, {\n includeTakedowns,\n skipCacheForDids: ctx.skipCacheForViewer,\n }),\n this.label.getLabelsForSubjects(labelSubjectsForDid(dids), ctx.labelers),\n this.hydrateProfileViewers(dids, ctx),\n ])\n if (!includeTakedowns) {\n actionTakedownLabels(dids, actors, labels)\n }\n return mergeStates(profileViewersState ?? {}, {\n actors,\n labels,\n ctx,\n })\n }\n\n // app.bsky.actor.defs#profileViewBasic\n // - profile basic\n // - profile\n // - list basic\n async hydrateProfilesBasic(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n return this.hydrateProfiles(dids, ctx)\n }\n\n // app.bsky.actor.defs#profileViewDetailed\n // - profile detailed\n // - profile\n // - list basic\n // - starterpack\n // - profile\n // - list basic\n // - labels\n async hydrateProfilesDetailed(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n let knownFollowers: KnownFollowersStates = new HydrationMap()\n try {\n knownFollowers = await this.actor.getKnownFollowers(dids, ctx.viewer)\n } catch (err) {\n hydrationLogger.error(\n { err },\n 'Failed to get known followers for profiles',\n )\n }\n\n let activitySubscriptions: ActivitySubscriptionStates = new HydrationMap()\n try {\n activitySubscriptions = await this.actor.getActivitySubscriptions(\n dids,\n ctx.viewer,\n )\n } catch (err) {\n hydrationLogger.error(\n { err },\n 'Failed to get activity subscriptions state for profiles',\n )\n }\n\n const subjectsToKnownFollowersMap = Array.from(\n knownFollowers.keys(),\n ).reduce((acc, did) => {\n const known = knownFollowers.get(did)\n if (known) {\n acc.set(did, known.followers)\n }\n return acc\n }, new Map<string, string[]>())\n const allKnownFollowerDids = Array.from(knownFollowers.values())\n .filter(Boolean)\n .flatMap((f) => f!.followers)\n const allDids = Array.from(new Set(dids.concat(allKnownFollowerDids)))\n const [state, profileAggs, bidirectionalBlocks] = await Promise.all([\n this.hydrateProfiles(allDids, ctx),\n this.actor.getProfileAggregates(dids),\n this.hydrateBidirectionalBlocks(subjectsToKnownFollowersMap, ctx),\n ])\n const starterPackUriSet = new Set<string>()\n state.actors?.forEach((actor) => {\n if (actor?.profile?.joinedViaStarterPack) {\n starterPackUriSet.add(actor?.profile?.joinedViaStarterPack?.uri)\n }\n })\n const starterPackState = await this.hydrateStarterPacksBasic(\n [...starterPackUriSet],\n ctx,\n )\n return mergeManyStates(state, starterPackState, {\n profileAggs,\n knownFollowers,\n activitySubscriptions,\n ctx,\n bidirectionalBlocks,\n })\n }\n\n // app.bsky.graph.defs#listView\n // - list\n // - profile basic\n async hydrateLists(uris: string[], ctx: HydrateCtx): Promise<HydrationState> {\n const [listsState, profilesState] = await Promise.all([\n this.hydrateListsBasic(uris, ctx, {\n skipAuthors: true, // handled via author profile hydration\n }),\n this.hydrateProfilesBasic(uris.map(didFromUri), ctx),\n ])\n return mergeStates(listsState, profilesState)\n }\n\n // app.bsky.graph.defs#listViewBasic\n // - list basic\n async hydrateListsBasic(\n uris: string[],\n ctx: HydrateCtx,\n opts?: { skipAuthors: boolean },\n ): Promise<HydrationState> {\n const includeAuthorDids = opts?.skipAuthors ? [] : uris.map(uriToDid)\n const [lists, listAggs, listViewers, labels, actors] = await Promise.all([\n this.graph.getLists(uris, ctx.includeTakedowns),\n this.graph.getListAggregates(uris.map((uri) => ({ uri }))),\n ctx.viewer ? this.graph.getListViewerStates(uris, ctx.viewer) : undefined,\n this.label.getLabelsForSubjects(\n [...uris, ...includeAuthorDids],\n ctx.labelers,\n ),\n this.actor.getActors(includeAuthorDids, {\n includeTakedowns: ctx.includeTakedowns,\n skipCacheForDids: ctx.skipCacheForViewer,\n }),\n ])\n\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, lists, labels)\n actionTakedownLabels(includeAuthorDids, actors, labels)\n }\n\n return { lists, listAggs, listViewers, labels, actors, ctx }\n }\n\n // app.bsky.graph.defs#listItemView\n // - list item\n // - profile\n // - list basic\n async hydrateListItems(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const listItems = await this.graph.getListItems(uris)\n const dids: string[] = []\n listItems.forEach((item) => {\n if (item) {\n dids.push(item.record.subject)\n }\n })\n const profileState = await this.hydrateProfiles(dids, ctx)\n return mergeStates(profileState, { listItems, ctx })\n }\n\n async hydrateListsMembership(\n uris: string[],\n did: string,\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [\n actorsHydrationState,\n listsHydrationState,\n { listitemUris: listItemUris },\n ] = await Promise.all([\n this.hydrateProfiles([did], ctx),\n this.hydrateLists(uris, ctx),\n this.dataplane.getListMembership({\n actorDid: did,\n listUris: uris,\n }),\n ])\n\n // mapping uri -> did -> { actorListItemUri }\n const listMemberships = new HydrationMap(\n uris.map((uri, i) => {\n const listItemUri = listItemUris[i]\n return [\n uri,\n new HydrationMap<ListMembershipState>([\n listItemUri\n ? [did, { actorListItemUri: listItemUri }]\n : [did, null],\n ]),\n ]\n }),\n )\n\n return mergeManyStates(actorsHydrationState, listsHydrationState, {\n listMemberships,\n ctx,\n })\n }\n\n // app.bsky.feed.defs#postView\n // - post\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - mod service\n // - profile\n // - list basic\n async hydratePosts(\n refs: ItemRef[],\n ctx: HydrateCtx,\n state: HydrationState = {},\n options: Pick<GetPostsHydrationOptions, 'processDynamicTagsForView'> = {},\n ): Promise<HydrationState> {\n const uris = refs.map((ref) => ref.uri)\n\n state.posts ??= new HydrationMap<Post>()\n const addPostsToHydrationState = (posts: Posts) => {\n posts.forEach((post, uri) => {\n state.posts ??= new HydrationMap<Post>()\n state.posts.set(uri, post)\n })\n }\n\n // layer 0: the posts in the thread\n const postsLayer0 = await this.feed.getPosts(\n uris,\n ctx.includeTakedowns,\n state.posts,\n ctx.viewer,\n {\n processDynamicTagsForView: options.processDynamicTagsForView,\n },\n )\n addPostsToHydrationState(postsLayer0)\n\n const additionalRootUris = rootUrisFromPosts(postsLayer0) // supports computing threadgates\n const threadRootUris = new Set<string>()\n for (const [uri, post] of postsLayer0) {\n if (post) {\n threadRootUris.add(rootUriFromPost(post) ?? uri)\n }\n }\n const postUrisWithThreadgates = new Set<string>()\n for (const uri of threadRootUris) {\n const post = postsLayer0.get(uri)\n /*\n * Checking `post.hasThreadGate` is an optimization, which tells us that\n * this post has a threadgate record associated with it. `hydratePosts`\n * always hydrates root posts via `additionalRootUris`, so we try to\n * check the optimization flag were possible. If the post is unavailable\n * for whatever reason, we fall back to requesting threadgate records\n * that may not exist.\n */\n if (!post || post.hasThreadGate) {\n postUrisWithThreadgates.add(uri)\n }\n }\n\n // layer 1: first level embeds plus thread roots we haven't fetched yet\n const urisLayer1 = nestedRecordUrisFromPosts(postsLayer0)\n const urisLayer1ByCollection = urisByCollection(urisLayer1)\n const embedPostUrisLayer1 =\n urisLayer1ByCollection.get(ids.AppBskyFeedPost) ?? []\n const postsLayer1 = await this.feed.getPosts(\n [...embedPostUrisLayer1, ...additionalRootUris],\n ctx.includeTakedowns,\n state.posts,\n )\n addPostsToHydrationState(postsLayer1)\n\n // layer 2: second level embeds, ignoring any additional root uris we mixed-in to the previous layer\n const urisLayer2 = nestedRecordUrisFromPosts(\n postsLayer1,\n embedPostUrisLayer1,\n )\n const urisLayer2ByCollection = urisByCollection(urisLayer2)\n const embedPostUrisLayer2 =\n urisLayer2ByCollection.get(ids.AppBskyFeedPost) ?? []\n\n const [postsLayer2, threadgates] = await Promise.all([\n this.feed.getPosts(\n embedPostUrisLayer2,\n ctx.includeTakedowns,\n state.posts,\n ),\n this.feed.getThreadgatesForPosts([...postUrisWithThreadgates.values()]),\n ])\n addPostsToHydrationState(postsLayer2)\n\n // collect list/feedgen embeds, lists in threadgates, post record hydration\n const threadgateListUris = getListUrisFromThreadgates(threadgates)\n const nestedListUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyGraphList) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyGraphList) ?? []),\n ]\n const nestedFeedGenUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyFeedGenerator) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyFeedGenerator) ?? []),\n ]\n const nestedLabelerDids = [\n ...(urisLayer1ByCollection.get(ids.AppBskyLabelerService) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyLabelerService) ?? []),\n ].map(didFromUri)\n const nestedStarterPackUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyGraphStarterpack) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyGraphStarterpack) ?? []),\n ]\n const posts =\n mergeManyMaps(postsLayer0, postsLayer1, postsLayer2) ?? postsLayer0\n const allPostUris = [...posts.keys()]\n const allRefs = [\n ...refs,\n ...embedPostUrisLayer1.map(uriToRef), // supports aggregates on embed #viewRecords\n ...embedPostUrisLayer2.map(uriToRef),\n ]\n const threadRefs = allRefs.map((ref) => ({\n ...ref,\n threadRoot: posts.get(ref.uri)?.record.reply?.root.uri ?? ref.uri,\n }))\n const postUrisWithPostgates = new Set<string>()\n for (const [uri, post] of posts) {\n if (post && post.hasPostGate) {\n postUrisWithPostgates.add(uri)\n }\n }\n\n const [\n postAggs,\n postViewers,\n labels,\n postBlocks,\n profileState,\n listState,\n feedGenState,\n labelerState,\n starterPackState,\n postgates,\n ] = await Promise.all([\n this.feed.getPostAggregates(allRefs, ctx.viewer),\n ctx.viewer\n ? this.feed.getPostViewerStates(threadRefs, ctx.viewer)\n : undefined,\n this.label.getLabelsForSubjects(allPostUris, ctx.labelers),\n this.hydratePostBlocks(posts, ctx),\n this.hydrateProfiles(allPostUris.map(didFromUri), ctx),\n this.hydrateLists([...nestedListUris, ...threadgateListUris], ctx),\n this.hydrateFeedGens(nestedFeedGenUris, ctx),\n this.hydrateLabelers(nestedLabelerDids, ctx),\n this.hydrateStarterPacksBasic(nestedStarterPackUris, ctx),\n this.feed.getPostgatesForPosts([...postUrisWithPostgates.values()]),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(allPostUris, posts, labels)\n }\n // combine all hydration state\n return mergeManyStates(\n profileState,\n listState,\n feedGenState,\n labelerState,\n starterPackState,\n {\n posts,\n postAggs,\n postViewers,\n postBlocks,\n labels,\n threadgates,\n postgates,\n ctx,\n },\n )\n }\n\n private async hydratePostBlocks(\n posts: Posts,\n ctx: HydrateCtx,\n ): Promise<PostBlocks> {\n const postBlocks = new HydrationMap<PostBlock>()\n const postBlocksPairs = new Map<string, PostBlockPairs>()\n const relationships: RelationshipPair[] = []\n for (const [uri, item] of posts) {\n if (!item) continue\n const post = item.record\n const creator = didFromUri(uri)\n const postBlockPairs: PostBlockPairs = {}\n postBlocksPairs.set(uri, postBlockPairs)\n // 3p block for replies\n const parentUri = post.reply?.parent.uri\n const parentDid = parentUri && didFromUri(parentUri)\n if (parentDid && parentDid !== creator) {\n const pair: RelationshipPair = [creator, parentDid]\n relationships.push(pair)\n postBlockPairs.parent = pair\n }\n const rootUri = post.reply?.root.uri\n const rootDid = rootUri && didFromUri(rootUri)\n if (rootDid && rootDid !== creator) {\n const pair: RelationshipPair = [creator, rootDid]\n relationships.push(pair)\n postBlockPairs.root = pair\n }\n // 3p block for record embeds\n for (const embedUri of nestedRecordUris(post)) {\n const pair: RelationshipPair = [creator, didFromUri(embedUri)]\n relationships.push(pair)\n postBlockPairs.embed = pair\n }\n }\n // replace embed/parent/root pairs with block state\n const blocks = await this.hydrateBidirectionalBlocks(\n pairsToMap(relationships),\n ctx,\n )\n for (const [uri, { embed, parent, root }] of postBlocksPairs) {\n postBlocks.set(uri, {\n embed: !!embed && !!isBlocked(blocks, embed),\n parent: !!parent && !!isBlocked(blocks, parent),\n root: !!root && !!isBlocked(blocks, root),\n })\n }\n return postBlocks\n }\n\n // app.bsky.feed.defs#feedViewPost\n // - post (+ replies w/ reply parent author)\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - repost\n // - profile\n // - list basic\n // - post\n // - ...\n async hydrateFeedItems(\n items: FeedItem[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n // get posts, collect reply refs\n const posts = await this.feed.getPosts(\n items.map((item) => item.post.uri),\n ctx.includeTakedowns,\n )\n const rootUris: string[] = []\n const parentUris: string[] = []\n const postAndReplyRefs: ItemRef[] = []\n posts.forEach((post, uri) => {\n if (!post) return\n postAndReplyRefs.push({ uri, cid: post.cid })\n if (post.record.reply) {\n rootUris.push(post.record.reply.root.uri)\n parentUris.push(post.record.reply.parent.uri)\n postAndReplyRefs.push(post.record.reply.root, post.record.reply.parent)\n }\n })\n // get replies, collect reply parent authors\n const replies = await this.feed.getPosts(\n [...rootUris, ...parentUris],\n ctx.includeTakedowns,\n )\n const replyParentAuthors: string[] = []\n parentUris.forEach((uri) => {\n const parent = replies.get(uri)\n if (!parent?.record.reply) return\n replyParentAuthors.push(didFromUri(parent.record.reply.parent.uri))\n })\n // hydrate state for all posts, reposts, authors of reposts + reply parent authors\n const repostUris = mapDefined(items, (item) => item.repost?.uri)\n const [postState, repostProfileState, reposts] = await Promise.all([\n this.hydratePosts(postAndReplyRefs, ctx, {\n posts: posts.merge(replies), // avoids refetches of posts\n }),\n this.hydrateProfiles(\n [...repostUris.map(didFromUri), ...replyParentAuthors],\n ctx,\n ),\n this.feed.getReposts(repostUris, ctx.includeTakedowns),\n ])\n return mergeManyStates(postState, repostProfileState, {\n reposts,\n ctx,\n })\n }\n\n // app.bsky.feed.defs#threadViewPost\n // - post\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n async hydrateThreadPosts(\n refs: ItemRef[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const postsState = await this.hydratePosts(refs, ctx, undefined, {\n processDynamicTagsForView: ctx.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n )\n ? 'thread'\n : undefined,\n })\n\n const { posts } = postsState\n const postsList = posts ? Array.from(posts.entries()) : []\n\n const isDefined = (\n entry: [string, Post | null],\n ): entry is [string, Post] => {\n const [, post] = entry\n return !!post\n }\n\n const threadRefs: ThreadRef[] = postsList\n .filter(isDefined)\n .map(([uri, post]) => ({\n uri,\n cid: post.cid,\n threadRoot: post.record.reply?.root.uri ?? uri,\n }))\n\n const threadContexts = await this.feed.getThreadContexts(threadRefs)\n\n return mergeStates(postsState, { threadContexts })\n }\n\n // app.bsky.feed.defs#generatorView\n // - feedgen\n // - profile\n // - list basic\n async hydrateFeedGens(\n uris: string[], // @TODO any way to get refs here?\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [feedgens, feedgenAggs, feedgenViewers, profileState, labels] =\n await Promise.all([\n this.feed.getFeedGens(uris, ctx.includeTakedowns),\n this.feed.getFeedGenAggregates(\n uris.map((uri) => ({ uri })),\n ctx.viewer,\n ),\n ctx.viewer\n ? this.feed.getFeedGenViewerStates(uris, ctx.viewer)\n : undefined,\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, feedgens, labels)\n }\n return mergeStates(profileState, {\n feedgens,\n feedgenAggs,\n feedgenViewers,\n labels,\n ctx,\n })\n }\n\n // app.bsky.graph.defs#starterPackViewBasic\n // - starterpack\n // - profile\n // - list basic\n // - labels\n async hydrateStarterPacksBasic(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [starterPacks, starterPackAggs, profileState, labels] =\n await Promise.all([\n this.graph.getStarterPacks(uris, ctx.includeTakedowns),\n this.graph.getStarterPackAggregates(uris.map((uri) => ({ uri }))),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, starterPacks, labels)\n }\n return mergeStates(profileState, {\n starterPacks,\n starterPackAggs,\n labels,\n ctx,\n })\n }\n\n // app.bsky.graph.defs#starterPackView\n // - starterpack\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - list basic\n // - list item\n // - profile\n // - list basic\n // - labels\n async hydrateStarterPacks(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const starterPackState = await this.hydrateStarterPacksBasic(uris, ctx)\n // gather feed and list uris\n const feedUriSet = new Set<string>()\n const listUriSet = new Set<string>()\n starterPackState.starterPacks?.forEach((sp) => {\n sp?.record.feeds?.forEach((feed) => feedUriSet.add(feed.uri))\n if (sp?.record.list) {\n listUriSet.add(sp?.record.list)\n }\n })\n const feedUris = [...feedUriSet]\n const listUris = [...listUriSet]\n // hydrate feeds, lists, and their members\n const [feedGenState, listState, ...listsMembers] = await Promise.all([\n this.hydrateFeedGens(feedUris, ctx),\n this.hydrateLists(listUris, ctx),\n ...listUris.map((uri) =>\n this.dataplane.getListMembers({ listUri: uri, limit: 50 }),\n ),\n ])\n // collect list info\n const listMembersByList = new Map(\n listUris.map((uri, i) => [uri, listsMembers[i]]),\n )\n const listMemberDids = listsMembers.flatMap((lm) =>\n lm.listitems.map((li) => li.did),\n )\n const listCreatorMemberPairs = [...listMembersByList.entries()].flatMap(\n ([listUri, members]) => {\n const creator = didFromUri(listUri)\n return members.listitems.map(\n (li): RelationshipPair => [creator, li.did],\n )\n },\n )\n const blocks = await this.hydrateBidirectionalBlocks(\n pairsToMap(listCreatorMemberPairs),\n ctx,\n )\n // sample top list items per starter pack based on their follows\n const listMemberAggs = await this.actor.getProfileAggregates(listMemberDids)\n const listItemUris: string[] = []\n uris.forEach((uri) => {\n const sp = starterPackState.starterPacks?.get(uri)\n const agg = starterPackState.starterPackAggs?.get(uri)\n if (!sp?.record.list || !agg) return\n const members = listMembersByList.get(sp.record.list)\n if (!members) return\n const creator = didFromUri(sp.record.list)\n // update aggregation with list items for top 12 most followed members\n agg.listItemSampleUris = [\n ...members.listitems.filter(\n (li) =>\n ctx.viewer === creator || !isBlocked(blocks, [creator, li.did]),\n ),\n ]\n .sort((li1, li2) => {\n const score1 = listMemberAggs.get(li1.did)?.followers ?? 0\n const score2 = listMemberAggs.get(li2.did)?.followers ?? 0\n return score2 - score1\n })\n .slice(0, 12)\n .map((li) => li.uri)\n listItemUris.push(...agg.listItemSampleUris)\n })\n // hydrate sampled list items\n const listItemState = await this.hydrateListItems(listItemUris, ctx)\n return mergeManyStates(\n starterPackState,\n feedGenState,\n listState,\n listItemState,\n )\n }\n\n // app.bsky.feed.getLikes#like\n // - like\n // - profile\n // - list basic\n async hydrateLikes(\n authorDid: string,\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [likes, profileState] = await Promise.all([\n this.feed.getLikes(uris, ctx.includeTakedowns),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n\n const pairs: RelationshipPair[] = []\n for (const [uri, like] of likes) {\n if (like) {\n pairs.push([authorDid, didFromUri(uri)])\n }\n }\n const blocks = await this.hydrateBidirectionalBlocks(pairsToMap(pairs), ctx)\n const likeBlocks = new HydrationMap<LikeBlock>()\n for (const [uri, like] of likes) {\n if (like) {\n likeBlocks.set(uri, isBlocked(blocks, [authorDid, didFromUri(uri)]))\n } else {\n likeBlocks.set(uri, null)\n }\n }\n\n return mergeStates(profileState, { likes, likeBlocks, ctx })\n }\n\n // app.bsky.feed.getRepostedBy#repostedBy\n // - repost\n // - profile\n // - list basic\n async hydrateReposts(uris: string[], ctx: HydrateCtx) {\n const [reposts, profileState] = await Promise.all([\n this.feed.getReposts(uris, ctx.includeTakedowns),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n return mergeStates(profileState, { reposts, ctx })\n }\n\n // app.bsky.notification.listNotifications#notification\n // - notification\n // - profile\n // - list basic\n async hydrateNotifications(\n notifs: Notification[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const uris = notifs.map((notif) => notif.uri)\n const collections = urisByCollection(uris)\n const postUris = collections.get(ids.AppBskyFeedPost) ?? []\n const likeUris = collections.get(ids.AppBskyFeedLike) ?? []\n const repostUris = collections.get(ids.AppBskyFeedRepost) ?? []\n const followUris = collections.get(ids.AppBskyGraphFollow) ?? []\n const verificationUris = collections.get(ids.AppBskyGraphVerification) ?? []\n const [\n posts,\n likes,\n reposts,\n follows,\n verifications,\n labels,\n profileState,\n ] = await Promise.all([\n this.feed.getPosts(postUris), // reason: mention, reply, quote\n this.feed.getLikes(likeUris), // reason: like\n this.feed.getReposts(repostUris), // reason: repost\n this.graph.getFollows(followUris), // reason: follow\n this.graph.getVerifications(verificationUris), // reason: verified\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n const viewerRootPostUris = new Set<string>()\n for (const notif of notifs) {\n if (notif.reason === 'reply') {\n const post = posts.get(notif.uri)\n if (post) {\n const rootUri = post.record.reply?.root.uri\n if (rootUri && didFromUri(rootUri) === ctx.viewer) {\n viewerRootPostUris.add(rootUri)\n }\n }\n }\n }\n const threadgates = await this.feed.getThreadgatesForPosts([\n ...viewerRootPostUris.values(),\n ])\n actionTakedownLabels(postUris, posts, labels)\n return mergeStates(profileState, {\n posts,\n likes,\n reposts,\n follows,\n verifications,\n labels,\n threadgates,\n ctx,\n })\n }\n\n async hydrateBookmarks(\n bookmarkInfos: BookmarkInfo[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const viewer = ctx.viewer\n if (!viewer) return {}\n const bookmarksRes = await this.dataplane.getBookmarksByActorAndSubjects({\n actorDid: viewer,\n uris: bookmarkInfos.map((b) => b.subject),\n })\n\n type BookmarkWithRef = Bookmark & { ref: RecordRef }\n const bookmarks: BookmarkWithRef[] = bookmarksRes.bookmarks.filter(\n (bookmark): bookmark is BookmarkWithRef => !!bookmark.ref?.key,\n )\n // mapping DID -> stash key -> bookmark\n const bookmarksMap = new HydrationMap([\n [\n viewer,\n new HydrationMap<Bookmark>(\n bookmarks.map((bookmark) => {\n const {\n ref: { key },\n } = bookmark\n return [key, bookmark]\n }),\n ),\n ],\n ])\n\n // @NOTE: The `createBookmark` endpoint limits bookmarks to be of posts,\n // so we can assume currently all subjects are posts.\n const postsState = await this.hydratePosts(\n bookmarks.map((bookmark) => ({ uri: bookmark.subjectUri })),\n ctx,\n )\n\n return mergeStates(postsState, { bookmarks: bookmarksMap })\n }\n\n // provides partial hydration state within getFollows / getFollowers, mainly for applying rules\n async hydrateFollows(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const follows = await this.graph.getFollows(uris)\n const pairs: RelationshipPair[] = []\n for (const [uri, follow] of follows) {\n if (follow) {\n pairs.push([didFromUri(uri), follow.record.subject])\n }\n }\n const blocks = await this.hydrateBidirectionalBlocks(pairsToMap(pairs), ctx)\n const followBlocks = new HydrationMap<FollowBlock>()\n for (const [uri, follow] of follows) {\n if (follow) {\n followBlocks.set(\n uri,\n isBlocked(blocks, [didFromUri(uri), follow.record.subject]),\n )\n } else {\n followBlocks.set(uri, null)\n }\n }\n return { follows, followBlocks }\n }\n\n async hydrateBidirectionalBlocks(\n didMap: Map<string, string[]>, // DID -> DID[]\n ctx: HydrateCtx,\n ): Promise<BidirectionalBlocks> {\n const pairs: RelationshipPair[] = []\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n pairs.push([source, target])\n }\n }\n\n const blocks = await this.graph.getBidirectionalBlocks(pairs)\n const listUrisSet = new Set<string>()\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n const block = blocks.get(source, target)\n if (block?.blockListUri) {\n listUrisSet.add(block.blockListUri)\n }\n }\n }\n const listUris = [...listUrisSet]\n\n // if a list no longer exists or is not a mod list, then remove from block entry\n const listState = await this.hydrateListsBasic(listUris, ctx)\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n const block = blocks.get(source, target)\n if (!isModList(block?.blockListUri, listState)) {\n delete block?.blockListUri\n }\n }\n }\n\n const result: BidirectionalBlocks = new HydrationMap<\n HydrationMap<boolean>\n >()\n for (const [source, targets] of didMap) {\n const didBlocks = new HydrationMap<boolean>()\n for (const target of targets) {\n const block = blocks.get(source, target)\n\n // If a list no longer exists or is not a mod list, then remove from block entry.\n // isModList confirms the list exists in listState, which ensures it wasn't taken down.\n if (!isModList(block?.blockListUri, listState)) {\n delete block?.blockListUri\n }\n\n const blockEntry: BlockEntry = {\n blockUri: block?.blockUri,\n blockListUri:\n block?.blockListUri &&\n listState.actors?.get(uriToDid(block.blockListUri))\n ? block.blockListUri\n : undefined,\n }\n\n didBlocks.set(\n target,\n !!blockEntry.blockUri || !!blockEntry.blockListUri,\n )\n }\n result.set(source, didBlocks)\n }\n\n return result\n }\n\n // app.bsky.labeler.def#labelerViewDetailed\n // - labeler\n // - profile\n // - list basic\n async hydrateLabelers(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [labelers, labelerAggs, labelerViewers, profileState] =\n await Promise.all([\n this.label.getLabelers(dids, ctx.includeTakedowns),\n this.label.getLabelerAggregates(dids, ctx.viewer),\n ctx.viewer\n ? this.label.getLabelerViewerStates(dids, ctx.viewer)\n : undefined,\n this.hydrateProfiles(dids, ctx),\n ])\n actionTakedownLabels(dids, labelers, profileState.labels ?? new Labels())\n return mergeStates(profileState, {\n labelers,\n labelerAggs,\n labelerViewers,\n ctx,\n })\n }\n\n // ad-hoc record hydration\n // in com.atproto.repo.getRecord\n async getRecord(uri: string, includeTakedowns = false) {\n const parsed = new AtUri(uri)\n const collection = parsed.collection\n if (collection === ids.AppBskyFeedPost) {\n return (\n (await this.feed.getPosts([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedRepost) {\n return (\n (await this.feed.getReposts([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedLike) {\n return (\n (await this.feed.getLikes([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphFollow) {\n return (\n (await this.graph.getFollows([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphList) {\n return (\n (await this.graph.getLists([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphListitem) {\n return (\n (await this.graph.getListItems([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphBlock) {\n return (\n (await this.graph.getBlocks([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphStarterpack) {\n return (\n (await this.graph.getStarterPacks([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedGenerator) {\n return (\n (await this.feed.getFeedGens([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedThreadgate) {\n return (\n (await this.feed.getThreadgateRecords([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyFeedPostgate) {\n return (\n (await this.feed.getPostgateRecords([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyLabelerService) {\n if (parsed.rkey !== 'self') return\n const did = parsed.hostname\n return (\n (await this.label.getLabelers([did], includeTakedowns)).get(did) ??\n undefined\n )\n } else if (collection === ids.ChatBskyActorDeclaration) {\n if (parsed.rkey !== 'self') return\n return (\n (await this.actor.getChatDeclarations([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyNotificationDeclaration) {\n if (parsed.rkey !== 'self') return\n return (\n (\n await this.actor.getNotificationDeclarations([uri], includeTakedowns)\n ).get(uri) ?? undefined\n )\n } else if (collection === ids.AppBskyActorStatus) {\n if (parsed.rkey !== 'self') return\n return (\n (await this.actor.getStatus([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyActorProfile) {\n const did = parsed.hostname\n const actor = (\n await this.actor.getActors([did], { includeTakedowns })\n ).get(did)\n if (!actor?.profile || !actor?.profileCid) return undefined\n const recordInfo: RecordInfo<ProfileRecord> = {\n record: actor.profile,\n cid: actor.profileCid,\n sortedAt: actor.sortedAt ?? new Date(0), // @NOTE will be present since profile record is present\n indexedAt: actor.indexedAt ?? new Date(0), // @NOTE will be present since profile record is present\n takedownRef: actor.profileTakedownRef,\n }\n\n return recordInfo\n }\n }\n\n async createContext(vals: HydrateCtxVals) {\n // ensures we're only apply labelers that exist and are not taken down\n const labelers = vals.labelers.dids\n const nonServiceLabelers = labelers.filter(\n (did) => !this.serviceLabelers.has(did),\n )\n const labelerActors = await this.actor.getActors(nonServiceLabelers, {\n includeTakedowns: vals.includeTakedowns,\n })\n const availableDids = labelers.filter(\n (did) => this.serviceLabelers.has(did) || !!labelerActors.get(did),\n )\n const availableLabelers = {\n dids: availableDids,\n redact: vals.labelers.redact,\n }\n const includeDebugField =\n !!vals.viewer && this.config.debugFieldAllowedDids.has(vals.viewer)\n return new HydrateCtx({\n labelers: availableLabelers,\n viewer: vals.viewer,\n includeTakedowns: vals.includeTakedowns,\n include3pBlocks: vals.include3pBlocks,\n includeDebugField,\n featureGates: vals.featureGates,\n })\n }\n\n async resolveUri(uriStr: string) {\n const uri = new AtUri(uriStr)\n const [did] = await this.actor.getDids([uri.host])\n if (!did) return uriStr\n uri.host = did\n return uri.toString()\n }\n}\n\n// service refs may look like \"did:plc:example#service_id\". we want to extract the did part \"did:plc:example\".\nconst serviceRefToDid = (serviceRef: string) => {\n const idx = serviceRef.indexOf('#')\n return idx !== -1 ? serviceRef.slice(0, idx) : serviceRef\n}\n\nconst listUrisFromProfileViewer = (item: ProfileViewerState | null) => {\n const listUris: string[] = []\n if (item?.mutedByList) {\n listUris.push(item.mutedByList)\n }\n if (item?.blockingByList) {\n listUris.push(item.blockingByList)\n }\n // blocked-by list does not appear in views, but will be used to evaluate the existence of a block between users.\n if (item?.blockedByList) {\n listUris.push(item.blockedByList)\n }\n return listUris\n}\n\nconst removeNonModListsFromProfileViewer = (\n item: ProfileViewerState | null,\n state: HydrationState,\n) => {\n if (!isModList(item?.mutedByList, state)) {\n delete item?.mutedByList\n }\n if (!isModList(item?.blockingByList, state)) {\n delete item?.blockingByList\n }\n if (!isModList(item?.blockedByList, state)) {\n delete item?.blockedByList\n }\n}\n\nconst isModList = (\n listUri: string | undefined,\n state: HydrationState,\n): boolean => {\n if (!listUri) return false\n const list = state.lists?.get(listUri)\n return list?.record.purpose === 'app.bsky.graph.defs#modlist'\n}\n\nconst labelSubjectsForDid = (dids: string[]) => {\n return [\n ...dids,\n ...dids.map((did) =>\n AtUri.make(did, ids.AppBskyActorProfile, 'self').toString(),\n ),\n ]\n}\n\nconst rootUrisFromPosts = (posts: Posts): string[] => {\n const uris: string[] = []\n for (const item of posts.values()) {\n const rootUri = item && rootUriFromPost(item)\n if (rootUri) {\n uris.push(rootUri)\n }\n }\n return uris\n}\n\nconst rootUriFromPost = (post: Post): string | undefined => {\n return post.record.reply?.root.uri\n}\n\nconst nestedRecordUrisFromPosts = (\n posts: Posts,\n fromUris?: string[],\n): string[] => {\n const uris: string[] = []\n const postUris = fromUris ?? posts.keys()\n for (const uri of postUris) {\n const item = posts.get(uri)\n if (item) {\n uris.push(...nestedRecordUris(item.record))\n }\n }\n return uris\n}\n\nconst nestedRecordUris = (post: Post['record']): string[] => {\n const uris: string[] = []\n if (!post?.embed) return uris\n if (isEmbedRecord(post.embed)) {\n uris.push(post.embed.record.uri)\n } else if (isEmbedRecordWithMedia(post.embed)) {\n uris.push(post.embed.record.record.uri)\n }\n return uris\n}\n\nconst getListUrisFromThreadgates = (gates: Threadgates) => {\n const uris: string[] = []\n for (const gate of gates.values()) {\n const listRules = gate?.record.allow?.filter(isThreadgateListRule) ?? []\n for (const rule of listRules) {\n uris.push(rule.list)\n }\n }\n return uris\n}\n\nconst isBlocked = (blocks: BidirectionalBlocks, [a, b]: RelationshipPair) => {\n return blocks.get(a)?.get(b) ?? false\n}\n\nconst pairsToMap = (pairs: RelationshipPair[]): Map<string, string[]> => {\n const map = new Map<string, string[]>()\n for (const [a, b] of pairs) {\n const list = map.get(a) ?? []\n list.push(b)\n map.set(a, list)\n }\n return map\n}\n\nexport const mergeStates = (\n stateA: HydrationState,\n stateB: HydrationState,\n): HydrationState => {\n assert(\n !stateA.ctx?.viewer ||\n !stateB.ctx?.viewer ||\n stateA.ctx?.viewer === stateB.ctx?.viewer,\n 'incompatible viewers',\n )\n return {\n ctx: stateA.ctx ?? stateB.ctx,\n actors: mergeMaps(stateA.actors, stateB.actors),\n profileAggs: mergeMaps(stateA.profileAggs, stateB.profileAggs),\n profileViewers: mergeMaps(stateA.profileViewers, stateB.profileViewers),\n posts: mergeMaps(stateA.posts, stateB.posts),\n postAggs: mergeMaps(stateA.postAggs, stateB.postAggs),\n postViewers: mergeMaps(stateA.postViewers, stateB.postViewers),\n threadContexts: mergeMaps(stateA.threadContexts, stateB.threadContexts),\n postBlocks: mergeMaps(stateA.postBlocks, stateB.postBlocks),\n reposts: mergeMaps(stateA.reposts, stateB.reposts),\n follows: mergeMaps(stateA.follows, stateB.follows),\n followBlocks: mergeMaps(stateA.followBlocks, stateB.followBlocks),\n threadgates: mergeMaps(stateA.threadgates, stateB.threadgates),\n postgates: mergeMaps(stateA.postgates, stateB.postgates),\n lists: mergeMaps(stateA.lists, stateB.lists),\n listAggs: mergeMaps(stateA.listAggs, stateB.listAggs),\n listMemberships: mergeNestedMaps(\n stateA.listMemberships,\n stateB.listMemberships,\n ),\n listViewers: mergeMaps(stateA.listViewers, stateB.listViewers),\n listItems: mergeMaps(stateA.listItems, stateB.listItems),\n likes: mergeMaps(stateA.likes, stateB.likes),\n likeBlocks: mergeMaps(stateA.likeBlocks, stateB.likeBlocks),\n labels: mergeMaps(stateA.labels, stateB.labels),\n feedgens: mergeMaps(stateA.feedgens, stateB.feedgens),\n feedgenAggs: mergeMaps(stateA.feedgenAggs, stateB.feedgenAggs),\n feedgenViewers: mergeMaps(stateA.feedgenViewers, stateB.feedgenViewers),\n starterPacks: mergeMaps(stateA.starterPacks, stateB.starterPacks),\n starterPackAggs: mergeMaps(stateA.starterPackAggs, stateB.starterPackAggs),\n labelers: mergeMaps(stateA.labelers, stateB.labelers),\n labelerAggs: mergeMaps(stateA.labelerAggs, stateB.labelerAggs),\n labelerViewers: mergeMaps(stateA.labelerViewers, stateB.labelerViewers),\n knownFollowers: mergeMaps(stateA.knownFollowers, stateB.knownFollowers),\n activitySubscriptions: mergeMaps(\n stateA.activitySubscriptions,\n stateB.activitySubscriptions,\n ),\n bidirectionalBlocks: mergeNestedMaps(\n stateA.bidirectionalBlocks,\n stateB.bidirectionalBlocks,\n ),\n verifications: mergeMaps(stateA.verifications, stateB.verifications),\n bookmarks: mergeNestedMaps(stateA.bookmarks, stateB.bookmarks),\n }\n}\n\nexport const mergeManyStates = (...states: HydrationState[]) => {\n return states.reduce(mergeStates, {} as HydrationState)\n}\n\nconst actionTakedownLabels = <T>(\n keys: string[],\n hydrationMap: HydrationMap<T>,\n labels: Labels,\n) => {\n for (const key of keys) {\n if (labels.get(key)?.isTakendown) {\n hydrationMap.set(key, null)\n }\n }\n}\n\nconst uriToRef = (uri: string): ItemRef => {\n return { uri }\n}\n"]}
1
+ {"version":3,"file":"hydrator.js","sourceRoot":"","sources":["../../src/hydration/hydrator.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport { mapDefined } from '@atproto/common'\nimport { AtUri } from '@atproto/syntax'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { type CheckedFeatureGatesMap, FeatureGateID } from '../feature-gates'\nimport { ids } from '../lexicon/lexicons'\nimport { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile'\nimport { isMain as isEmbedRecord } from '../lexicon/types/app/bsky/embed/record'\nimport { isMain as isEmbedRecordWithMedia } from '../lexicon/types/app/bsky/embed/recordWithMedia'\nimport { isListRule as isThreadgateListRule } from '../lexicon/types/app/bsky/feed/threadgate'\nimport { hydrationLogger } from '../logger'\nimport {\n Bookmark,\n BookmarkInfo,\n Notification,\n RecordRef,\n} from '../proto/bsky_pb'\nimport { ParsedLabelers } from '../util'\nimport { uriToDid, uriToDid as didFromUri } from '../util/uris'\nimport {\n ActivitySubscriptionStates,\n ActorHydrator,\n Actors,\n KnownFollowersStates,\n ProfileAggs,\n ProfileViewerState,\n ProfileViewerStates,\n} from './actor'\nimport {\n FeedGenAggs,\n FeedGenViewerStates,\n FeedGens,\n FeedHydrator,\n FeedItem,\n type GetPostsHydrationOptions,\n Likes,\n Post,\n PostAggs,\n PostViewerStates,\n Postgates,\n Posts,\n Reposts,\n ThreadContexts,\n ThreadRef,\n Threadgates,\n} from './feed'\nimport {\n BlockEntry,\n Follows,\n GraphHydrator,\n ListAggs,\n ListItems,\n ListMembershipState,\n ListMembershipStates,\n ListViewerStates,\n Lists,\n RelationshipPair,\n StarterPackAggs,\n StarterPacks,\n Verifications,\n} from './graph'\nimport {\n LabelHydrator,\n LabelerAggs,\n LabelerViewerStates,\n Labelers,\n Labels,\n} from './label'\nimport {\n HydrationMap,\n ItemRef,\n RecordInfo,\n mergeManyMaps,\n mergeMaps,\n mergeNestedMaps,\n urisByCollection,\n} from './util'\n\nexport class HydrateCtx {\n labelers = this.vals.labelers\n viewer = this.vals.viewer !== null ? serviceRefToDid(this.vals.viewer) : null\n includeTakedowns = this.vals.includeTakedowns\n includeActorTakedowns = this.vals.includeActorTakedowns\n include3pBlocks = this.vals.include3pBlocks\n includeDebugField = this.vals.includeDebugField\n featureGates: CheckedFeatureGatesMap = this.vals.featureGates || new Map()\n constructor(private vals: HydrateCtxVals) {}\n // Convenience with use with dataplane.getActors cache control\n get skipCacheForViewer() {\n if (!this.viewer) return\n return [this.viewer]\n }\n copy<V extends Partial<HydrateCtxVals>>(vals?: V): HydrateCtx & V {\n return new HydrateCtx({ ...this.vals, ...vals }) as HydrateCtx & V\n }\n}\n\nexport type HydrateCtxVals = {\n labelers: ParsedLabelers\n viewer: string | null\n includeTakedowns?: boolean\n includeActorTakedowns?: boolean\n include3pBlocks?: boolean\n includeDebugField?: boolean\n featureGates?: CheckedFeatureGatesMap\n}\n\nexport type HydrationState = {\n ctx?: HydrateCtx\n actors?: Actors\n profileViewers?: ProfileViewerStates\n profileAggs?: ProfileAggs\n posts?: Posts\n postAggs?: PostAggs\n postViewers?: PostViewerStates\n threadContexts?: ThreadContexts\n postBlocks?: PostBlocks\n reposts?: Reposts\n follows?: Follows\n followBlocks?: FollowBlocks\n threadgates?: Threadgates\n postgates?: Postgates\n lists?: Lists\n listAggs?: ListAggs\n listMemberships?: ListMembershipStates\n listViewers?: ListViewerStates\n listItems?: ListItems\n likes?: Likes\n likeBlocks?: LikeBlocks\n labels?: Labels\n feedgens?: FeedGens\n feedgenViewers?: FeedGenViewerStates\n feedgenAggs?: FeedGenAggs\n starterPacks?: StarterPacks\n starterPackAggs?: StarterPackAggs\n labelers?: Labelers\n labelerViewers?: LabelerViewerStates\n labelerAggs?: LabelerAggs\n knownFollowers?: KnownFollowersStates\n activitySubscriptions?: ActivitySubscriptionStates\n bidirectionalBlocks?: BidirectionalBlocks\n verifications?: Verifications\n bookmarks?: Bookmarks\n}\n\nexport type PostBlock = { embed: boolean; parent: boolean; root: boolean }\nexport type PostBlocks = HydrationMap<PostBlock>\ntype PostBlockPairs = {\n embed?: RelationshipPair\n parent?: RelationshipPair\n root?: RelationshipPair\n}\n\nexport type LikeBlock = boolean\nexport type LikeBlocks = HydrationMap<LikeBlock>\n\nexport type FollowBlock = boolean\nexport type FollowBlocks = HydrationMap<FollowBlock>\n\nexport type BidirectionalBlocks = HydrationMap<HydrationMap<boolean>>\n\n// actor DID -> stash key -> bookmark\nexport type Bookmarks = HydrationMap<HydrationMap<Bookmark>>\n\n/**\n * Additional config passed from `ServerConfig` to the `Hydrator` instance.\n * Values within this config object may be passed to other sub-hydrators.\n */\nexport type HydratorConfig = {\n debugFieldAllowedDids: Set<string>\n}\n\nexport class Hydrator {\n actor: ActorHydrator\n feed: FeedHydrator\n graph: GraphHydrator\n label: LabelHydrator\n serviceLabelers: Set<string>\n config: HydratorConfig\n\n constructor(\n public dataplane: DataPlaneClient,\n serviceLabelers: string[] = [],\n config: HydratorConfig,\n ) {\n this.config = config\n this.actor = new ActorHydrator(dataplane)\n this.feed = new FeedHydrator(dataplane)\n this.graph = new GraphHydrator(dataplane)\n this.label = new LabelHydrator(dataplane)\n this.serviceLabelers = new Set(serviceLabelers)\n }\n\n // app.bsky.actor.defs#profileView\n // - profile viewer\n // - list basic\n // Note: builds on the naive profile viewer hydrator and removes references to lists that have been deleted\n async hydrateProfileViewers(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const viewer = ctx.viewer\n if (!viewer) return {}\n const profileViewers = await this.actor.getProfileViewerStatesNaive(\n dids,\n viewer,\n )\n const listUris: string[] = []\n profileViewers.forEach((item) => {\n listUris.push(...listUrisFromProfileViewer(item))\n })\n const listState = await this.hydrateListsBasic(listUris, ctx)\n // if a list no longer exists or is not a mod list, then remove from viewer state\n profileViewers.forEach((item) => {\n removeNonModListsFromProfileViewer(item, listState)\n })\n\n return mergeStates(listState, {\n profileViewers,\n ctx,\n })\n }\n\n // app.bsky.actor.defs#profileView\n // - profile\n // - list basic\n async hydrateProfiles(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const includeTakedowns = ctx.includeTakedowns || ctx.includeActorTakedowns\n const [actors, labels, profileViewersState] = await Promise.all([\n this.actor.getActors(dids, {\n includeTakedowns,\n skipCacheForDids: ctx.skipCacheForViewer,\n }),\n this.label.getLabelsForSubjects(labelSubjectsForDid(dids), ctx.labelers),\n this.hydrateProfileViewers(dids, ctx),\n ])\n if (!includeTakedowns) {\n actionTakedownLabels(dids, actors, labels)\n }\n return mergeStates(profileViewersState ?? {}, {\n actors,\n labels,\n ctx,\n })\n }\n\n // app.bsky.actor.defs#profileViewBasic\n // - profile basic\n // - profile\n // - list basic\n async hydrateProfilesBasic(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n return this.hydrateProfiles(dids, ctx)\n }\n\n // app.bsky.actor.defs#profileViewDetailed\n // - profile detailed\n // - profile\n // - list basic\n // - starterpack\n // - profile\n // - list basic\n // - labels\n async hydrateProfilesDetailed(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n let knownFollowers: KnownFollowersStates = new HydrationMap()\n try {\n knownFollowers = await this.actor.getKnownFollowers(dids, ctx.viewer)\n } catch (err) {\n hydrationLogger.error(\n { err },\n 'Failed to get known followers for profiles',\n )\n }\n\n let activitySubscriptions: ActivitySubscriptionStates = new HydrationMap()\n try {\n activitySubscriptions = await this.actor.getActivitySubscriptions(\n dids,\n ctx.viewer,\n )\n } catch (err) {\n hydrationLogger.error(\n { err },\n 'Failed to get activity subscriptions state for profiles',\n )\n }\n\n const subjectsToKnownFollowersMap = Array.from(\n knownFollowers.keys(),\n ).reduce((acc, did) => {\n const known = knownFollowers.get(did)\n if (known) {\n acc.set(did, known.followers)\n }\n return acc\n }, new Map<string, string[]>())\n const allKnownFollowerDids = Array.from(knownFollowers.values())\n .filter(Boolean)\n .flatMap((f) => f!.followers)\n const allDids = Array.from(new Set(dids.concat(allKnownFollowerDids)))\n const [state, profileAggs, bidirectionalBlocks] = await Promise.all([\n this.hydrateProfiles(allDids, ctx),\n this.actor.getProfileAggregates(dids),\n this.hydrateBidirectionalBlocks(subjectsToKnownFollowersMap, ctx),\n ])\n const starterPackUriSet = new Set<string>()\n state.actors?.forEach((actor) => {\n if (actor?.profile?.joinedViaStarterPack) {\n starterPackUriSet.add(actor?.profile?.joinedViaStarterPack?.uri)\n }\n })\n const starterPackState = await this.hydrateStarterPacksBasic(\n [...starterPackUriSet],\n ctx,\n )\n return mergeManyStates(state, starterPackState, {\n profileAggs,\n knownFollowers,\n activitySubscriptions,\n ctx,\n bidirectionalBlocks,\n })\n }\n\n // app.bsky.graph.defs#listView\n // - list\n // - profile basic\n async hydrateLists(uris: string[], ctx: HydrateCtx): Promise<HydrationState> {\n const [listsState, profilesState] = await Promise.all([\n this.hydrateListsBasic(uris, ctx, {\n skipAuthors: true, // handled via author profile hydration\n }),\n this.hydrateProfilesBasic(uris.map(didFromUri), ctx),\n ])\n return mergeStates(listsState, profilesState)\n }\n\n // app.bsky.graph.defs#listViewBasic\n // - list basic\n async hydrateListsBasic(\n uris: string[],\n ctx: HydrateCtx,\n opts?: { skipAuthors: boolean },\n ): Promise<HydrationState> {\n const includeAuthorDids = opts?.skipAuthors ? [] : uris.map(uriToDid)\n const [lists, listAggs, listViewers, labels, actors] = await Promise.all([\n this.graph.getLists(uris, ctx.includeTakedowns),\n this.graph.getListAggregates(uris.map((uri) => ({ uri }))),\n ctx.viewer ? this.graph.getListViewerStates(uris, ctx.viewer) : undefined,\n this.label.getLabelsForSubjects(\n [...uris, ...includeAuthorDids],\n ctx.labelers,\n ),\n this.actor.getActors(includeAuthorDids, {\n includeTakedowns: ctx.includeTakedowns,\n skipCacheForDids: ctx.skipCacheForViewer,\n }),\n ])\n\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, lists, labels)\n actionTakedownLabels(includeAuthorDids, actors, labels)\n }\n\n return { lists, listAggs, listViewers, labels, actors, ctx }\n }\n\n // app.bsky.graph.defs#listItemView\n // - list item\n // - profile\n // - list basic\n async hydrateListItems(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const listItems = await this.graph.getListItems(uris)\n const dids: string[] = []\n listItems.forEach((item) => {\n if (item) {\n dids.push(item.record.subject)\n }\n })\n const profileState = await this.hydrateProfiles(dids, ctx)\n return mergeStates(profileState, { listItems, ctx })\n }\n\n async hydrateListsMembership(\n uris: string[],\n did: string,\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [\n actorsHydrationState,\n listsHydrationState,\n { listitemUris: listItemUris },\n ] = await Promise.all([\n this.hydrateProfiles([did], ctx),\n this.hydrateLists(uris, ctx),\n this.dataplane.getListMembership({\n actorDid: did,\n listUris: uris,\n }),\n ])\n\n // mapping uri -> did -> { actorListItemUri }\n const listMemberships = new HydrationMap(\n uris.map((uri, i) => {\n const listItemUri = listItemUris[i]\n return [\n uri,\n new HydrationMap<ListMembershipState>([\n listItemUri\n ? [did, { actorListItemUri: listItemUri }]\n : [did, null],\n ]),\n ]\n }),\n )\n\n return mergeManyStates(actorsHydrationState, listsHydrationState, {\n listMemberships,\n ctx,\n })\n }\n\n // app.bsky.feed.defs#postView\n // - post\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - mod service\n // - profile\n // - list basic\n async hydratePosts(\n refs: ItemRef[],\n ctx: HydrateCtx,\n state: HydrationState = {},\n options: Pick<GetPostsHydrationOptions, 'processDynamicTagsForView'> = {},\n ): Promise<HydrationState> {\n const uris = refs.map((ref) => ref.uri)\n\n state.posts ??= new HydrationMap<Post>()\n const addPostsToHydrationState = (posts: Posts) => {\n posts.forEach((post, uri) => {\n state.posts ??= new HydrationMap<Post>()\n state.posts.set(uri, post)\n })\n }\n\n // layer 0: the posts in the thread\n const postsLayer0 = await this.feed.getPosts(\n uris,\n ctx.includeTakedowns,\n state.posts,\n ctx.viewer,\n {\n processDynamicTagsForView: options.processDynamicTagsForView,\n },\n )\n addPostsToHydrationState(postsLayer0)\n\n const additionalRootUris = rootUrisFromPosts(postsLayer0) // supports computing threadgates\n const threadRootUris = new Set<string>()\n for (const [uri, post] of postsLayer0) {\n if (post) {\n threadRootUris.add(rootUriFromPost(post) ?? uri)\n }\n }\n const postUrisWithThreadgates = new Set<string>()\n for (const uri of threadRootUris) {\n const post = postsLayer0.get(uri)\n /*\n * Checking `post.hasThreadGate` is an optimization, which tells us that\n * this post has a threadgate record associated with it. `hydratePosts`\n * always hydrates root posts via `additionalRootUris`, so we try to\n * check the optimization flag were possible. If the post is unavailable\n * for whatever reason, we fall back to requesting threadgate records\n * that may not exist.\n */\n if (!post || post.hasThreadGate) {\n postUrisWithThreadgates.add(uri)\n }\n }\n\n // layer 1: first level embeds plus thread roots we haven't fetched yet\n const urisLayer1 = nestedRecordUrisFromPosts(postsLayer0)\n const urisLayer1ByCollection = urisByCollection(urisLayer1)\n const embedPostUrisLayer1 =\n urisLayer1ByCollection.get(ids.AppBskyFeedPost) ?? []\n const postsLayer1 = await this.feed.getPosts(\n [...embedPostUrisLayer1, ...additionalRootUris],\n ctx.includeTakedowns,\n state.posts,\n )\n addPostsToHydrationState(postsLayer1)\n\n // layer 2: second level embeds, ignoring any additional root uris we mixed-in to the previous layer\n const urisLayer2 = nestedRecordUrisFromPosts(\n postsLayer1,\n embedPostUrisLayer1,\n )\n const urisLayer2ByCollection = urisByCollection(urisLayer2)\n const embedPostUrisLayer2 =\n urisLayer2ByCollection.get(ids.AppBskyFeedPost) ?? []\n\n const [postsLayer2, threadgates] = await Promise.all([\n this.feed.getPosts(\n embedPostUrisLayer2,\n ctx.includeTakedowns,\n state.posts,\n ),\n this.feed.getThreadgatesForPosts([...postUrisWithThreadgates.values()]),\n ])\n addPostsToHydrationState(postsLayer2)\n\n // collect list/feedgen embeds, lists in threadgates, post record hydration\n const threadgateListUris = getListUrisFromThreadgates(threadgates)\n const nestedListUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyGraphList) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyGraphList) ?? []),\n ]\n const nestedFeedGenUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyFeedGenerator) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyFeedGenerator) ?? []),\n ]\n const nestedLabelerDids = [\n ...(urisLayer1ByCollection.get(ids.AppBskyLabelerService) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyLabelerService) ?? []),\n ].map(didFromUri)\n const nestedStarterPackUris = [\n ...(urisLayer1ByCollection.get(ids.AppBskyGraphStarterpack) ?? []),\n ...(urisLayer2ByCollection.get(ids.AppBskyGraphStarterpack) ?? []),\n ]\n const posts =\n mergeManyMaps(postsLayer0, postsLayer1, postsLayer2) ?? postsLayer0\n const allPostUris = [...posts.keys()]\n const allRefs = [\n ...refs,\n ...embedPostUrisLayer1.map(uriToRef), // supports aggregates on embed #viewRecords\n ...embedPostUrisLayer2.map(uriToRef),\n ]\n const threadRefs = allRefs.map((ref) => ({\n ...ref,\n threadRoot: posts.get(ref.uri)?.record.reply?.root.uri ?? ref.uri,\n }))\n const postUrisWithPostgates = new Set<string>()\n for (const [uri, post] of posts) {\n if (post && post.hasPostGate) {\n postUrisWithPostgates.add(uri)\n }\n }\n\n const [\n postAggs,\n postViewers,\n labels,\n postBlocks,\n profileState,\n listState,\n feedGenState,\n labelerState,\n starterPackState,\n postgates,\n ] = await Promise.all([\n this.feed.getPostAggregates(allRefs, ctx.viewer),\n ctx.viewer\n ? this.feed.getPostViewerStates(threadRefs, ctx.viewer)\n : undefined,\n this.label.getLabelsForSubjects(allPostUris, ctx.labelers),\n this.hydratePostBlocks(posts, ctx),\n this.hydrateProfiles(allPostUris.map(didFromUri), ctx),\n this.hydrateLists([...nestedListUris, ...threadgateListUris], ctx),\n this.hydrateFeedGens(nestedFeedGenUris, ctx),\n this.hydrateLabelers(nestedLabelerDids, ctx),\n this.hydrateStarterPacksBasic(nestedStarterPackUris, ctx),\n this.feed.getPostgatesForPosts([...postUrisWithPostgates.values()]),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(allPostUris, posts, labels)\n }\n // combine all hydration state\n return mergeManyStates(\n profileState,\n listState,\n feedGenState,\n labelerState,\n starterPackState,\n {\n posts,\n postAggs,\n postViewers,\n postBlocks,\n labels,\n threadgates,\n postgates,\n ctx,\n },\n )\n }\n\n private async hydratePostBlocks(\n posts: Posts,\n ctx: HydrateCtx,\n ): Promise<PostBlocks> {\n const postBlocks = new HydrationMap<PostBlock>()\n const postBlocksPairs = new Map<string, PostBlockPairs>()\n const relationships: RelationshipPair[] = []\n for (const [uri, item] of posts) {\n if (!item) continue\n const post = item.record\n const creator = didFromUri(uri)\n const postBlockPairs: PostBlockPairs = {}\n postBlocksPairs.set(uri, postBlockPairs)\n // 3p block for replies\n const parentUri = post.reply?.parent.uri\n const parentDid = parentUri && didFromUri(parentUri)\n if (parentDid && parentDid !== creator) {\n const pair: RelationshipPair = [creator, parentDid]\n relationships.push(pair)\n postBlockPairs.parent = pair\n }\n const rootUri = post.reply?.root.uri\n const rootDid = rootUri && didFromUri(rootUri)\n if (rootDid && rootDid !== creator) {\n const pair: RelationshipPair = [creator, rootDid]\n relationships.push(pair)\n postBlockPairs.root = pair\n }\n // 3p block for record embeds\n for (const embedUri of nestedRecordUris(post)) {\n const pair: RelationshipPair = [creator, didFromUri(embedUri)]\n relationships.push(pair)\n postBlockPairs.embed = pair\n }\n }\n // replace embed/parent/root pairs with block state\n const blocks = await this.hydrateBidirectionalBlocks(\n pairsToMap(relationships),\n ctx,\n )\n for (const [uri, { embed, parent, root }] of postBlocksPairs) {\n postBlocks.set(uri, {\n embed: !!embed && !!isBlocked(blocks, embed),\n parent: !!parent && !!isBlocked(blocks, parent),\n root: !!root && !!isBlocked(blocks, root),\n })\n }\n return postBlocks\n }\n\n // app.bsky.feed.defs#feedViewPost\n // - post (+ replies w/ reply parent author)\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - repost\n // - profile\n // - list basic\n // - post\n // - ...\n async hydrateFeedItems(\n items: FeedItem[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n // get posts, collect reply refs\n const posts = await this.feed.getPosts(\n items.map((item) => item.post.uri),\n ctx.includeTakedowns,\n )\n const rootUris: string[] = []\n const parentUris: string[] = []\n const postAndReplyRefs: ItemRef[] = []\n posts.forEach((post, uri) => {\n if (!post) return\n postAndReplyRefs.push({ uri, cid: post.cid })\n if (post.record.reply) {\n rootUris.push(post.record.reply.root.uri)\n parentUris.push(post.record.reply.parent.uri)\n postAndReplyRefs.push(post.record.reply.root, post.record.reply.parent)\n }\n })\n // get replies, collect reply parent authors\n const replies = await this.feed.getPosts(\n [...rootUris, ...parentUris],\n ctx.includeTakedowns,\n )\n const replyParentAuthors: string[] = []\n parentUris.forEach((uri) => {\n const parent = replies.get(uri)\n if (!parent?.record.reply) return\n replyParentAuthors.push(didFromUri(parent.record.reply.parent.uri))\n })\n // hydrate state for all posts, reposts, authors of reposts + reply parent authors\n const repostUris = mapDefined(items, (item) => item.repost?.uri)\n const [postState, repostProfileState, reposts] = await Promise.all([\n this.hydratePosts(postAndReplyRefs, ctx, {\n posts: posts.merge(replies), // avoids refetches of posts\n }),\n this.hydrateProfiles(\n [...repostUris.map(didFromUri), ...replyParentAuthors],\n ctx,\n ),\n this.feed.getReposts(repostUris, ctx.includeTakedowns),\n ])\n return mergeManyStates(postState, repostProfileState, {\n reposts,\n ctx,\n })\n }\n\n // app.bsky.feed.defs#threadViewPost\n // - post\n // - profile\n // - list basic\n // - list\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n async hydrateThreadPosts(\n refs: ItemRef[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const postsState = await this.hydratePosts(refs, ctx, undefined, {\n processDynamicTagsForView: ctx.featureGates.get(\n FeatureGateID.ThreadsV2ReplyRankingExploration,\n )\n ? 'thread'\n : undefined,\n })\n\n const { posts } = postsState\n const postsList = posts ? Array.from(posts.entries()) : []\n\n const isDefined = (\n entry: [string, Post | null],\n ): entry is [string, Post] => {\n const [, post] = entry\n return !!post\n }\n\n const threadRefs: ThreadRef[] = postsList\n .filter(isDefined)\n .map(([uri, post]) => ({\n uri,\n cid: post.cid,\n threadRoot: post.record.reply?.root.uri ?? uri,\n }))\n\n const threadContexts = await this.feed.getThreadContexts(threadRefs)\n\n return mergeStates(postsState, { threadContexts })\n }\n\n // app.bsky.feed.defs#generatorView\n // - feedgen\n // - profile\n // - list basic\n async hydrateFeedGens(\n uris: string[], // @TODO any way to get refs here?\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [feedgens, feedgenAggs, feedgenViewers, profileState, labels] =\n await Promise.all([\n this.feed.getFeedGens(uris, ctx.includeTakedowns),\n this.feed.getFeedGenAggregates(\n uris.map((uri) => ({ uri })),\n ctx.viewer,\n ),\n ctx.viewer\n ? this.feed.getFeedGenViewerStates(uris, ctx.viewer)\n : undefined,\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, feedgens, labels)\n }\n return mergeStates(profileState, {\n feedgens,\n feedgenAggs,\n feedgenViewers,\n labels,\n ctx,\n })\n }\n\n // app.bsky.graph.defs#starterPackViewBasic\n // - starterpack\n // - profile\n // - list basic\n // - labels\n async hydrateStarterPacksBasic(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [starterPacks, starterPackAggs, profileState, labels] =\n await Promise.all([\n this.graph.getStarterPacks(uris, ctx.includeTakedowns),\n this.graph.getStarterPackAggregates(uris.map((uri) => ({ uri }))),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n ])\n if (!ctx.includeTakedowns) {\n actionTakedownLabels(uris, starterPacks, labels)\n }\n return mergeStates(profileState, {\n starterPacks,\n starterPackAggs,\n labels,\n ctx,\n })\n }\n\n // app.bsky.graph.defs#starterPackView\n // - starterpack\n // - profile\n // - list basic\n // - feedgen\n // - profile\n // - list basic\n // - list basic\n // - list item\n // - profile\n // - list basic\n // - labels\n async hydrateStarterPacks(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const starterPackState = await this.hydrateStarterPacksBasic(uris, ctx)\n // gather feed and list uris\n const feedUriSet = new Set<string>()\n const listUriSet = new Set<string>()\n starterPackState.starterPacks?.forEach((sp) => {\n sp?.record.feeds?.forEach((feed) => feedUriSet.add(feed.uri))\n if (sp?.record.list) {\n listUriSet.add(sp?.record.list)\n }\n })\n const feedUris = [...feedUriSet]\n const listUris = [...listUriSet]\n // hydrate feeds, lists, and their members\n const [feedGenState, listState, ...listsMembers] = await Promise.all([\n this.hydrateFeedGens(feedUris, ctx),\n this.hydrateLists(listUris, ctx),\n ...listUris.map((uri) =>\n this.dataplane.getListMembers({ listUri: uri, limit: 50 }),\n ),\n ])\n // collect list info\n const listMembersByList = new Map(\n listUris.map((uri, i) => [uri, listsMembers[i]]),\n )\n const listMemberDids = listsMembers.flatMap((lm) =>\n lm.listitems.map((li) => li.did),\n )\n const listCreatorMemberPairs = [...listMembersByList.entries()].flatMap(\n ([listUri, members]) => {\n const creator = didFromUri(listUri)\n return members.listitems.map(\n (li): RelationshipPair => [creator, li.did],\n )\n },\n )\n const blocks = await this.hydrateBidirectionalBlocks(\n pairsToMap(listCreatorMemberPairs),\n ctx,\n )\n // sample top list items per starter pack based on their follows\n const listMemberAggs = await this.actor.getProfileAggregates(listMemberDids)\n const listItemUris: string[] = []\n uris.forEach((uri) => {\n const sp = starterPackState.starterPacks?.get(uri)\n const agg = starterPackState.starterPackAggs?.get(uri)\n if (!sp?.record.list || !agg) return\n const members = listMembersByList.get(sp.record.list)\n if (!members) return\n const creator = didFromUri(sp.record.list)\n // update aggregation with list items for top 12 most followed members\n agg.listItemSampleUris = [\n ...members.listitems.filter(\n (li) =>\n ctx.viewer === creator || !isBlocked(blocks, [creator, li.did]),\n ),\n ]\n .sort((li1, li2) => {\n const score1 = listMemberAggs.get(li1.did)?.followers ?? 0\n const score2 = listMemberAggs.get(li2.did)?.followers ?? 0\n return score2 - score1\n })\n .slice(0, 12)\n .map((li) => li.uri)\n listItemUris.push(...agg.listItemSampleUris)\n })\n // hydrate sampled list items\n const listItemState = await this.hydrateListItems(listItemUris, ctx)\n return mergeManyStates(\n starterPackState,\n feedGenState,\n listState,\n listItemState,\n )\n }\n\n // app.bsky.feed.getLikes#like\n // - like\n // - profile\n // - list basic\n async hydrateLikes(\n authorDid: string,\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [likes, profileState] = await Promise.all([\n this.feed.getLikes(uris, ctx.includeTakedowns),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n\n const pairs: RelationshipPair[] = []\n for (const [uri, like] of likes) {\n if (like) {\n pairs.push([authorDid, didFromUri(uri)])\n }\n }\n const blocks = await this.hydrateBidirectionalBlocks(pairsToMap(pairs), ctx)\n const likeBlocks = new HydrationMap<LikeBlock>()\n for (const [uri, like] of likes) {\n if (like) {\n likeBlocks.set(uri, isBlocked(blocks, [authorDid, didFromUri(uri)]))\n } else {\n likeBlocks.set(uri, null)\n }\n }\n\n return mergeStates(profileState, { likes, likeBlocks, ctx })\n }\n\n // app.bsky.feed.getRepostedBy#repostedBy\n // - repost\n // - profile\n // - list basic\n async hydrateReposts(uris: string[], ctx: HydrateCtx) {\n const [reposts, profileState] = await Promise.all([\n this.feed.getReposts(uris, ctx.includeTakedowns),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n return mergeStates(profileState, { reposts, ctx })\n }\n\n // app.bsky.notification.listNotifications#notification\n // - notification\n // - profile\n // - list basic\n async hydrateNotifications(\n notifs: Notification[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const uris = notifs.map((notif) => notif.uri)\n const collections = urisByCollection(uris)\n const postUris = collections.get(ids.AppBskyFeedPost) ?? []\n const likeUris = collections.get(ids.AppBskyFeedLike) ?? []\n const repostUris = collections.get(ids.AppBskyFeedRepost) ?? []\n const followUris = collections.get(ids.AppBskyGraphFollow) ?? []\n const verificationUris = collections.get(ids.AppBskyGraphVerification) ?? []\n const [\n posts,\n likes,\n reposts,\n follows,\n verifications,\n labels,\n profileState,\n ] = await Promise.all([\n this.feed.getPosts(postUris), // reason: mention, reply, quote\n this.feed.getLikes(likeUris), // reason: like\n this.feed.getReposts(repostUris), // reason: repost\n this.graph.getFollows(followUris), // reason: follow\n this.graph.getVerifications(verificationUris), // reason: verified\n this.label.getLabelsForSubjects(uris, ctx.labelers),\n this.hydrateProfiles(uris.map(didFromUri), ctx),\n ])\n const viewerRootPostUris = new Set<string>()\n for (const notif of notifs) {\n if (notif.reason === 'reply') {\n const post = posts.get(notif.uri)\n if (post) {\n const rootUri = post.record.reply?.root.uri\n if (rootUri && didFromUri(rootUri) === ctx.viewer) {\n viewerRootPostUris.add(rootUri)\n }\n }\n }\n }\n const threadgates = await this.feed.getThreadgatesForPosts([\n ...viewerRootPostUris.values(),\n ])\n actionTakedownLabels(postUris, posts, labels)\n return mergeStates(profileState, {\n posts,\n likes,\n reposts,\n follows,\n verifications,\n labels,\n threadgates,\n ctx,\n })\n }\n\n async hydrateBookmarks(\n bookmarkInfos: BookmarkInfo[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const viewer = ctx.viewer\n if (!viewer) return {}\n const bookmarksRes = await this.dataplane.getBookmarksByActorAndSubjects({\n actorDid: viewer,\n uris: bookmarkInfos.map((b) => b.subject),\n })\n\n type BookmarkWithRef = Bookmark & { ref: RecordRef }\n const bookmarks: BookmarkWithRef[] = bookmarksRes.bookmarks.filter(\n (bookmark): bookmark is BookmarkWithRef => !!bookmark.ref?.key,\n )\n // mapping DID -> stash key -> bookmark\n const bookmarksMap = new HydrationMap([\n [\n viewer,\n new HydrationMap<Bookmark>(\n bookmarks.map((bookmark) => {\n const {\n ref: { key },\n } = bookmark\n return [key, bookmark]\n }),\n ),\n ],\n ])\n\n // @NOTE: The `createBookmark` endpoint limits bookmarks to be of posts,\n // so we can assume currently all subjects are posts.\n const postsState = await this.hydratePosts(\n bookmarks.map((bookmark) => ({ uri: bookmark.subjectUri })),\n ctx,\n )\n\n return mergeStates(postsState, { bookmarks: bookmarksMap })\n }\n\n // provides partial hydration state within getFollows / getFollowers, mainly for applying rules\n async hydrateFollows(\n uris: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const follows = await this.graph.getFollows(uris)\n const pairs: RelationshipPair[] = []\n for (const [uri, follow] of follows) {\n if (follow) {\n pairs.push([didFromUri(uri), follow.record.subject])\n }\n }\n const blocks = await this.hydrateBidirectionalBlocks(pairsToMap(pairs), ctx)\n const followBlocks = new HydrationMap<FollowBlock>()\n for (const [uri, follow] of follows) {\n if (follow) {\n followBlocks.set(\n uri,\n isBlocked(blocks, [didFromUri(uri), follow.record.subject]),\n )\n } else {\n followBlocks.set(uri, null)\n }\n }\n return { follows, followBlocks }\n }\n\n async hydrateBidirectionalBlocks(\n didMap: Map<string, string[]>, // DID -> DID[]\n ctx: HydrateCtx,\n ): Promise<BidirectionalBlocks> {\n const pairs: RelationshipPair[] = []\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n pairs.push([source, target])\n }\n }\n\n const blocks = await this.graph.getBidirectionalBlocks(pairs)\n const listUrisSet = new Set<string>()\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n const block = blocks.get(source, target)\n if (block?.blockListUri) {\n listUrisSet.add(block.blockListUri)\n }\n }\n }\n const listUris = [...listUrisSet]\n\n // if a list no longer exists or is not a mod list, then remove from block entry\n const listState = await this.hydrateListsBasic(listUris, ctx)\n for (const [source, targets] of didMap) {\n for (const target of targets) {\n const block = blocks.get(source, target)\n if (!isModList(block?.blockListUri, listState)) {\n delete block?.blockListUri\n }\n }\n }\n\n const result: BidirectionalBlocks = new HydrationMap<\n HydrationMap<boolean>\n >()\n for (const [source, targets] of didMap) {\n const didBlocks = new HydrationMap<boolean>()\n for (const target of targets) {\n const block = blocks.get(source, target)\n\n // If a list no longer exists or is not a mod list, then remove from block entry.\n // isModList confirms the list exists in listState, which ensures it wasn't taken down.\n if (!isModList(block?.blockListUri, listState)) {\n delete block?.blockListUri\n }\n\n const blockEntry: BlockEntry = {\n blockUri: block?.blockUri,\n blockListUri:\n block?.blockListUri &&\n listState.actors?.get(uriToDid(block.blockListUri))\n ? block.blockListUri\n : undefined,\n }\n\n didBlocks.set(\n target,\n !!blockEntry.blockUri || !!blockEntry.blockListUri,\n )\n }\n result.set(source, didBlocks)\n }\n\n return result\n }\n\n // app.bsky.labeler.def#labelerViewDetailed\n // - labeler\n // - profile\n // - list basic\n async hydrateLabelers(\n dids: string[],\n ctx: HydrateCtx,\n ): Promise<HydrationState> {\n const [labelers, labelerAggs, labelerViewers, profileState] =\n await Promise.all([\n this.label.getLabelers(dids, ctx.includeTakedowns),\n this.label.getLabelerAggregates(dids, ctx.viewer),\n ctx.viewer\n ? this.label.getLabelerViewerStates(dids, ctx.viewer)\n : undefined,\n this.hydrateProfiles(dids, ctx),\n ])\n actionTakedownLabels(dids, labelers, profileState.labels ?? new Labels())\n return mergeStates(profileState, {\n labelers,\n labelerAggs,\n labelerViewers,\n ctx,\n })\n }\n\n // ad-hoc record hydration\n // in com.atproto.repo.getRecord\n async getRecord(uri: string, includeTakedowns = false) {\n const parsed = new AtUri(uri)\n const collection = parsed.collection\n if (collection === ids.AppBskyFeedPost) {\n return (\n (await this.feed.getPosts([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedRepost) {\n return (\n (await this.feed.getReposts([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedLike) {\n return (\n (await this.feed.getLikes([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphFollow) {\n return (\n (await this.graph.getFollows([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphList) {\n return (\n (await this.graph.getLists([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphListitem) {\n return (\n (await this.graph.getListItems([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphBlock) {\n return (\n (await this.graph.getBlocks([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyGraphStarterpack) {\n return (\n (await this.graph.getStarterPacks([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedGenerator) {\n return (\n (await this.feed.getFeedGens([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyFeedThreadgate) {\n return (\n (await this.feed.getThreadgateRecords([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyFeedPostgate) {\n return (\n (await this.feed.getPostgateRecords([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyLabelerService) {\n if (parsed.rkey !== 'self') return\n const did = parsed.hostname\n return (\n (await this.label.getLabelers([did], includeTakedowns)).get(did) ??\n undefined\n )\n } else if (collection === ids.ChatBskyActorDeclaration) {\n if (parsed.rkey !== 'self') return\n return (\n (await this.actor.getChatDeclarations([uri], includeTakedowns)).get(\n uri,\n ) ?? undefined\n )\n } else if (collection === ids.AppBskyNotificationDeclaration) {\n if (parsed.rkey !== 'self') return\n return (\n (\n await this.actor.getNotificationDeclarations([uri], includeTakedowns)\n ).get(uri) ?? undefined\n )\n } else if (collection === ids.AppBskyActorStatus) {\n if (parsed.rkey !== 'self') return\n return (\n (await this.actor.getStatus([uri], includeTakedowns)).get(uri) ??\n undefined\n )\n } else if (collection === ids.AppBskyActorProfile) {\n const did = parsed.hostname\n const actor = (\n await this.actor.getActors([did], { includeTakedowns })\n ).get(did)\n if (!actor?.profile || !actor?.profileCid) return undefined\n const recordInfo: RecordInfo<ProfileRecord> = {\n record: actor.profile,\n cid: actor.profileCid,\n sortedAt: actor.sortedAt ?? new Date(0), // @NOTE will be present since profile record is present\n indexedAt: actor.indexedAt ?? new Date(0), // @NOTE will be present since profile record is present\n takedownRef: actor.profileTakedownRef,\n }\n\n return recordInfo\n }\n }\n\n async createContext(vals: HydrateCtxVals) {\n // ensures we're only apply labelers that exist and are not taken down\n const labelers = vals.labelers.dids\n const nonServiceLabelers = labelers.filter(\n (did) => !this.serviceLabelers.has(did),\n )\n const labelerActors = await this.actor.getActors(nonServiceLabelers, {\n includeTakedowns: vals.includeTakedowns,\n })\n const availableDids = labelers.filter(\n (did) => this.serviceLabelers.has(did) || !!labelerActors.get(did),\n )\n const availableLabelers = {\n dids: availableDids,\n redact: vals.labelers.redact,\n }\n const includeDebugField =\n !!vals.viewer && this.config.debugFieldAllowedDids.has(vals.viewer)\n return new HydrateCtx({\n labelers: availableLabelers,\n viewer: vals.viewer,\n includeTakedowns: vals.includeTakedowns,\n include3pBlocks: vals.include3pBlocks,\n includeDebugField,\n featureGates: vals.featureGates,\n })\n }\n\n async resolveUri(uriStr: string) {\n const uri = new AtUri(uriStr)\n const [did] = await this.actor.getDids([uri.host])\n if (!did) return uriStr\n uri.hostname = did\n return uri.toString()\n }\n}\n\n// service refs may look like \"did:plc:example#service_id\". we want to extract the did part \"did:plc:example\".\nconst serviceRefToDid = (serviceRef: string) => {\n const idx = serviceRef.indexOf('#')\n return idx !== -1 ? serviceRef.slice(0, idx) : serviceRef\n}\n\nconst listUrisFromProfileViewer = (item: ProfileViewerState | null) => {\n const listUris: string[] = []\n if (item?.mutedByList) {\n listUris.push(item.mutedByList)\n }\n if (item?.blockingByList) {\n listUris.push(item.blockingByList)\n }\n // blocked-by list does not appear in views, but will be used to evaluate the existence of a block between users.\n if (item?.blockedByList) {\n listUris.push(item.blockedByList)\n }\n return listUris\n}\n\nconst removeNonModListsFromProfileViewer = (\n item: ProfileViewerState | null,\n state: HydrationState,\n) => {\n if (!isModList(item?.mutedByList, state)) {\n delete item?.mutedByList\n }\n if (!isModList(item?.blockingByList, state)) {\n delete item?.blockingByList\n }\n if (!isModList(item?.blockedByList, state)) {\n delete item?.blockedByList\n }\n}\n\nconst isModList = (\n listUri: string | undefined,\n state: HydrationState,\n): boolean => {\n if (!listUri) return false\n const list = state.lists?.get(listUri)\n return list?.record.purpose === 'app.bsky.graph.defs#modlist'\n}\n\nconst labelSubjectsForDid = (dids: string[]) => {\n return [\n ...dids,\n ...dids.map((did) =>\n AtUri.make(did, ids.AppBskyActorProfile, 'self').toString(),\n ),\n ]\n}\n\nconst rootUrisFromPosts = (posts: Posts): string[] => {\n const uris: string[] = []\n for (const item of posts.values()) {\n const rootUri = item && rootUriFromPost(item)\n if (rootUri) {\n uris.push(rootUri)\n }\n }\n return uris\n}\n\nconst rootUriFromPost = (post: Post): string | undefined => {\n return post.record.reply?.root.uri\n}\n\nconst nestedRecordUrisFromPosts = (\n posts: Posts,\n fromUris?: string[],\n): string[] => {\n const uris: string[] = []\n const postUris = fromUris ?? posts.keys()\n for (const uri of postUris) {\n const item = posts.get(uri)\n if (item) {\n uris.push(...nestedRecordUris(item.record))\n }\n }\n return uris\n}\n\nconst nestedRecordUris = (post: Post['record']): string[] => {\n const uris: string[] = []\n if (!post?.embed) return uris\n if (isEmbedRecord(post.embed)) {\n uris.push(post.embed.record.uri)\n } else if (isEmbedRecordWithMedia(post.embed)) {\n uris.push(post.embed.record.record.uri)\n }\n return uris\n}\n\nconst getListUrisFromThreadgates = (gates: Threadgates) => {\n const uris: string[] = []\n for (const gate of gates.values()) {\n const listRules = gate?.record.allow?.filter(isThreadgateListRule) ?? []\n for (const rule of listRules) {\n uris.push(rule.list)\n }\n }\n return uris\n}\n\nconst isBlocked = (blocks: BidirectionalBlocks, [a, b]: RelationshipPair) => {\n return blocks.get(a)?.get(b) ?? false\n}\n\nconst pairsToMap = (pairs: RelationshipPair[]): Map<string, string[]> => {\n const map = new Map<string, string[]>()\n for (const [a, b] of pairs) {\n const list = map.get(a) ?? []\n list.push(b)\n map.set(a, list)\n }\n return map\n}\n\nexport const mergeStates = (\n stateA: HydrationState,\n stateB: HydrationState,\n): HydrationState => {\n assert(\n !stateA.ctx?.viewer ||\n !stateB.ctx?.viewer ||\n stateA.ctx?.viewer === stateB.ctx?.viewer,\n 'incompatible viewers',\n )\n return {\n ctx: stateA.ctx ?? stateB.ctx,\n actors: mergeMaps(stateA.actors, stateB.actors),\n profileAggs: mergeMaps(stateA.profileAggs, stateB.profileAggs),\n profileViewers: mergeMaps(stateA.profileViewers, stateB.profileViewers),\n posts: mergeMaps(stateA.posts, stateB.posts),\n postAggs: mergeMaps(stateA.postAggs, stateB.postAggs),\n postViewers: mergeMaps(stateA.postViewers, stateB.postViewers),\n threadContexts: mergeMaps(stateA.threadContexts, stateB.threadContexts),\n postBlocks: mergeMaps(stateA.postBlocks, stateB.postBlocks),\n reposts: mergeMaps(stateA.reposts, stateB.reposts),\n follows: mergeMaps(stateA.follows, stateB.follows),\n followBlocks: mergeMaps(stateA.followBlocks, stateB.followBlocks),\n threadgates: mergeMaps(stateA.threadgates, stateB.threadgates),\n postgates: mergeMaps(stateA.postgates, stateB.postgates),\n lists: mergeMaps(stateA.lists, stateB.lists),\n listAggs: mergeMaps(stateA.listAggs, stateB.listAggs),\n listMemberships: mergeNestedMaps(\n stateA.listMemberships,\n stateB.listMemberships,\n ),\n listViewers: mergeMaps(stateA.listViewers, stateB.listViewers),\n listItems: mergeMaps(stateA.listItems, stateB.listItems),\n likes: mergeMaps(stateA.likes, stateB.likes),\n likeBlocks: mergeMaps(stateA.likeBlocks, stateB.likeBlocks),\n labels: mergeMaps(stateA.labels, stateB.labels),\n feedgens: mergeMaps(stateA.feedgens, stateB.feedgens),\n feedgenAggs: mergeMaps(stateA.feedgenAggs, stateB.feedgenAggs),\n feedgenViewers: mergeMaps(stateA.feedgenViewers, stateB.feedgenViewers),\n starterPacks: mergeMaps(stateA.starterPacks, stateB.starterPacks),\n starterPackAggs: mergeMaps(stateA.starterPackAggs, stateB.starterPackAggs),\n labelers: mergeMaps(stateA.labelers, stateB.labelers),\n labelerAggs: mergeMaps(stateA.labelerAggs, stateB.labelerAggs),\n labelerViewers: mergeMaps(stateA.labelerViewers, stateB.labelerViewers),\n knownFollowers: mergeMaps(stateA.knownFollowers, stateB.knownFollowers),\n activitySubscriptions: mergeMaps(\n stateA.activitySubscriptions,\n stateB.activitySubscriptions,\n ),\n bidirectionalBlocks: mergeNestedMaps(\n stateA.bidirectionalBlocks,\n stateB.bidirectionalBlocks,\n ),\n verifications: mergeMaps(stateA.verifications, stateB.verifications),\n bookmarks: mergeNestedMaps(stateA.bookmarks, stateB.bookmarks),\n }\n}\n\nexport const mergeManyStates = (...states: HydrationState[]) => {\n return states.reduce(mergeStates, {} as HydrationState)\n}\n\nconst actionTakedownLabels = <T>(\n keys: string[],\n hydrationMap: HydrationMap<T>,\n labels: Labels,\n) => {\n for (const key of keys) {\n if (labels.get(key)?.isTakendown) {\n hydrationMap.set(key, null)\n }\n }\n}\n\nconst uriToRef = (uri: string): ItemRef => {\n return { uri }\n}\n"]}
package/dist/kws.d.ts CHANGED
@@ -1,18 +1,53 @@
1
1
  import { KwsExternalPayload } from './api/kws/types';
2
2
  import { KwsConfig } from './config';
3
3
  export declare const createKwsClient: (cfg: KwsConfig) => KwsClient;
4
+ /**
5
+ * Thrown when the provided external payload exceeds KWS's character limit.
6
+ * This is most commonly caused by DIDs that are too long, such as for
7
+ * `did:web` DIDs. But it's very rare, and the client has special handling for
8
+ * this case.
9
+ */
4
10
  export declare class KwsExternalPayloadError extends Error {
5
11
  }
12
+ export type KWSSendEmailRequestCommon = {
13
+ email: string;
14
+ location: string;
15
+ language: string;
16
+ externalPayload: string;
17
+ };
18
+ export type KWSSendEmailRequest = (KWSSendEmailRequestCommon & {
19
+ userContext: 'adult';
20
+ }) | (KWSSendEmailRequestCommon & {
21
+ userContext: 'age';
22
+ minimumAge: number;
23
+ });
6
24
  export declare class KwsClient {
7
25
  cfg: KwsConfig;
8
26
  constructor(cfg: KwsConfig);
9
27
  private auth;
10
28
  private fetchWithAuth;
29
+ /**
30
+ * @deprecated Use `sendAdultVerifiedFlowEmail` or `sendAgeVerifiedFlowEmail` instead.
31
+ */
11
32
  sendEmail({ countryCode, email, externalPayload, language, }: {
12
33
  countryCode: string;
13
34
  email: string;
14
35
  externalPayload: KwsExternalPayload;
15
36
  language: string;
16
37
  }): Promise<unknown>;
38
+ /**
39
+ * Sends a KWS verification email with the given properties.
40
+ */
41
+ email(props: KWSSendEmailRequest): Promise<unknown>;
42
+ /**
43
+ * Sends an email to the user initiating an `adult` verification flow, which
44
+ * results in `adult-verified` events/webhooks.
45
+ */
46
+ sendAdultVerifiedFlowEmail(props: KWSSendEmailRequestCommon): Promise<unknown>;
47
+ /**
48
+ * Sends an email to the user initiating an `age` verification flow, which
49
+ * results in `age-verified` events/webhooks.
50
+ */
51
+ sendAgeVerifiedFlowEmail(props: KWSSendEmailRequestCommon): Promise<unknown>;
17
52
  }
18
53
  //# sourceMappingURL=kws.d.ts.map
package/dist/kws.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kws.d.ts","sourceRoot":"","sources":["../src/kws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,eAAO,MAAM,eAAe,GAAI,KAAK,SAAS,KAAG,SAEhD,CAAA;AAQD,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,qBAAa,SAAS;IACD,GAAG,EAAE,SAAS;gBAAd,GAAG,EAAE,SAAS;YAEnB,IAAI;YAiCJ,aAAa;IAerB,SAAS,CAAC,EACd,WAAW,EACX,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE;QACD,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,eAAe,EAAE,kBAAkB,CAAA;QACnC,QAAQ,EAAE,MAAM,CAAA;KACjB;CAmCF"}
1
+ {"version":3,"file":"kws.d.ts","sourceRoot":"","sources":["../src/kws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,eAAO,MAAM,eAAe,GAAI,KAAK,SAAS,KAAG,SAEhD,CAAA;AAQD;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAC3B,CAAC,yBAAyB,GAAG;IAC3B,WAAW,EAAE,OAAO,CAAA;CACrB,CAAC,GACF,CAAC,yBAAyB,GAAG;IAC3B,WAAW,EAAE,KAAK,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEN,qBAAa,SAAS;IACD,GAAG,EAAE,SAAS;gBAAd,GAAG,EAAE,SAAS;YAEnB,IAAI;YAiCJ,aAAa;IAe3B;;OAEG;IACG,SAAS,CAAC,EACd,WAAW,EACX,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE;QACD,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,eAAe,EAAE,kBAAkB,CAAA;QACnC,QAAQ,EAAE,MAAM,CAAA;KACjB;IAoCD;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,mBAAmB;IA8BtC;;;OAGG;IACG,0BAA0B,CAAC,KAAK,EAAE,yBAAyB;IAOjE;;;OAGG;IACG,wBAAwB,CAAC,KAAK,EAAE,yBAAyB;CAOhE"}
package/dist/kws.js CHANGED
@@ -14,6 +14,12 @@ const authResponseSchema = zod_1.z.object({
14
14
  access_token: zod_1.z.string(),
15
15
  });
16
16
  const EXTERNAL_PAYLOAD_CHAR_LIMIT = 200;
17
+ /**
18
+ * Thrown when the provided external payload exceeds KWS's character limit.
19
+ * This is most commonly caused by DIDs that are too long, such as for
20
+ * `did:web` DIDs. But it's very rare, and the client has special handling for
21
+ * this case.
22
+ */
17
23
  class KwsExternalPayloadError extends Error {
18
24
  }
19
25
  exports.KwsExternalPayloadError = KwsExternalPayloadError;
@@ -63,6 +69,9 @@ class KwsClient {
63
69
  },
64
70
  });
65
71
  }
72
+ /**
73
+ * @deprecated Use `sendAdultVerifiedFlowEmail` or `sendAgeVerifiedFlowEmail` instead.
74
+ */
66
75
  async sendEmail({ countryCode, email, externalPayload, language, }) {
67
76
  const serializedExternalPayload = (0, util_1.serializeExternalPayload)(externalPayload);
68
77
  if (serializedExternalPayload.length > EXTERNAL_PAYLOAD_CHAR_LIMIT) {
@@ -89,6 +98,51 @@ class KwsClient {
89
98
  }
90
99
  return res.json();
91
100
  }
101
+ /**
102
+ * Sends a KWS verification email with the given properties.
103
+ */
104
+ async email(props) {
105
+ const res = await this.fetchWithAuth(`${this.cfg.apiOrigin}/v1/verifications/send-email`, {
106
+ method: 'POST',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ 'User-Agent': this.cfg.userAgent,
110
+ },
111
+ body: JSON.stringify(props),
112
+ });
113
+ if (!res.ok) {
114
+ const errorText = await res.text();
115
+ logger_1.httpLogger.error({
116
+ status: res.status,
117
+ statusText: res.statusText,
118
+ errorText,
119
+ flow: props.userContext,
120
+ }, 'Failed to send KWS email');
121
+ throw new Error('Failed to send KWS email');
122
+ }
123
+ return res.json();
124
+ }
125
+ /**
126
+ * Sends an email to the user initiating an `adult` verification flow, which
127
+ * results in `adult-verified` events/webhooks.
128
+ */
129
+ async sendAdultVerifiedFlowEmail(props) {
130
+ return this.email({
131
+ ...props,
132
+ userContext: 'adult',
133
+ });
134
+ }
135
+ /**
136
+ * Sends an email to the user initiating an `age` verification flow, which
137
+ * results in `age-verified` events/webhooks.
138
+ */
139
+ async sendAgeVerifiedFlowEmail(props) {
140
+ return this.email({
141
+ ...props,
142
+ userContext: 'age',
143
+ minimumAge: 16, // KWS required value
144
+ });
145
+ }
92
146
  }
93
147
  exports.KwsClient = KwsClient;
94
148
  //# sourceMappingURL=kws.js.map
package/dist/kws.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kws.js","sourceRoot":"","sources":["../src/kws.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { KwsExternalPayload } from './api/kws/types'\nimport { serializeExternalPayload } from './api/kws/util'\nimport { buildBasicAuth } from './auth-verifier'\nimport { KwsConfig } from './config'\nimport { httpLogger as log } from './logger'\n\nexport const createKwsClient = (cfg: KwsConfig): KwsClient => {\n return new KwsClient(cfg)\n}\n\n// Not `.strict()` to avoid breaking if KWS adds fields.\nconst authResponseSchema = z.object({\n access_token: z.string(),\n})\n\nconst EXTERNAL_PAYLOAD_CHAR_LIMIT = 200\nexport class KwsExternalPayloadError extends Error {}\n\nexport class KwsClient {\n constructor(public cfg: KwsConfig) {}\n\n private async auth() {\n try {\n const res = await fetch(\n `${this.cfg.authOrigin}/auth/realms/kws/protocol/openid-connect/token`,\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: buildBasicAuth(this.cfg.clientId, this.cfg.apiKey),\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n scope: 'verification',\n }),\n },\n )\n if (!res.ok) {\n const errorText = await res.text()\n throw new Error(\n `Failed to fetch age assurance access token: status: ${res.status}, statusText: ${res.statusText}, errorText: ${errorText}`,\n )\n }\n\n const auth = await res.json()\n const authResponse = authResponseSchema.parse(auth)\n return authResponse.access_token\n } catch (err) {\n log.error({ err }, 'Failed to authenticate with KWS')\n throw err\n }\n }\n\n private async fetchWithAuth(\n url: string,\n init: RequestInit,\n ): Promise<Response> {\n const accessToken = await this.auth()\n\n return fetch(url, {\n ...init,\n headers: {\n ...(init.headers ?? {}),\n Authorization: `Bearer ${accessToken}`,\n },\n })\n }\n\n async sendEmail({\n countryCode,\n email,\n externalPayload,\n language,\n }: {\n countryCode: string\n email: string\n externalPayload: KwsExternalPayload\n language: string\n }) {\n const serializedExternalPayload = serializeExternalPayload(externalPayload)\n if (serializedExternalPayload.length > EXTERNAL_PAYLOAD_CHAR_LIMIT) {\n throw new KwsExternalPayloadError()\n }\n\n const res = await this.fetchWithAuth(\n `${this.cfg.apiOrigin}/v1/verifications/send-email`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': this.cfg.userAgent,\n },\n body: JSON.stringify({\n email,\n externalPayload: serializedExternalPayload,\n language,\n location: countryCode,\n userContext: 'adult',\n }),\n },\n )\n\n if (!res.ok) {\n const errorText = await res.text()\n log.error(\n { status: res.status, statusText: res.statusText, errorText },\n 'Failed to send age assurance email',\n )\n throw new Error('Failed to send age assurance email')\n }\n\n return res.json()\n }\n}\n"]}
1
+ {"version":3,"file":"kws.js","sourceRoot":"","sources":["../src/kws.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { KwsExternalPayload } from './api/kws/types'\nimport { serializeExternalPayload } from './api/kws/util'\nimport { buildBasicAuth } from './auth-verifier'\nimport { KwsConfig } from './config'\nimport { httpLogger as log } from './logger'\n\nexport const createKwsClient = (cfg: KwsConfig): KwsClient => {\n return new KwsClient(cfg)\n}\n\n// Not `.strict()` to avoid breaking if KWS adds fields.\nconst authResponseSchema = z.object({\n access_token: z.string(),\n})\n\nconst EXTERNAL_PAYLOAD_CHAR_LIMIT = 200\n/**\n * Thrown when the provided external payload exceeds KWS's character limit.\n * This is most commonly caused by DIDs that are too long, such as for\n * `did:web` DIDs. But it's very rare, and the client has special handling for\n * this case.\n */\nexport class KwsExternalPayloadError extends Error {}\n\nexport type KWSSendEmailRequestCommon = {\n email: string\n location: string\n language: string\n externalPayload: string\n}\n\nexport type KWSSendEmailRequest =\n | (KWSSendEmailRequestCommon & {\n userContext: 'adult'\n })\n | (KWSSendEmailRequestCommon & {\n userContext: 'age'\n minimumAge: number\n })\n\nexport class KwsClient {\n constructor(public cfg: KwsConfig) {}\n\n private async auth() {\n try {\n const res = await fetch(\n `${this.cfg.authOrigin}/auth/realms/kws/protocol/openid-connect/token`,\n {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: buildBasicAuth(this.cfg.clientId, this.cfg.apiKey),\n },\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n scope: 'verification',\n }),\n },\n )\n if (!res.ok) {\n const errorText = await res.text()\n throw new Error(\n `Failed to fetch age assurance access token: status: ${res.status}, statusText: ${res.statusText}, errorText: ${errorText}`,\n )\n }\n\n const auth = await res.json()\n const authResponse = authResponseSchema.parse(auth)\n return authResponse.access_token\n } catch (err) {\n log.error({ err }, 'Failed to authenticate with KWS')\n throw err\n }\n }\n\n private async fetchWithAuth(\n url: string,\n init: RequestInit,\n ): Promise<Response> {\n const accessToken = await this.auth()\n\n return fetch(url, {\n ...init,\n headers: {\n ...(init.headers ?? {}),\n Authorization: `Bearer ${accessToken}`,\n },\n })\n }\n\n /**\n * @deprecated Use `sendAdultVerifiedFlowEmail` or `sendAgeVerifiedFlowEmail` instead.\n */\n async sendEmail({\n countryCode,\n email,\n externalPayload,\n language,\n }: {\n countryCode: string\n email: string\n externalPayload: KwsExternalPayload\n language: string\n }) {\n const serializedExternalPayload = serializeExternalPayload(externalPayload)\n if (serializedExternalPayload.length > EXTERNAL_PAYLOAD_CHAR_LIMIT) {\n throw new KwsExternalPayloadError()\n }\n\n const res = await this.fetchWithAuth(\n `${this.cfg.apiOrigin}/v1/verifications/send-email`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': this.cfg.userAgent,\n },\n body: JSON.stringify({\n email,\n externalPayload: serializedExternalPayload,\n language,\n location: countryCode,\n userContext: 'adult',\n }),\n },\n )\n\n if (!res.ok) {\n const errorText = await res.text()\n log.error(\n { status: res.status, statusText: res.statusText, errorText },\n 'Failed to send age assurance email',\n )\n throw new Error('Failed to send age assurance email')\n }\n\n return res.json()\n }\n\n /**\n * Sends a KWS verification email with the given properties.\n */\n async email(props: KWSSendEmailRequest) {\n const res = await this.fetchWithAuth(\n `${this.cfg.apiOrigin}/v1/verifications/send-email`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': this.cfg.userAgent,\n },\n body: JSON.stringify(props),\n },\n )\n\n if (!res.ok) {\n const errorText = await res.text()\n log.error(\n {\n status: res.status,\n statusText: res.statusText,\n errorText,\n flow: props.userContext,\n },\n 'Failed to send KWS email',\n )\n throw new Error('Failed to send KWS email')\n }\n\n return res.json()\n }\n\n /**\n * Sends an email to the user initiating an `adult` verification flow, which\n * results in `adult-verified` events/webhooks.\n */\n async sendAdultVerifiedFlowEmail(props: KWSSendEmailRequestCommon) {\n return this.email({\n ...props,\n userContext: 'adult',\n })\n }\n\n /**\n * Sends an email to the user initiating an `age` verification flow, which\n * results in `age-verified` events/webhooks.\n */\n async sendAgeVerifiedFlowEmail(props: KWSSendEmailRequestCommon) {\n return this.email({\n ...props,\n userContext: 'age',\n minimumAge: 16, // KWS required value\n })\n }\n}\n"]}