@atproto/bsky 0.0.275 → 0.0.276

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 (99) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/api/app/bsky/feed/getActorLikes.d.ts.map +1 -1
  3. package/dist/api/app/bsky/feed/getActorLikes.js +5 -1
  4. package/dist/api/app/bsky/feed/getActorLikes.js.map +1 -1
  5. package/dist/api/app/bsky/feed/getAuthorFeed.d.ts.map +1 -1
  6. package/dist/api/app/bsky/feed/getAuthorFeed.js +7 -1
  7. package/dist/api/app/bsky/feed/getAuthorFeed.js.map +1 -1
  8. package/dist/api/app/bsky/feed/getFeed.d.ts +7 -0
  9. package/dist/api/app/bsky/feed/getFeed.d.ts.map +1 -1
  10. package/dist/api/app/bsky/feed/getFeed.js +14 -1
  11. package/dist/api/app/bsky/feed/getFeed.js.map +1 -1
  12. package/dist/api/app/bsky/feed/getListFeed.d.ts.map +1 -1
  13. package/dist/api/app/bsky/feed/getListFeed.js +5 -1
  14. package/dist/api/app/bsky/feed/getListFeed.js.map +1 -1
  15. package/dist/api/app/bsky/feed/getTimeline.d.ts.map +1 -1
  16. package/dist/api/app/bsky/feed/getTimeline.js +11 -2
  17. package/dist/api/app/bsky/feed/getTimeline.js.map +1 -1
  18. package/dist/api/app/bsky/unspecced/getPostThreadV2.js +5 -1
  19. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  20. package/dist/config.d.ts +4 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +10 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/data-plane/client/index.js +2 -2
  25. package/dist/data-plane/client/index.js.map +1 -1
  26. package/dist/data-plane/client/util.d.ts +1 -0
  27. package/dist/data-plane/client/util.d.ts.map +1 -1
  28. package/dist/data-plane/client/util.js +45 -0
  29. package/dist/data-plane/client/util.js.map +1 -1
  30. package/dist/data-plane/server/db/migrations/20260819T170000000Z-add-like-subject-sort-index.d.ts +4 -0
  31. package/dist/data-plane/server/db/migrations/20260819T170000000Z-add-like-subject-sort-index.d.ts.map +1 -0
  32. package/dist/data-plane/server/db/migrations/20260819T170000000Z-add-like-subject-sort-index.js +12 -0
  33. package/dist/data-plane/server/db/migrations/20260819T170000000Z-add-like-subject-sort-index.js.map +1 -0
  34. package/dist/data-plane/server/db/migrations/index.d.ts +1 -0
  35. package/dist/data-plane/server/db/migrations/index.d.ts.map +1 -1
  36. package/dist/data-plane/server/db/migrations/index.js +1 -0
  37. package/dist/data-plane/server/db/migrations/index.js.map +1 -1
  38. package/dist/data-plane/server/routes/likes.d.ts.map +1 -1
  39. package/dist/data-plane/server/routes/likes.js +46 -0
  40. package/dist/data-plane/server/routes/likes.js.map +1 -1
  41. package/dist/feature-gates/gates.d.ts +1 -0
  42. package/dist/feature-gates/gates.d.ts.map +1 -1
  43. package/dist/feature-gates/gates.js +1 -0
  44. package/dist/feature-gates/gates.js.map +1 -1
  45. package/dist/hydration/actor.d.ts +5 -0
  46. package/dist/hydration/actor.d.ts.map +1 -1
  47. package/dist/hydration/actor.js.map +1 -1
  48. package/dist/hydration/hydrator.d.ts +16 -4
  49. package/dist/hydration/hydrator.d.ts.map +1 -1
  50. package/dist/hydration/hydrator.js +70 -6
  51. package/dist/hydration/hydrator.js.map +1 -1
  52. package/dist/lexicons/app/bsky/actor/status.defs.d.ts +5 -3
  53. package/dist/lexicons/app/bsky/actor/status.defs.d.ts.map +1 -1
  54. package/dist/lexicons/app/bsky/actor/status.defs.js +3 -0
  55. package/dist/lexicons/app/bsky/actor/status.defs.js.map +1 -1
  56. package/dist/lexicons/app/bsky/feed/defs.defs.d.ts +84 -42
  57. package/dist/lexicons/app/bsky/feed/defs.defs.d.ts.map +1 -1
  58. package/dist/lexicons/app/bsky/feed/defs.defs.js +52 -0
  59. package/dist/lexicons/app/bsky/feed/defs.defs.js.map +1 -1
  60. package/dist/lexicons/app/bsky/graph/defs.defs.d.ts +15 -9
  61. package/dist/lexicons/app/bsky/graph/defs.defs.d.ts.map +1 -1
  62. package/dist/lexicons/app/bsky/graph/defs.defs.js +9 -0
  63. package/dist/lexicons/app/bsky/graph/defs.defs.js.map +1 -1
  64. package/dist/lexicons/com/atproto/moderation/defs.defs.d.ts +35 -21
  65. package/dist/lexicons/com/atproto/moderation/defs.defs.d.ts.map +1 -1
  66. package/dist/lexicons/com/atproto/moderation/defs.defs.js +21 -0
  67. package/dist/lexicons/com/atproto/moderation/defs.defs.js.map +1 -1
  68. package/dist/lexicons/tools/ozone/moderation/defs.defs.d.ts +35 -21
  69. package/dist/lexicons/tools/ozone/moderation/defs.defs.d.ts.map +1 -1
  70. package/dist/lexicons/tools/ozone/moderation/defs.defs.js +21 -0
  71. package/dist/lexicons/tools/ozone/moderation/defs.defs.js.map +1 -1
  72. package/dist/lexicons/tools/ozone/report/defs.defs.d.ts +200 -120
  73. package/dist/lexicons/tools/ozone/report/defs.defs.d.ts.map +1 -1
  74. package/dist/lexicons/tools/ozone/report/defs.defs.js +126 -0
  75. package/dist/lexicons/tools/ozone/report/defs.defs.js.map +1 -1
  76. package/dist/lexicons/tools/ozone/team/defs.defs.d.ts +20 -12
  77. package/dist/lexicons/tools/ozone/team/defs.defs.d.ts.map +1 -1
  78. package/dist/lexicons/tools/ozone/team/defs.defs.js +12 -0
  79. package/dist/lexicons/tools/ozone/team/defs.defs.js.map +1 -1
  80. package/dist/proto/bsky_connect.d.ts +10 -1
  81. package/dist/proto/bsky_connect.d.ts.map +1 -1
  82. package/dist/proto/bsky_connect.js +10 -1
  83. package/dist/proto/bsky_connect.js.map +1 -1
  84. package/dist/proto/bsky_pb.d.ts +67 -0
  85. package/dist/proto/bsky_pb.d.ts.map +1 -1
  86. package/dist/proto/bsky_pb.js +110 -0
  87. package/dist/proto/bsky_pb.js.map +1 -1
  88. package/dist/telemetry.d.ts +2 -0
  89. package/dist/telemetry.d.ts.map +1 -0
  90. package/dist/telemetry.js +7 -0
  91. package/dist/telemetry.js.map +1 -0
  92. package/dist/views/index.d.ts +6 -2
  93. package/dist/views/index.d.ts.map +1 -1
  94. package/dist/views/index.js +26 -10
  95. package/dist/views/index.js.map +1 -1
  96. package/dist/views/types.d.ts +1 -0
  97. package/dist/views/types.d.ts.map +1 -1
  98. package/dist/views/types.js.map +1 -1
  99. package/package.json +20 -13
@@ -1 +1 @@
1
- {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../src/feature-gates/gates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,IAAI;IACd,4BAA4B,0CAA0C;IACtE,+BAA+B,wCAAwC;IACvE,oCAAoC,6CAA6C;IACjF,gCAAgC,wCAAwC;IACxE,8BAA8B,uCAAuC;IACrE,+BAA+B,wCAAwC;IACvE,8BAA8B,wCAAwC;IACtE,cAAc,qBAAqB;IACnC,QAAQ,qBAAqB;IAC7B,sBAAsB,8BAA8B;IAGpD,MAAM,oBAAoB;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAe,CAAA"}
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../src/feature-gates/gates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,IAAI;IACd,4BAA4B,0CAA0C;IACtE,+BAA+B,wCAAwC;IACvE,oCAAoC,6CAA6C;IACjF,gCAAgC,wCAAwC;IACxE,8BAA8B,uCAAuC;IACrE,+BAA+B,wCAAwC;IACvE,8BAA8B,wCAAwC;IACtE,cAAc,qBAAqB;IACnC,QAAQ,qBAAqB;IAC7B,sBAAsB,8BAA8B;IACpD,qBAAqB,6BAA6B;IAGlD,MAAM,oBAAoB;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,GAAG,CAAC,IAAI,CAAe,CAAA"}
@@ -15,6 +15,7 @@ export var Gate;
15
15
  Gate["SearchV2Enable"] = "search:v2:enable";
16
16
  Gate["IrisFeed"] = "iris:feed:enable";
17
17
  Gate["OpThreadMetadataEnable"] = "op_thread_metadata:enable";
18
+ Gate["KnownLikersFeedEnable"] = "known_likers:feed:enable";
18
19
  // temp
19
20
  Gate["AATest"] = "aa-test-appview";
20
21
  })(Gate || (Gate = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../src/feature-gates/gates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,IAcX;AAdD,WAAY,IAAI;IACd,8EAAsE,CAAA;IACtE,+EAAuE,CAAA;IACvE,yFAAiF,CAAA;IACjF,gFAAwE,CAAA;IACxE,6EAAqE,CAAA;IACrE,+EAAuE,CAAA;IACvE,8EAAsE,CAAA;IACtE,2CAAmC,CAAA;IACnC,qCAA6B,CAAA;IAC7B,4DAAoD,CAAA;IAEpD,OAAO;IACP,kCAA0B,CAAA;AAC5B,CAAC,EAdW,IAAI,KAAJ,IAAI,QAcf;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAc,IAAI,GAAG,CAAC,EAAE,CAAC,CAAA","sourcesContent":["/**\n * Enum of all gates in the system. This should be the single source of truth\n * for all gates, and should be used in all places where gates are checked or\n * defined.\n */\nexport enum Gate {\n SuggestedUsersDiscoverEnable = 'suggested_users:discover_agent:enable',\n SuggestedUsersSocialProofEnable = 'suggested_users:social_proof:enable',\n ThreadsReplyRankingExplorationEnable = 'threads:reply_ranking_exploration:enable',\n SearchFilteringExplorationEnable = 'search:filtering_exploration:enable',\n SuggestedUsersForExploreEnable = 'suggested_users:for_explore:enable',\n SuggestedUsersForDiscoverEnable = 'suggested_users:for_discover:enable',\n SuggestedUsersForSeeMoreEnable = 'suggested_users:for_see_more:enable',\n SearchV2Enable = 'search:v2:enable',\n IrisFeed = 'iris:feed:enable',\n OpThreadMetadataEnable = 'op_thread_metadata:enable',\n\n // temp\n AATest = 'aa-test-appview',\n}\n\n/**\n * Set of gates that should be ignored when tracking gate evaluations for\n * analytics purposes. This is useful for gates that are not user-facing or are\n * overly noisy.\n */\nexport const IGNORE_METRICS_FOR_GATES: Set<Gate> = new Set([])\n"]}
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../src/feature-gates/gates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,IAeX;AAfD,WAAY,IAAI;IACd,8EAAsE,CAAA;IACtE,+EAAuE,CAAA;IACvE,yFAAiF,CAAA;IACjF,gFAAwE,CAAA;IACxE,6EAAqE,CAAA;IACrE,+EAAuE,CAAA;IACvE,8EAAsE,CAAA;IACtE,2CAAmC,CAAA;IACnC,qCAA6B,CAAA;IAC7B,4DAAoD,CAAA;IACpD,0DAAkD,CAAA;IAElD,OAAO;IACP,kCAA0B,CAAA;AAC5B,CAAC,EAfW,IAAI,KAAJ,IAAI,QAef;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAc,IAAI,GAAG,CAAC,EAAE,CAAC,CAAA","sourcesContent":["/**\n * Enum of all gates in the system. This should be the single source of truth\n * for all gates, and should be used in all places where gates are checked or\n * defined.\n */\nexport enum Gate {\n SuggestedUsersDiscoverEnable = 'suggested_users:discover_agent:enable',\n SuggestedUsersSocialProofEnable = 'suggested_users:social_proof:enable',\n ThreadsReplyRankingExplorationEnable = 'threads:reply_ranking_exploration:enable',\n SearchFilteringExplorationEnable = 'search:filtering_exploration:enable',\n SuggestedUsersForExploreEnable = 'suggested_users:for_explore:enable',\n SuggestedUsersForDiscoverEnable = 'suggested_users:for_discover:enable',\n SuggestedUsersForSeeMoreEnable = 'suggested_users:for_see_more:enable',\n SearchV2Enable = 'search:v2:enable',\n IrisFeed = 'iris:feed:enable',\n OpThreadMetadataEnable = 'op_thread_metadata:enable',\n KnownLikersFeedEnable = 'known_likers:feed:enable',\n\n // temp\n AATest = 'aa-test-appview',\n}\n\n/**\n * Set of gates that should be ignored when tracking gate evaluations for\n * analytics purposes. This is useful for gates that are not user-facing or are\n * overly noisy.\n */\nexport const IGNORE_METRICS_FOR_GATES: Set<Gate> = new Set([])\n"]}
@@ -77,6 +77,11 @@ type KnownFollowersState = {
77
77
  followers: DidString[];
78
78
  };
79
79
  export type KnownFollowersStates = HydrationMap<DidString, KnownFollowersState | undefined>;
80
+ type KnownLikersState = {
81
+ count: number;
82
+ actors: DidString[];
83
+ };
84
+ export type KnownLikersStates = HydrationMap<AtUriString, KnownLikersState | undefined>;
80
85
  export type ProfileAgg = {
81
86
  followers: number;
82
87
  follows: number;
@@ -1 +1 @@
1
- {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport {\n type AtIdentifierString,\n type AtUriString,\n type DatetimeString,\n type DidString,\n type HandleString,\n isDidIdentifier,\n isHandleIdentifier,\n normalizeHandle,\n} from '@atproto/syntax'\nimport type { DataPlaneClient } from '../data-plane/client/index.js'\nimport { app, chat, com } from '../lexicons/index.js'\nimport type {\n ActivitySubscription,\n VerificationMeta,\n} from '../proto/bsky_pb.js'\nimport type {\n ChatDeclarationRecord,\n GermDeclarationRecord,\n NotificationDeclarationRecord,\n ProfileRecord,\n StatusRecord,\n} from '../views/types.js'\nimport {\n HydrationMap,\n type RecordInfo,\n isActivitySubscriptionEnabled,\n parseDate,\n parseRecord,\n parseString,\n safeTakedownRef,\n} from './util.js'\n\ntype AllowActivitySubscriptions = Extract<\n app.bsky.notification.declaration.Main['allowSubscriptions'],\n 'followers' | 'mutuals' | 'none'\n>\n\nexport type Actor = {\n did: DidString\n handle?: HandleString\n profile?: ProfileRecord\n profileCid?: string\n profileTakedownRef?: string\n sortedAt?: Date\n indexedAt?: Date\n takedownRef?: string\n isLabeler: boolean\n allowIncomingChatsFrom?: string\n allowGroupChatInvitesFrom?: string\n upstreamStatus?: string\n createdAt?: Date\n priorityNotifications: boolean\n trustedVerifier?: boolean\n verifications: VerificationHydrationState[]\n status?: RecordInfo<StatusRecord>\n germ?: RecordInfo<GermDeclarationRecord>\n allowActivitySubscriptionsFrom: AllowActivitySubscriptions\n accountModerationTags: Set<string>\n profileModerationTags: Set<string>\n /**\n * Debug information for internal development\n */\n debug?: {\n pagerank?: string\n accountTags?: string[]\n profileTags?: string[]\n }\n}\n\nexport type VerificationHydrationState = {\n issuer: DidString\n uri: AtUriString\n handle: HandleString\n displayName: string\n createdAt: DatetimeString\n}\n\nexport type VerificationMetaRequired = Required<VerificationMeta>\n\nexport type Actors = HydrationMap<DidString, Actor>\n\nexport type ChatDeclaration = RecordInfo<ChatDeclarationRecord>\nexport type ChatDeclarations = HydrationMap<AtUriString, ChatDeclaration>\n\nexport type GermDeclaration = RecordInfo<GermDeclarationRecord>\nexport type GermDeclarations = HydrationMap<AtUriString, GermDeclaration>\n\nexport type NotificationDeclaration = RecordInfo<NotificationDeclarationRecord>\nexport type NotificationDeclarations = HydrationMap<\n AtUriString,\n NotificationDeclaration\n>\n\nexport type Status = RecordInfo<StatusRecord>\nexport type Statuses = HydrationMap<AtUriString, Status>\n\nexport type ProfileViewerState = {\n did: DidString\n muted?: boolean\n mutedOnlyReposts?: boolean\n mutedOnlyQuoteposts?: boolean\n mutedByList?: AtUriString\n blockedBy?: AtUriString\n blocking?: AtUriString\n blockedByList?: AtUriString\n blockingByList?: AtUriString\n following?: AtUriString\n followedBy?: AtUriString\n}\n\nexport type ProfileViewerStates = HydrationMap<\n AtIdentifierString,\n ProfileViewerState\n>\n\ntype ActivitySubscriptionState = {\n post: boolean\n reply: boolean\n}\n\nexport type ActivitySubscriptionStates = HydrationMap<\n DidString,\n ActivitySubscriptionState | undefined\n>\n\ntype KnownFollowersState = {\n count: number\n followers: DidString[]\n}\n\nexport type KnownFollowersStates = HydrationMap<\n DidString,\n KnownFollowersState | undefined\n>\n\nexport type ProfileAgg = {\n followers: number\n follows: number\n posts: number\n lists: number\n feeds: number\n starterPacks: number\n}\n\nexport type ProfileAggs = HydrationMap<DidString, ProfileAgg>\n\nexport class ActorHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getRepoRevSafe(did: string | null): Promise<string | null> {\n if (!did) return null\n try {\n const res = await this.dataplane.getLatestRev({ actorDid: did })\n return parseString(res.rev) ?? null\n } catch {\n return null\n }\n }\n\n /**\n * @note handles do not need to be normalized\n */\n async getDids(\n handleOrDids: AtIdentifierString[],\n opts?: { lookupUnidirectional?: boolean },\n ): Promise<(DidString | undefined)[]> {\n const didByHandle = new Map<HandleString, DidString>()\n\n const handles = handleOrDids.filter(isHandleIdentifier)\n if (handles.length) {\n const { dids } = await this.dataplane.getDidsByHandles({\n handles: handles.map(normalizeHandle),\n lookupUnidirectional: opts?.lookupUnidirectional,\n })\n\n for (let i = 0; i < handles.length; i++) {\n const did = parseString<DidString>(dids[i])\n if (did) didByHandle.set(handles[i], did)\n }\n }\n\n return handleOrDids.map((id) =>\n isDidIdentifier(id) ? id : didByHandle.get(id),\n )\n }\n\n async getDidsDefined(\n handleOrDids: AtIdentifierString[],\n ): Promise<DidString[]> {\n const res = await this.getDids(handleOrDids)\n return res.filter((v) => v != null)\n }\n\n async getActors(\n dids: DidString[],\n opts: {\n includeTakedowns?: boolean\n skipCacheForDids?: DidString[]\n } = {},\n ): Promise<Actors> {\n const map: Actors = new HydrationMap()\n if (!dids.length) return map\n\n const { includeTakedowns = false, skipCacheForDids } = opts\n\n const res = await this.dataplane.getActors({ dids, skipCacheForDids })\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n\n const actor = res.actors[i]\n const isNoHosted =\n actor.takenDown ||\n (actor.upstreamStatus && actor.upstreamStatus !== 'active')\n if (\n !actor.exists ||\n (isNoHosted && !includeTakedowns) ||\n !!actor.tombstonedAt\n ) {\n map.set(did, null)\n continue\n }\n\n const profile = actor.profile?.record\n ? parseRecord(\n app.bsky.actor.profile.main,\n actor.profile,\n includeTakedowns,\n )\n : undefined\n\n const status = actor.statusRecord\n ? parseRecord(\n app.bsky.actor.status.main,\n actor.statusRecord,\n /*\n * Always true, we filter this out in the `Views.status()`. If we\n * ever remove that filter, we'll want to reinstate this here.\n */\n true,\n )\n : undefined\n\n const germ = actor.germRecord\n ? parseRecord(\n com.germnetwork.declaration.main,\n actor.germRecord,\n includeTakedowns,\n )\n : undefined\n\n const verifications = mapDefined(\n Object.entries(actor.verifiedBy) as [DidString, VerificationMeta][],\n ([actorDid, verificationMeta]):\n VerificationHydrationState | undefined => {\n if (\n verificationMeta.handle &&\n verificationMeta.rkey &&\n verificationMeta.sortedAt\n ) {\n return {\n issuer: actorDid,\n uri: `at://${actorDid}/app.bsky.graph.verification/${verificationMeta.rkey}`,\n handle: verificationMeta.handle as HandleString,\n displayName: verificationMeta.displayName,\n createdAt: (\n parseDate(verificationMeta.sortedAt) ?? new Date(0)\n ).toISOString() as DatetimeString,\n }\n }\n // Filter out the verification meta that doesn't contain all info.\n return undefined\n },\n )\n\n const allowActivitySubscriptionsFrom = (\n val: string,\n ): AllowActivitySubscriptions => {\n switch (val) {\n case 'followers':\n case 'mutuals':\n case 'none':\n return val\n default:\n // The dataplane should set the default of \"FOLLOWERS\". Just in case.\n return 'followers'\n }\n }\n\n const debug = {\n pagerank: actor.pagerank ? actor.pagerank.toString() : undefined,\n accountTags: actor.tags,\n profileTags: actor.profileTags,\n }\n\n map.set(did, {\n did,\n handle: parseString<HandleString>(actor.handle),\n profile: profile?.record,\n profileCid: profile?.cid,\n profileTakedownRef: profile?.takedownRef,\n sortedAt: profile?.sortedAt,\n indexedAt: profile?.indexedAt,\n takedownRef: safeTakedownRef(actor),\n isLabeler: actor.labeler ?? false,\n allowIncomingChatsFrom: actor.allowIncomingChatsFrom || undefined,\n allowGroupChatInvitesFrom: actor.allowGroupChatInvitesFrom || undefined,\n upstreamStatus: actor.upstreamStatus || undefined,\n createdAt: parseDate(actor.createdAt),\n priorityNotifications: actor.priorityNotifications,\n trustedVerifier: actor.trustedVerifier,\n verifications,\n status: status,\n germ: germ,\n allowActivitySubscriptionsFrom: allowActivitySubscriptionsFrom(\n actor.allowActivitySubscriptionsFrom,\n ),\n accountModerationTags: new Set(actor.tags),\n profileModerationTags: new Set(actor.profileTags),\n debug,\n })\n }\n\n return map\n }\n\n async getChatDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<ChatDeclarations> {\n const map: ChatDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n chat.bsky.actor.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n async getGermDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<GermDeclarations> {\n const map: GermDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getGermDeclarationRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const record = parseRecord(\n com.germnetwork.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uris[i], record ?? null)\n }\n\n return map\n }\n\n async getNotificationDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<NotificationDeclarations> {\n const map: NotificationDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getNotificationDeclarationRecords({\n uris,\n })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n app.bsky.notification.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n async getStatus(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<Statuses> {\n const map: Statuses = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getStatusRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n app.bsky.actor.status.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n // \"naive\" because this method does not verify the existence of the list itself\n // a later check in the main hydrator will remove list uris that have been deleted or\n // repurposed to \"curate lists\"\n async getProfileViewerStatesNaive(\n actors: AtIdentifierString[],\n viewer: DidString,\n ): Promise<ProfileViewerStates> {\n const map: ProfileViewerStates = new HydrationMap()\n if (!actors.length) return map\n\n // @TODO we could use \"await this.getDids(actors)\" here to resolve the\n // handles (no other code change should be needed). This was not done as\n // part of this PR to avoid changing the behavior of this method.\n const actorDids = actors.map((a) => (isDidIdentifier(a) ? a : undefined))\n\n // getRelationships requires DidString so we remove anything that isn't one\n const actorDidsDefined = Array.from(\n new Set(\n actorDids\n .filter((did) => did != null)\n // Since we special case self-relationship below, we can skip querying\n // the dataplane for the viewer's own DID if it's included in the\n // input.\n .filter((did) => did !== viewer),\n ),\n )\n\n const res = await this.dataplane.getRelationships({\n actorDid: viewer,\n targetDids: actorDidsDefined,\n })\n\n const actorToDid = new Map<AtIdentifierString, DidString | undefined>(\n actors.map((actor, i) => [actor, actorDids[i]]),\n )\n\n for (let i = 0; i < actors.length; i++) {\n const actor = actors[i]\n\n const did = actorToDid.get(actor)\n // ignore unresolved handles\n if (!did) continue\n\n if (did === viewer) {\n // ignore self-follows, self-mutes, self-blocks, self-activity-subscriptions\n map.set(actor, { did })\n continue\n }\n\n // Get the index that was used to query the relationships for this actor\n const index = actorDidsDefined.indexOf(did)\n if (index === -1) continue\n\n const rels = res.relationships[index]\n map.set(actor, {\n did,\n muted: rels.muted ?? false,\n mutedOnlyReposts: rels.mutedOnlyReposts ?? false,\n mutedOnlyQuoteposts: rels.mutedOnlyQuoteposts ?? false,\n mutedByList: parseString(rels.mutedByList),\n blockedBy: parseString(rels.blockedBy),\n blocking: parseString<AtUriString>(rels.blocking),\n blockedByList: parseString(rels.blockedByList),\n blockingByList: parseString(rels.blockingByList),\n following: parseString<AtUriString>(rels.following),\n followedBy: parseString(rels.followedBy),\n })\n }\n\n return map\n }\n\n async getKnownFollowers(\n dids: DidString[],\n viewer: DidString | null,\n ): Promise<KnownFollowersStates> {\n const map: KnownFollowersStates = new HydrationMap()\n if (!viewer) return map\n if (!dids.length) return map\n\n try {\n const { results: knownFollowersResults } =\n await this.dataplane.getFollowsFollowing(\n {\n actorDid: viewer,\n targetDids: dids,\n },\n {\n signal: AbortSignal.timeout(100),\n },\n )\n\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n\n const result = knownFollowersResults[i]?.dids\n\n map.set(\n did,\n result && result.length > 0\n ? {\n count: result.length,\n followers: result.slice(0, 5) as DidString[],\n }\n : undefined,\n )\n }\n } catch {\n // ignore errors and return empty map\n }\n\n return map\n }\n\n async getActivitySubscriptions(\n dids: DidString[],\n viewer: DidString | null,\n ): Promise<ActivitySubscriptionStates> {\n const map: ActivitySubscriptionStates = new HydrationMap()\n if (!viewer) return map\n if (!dids.length) return map\n\n try {\n const { subscriptions } =\n await this.dataplane.getActivitySubscriptionsByActorAndSubjects(\n { actorDid: viewer, subjectDids: dids },\n { signal: AbortSignal.timeout(100) },\n )\n\n for (let i = 0; i < dids.length; i++) {\n // @NOTE Although not typed as nullable, the code here used to defend\n // against potentially missing subscription objects in the response, so\n // we keep that defense in place.\n const subscription = subscriptions[i] as\n ActivitySubscription | undefined\n\n const state = {\n post: subscription?.post != null,\n reply: subscription?.reply != null,\n }\n\n const did = dids[i]!\n if (isActivitySubscriptionEnabled(state)) {\n map.set(did, state)\n } else {\n map.set(did, undefined)\n }\n }\n } catch {\n // ignore errors and return empty map\n }\n\n return map\n }\n\n async getProfileAggregates(dids: DidString[]): Promise<ProfileAggs> {\n const map: ProfileAggs = new HydrationMap()\n if (!dids.length) return map\n\n const counts = await this.dataplane.getCountsForUsers({ dids })\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n map.set(did, {\n followers: counts.followers[i] ?? 0,\n follows: counts.following[i] ?? 0,\n posts: counts.posts[i] ?? 0,\n lists: counts.lists[i] ?? 0,\n feeds: counts.feeds[i] ?? 0,\n starterPacks: counts.starterPacks[i] ?? 0,\n })\n }\n\n return map\n }\n}\n"]}
1
+ {"version":3,"file":"actor.js","sourceRoot":"","sources":["../../src/hydration/actor.ts"],"names":[],"mappings":"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","sourcesContent":["import { mapDefined } from '@atproto/common'\nimport {\n type AtIdentifierString,\n type AtUriString,\n type DatetimeString,\n type DidString,\n type HandleString,\n isDidIdentifier,\n isHandleIdentifier,\n normalizeHandle,\n} from '@atproto/syntax'\nimport type { DataPlaneClient } from '../data-plane/client/index.js'\nimport { app, chat, com } from '../lexicons/index.js'\nimport type {\n ActivitySubscription,\n VerificationMeta,\n} from '../proto/bsky_pb.js'\nimport type {\n ChatDeclarationRecord,\n GermDeclarationRecord,\n NotificationDeclarationRecord,\n ProfileRecord,\n StatusRecord,\n} from '../views/types.js'\nimport {\n HydrationMap,\n type RecordInfo,\n isActivitySubscriptionEnabled,\n parseDate,\n parseRecord,\n parseString,\n safeTakedownRef,\n} from './util.js'\n\ntype AllowActivitySubscriptions = Extract<\n app.bsky.notification.declaration.Main['allowSubscriptions'],\n 'followers' | 'mutuals' | 'none'\n>\n\nexport type Actor = {\n did: DidString\n handle?: HandleString\n profile?: ProfileRecord\n profileCid?: string\n profileTakedownRef?: string\n sortedAt?: Date\n indexedAt?: Date\n takedownRef?: string\n isLabeler: boolean\n allowIncomingChatsFrom?: string\n allowGroupChatInvitesFrom?: string\n upstreamStatus?: string\n createdAt?: Date\n priorityNotifications: boolean\n trustedVerifier?: boolean\n verifications: VerificationHydrationState[]\n status?: RecordInfo<StatusRecord>\n germ?: RecordInfo<GermDeclarationRecord>\n allowActivitySubscriptionsFrom: AllowActivitySubscriptions\n accountModerationTags: Set<string>\n profileModerationTags: Set<string>\n /**\n * Debug information for internal development\n */\n debug?: {\n pagerank?: string\n accountTags?: string[]\n profileTags?: string[]\n }\n}\n\nexport type VerificationHydrationState = {\n issuer: DidString\n uri: AtUriString\n handle: HandleString\n displayName: string\n createdAt: DatetimeString\n}\n\nexport type VerificationMetaRequired = Required<VerificationMeta>\n\nexport type Actors = HydrationMap<DidString, Actor>\n\nexport type ChatDeclaration = RecordInfo<ChatDeclarationRecord>\nexport type ChatDeclarations = HydrationMap<AtUriString, ChatDeclaration>\n\nexport type GermDeclaration = RecordInfo<GermDeclarationRecord>\nexport type GermDeclarations = HydrationMap<AtUriString, GermDeclaration>\n\nexport type NotificationDeclaration = RecordInfo<NotificationDeclarationRecord>\nexport type NotificationDeclarations = HydrationMap<\n AtUriString,\n NotificationDeclaration\n>\n\nexport type Status = RecordInfo<StatusRecord>\nexport type Statuses = HydrationMap<AtUriString, Status>\n\nexport type ProfileViewerState = {\n did: DidString\n muted?: boolean\n mutedOnlyReposts?: boolean\n mutedOnlyQuoteposts?: boolean\n mutedByList?: AtUriString\n blockedBy?: AtUriString\n blocking?: AtUriString\n blockedByList?: AtUriString\n blockingByList?: AtUriString\n following?: AtUriString\n followedBy?: AtUriString\n}\n\nexport type ProfileViewerStates = HydrationMap<\n AtIdentifierString,\n ProfileViewerState\n>\n\ntype ActivitySubscriptionState = {\n post: boolean\n reply: boolean\n}\n\nexport type ActivitySubscriptionStates = HydrationMap<\n DidString,\n ActivitySubscriptionState | undefined\n>\n\ntype KnownFollowersState = {\n count: number\n followers: DidString[]\n}\n\nexport type KnownFollowersStates = HydrationMap<\n DidString,\n KnownFollowersState | undefined\n>\n\ntype KnownLikersState = {\n count: number\n actors: DidString[]\n}\n\nexport type KnownLikersStates = HydrationMap<\n AtUriString,\n KnownLikersState | undefined\n>\n\nexport type ProfileAgg = {\n followers: number\n follows: number\n posts: number\n lists: number\n feeds: number\n starterPacks: number\n}\n\nexport type ProfileAggs = HydrationMap<DidString, ProfileAgg>\n\nexport class ActorHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getRepoRevSafe(did: string | null): Promise<string | null> {\n if (!did) return null\n try {\n const res = await this.dataplane.getLatestRev({ actorDid: did })\n return parseString(res.rev) ?? null\n } catch {\n return null\n }\n }\n\n /**\n * @note handles do not need to be normalized\n */\n async getDids(\n handleOrDids: AtIdentifierString[],\n opts?: { lookupUnidirectional?: boolean },\n ): Promise<(DidString | undefined)[]> {\n const didByHandle = new Map<HandleString, DidString>()\n\n const handles = handleOrDids.filter(isHandleIdentifier)\n if (handles.length) {\n const { dids } = await this.dataplane.getDidsByHandles({\n handles: handles.map(normalizeHandle),\n lookupUnidirectional: opts?.lookupUnidirectional,\n })\n\n for (let i = 0; i < handles.length; i++) {\n const did = parseString<DidString>(dids[i])\n if (did) didByHandle.set(handles[i], did)\n }\n }\n\n return handleOrDids.map((id) =>\n isDidIdentifier(id) ? id : didByHandle.get(id),\n )\n }\n\n async getDidsDefined(\n handleOrDids: AtIdentifierString[],\n ): Promise<DidString[]> {\n const res = await this.getDids(handleOrDids)\n return res.filter((v) => v != null)\n }\n\n async getActors(\n dids: DidString[],\n opts: {\n includeTakedowns?: boolean\n skipCacheForDids?: DidString[]\n } = {},\n ): Promise<Actors> {\n const map: Actors = new HydrationMap()\n if (!dids.length) return map\n\n const { includeTakedowns = false, skipCacheForDids } = opts\n\n const res = await this.dataplane.getActors({ dids, skipCacheForDids })\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n\n const actor = res.actors[i]\n const isNoHosted =\n actor.takenDown ||\n (actor.upstreamStatus && actor.upstreamStatus !== 'active')\n if (\n !actor.exists ||\n (isNoHosted && !includeTakedowns) ||\n !!actor.tombstonedAt\n ) {\n map.set(did, null)\n continue\n }\n\n const profile = actor.profile?.record\n ? parseRecord(\n app.bsky.actor.profile.main,\n actor.profile,\n includeTakedowns,\n )\n : undefined\n\n const status = actor.statusRecord\n ? parseRecord(\n app.bsky.actor.status.main,\n actor.statusRecord,\n /*\n * Always true, we filter this out in the `Views.status()`. If we\n * ever remove that filter, we'll want to reinstate this here.\n */\n true,\n )\n : undefined\n\n const germ = actor.germRecord\n ? parseRecord(\n com.germnetwork.declaration.main,\n actor.germRecord,\n includeTakedowns,\n )\n : undefined\n\n const verifications = mapDefined(\n Object.entries(actor.verifiedBy) as [DidString, VerificationMeta][],\n ([actorDid, verificationMeta]):\n VerificationHydrationState | undefined => {\n if (\n verificationMeta.handle &&\n verificationMeta.rkey &&\n verificationMeta.sortedAt\n ) {\n return {\n issuer: actorDid,\n uri: `at://${actorDid}/app.bsky.graph.verification/${verificationMeta.rkey}`,\n handle: verificationMeta.handle as HandleString,\n displayName: verificationMeta.displayName,\n createdAt: (\n parseDate(verificationMeta.sortedAt) ?? new Date(0)\n ).toISOString() as DatetimeString,\n }\n }\n // Filter out the verification meta that doesn't contain all info.\n return undefined\n },\n )\n\n const allowActivitySubscriptionsFrom = (\n val: string,\n ): AllowActivitySubscriptions => {\n switch (val) {\n case 'followers':\n case 'mutuals':\n case 'none':\n return val\n default:\n // The dataplane should set the default of \"FOLLOWERS\". Just in case.\n return 'followers'\n }\n }\n\n const debug = {\n pagerank: actor.pagerank ? actor.pagerank.toString() : undefined,\n accountTags: actor.tags,\n profileTags: actor.profileTags,\n }\n\n map.set(did, {\n did,\n handle: parseString<HandleString>(actor.handle),\n profile: profile?.record,\n profileCid: profile?.cid,\n profileTakedownRef: profile?.takedownRef,\n sortedAt: profile?.sortedAt,\n indexedAt: profile?.indexedAt,\n takedownRef: safeTakedownRef(actor),\n isLabeler: actor.labeler ?? false,\n allowIncomingChatsFrom: actor.allowIncomingChatsFrom || undefined,\n allowGroupChatInvitesFrom: actor.allowGroupChatInvitesFrom || undefined,\n upstreamStatus: actor.upstreamStatus || undefined,\n createdAt: parseDate(actor.createdAt),\n priorityNotifications: actor.priorityNotifications,\n trustedVerifier: actor.trustedVerifier,\n verifications,\n status: status,\n germ: germ,\n allowActivitySubscriptionsFrom: allowActivitySubscriptionsFrom(\n actor.allowActivitySubscriptionsFrom,\n ),\n accountModerationTags: new Set(actor.tags),\n profileModerationTags: new Set(actor.profileTags),\n debug,\n })\n }\n\n return map\n }\n\n async getChatDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<ChatDeclarations> {\n const map: ChatDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getActorChatDeclarationRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n chat.bsky.actor.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n async getGermDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<GermDeclarations> {\n const map: GermDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getGermDeclarationRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const record = parseRecord(\n com.germnetwork.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uris[i], record ?? null)\n }\n\n return map\n }\n\n async getNotificationDeclarations(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<NotificationDeclarations> {\n const map: NotificationDeclarations = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getNotificationDeclarationRecords({\n uris,\n })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n app.bsky.notification.declaration.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n async getStatus(\n uris: AtUriString[],\n includeTakedowns = false,\n ): Promise<Statuses> {\n const map: Statuses = new HydrationMap()\n if (!uris.length) return map\n\n const res = await this.dataplane.getStatusRecords({ uris })\n for (let i = 0; i < uris.length; i++) {\n const uri = uris[i]\n const record = parseRecord(\n app.bsky.actor.status.main,\n res.records[i],\n includeTakedowns,\n )\n map.set(uri, record ?? null)\n }\n\n return map\n }\n\n // \"naive\" because this method does not verify the existence of the list itself\n // a later check in the main hydrator will remove list uris that have been deleted or\n // repurposed to \"curate lists\"\n async getProfileViewerStatesNaive(\n actors: AtIdentifierString[],\n viewer: DidString,\n ): Promise<ProfileViewerStates> {\n const map: ProfileViewerStates = new HydrationMap()\n if (!actors.length) return map\n\n // @TODO we could use \"await this.getDids(actors)\" here to resolve the\n // handles (no other code change should be needed). This was not done as\n // part of this PR to avoid changing the behavior of this method.\n const actorDids = actors.map((a) => (isDidIdentifier(a) ? a : undefined))\n\n // getRelationships requires DidString so we remove anything that isn't one\n const actorDidsDefined = Array.from(\n new Set(\n actorDids\n .filter((did) => did != null)\n // Since we special case self-relationship below, we can skip querying\n // the dataplane for the viewer's own DID if it's included in the\n // input.\n .filter((did) => did !== viewer),\n ),\n )\n\n const res = await this.dataplane.getRelationships({\n actorDid: viewer,\n targetDids: actorDidsDefined,\n })\n\n const actorToDid = new Map<AtIdentifierString, DidString | undefined>(\n actors.map((actor, i) => [actor, actorDids[i]]),\n )\n\n for (let i = 0; i < actors.length; i++) {\n const actor = actors[i]\n\n const did = actorToDid.get(actor)\n // ignore unresolved handles\n if (!did) continue\n\n if (did === viewer) {\n // ignore self-follows, self-mutes, self-blocks, self-activity-subscriptions\n map.set(actor, { did })\n continue\n }\n\n // Get the index that was used to query the relationships for this actor\n const index = actorDidsDefined.indexOf(did)\n if (index === -1) continue\n\n const rels = res.relationships[index]\n map.set(actor, {\n did,\n muted: rels.muted ?? false,\n mutedOnlyReposts: rels.mutedOnlyReposts ?? false,\n mutedOnlyQuoteposts: rels.mutedOnlyQuoteposts ?? false,\n mutedByList: parseString(rels.mutedByList),\n blockedBy: parseString(rels.blockedBy),\n blocking: parseString<AtUriString>(rels.blocking),\n blockedByList: parseString(rels.blockedByList),\n blockingByList: parseString(rels.blockingByList),\n following: parseString<AtUriString>(rels.following),\n followedBy: parseString(rels.followedBy),\n })\n }\n\n return map\n }\n\n async getKnownFollowers(\n dids: DidString[],\n viewer: DidString | null,\n ): Promise<KnownFollowersStates> {\n const map: KnownFollowersStates = new HydrationMap()\n if (!viewer) return map\n if (!dids.length) return map\n\n try {\n const { results: knownFollowersResults } =\n await this.dataplane.getFollowsFollowing(\n {\n actorDid: viewer,\n targetDids: dids,\n },\n {\n signal: AbortSignal.timeout(100),\n },\n )\n\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n\n const result = knownFollowersResults[i]?.dids\n\n map.set(\n did,\n result && result.length > 0\n ? {\n count: result.length,\n followers: result.slice(0, 5) as DidString[],\n }\n : undefined,\n )\n }\n } catch {\n // ignore errors and return empty map\n }\n\n return map\n }\n\n async getActivitySubscriptions(\n dids: DidString[],\n viewer: DidString | null,\n ): Promise<ActivitySubscriptionStates> {\n const map: ActivitySubscriptionStates = new HydrationMap()\n if (!viewer) return map\n if (!dids.length) return map\n\n try {\n const { subscriptions } =\n await this.dataplane.getActivitySubscriptionsByActorAndSubjects(\n { actorDid: viewer, subjectDids: dids },\n { signal: AbortSignal.timeout(100) },\n )\n\n for (let i = 0; i < dids.length; i++) {\n // @NOTE Although not typed as nullable, the code here used to defend\n // against potentially missing subscription objects in the response, so\n // we keep that defense in place.\n const subscription = subscriptions[i] as\n ActivitySubscription | undefined\n\n const state = {\n post: subscription?.post != null,\n reply: subscription?.reply != null,\n }\n\n const did = dids[i]!\n if (isActivitySubscriptionEnabled(state)) {\n map.set(did, state)\n } else {\n map.set(did, undefined)\n }\n }\n } catch {\n // ignore errors and return empty map\n }\n\n return map\n }\n\n async getProfileAggregates(dids: DidString[]): Promise<ProfileAggs> {\n const map: ProfileAggs = new HydrationMap()\n if (!dids.length) return map\n\n const counts = await this.dataplane.getCountsForUsers({ dids })\n for (let i = 0; i < dids.length; i++) {\n const did = dids[i]\n map.set(did, {\n followers: counts.followers[i] ?? 0,\n follows: counts.following[i] ?? 0,\n posts: counts.posts[i] ?? 0,\n lists: counts.lists[i] ?? 0,\n feeds: counts.feeds[i] ?? 0,\n starterPacks: counts.starterPacks[i] ?? 0,\n })\n }\n\n return map\n }\n}\n"]}
@@ -4,7 +4,7 @@ import type { FeatureGatesClient, ScopedFeatureGatesClient } from '../feature-ga
4
4
  import { app } from '../lexicons/index.js';
5
5
  import type { BookmarkInfo, Notification } from '../proto/bsky_pb.js';
6
6
  import type { ParsedLabelers } from '../util.js';
7
- import { type ActivitySubscriptionStates, ActorHydrator, type Actors, type KnownFollowersStates, type ProfileAggs, type ProfileViewerStates } from './actor.js';
7
+ import { type ActivitySubscriptionStates, ActorHydrator, type Actors, type KnownFollowersStates, type KnownLikersStates, type ProfileAggs, type ProfileViewerStates } from './actor.js';
8
8
  import { ExternalHydrator, type SiteStandardDocuments, type SiteStandardPublications } from './external.js';
9
9
  import { type FeedGenAggs, type FeedGenViewerStates, type FeedGens, FeedHydrator, type FeedItem, type GetPostsHydrationOptions, type Likes, type Post, type PostAggs, type PostViewerStates, type Postgates, type Posts, type Reposts, type ThreadContexts, type Threadgates } from './feed.js';
10
10
  import { type Follows, GraphHydrator, type ListAggs, type ListItems, type ListMembershipStates, type ListViewerStates, type Lists, type StarterPackAggs, type StarterPacks, type Verifications } from './graph.js';
@@ -69,6 +69,7 @@ export type HydrationState = {
69
69
  labelerViewers?: LabelerViewerStates;
70
70
  labelerAggs?: LabelerAggs;
71
71
  knownFollowers?: KnownFollowersStates;
72
+ knownLikers?: KnownLikersStates;
72
73
  activitySubscriptions?: ActivitySubscriptionStates;
73
74
  bidirectionalBlocks?: BidirectionalBlocks;
74
75
  verifications?: Verifications;
@@ -76,6 +77,15 @@ export type HydrationState = {
76
77
  siteStandardDocuments?: SiteStandardDocuments;
77
78
  siteStandardPublications?: SiteStandardPublications;
78
79
  };
80
+ type HydrateKnownLikersOptions = {
81
+ subjectUris: AtUriString[];
82
+ };
83
+ type HydratePostsOptions = Pick<GetPostsHydrationOptions, 'processDynamicTagsForView'> & {
84
+ knownLikers?: HydrateKnownLikersOptions;
85
+ };
86
+ type HydrateFeedItemsOptions = {
87
+ knownLikers?: HydrateKnownLikersOptions;
88
+ };
79
89
  export type PostBlock = {
80
90
  embed: boolean;
81
91
  parent: boolean;
@@ -128,9 +138,9 @@ export declare class Hydrator {
128
138
  hydrateListsMembership(uris: AtUriString[], did: DidString, ctx: HydrateCtx): Promise<HydrationState>;
129
139
  hydratePosts(refs: {
130
140
  uri: AtUriString;
131
- }[], ctx: HydrateCtx, state?: HydrationState, options?: Pick<GetPostsHydrationOptions, 'processDynamicTagsForView'>): Promise<HydrationState>;
141
+ }[], ctx: HydrateCtx, state?: HydrationState, options?: HydratePostsOptions): Promise<HydrationState>;
132
142
  private hydratePostBlocks;
133
- hydrateFeedItems(items: FeedItem[], ctx: HydrateCtx): Promise<HydrationState>;
143
+ hydrateFeedItems(items: FeedItem[], ctx: HydrateCtx, options?: HydrateFeedItemsOptions): Promise<HydrationState>;
134
144
  /**
135
145
  * Hydrate the state needed to build an `app.bsky.embed.external#view` for
136
146
  * a set of `site.standard.*` AT-URIs at compose-time. Filters input URIs to
@@ -138,7 +148,8 @@ export declare class Hydrator {
138
148
  * taken-down records.
139
149
  */
140
150
  hydrateEmbedExternalViewFromUris(uris: AtUriString[], ctx: HydrateCtx): Promise<HydrationState>;
141
- hydrateThreadPosts(refs: ItemRef[], ctx: HydrateCtx): Promise<HydrationState>;
151
+ hydrateThreadPosts(refs: ItemRef[], ctx: HydrateCtx, options?: Pick<HydratePostsOptions, 'knownLikers'>): Promise<HydrationState>;
152
+ private hydrateKnownLikers;
142
153
  hydrateFeedGens(uris: AtUriString[], // @TODO any way to get refs here?
143
154
  ctx: HydrateCtx): Promise<HydrationState>;
144
155
  hydrateStarterPacksBasic(uris: AtUriString[], ctx: HydrateCtx): Promise<HydrationState>;
@@ -161,4 +172,5 @@ export declare class Hydrator {
161
172
  }
162
173
  export declare const mergeStates: (stateA: HydrationState, stateB: HydrationState) => HydrationState;
163
174
  export declare const mergeManyStates: (...states: HydrationState[]) => HydrationState;
175
+ export {};
164
176
  //# sourceMappingURL=hydrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydrator.d.ts","sourceRoot":"","sources":["../../src/hydration/hydrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hydrator.d.ts","sourceRoot":"","sources":["../../src/hydration/hydrator.ts"],"names":[],"mappings":"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"}
@@ -270,6 +270,9 @@ export class Hydrator {
270
270
  // - list basic
271
271
  async hydratePosts(refs, ctx, state = {}, options = {}) {
272
272
  const uris = refs.map((ref) => ref.uri);
273
+ const knownLikersPromise = options.knownLikers
274
+ ? this.hydrateKnownLikers(options.knownLikers, ctx)
275
+ : undefined;
273
276
  state.posts ??= new HydrationMap();
274
277
  const addPostsToHydrationState = (posts) => {
275
278
  posts.forEach((post, uri) => {
@@ -361,17 +364,31 @@ export class Hydrator {
361
364
  // post-author profile fetch below; any DIDs surfaced later by the
362
365
  // dataplane are picked up by the top-up after the parallel batch.
363
366
  const ssRefDids = siteStandardRefs.map((ref) => uriToDid(ref.uri));
367
+ // Collect known-liker profiles and author-liker block relationships.
368
+ const knownLikers = await knownLikersPromise;
369
+ const knownLikerDids = [];
370
+ const authorsAndKnownLikersRelationships = [];
371
+ knownLikers?.forEach((knownLiker, uri) => {
372
+ if (!knownLiker)
373
+ return;
374
+ knownLikerDids.push(...knownLiker.actors);
375
+ const authorDid = uriToDid(uri);
376
+ for (const likerDid of knownLiker.actors) {
377
+ authorsAndKnownLikersRelationships.push([authorDid, likerDid]);
378
+ }
379
+ });
364
380
  const knownProfileDids = dedupeStrs([
365
381
  ...allPostUris.map(didFromUri),
366
382
  ...ssRefDids,
383
+ ...knownLikerDids,
367
384
  ]);
368
- const [postAggs, postViewers, labels, postBlocks, profileState, listState, feedGenState, labelerState, starterPackState, postgates, { documents: siteStandardDocuments, publications: siteStandardPublications, },] = await Promise.all([
385
+ const [postAggs, postViewers, labels, { postBlocks, additionalRelationshipsBidirectionalBlocks: authorsAndKnownLikersBidirectionalBlocks, }, profileState, listState, feedGenState, labelerState, starterPackState, postgates, { documents: siteStandardDocuments, publications: siteStandardPublications, },] = await Promise.all([
369
386
  this.feed.getPostAggregates(allRefs, ctx.viewer),
370
387
  ctx.viewer
371
388
  ? this.feed.getPostViewerStates(threadRefs, ctx.viewer)
372
389
  : undefined,
373
390
  this.label.getLabelsForSubjects([...allPostUris, ...siteStandardLabelSubjects], ctx.labelers),
374
- this.hydratePostBlocks(posts, ctx),
391
+ this.hydratePostBlocks(posts, ctx, authorsAndKnownLikersRelationships),
375
392
  this.hydrateProfiles(knownProfileDids, ctx),
376
393
  this.hydrateLists([...nestedListUris, ...threadgateListUris], ctx),
377
394
  this.hydrateFeedGens(nestedFeedGenUris, ctx),
@@ -405,6 +422,8 @@ export class Hydrator {
405
422
  postAggs,
406
423
  postViewers,
407
424
  postBlocks,
425
+ knownLikers,
426
+ bidirectionalBlocks: authorsAndKnownLikersBidirectionalBlocks,
408
427
  labels,
409
428
  threadgates,
410
429
  postgates,
@@ -413,7 +432,7 @@ export class Hydrator {
413
432
  ctx,
414
433
  });
415
434
  }
416
- async hydratePostBlocks(posts, ctx) {
435
+ async hydratePostBlocks(posts, ctx, additionalRelationships = []) {
417
436
  const postBlocks = new HydrationMap();
418
437
  const postBlocksPairs = new Map();
419
438
  const relationships = [];
@@ -446,6 +465,7 @@ export class Hydrator {
446
465
  postBlockPairs.embed = pair;
447
466
  }
448
467
  }
468
+ relationships.push(...additionalRelationships);
449
469
  // replace embed/parent/root pairs with block state
450
470
  const blocks = await this.hydrateBidirectionalBlocks(pairsToMap(relationships), ctx);
451
471
  for (const [uri, { embed, parent, root }] of postBlocksPairs) {
@@ -455,7 +475,18 @@ export class Hydrator {
455
475
  root: !!root && !!isBlocked(blocks, root),
456
476
  });
457
477
  }
458
- return postBlocks;
478
+ const additionalRelationshipsBidirectionalBlocks = new HydrationMap();
479
+ for (const [source, targets] of pairsToMap(additionalRelationships)) {
480
+ const didBlocks = new HydrationMap();
481
+ for (const target of targets) {
482
+ didBlocks.set(target, blocks.get(source)?.get(target) ?? false);
483
+ }
484
+ additionalRelationshipsBidirectionalBlocks.set(source, didBlocks);
485
+ }
486
+ return {
487
+ postBlocks,
488
+ additionalRelationshipsBidirectionalBlocks,
489
+ };
459
490
  }
460
491
  // app.bsky.feed.defs#feedViewPost
461
492
  // - post (+ replies w/ reply parent author)
@@ -472,7 +503,7 @@ export class Hydrator {
472
503
  // - list basic
473
504
  // - post
474
505
  // - ...
475
- async hydrateFeedItems(items, ctx) {
506
+ async hydrateFeedItems(items, ctx, options = {}) {
476
507
  // get posts, collect reply refs
477
508
  const posts = await this.feed.getPosts(items.map((item) => item.post.uri), ctx.includeTakedowns, undefined, undefined, {
478
509
  includeOpThreadMetadata: ctx.features.checkGate(ctx.features.Gate.OpThreadMetadataEnable),
@@ -504,6 +535,8 @@ export class Hydrator {
504
535
  const [postState, repostProfileState, reposts] = await Promise.all([
505
536
  this.hydratePosts(postAndReplyRefs, ctx, {
506
537
  posts: replies.merge(posts), // avoids refetches while preserving feed-item metadata
538
+ }, {
539
+ knownLikers: options.knownLikers,
507
540
  }),
508
541
  this.hydrateProfiles([...repostUris.map(didFromUri), ...replyParentAuthors], ctx),
509
542
  this.feed.getReposts(repostUris, ctx.includeTakedowns),
@@ -566,11 +599,12 @@ export class Hydrator {
566
599
  // - feedgen
567
600
  // - profile
568
601
  // - list basic
569
- async hydrateThreadPosts(refs, ctx) {
602
+ async hydrateThreadPosts(refs, ctx, options = {}) {
570
603
  const postsState = await this.hydratePosts(refs, ctx, undefined, {
571
604
  processDynamicTagsForView: ctx.features.checkGate(ctx.features.Gate.ThreadsReplyRankingExplorationEnable)
572
605
  ? 'thread'
573
606
  : undefined,
607
+ knownLikers: options.knownLikers,
574
608
  });
575
609
  const threadRefs = [];
576
610
  if (postsState.posts) {
@@ -587,6 +621,35 @@ export class Hydrator {
587
621
  const threadContexts = await this.feed.getThreadContexts(threadRefs);
588
622
  return mergeStates(postsState, { threadContexts });
589
623
  }
624
+ async hydrateKnownLikers(options, ctx) {
625
+ const { subjectUris } = options;
626
+ if (!ctx.viewer || subjectUris.length === 0)
627
+ return undefined;
628
+ // Fail open.
629
+ try {
630
+ const { results } = await this.dataplane.getKnownLikers({
631
+ actorDid: ctx.viewer,
632
+ subjectUris,
633
+ limit: 3,
634
+ }, { signal: AbortSignal.timeout(100) });
635
+ const knownLikers = new HydrationMap();
636
+ for (const result of results) {
637
+ const subjectUri = result.subjectUri;
638
+ const dids = result.dids;
639
+ if (result.count > 0) {
640
+ knownLikers.set(subjectUri, {
641
+ count: result.count,
642
+ actors: dids,
643
+ });
644
+ }
645
+ }
646
+ return knownLikers;
647
+ }
648
+ catch (err) {
649
+ hydrationLogger.error({ err }, 'Failed to hydrate known likers');
650
+ return undefined;
651
+ }
652
+ }
590
653
  // app.bsky.feed.defs#generatorView
591
654
  // - feedgen
592
655
  // - profile
@@ -1235,6 +1298,7 @@ export const mergeStates = (stateA, stateB) => {
1235
1298
  labelerAggs: mergeMaps(stateA.labelerAggs, stateB.labelerAggs),
1236
1299
  labelerViewers: mergeMaps(stateA.labelerViewers, stateB.labelerViewers),
1237
1300
  knownFollowers: mergeMaps(stateA.knownFollowers, stateB.knownFollowers),
1301
+ knownLikers: mergeMaps(stateA.knownLikers, stateB.knownLikers),
1238
1302
  activitySubscriptions: mergeMaps(stateA.activitySubscriptions, stateB.activitySubscriptions),
1239
1303
  bidirectionalBlocks: mergeNestedMaps(stateA.bidirectionalBlocks, stateB.bidirectionalBlocks),
1240
1304
  verifications: mergeMaps(stateA.verifications, stateB.verifications),