@atproto/bsky 0.0.195 → 0.0.197

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 (54) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
  3. package/dist/api/app/bsky/feed/searchPosts.js +18 -3
  4. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  5. package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
  6. package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -0
  7. package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
  8. package/dist/auth-verifier.d.ts.map +1 -1
  9. package/dist/auth-verifier.js +6 -1
  10. package/dist/auth-verifier.js.map +1 -1
  11. package/dist/config.d.ts +4 -0
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +10 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/feature-gates.d.ts +17 -6
  16. package/dist/feature-gates.d.ts.map +1 -1
  17. package/dist/feature-gates.js +24 -13
  18. package/dist/feature-gates.js.map +1 -1
  19. package/dist/hydration/feed.d.ts +4 -1
  20. package/dist/hydration/feed.d.ts.map +1 -1
  21. package/dist/hydration/feed.js +10 -2
  22. package/dist/hydration/feed.js.map +1 -1
  23. package/dist/hydration/hydrator.d.ts +5 -2
  24. package/dist/hydration/hydrator.d.ts.map +1 -1
  25. package/dist/hydration/hydrator.js +17 -3
  26. package/dist/hydration/hydrator.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/proto/bsky_pb.d.ts +8 -0
  31. package/dist/proto/bsky_pb.d.ts.map +1 -1
  32. package/dist/proto/bsky_pb.js +20 -0
  33. package/dist/proto/bsky_pb.js.map +1 -1
  34. package/dist/views/index.d.ts +4 -0
  35. package/dist/views/index.d.ts.map +1 -1
  36. package/dist/views/index.js +31 -8
  37. package/dist/views/index.js.map +1 -1
  38. package/dist/views/threads-v2.d.ts +3 -1
  39. package/dist/views/threads-v2.d.ts.map +1 -1
  40. package/dist/views/threads-v2.js +122 -12
  41. package/dist/views/threads-v2.js.map +1 -1
  42. package/package.json +7 -7
  43. package/proto/bsky.proto +2 -0
  44. package/src/api/app/bsky/feed/searchPosts.ts +28 -2
  45. package/src/api/app/bsky/unspecced/getPostThreadV2.ts +4 -0
  46. package/src/auth-verifier.ts +9 -1
  47. package/src/config.ts +15 -0
  48. package/src/feature-gates.ts +28 -9
  49. package/src/hydration/feed.ts +17 -1
  50. package/src/hydration/hydrator.ts +17 -1
  51. package/src/index.ts +2 -0
  52. package/src/proto/bsky_pb.ts +12 -0
  53. package/src/views/index.ts +52 -22
  54. package/src/views/threads-v2.ts +156 -13
@@ -3,13 +3,19 @@ export type Config = {
3
3
  apiKey?: string;
4
4
  env?: 'development' | 'staging' | 'production' | string;
5
5
  };
6
- export declare enum GateID {
6
+ export declare enum FeatureGateID {
7
7
  /**
8
8
  * Left here ensure this is interpreted as a string enum and therefore
9
9
  * appease TS
10
10
  */
11
- _ = ""
11
+ _ = "",
12
+ ThreadsV2ReplyRankingExploration = "threads_v2_reply_ranking_exploration",
13
+ SearchFilteringExploration = "search_filtering_exploration"
12
14
  }
15
+ /**
16
+ * Pre-evaluated feature gates map, the result of `FeatureGates.checkGates()`
17
+ */
18
+ export type CheckedFeatureGatesMap = Map<FeatureGateID, boolean>;
13
19
  /**
14
20
  * @see https://docs.statsig.com/server/nodejsServerSDK
15
21
  */
@@ -17,13 +23,18 @@ export declare class FeatureGates {
17
23
  private config;
18
24
  ready: boolean;
19
25
  private statsig;
20
- ids: typeof GateID;
26
+ ids: typeof FeatureGateID;
21
27
  constructor(config: Config);
22
28
  start(): Promise<void>;
23
29
  destroy(): void;
24
30
  user({ did }: {
25
- did: string;
26
- }): Promise<StatsigUser>;
27
- check(user: StatsigUser, gate: GateID): boolean;
31
+ did?: string;
32
+ }): StatsigUser | undefined;
33
+ check(gate: FeatureGateID, user?: StatsigUser): boolean;
34
+ /**
35
+ * Pre-evaluate multiple feature gates for a given user, returning a map of
36
+ * gate ID to boolean result.
37
+ */
38
+ checkGates(gates: FeatureGateID[], user?: StatsigUser): CheckedFeatureGatesMap;
28
39
  }
29
40
  //# sourceMappingURL=feature-gates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-gates.d.ts","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAInD,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAA;CACxD,CAAA;AAED,oBAAY,MAAM;IAChB;;;OAGG;IACH,CAAC,KAAK;CACP;AAED;;GAEG;AACH,qBAAa,YAAY;IAKX,OAAO,CAAC,MAAM;IAJ1B,KAAK,UAAQ;IACb,OAAO,CAAC,OAAO,CAAU;IACzB,GAAG,gBAAS;gBAEQ,MAAM,EAAE,MAAM;IAE5B,KAAK;IAsBX,OAAO;IAOD,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAO1D,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;CAItC"}
1
+ {"version":3,"file":"feature-gates.d.ts","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGnD,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,CAAA;CACxD,CAAA;AAED,oBAAY,aAAa;IACvB;;;OAGG;IACH,CAAC,KAAK;IACN,gCAAgC,yCAAyC;IACzE,0BAA0B,iCAAiC;CAC5D;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AAEhE;;GAEG;AACH,qBAAa,YAAY;IAKX,OAAO,CAAC,MAAM;IAJ1B,KAAK,UAAQ;IACb,OAAO,CAAC,OAAO,CAAU;IACzB,GAAG,uBAAgB;gBAEC,MAAM,EAAE,MAAM;IAE5B,KAAK;IAsBX,OAAO;IAOP,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,GAAG,SAAS;IAQxD,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO;IAMvD;;;OAGG;IACH,UAAU,CACR,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,CAAC,EAAE,WAAW,GACjB,sBAAsB;CAG1B"}
@@ -3,18 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FeatureGates = exports.GateID = void 0;
6
+ exports.FeatureGates = exports.FeatureGateID = void 0;
7
7
  const statsig_node_1 = __importDefault(require("statsig-node"));
8
- const crypto_1 = require("@atproto/crypto");
9
8
  const logger_1 = require("./logger");
10
- var GateID;
11
- (function (GateID) {
9
+ var FeatureGateID;
10
+ (function (FeatureGateID) {
12
11
  /**
13
12
  * Left here ensure this is interpreted as a string enum and therefore
14
13
  * appease TS
15
14
  */
16
- GateID["_"] = "";
17
- })(GateID || (exports.GateID = GateID = {}));
15
+ FeatureGateID["_"] = "";
16
+ FeatureGateID["ThreadsV2ReplyRankingExploration"] = "threads_v2_reply_ranking_exploration";
17
+ FeatureGateID["SearchFilteringExploration"] = "search_filtering_exploration";
18
+ })(FeatureGateID || (exports.FeatureGateID = FeatureGateID = {}));
18
19
  /**
19
20
  * @see https://docs.statsig.com/server/nodejsServerSDK
20
21
  */
@@ -42,7 +43,7 @@ class FeatureGates {
42
43
  enumerable: true,
43
44
  configurable: true,
44
45
  writable: true,
45
- value: GateID
46
+ value: FeatureGateID
46
47
  });
47
48
  }
48
49
  async start() {
@@ -73,17 +74,27 @@ class FeatureGates {
73
74
  this.statsig.shutdown();
74
75
  }
75
76
  }
76
- async user({ did }) {
77
- const userID = await (0, crypto_1.sha256Hex)(did);
78
- return {
79
- userID,
80
- };
77
+ user({ did }) {
78
+ return did
79
+ ? {
80
+ userID: did,
81
+ }
82
+ : undefined;
81
83
  }
82
- check(user, gate) {
84
+ check(gate, user) {
83
85
  if (!this.ready)
84
86
  return false;
87
+ if (!user)
88
+ return false;
85
89
  return this.statsig.checkGateSync(user, gate);
86
90
  }
91
+ /**
92
+ * Pre-evaluate multiple feature gates for a given user, returning a map of
93
+ * gate ID to boolean result.
94
+ */
95
+ checkGates(gates, user) {
96
+ return new Map(gates.map((g) => [g, this.check(g, user)]));
97
+ }
87
98
  }
88
99
  exports.FeatureGates = FeatureGates;
89
100
  //# sourceMappingURL=feature-gates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-gates.js","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAmD;AACnD,4CAA2C;AAC3C,qCAA6C;AAO7C,IAAY,MAMX;AAND,WAAY,MAAM;IAChB;;;OAGG;IACH,gBAAM,CAAA;AACR,CAAC,EANW,MAAM,sBAAN,MAAM,QAMjB;AAED;;GAEG;AACH,MAAa,YAAY;IAKvB,YAAoB,MAAc;QAAtB;;;;mBAAQ,MAAM;WAAQ;QAJlC;;;;mBAAQ,KAAK;WAAA;QACL;;;;mBAAU,sBAAO;WAAA;QACzB;;;;mBAAM,MAAM;WAAA;IAEyB,CAAC;IAEtC,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvB;;;;mBAIG;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAChD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM;oBACrC,WAAW,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,aAAa;qBACvC;iBACF,CAAC,CAAA;gBACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACnB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2BAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAA;YACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAmB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAS,EAAC,GAAG,CAAC,CAAA;QACnC,OAAO;YACL,MAAM;SACP,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAiB,EAAE,IAAY;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;CACF;AA/CD,oCA+CC","sourcesContent":["import Statsig, { StatsigUser } from 'statsig-node'\nimport { sha256Hex } from '@atproto/crypto'\nimport { featureGatesLogger } from './logger'\n\nexport type Config = {\n apiKey?: string\n env?: 'development' | 'staging' | 'production' | string\n}\n\nexport enum GateID {\n /**\n * Left here ensure this is interpreted as a string enum and therefore\n * appease TS\n */\n _ = '',\n}\n\n/**\n * @see https://docs.statsig.com/server/nodejsServerSDK\n */\nexport class FeatureGates {\n ready = false\n private statsig = Statsig\n ids = GateID\n\n constructor(private config: Config) {}\n\n async start() {\n try {\n if (this.config.apiKey) {\n /**\n * Special handling in test mode, see {@link ServerConfig}\n *\n * {@link https://docs.statsig.com/server/nodejsServerSDK#local-overrides}\n */\n await this.statsig.initialize(this.config.apiKey, {\n localMode: this.config.env === 'test',\n environment: {\n tier: this.config.env || 'development',\n },\n })\n this.ready = true\n }\n } catch (err) {\n featureGatesLogger.error({ err }, 'Failed to initialize StatSig')\n this.ready = false\n }\n }\n\n destroy() {\n if (this.ready) {\n this.ready = false\n this.statsig.shutdown()\n }\n }\n\n async user({ did }: { did: string }): Promise<StatsigUser> {\n const userID = await sha256Hex(did)\n return {\n userID,\n }\n }\n\n check(user: StatsigUser, gate: GateID) {\n if (!this.ready) return false\n return this.statsig.checkGateSync(user, gate)\n }\n}\n"]}
1
+ {"version":3,"file":"feature-gates.js","sourceRoot":"","sources":["../src/feature-gates.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAmD;AACnD,qCAA6C;AAO7C,IAAY,aAQX;AARD,WAAY,aAAa;IACvB;;;OAGG;IACH,uBAAM,CAAA;IACN,0FAAyE,CAAA;IACzE,4EAA2D,CAAA;AAC7D,CAAC,EARW,aAAa,6BAAb,aAAa,QAQxB;AAOD;;GAEG;AACH,MAAa,YAAY;IAKvB,YAAoB,MAAc;QAAtB;;;;mBAAQ,MAAM;WAAQ;QAJlC;;;;mBAAQ,KAAK;WAAA;QACL;;;;mBAAU,sBAAO;WAAA;QACzB;;;;mBAAM,aAAa;WAAA;IAEkB,CAAC;IAEtC,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACvB;;;;mBAIG;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAChD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM;oBACrC,WAAW,EAAE;wBACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,aAAa;qBACvC;iBACF,CAAC,CAAA;gBACF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACnB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2BAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAA;YACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,EAAE,GAAG,EAAoB;QAC5B,OAAO,GAAG;YACR,CAAC,CAAC;gBACE,MAAM,EAAE,GAAG;aACZ;YACH,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAmB,EAAE,IAAkB;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC;IAED;;;OAGG;IACH,UAAU,CACR,KAAsB,EACtB,IAAkB;QAElB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5D,CAAC;CACF;AA5DD,oCA4DC","sourcesContent":["import Statsig, { StatsigUser } from 'statsig-node'\nimport { featureGatesLogger } from './logger'\n\nexport type Config = {\n apiKey?: string\n env?: 'development' | 'staging' | 'production' | string\n}\n\nexport enum FeatureGateID {\n /**\n * Left here ensure this is interpreted as a string enum and therefore\n * appease TS\n */\n _ = '',\n ThreadsV2ReplyRankingExploration = 'threads_v2_reply_ranking_exploration',\n SearchFilteringExploration = 'search_filtering_exploration',\n}\n\n/**\n * Pre-evaluated feature gates map, the result of `FeatureGates.checkGates()`\n */\nexport type CheckedFeatureGatesMap = Map<FeatureGateID, boolean>\n\n/**\n * @see https://docs.statsig.com/server/nodejsServerSDK\n */\nexport class FeatureGates {\n ready = false\n private statsig = Statsig\n ids = FeatureGateID\n\n constructor(private config: Config) {}\n\n async start() {\n try {\n if (this.config.apiKey) {\n /**\n * Special handling in test mode, see {@link ServerConfig}\n *\n * {@link https://docs.statsig.com/server/nodejsServerSDK#local-overrides}\n */\n await this.statsig.initialize(this.config.apiKey, {\n localMode: this.config.env === 'test',\n environment: {\n tier: this.config.env || 'development',\n },\n })\n this.ready = true\n }\n } catch (err) {\n featureGatesLogger.error({ err }, 'Failed to initialize StatSig')\n this.ready = false\n }\n }\n\n destroy() {\n if (this.ready) {\n this.ready = false\n this.statsig.shutdown()\n }\n }\n\n user({ did }: { did?: string }): StatsigUser | undefined {\n return did\n ? {\n userID: did,\n }\n : undefined\n }\n\n check(gate: FeatureGateID, user?: StatsigUser): boolean {\n if (!this.ready) return false\n if (!user) return false\n return this.statsig.checkGateSync(user, gate)\n }\n\n /**\n * Pre-evaluate multiple feature gates for a given user, returning a map of\n * gate ID to boolean result.\n */\n checkGates(\n gates: FeatureGateID[],\n user?: StatsigUser,\n ): CheckedFeatureGatesMap {\n return new Map(gates.map((g) => [g, this.check(g, user)]))\n }\n}\n"]}
@@ -70,10 +70,13 @@ export type FeedItem = {
70
70
  */
71
71
  authorPinned?: boolean;
72
72
  };
73
+ export type GetPostsHydrationOptions = {
74
+ processDynamicTagsForView?: 'thread' | 'search';
75
+ };
73
76
  export declare class FeedHydrator {
74
77
  dataplane: DataPlaneClient;
75
78
  constructor(dataplane: DataPlaneClient);
76
- getPosts(uris: string[], includeTakedowns?: boolean, given?: HydrationMap<Post>): Promise<Posts>;
79
+ getPosts(uris: string[], includeTakedowns?: boolean, given?: HydrationMap<Post>, viewer?: string | null, options?: GetPostsHydrationOptions): Promise<Posts>;
77
80
  getPostViewerStates(refs: ThreadRef[], viewer: string): Promise<PostViewerStates>;
78
81
  private getThreadMutes;
79
82
  getThreadContexts(refs: ThreadRef[]): Promise<ThreadContexts>;
@@ -1 +1 @@
1
- {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/hydration/feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,0CAA0C,CAAA;AAClF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAMtF,OAAO,EACL,YAAY,EACZ,OAAO,EACP,UAAU,EAIX,MAAM,QAAQ,CAAA;AAEf,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG;IAC1C,kBAAkB,EAAE,OAAO,CAAA;IAC3B,sBAAsB,EAAE,OAAO,CAAA;IAC/B,aAAa,EAAE,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;IACpB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;CACF,CAAA;AACD,MAAM,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;AAEtC,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG;IAE1B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;AAExD,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;AAE5C,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AACzC,MAAM,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;AAEtC,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;AAC7C,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;AAE1C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;AAElD,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;AAC/C,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;AACrD,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;AAClD,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;AACjD,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;AAE9C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAIxD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,qBAAa,YAAY;IACJ,SAAS,EAAE,eAAe;gBAA1B,SAAS,EAAE,eAAe;IAEvC,QAAQ,CACZ,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,UAAQ,EACxB,KAAK,qBAA2B,GAC/B,OAAO,CAAC,KAAK,CAAC;IAiCX,mBAAmB,CACvB,IAAI,EAAE,SAAS,EAAE,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC;YA8Bd,cAAc;IActB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAuC7D,iBAAiB,CACrB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,QAAQ,CAAC;IAiBd,WAAW,CACf,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,UAAQ,GACvB,OAAO,CAAC,QAAQ,CAAC;IAYd,sBAAsB,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC;IAazB,oBAAoB,CACxB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,WAAW,CAAC;IAajB,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,gBAAgB,UAAQ,GACvB,OAAO,CAAC,WAAW,CAAC;IAMjB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,UAAQ,GACvB,OAAO,CAAC,WAAW,CAAC;IAWjB,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAAE,EAClB,gBAAgB,UAAQ,GACvB,OAAO,CAAC,SAAS,CAAC;IAMf,kBAAkB,CACtB,IAAI,EAAE,MAAM,EAAE,EACd,gBAAgB,UAAQ,GACvB,OAAO,CAAC,SAAS,CAAC;IAWf,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,gBAAgB,UAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IASlE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,gBAAgB,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAQ7E"}
1
+ {"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/hydration/feed.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,20 @@ class FeedHydrator {
13
13
  value: dataplane
14
14
  });
15
15
  }
16
- async getPosts(uris, includeTakedowns = false, given = new util_1.HydrationMap()) {
16
+ async getPosts(uris, includeTakedowns = false, given = new util_1.HydrationMap(), viewer, options = {}) {
17
17
  const [have, need] = (0, util_1.split)(uris, (uri) => given.has(uri));
18
18
  const base = have.reduce((acc, uri) => acc.set(uri, given.get(uri) ?? null), new util_1.HydrationMap());
19
19
  if (!need.length)
20
20
  return base;
21
- const res = await this.dataplane.getPostRecords({ uris: need });
21
+ const res = await this.dataplane.getPostRecords(options.processDynamicTagsForView
22
+ ? {
23
+ uris: need,
24
+ viewerDid: viewer ?? undefined,
25
+ processDynamicTagsForView: options.processDynamicTagsForView,
26
+ }
27
+ : {
28
+ uris: need,
29
+ });
22
30
  return need.reduce((acc, uri, i) => {
23
31
  const record = (0, util_1.parseRecord)(res.records[i], includeTakedowns);
24
32
  const violatesThreadGate = res.meta[i].violatesThreadGate;
@@ -1 +1 @@
1
- {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/hydration/feed.ts"],"names":[],"mappings":"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","sourcesContent":["import { dedupeStrs } from '@atproto/common'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { Record as FeedGenRecord } from '../lexicon/types/app/bsky/feed/generator'\nimport { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like'\nimport { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post'\nimport { Record as PostgateRecord } from '../lexicon/types/app/bsky/feed/postgate'\nimport { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost'\nimport { Record as ThreadgateRecord } from '../lexicon/types/app/bsky/feed/threadgate'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n uriToDid as didFromUri,\n} from '../util/uris'\nimport {\n HydrationMap,\n ItemRef,\n RecordInfo,\n parseRecord,\n parseString,\n split,\n} from './util'\n\nexport type Post = RecordInfo<PostRecord> & {\n violatesThreadGate: boolean\n violatesEmbeddingRules: boolean\n hasThreadGate: boolean\n hasPostGate: boolean\n tags: Set<string>\n /**\n * Debug information for internal development\n */\n debug?: {\n tags?: string[]\n [key: string]: unknown\n }\n}\nexport type Posts = HydrationMap<Post>\n\nexport type PostViewerState = {\n like?: string\n repost?: string\n bookmarked?: boolean\n threadMuted?: boolean\n}\n\nexport type PostViewerStates = HydrationMap<PostViewerState>\n\nexport type ThreadContext = {\n // Whether the root author has liked the post.\n like?: string\n}\n\nexport type ThreadContexts = HydrationMap<ThreadContext>\n\nexport type PostAgg = {\n likes: number\n replies: number\n reposts: number\n quotes: number\n bookmarks: number\n}\n\nexport type PostAggs = HydrationMap<PostAgg>\n\nexport type Like = RecordInfo<LikeRecord>\nexport type Likes = HydrationMap<Like>\n\nexport type Repost = RecordInfo<RepostRecord>\nexport type Reposts = HydrationMap<Repost>\n\nexport type FeedGenAgg = {\n likes: number\n}\n\nexport type FeedGenAggs = HydrationMap<FeedGenAgg>\n\nexport type FeedGen = RecordInfo<FeedGenRecord>\nexport type FeedGens = HydrationMap<FeedGen>\n\nexport type FeedGenViewerState = {\n like?: string\n}\n\nexport type FeedGenViewerStates = HydrationMap<FeedGenViewerState>\n\nexport type Threadgate = RecordInfo<ThreadgateRecord>\nexport type Threadgates = HydrationMap<Threadgate>\nexport type Postgate = RecordInfo<PostgateRecord>\nexport type Postgates = HydrationMap<Postgate>\n\nexport type ThreadRef = ItemRef & { threadRoot: string }\n\n// @NOTE the feed item types in the protos for author feeds and timelines\n// technically have additional fields, not supported by the mock dataplane.\nexport type FeedItem = {\n post: ItemRef\n repost?: ItemRef\n /**\n * If true, overrides the `reason` with `app.bsky.feed.defs#reasonPin`. Used\n * only in author feeds.\n */\n authorPinned?: boolean\n}\n\nexport class FeedHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getPosts(\n uris: string[],\n includeTakedowns = false,\n given = new HydrationMap<Post>(),\n ): Promise<Posts> {\n const [have, need] = split(uris, (uri) => given.has(uri))\n const base = have.reduce(\n (acc, uri) => acc.set(uri, given.get(uri) ?? null),\n new HydrationMap<Post>(),\n )\n if (!need.length) return base\n const res = await this.dataplane.getPostRecords({ uris: need })\n return need.reduce((acc, uri, i) => {\n const record = parseRecord<PostRecord>(res.records[i], includeTakedowns)\n const violatesThreadGate = res.meta[i].violatesThreadGate\n const violatesEmbeddingRules = res.meta[i].violatesEmbeddingRules\n const hasThreadGate = res.meta[i].hasThreadGate\n const hasPostGate = res.meta[i].hasPostGate\n const tags = new Set<string>(res.records[i].tags ?? [])\n const debug = { tags: Array.from(tags) }\n return acc.set(\n uri,\n record\n ? {\n ...record,\n violatesThreadGate,\n violatesEmbeddingRules,\n hasThreadGate,\n hasPostGate,\n tags,\n debug,\n }\n : null,\n )\n }, base)\n }\n\n async getPostViewerStates(\n refs: ThreadRef[],\n viewer: string,\n ): Promise<PostViewerStates> {\n if (!refs.length) return new HydrationMap<PostViewerState>()\n const threadRoots = refs.map((r) => r.threadRoot)\n const [likes, reposts, bookmarks, threadMutesMap] = await Promise.all([\n this.dataplane.getLikesByActorAndSubjects({\n actorDid: viewer,\n refs,\n }),\n this.dataplane.getRepostsByActorAndSubjects({\n actorDid: viewer,\n refs,\n }),\n this.dataplane.getBookmarksByActorAndSubjects({\n actorDid: viewer,\n uris: refs.map((r) => r.uri),\n }),\n this.getThreadMutes(threadRoots, viewer),\n ])\n return refs.reduce((acc, { uri, threadRoot }, i) => {\n return acc.set(uri, {\n like: parseString(likes.uris[i]),\n repost: parseString(reposts.uris[i]),\n // @NOTE: The dataplane contract is that the array position will be present,\n // but the optional chaining is to ensure it works regardless of the dataplane being update to provide the data.\n bookmarked: !!bookmarks.bookmarks.at(i)?.ref?.key,\n threadMuted: threadMutesMap.get(threadRoot) ?? false,\n })\n }, new HydrationMap<PostViewerState>())\n }\n\n private async getThreadMutes(\n threadRoots: string[],\n viewer: string,\n ): Promise<Map<string, boolean>> {\n const deduped = dedupeStrs(threadRoots)\n const threadMutes = await this.dataplane.getThreadMutesOnSubjects({\n actorDid: viewer,\n threadRoots: deduped,\n })\n return deduped.reduce((acc, cur, i) => {\n return acc.set(cur, threadMutes.muted[i] ?? false)\n }, new Map<string, boolean>())\n }\n\n async getThreadContexts(refs: ThreadRef[]): Promise<ThreadContexts> {\n if (!refs.length) return new HydrationMap<ThreadContext>()\n\n const refsByRootAuthor = refs.reduce((acc, ref) => {\n const { threadRoot } = ref\n const rootAuthor = didFromUri(threadRoot)\n const existingValue = acc.get(rootAuthor) ?? []\n return acc.set(rootAuthor, [...existingValue, ref])\n }, new Map<string, ThreadRef[]>())\n const refsByRootAuthorEntries = Array.from(refsByRootAuthor.entries())\n\n const likesPromises = refsByRootAuthorEntries.map(\n ([rootAuthor, refsForAuthor]) =>\n this.dataplane.getLikesByActorAndSubjects({\n actorDid: rootAuthor,\n refs: refsForAuthor.map(({ uri, cid }) => ({ uri, cid })),\n }),\n )\n\n const rootAuthorsLikes = await Promise.all(likesPromises)\n\n const likesByUri = refsByRootAuthorEntries.reduce(\n (acc, [_rootAuthor, refsForAuthor], i) => {\n const likesForRootAuthor = rootAuthorsLikes[i]\n refsForAuthor.forEach(({ uri }, j) => {\n acc.set(uri, likesForRootAuthor.uris[j])\n })\n return acc\n },\n new Map<string, string>(),\n )\n\n return refs.reduce((acc, { uri }) => {\n return acc.set(uri, {\n like: parseString(likesByUri.get(uri)),\n })\n }, new HydrationMap<ThreadContext>())\n }\n\n async getPostAggregates(\n refs: ItemRef[],\n viewer: string | null,\n ): Promise<PostAggs> {\n if (!refs.length) return new HydrationMap<PostAgg>()\n const counts = await this.dataplane.getInteractionCounts({\n refs,\n skipCacheForDids: viewer ? [viewer] : undefined,\n })\n return refs.reduce((acc, { uri }, i) => {\n return acc.set(uri, {\n likes: counts.likes[i] ?? 0,\n reposts: counts.reposts[i] ?? 0,\n replies: counts.replies[i] ?? 0,\n quotes: counts.quotes[i] ?? 0,\n bookmarks: counts.bookmarks[i] ?? 0,\n })\n }, new HydrationMap<PostAgg>())\n }\n\n async getFeedGens(\n uris: string[],\n includeTakedowns = false,\n ): Promise<FeedGens> {\n if (!uris.length) return new HydrationMap<FeedGen>()\n const res = await this.dataplane.getFeedGeneratorRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<FeedGenRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<FeedGen>())\n }\n\n async getFeedGenViewerStates(\n uris: string[],\n viewer: string,\n ): Promise<FeedGenViewerStates> {\n if (!uris.length) return new HydrationMap<FeedGenViewerState>()\n const likes = await this.dataplane.getLikesByActorAndSubjects({\n actorDid: viewer,\n refs: uris.map((uri) => ({ uri })),\n })\n return uris.reduce((acc, uri, i) => {\n return acc.set(uri, {\n like: parseString(likes.uris[i]),\n })\n }, new HydrationMap<FeedGenViewerState>())\n }\n\n async getFeedGenAggregates(\n refs: ItemRef[],\n viewer: string | null,\n ): Promise<FeedGenAggs> {\n if (!refs.length) return new HydrationMap<FeedGenAgg>()\n const counts = await this.dataplane.getInteractionCounts({\n refs,\n skipCacheForDids: viewer ? [viewer] : undefined,\n })\n return refs.reduce((acc, { uri }, i) => {\n return acc.set(uri, {\n likes: counts.likes[i] ?? 0,\n })\n }, new HydrationMap<FeedGenAgg>())\n }\n\n async getThreadgatesForPosts(\n postUris: string[],\n includeTakedowns = false,\n ): Promise<Threadgates> {\n if (!postUris.length) return new HydrationMap<Threadgate>()\n const uris = postUris.map(postUriToThreadgateUri)\n return this.getThreadgateRecords(uris, includeTakedowns)\n }\n\n async getThreadgateRecords(\n uris: string[],\n includeTakedowns = false,\n ): Promise<Threadgates> {\n const res = await this.dataplane.getThreadGateRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<ThreadgateRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Threadgate>())\n }\n\n async getPostgatesForPosts(\n postUris: string[],\n includeTakedowns = false,\n ): Promise<Postgates> {\n if (!postUris.length) return new HydrationMap<Postgate>()\n const uris = postUris.map(postUriToPostgateUri)\n return this.getPostgateRecords(uris, includeTakedowns)\n }\n\n async getPostgateRecords(\n uris: string[],\n includeTakedowns = false,\n ): Promise<Postgates> {\n const res = await this.dataplane.getPostgateRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<PostgateRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Postgate>())\n }\n\n async getLikes(uris: string[], includeTakedowns = false): Promise<Likes> {\n if (!uris.length) return new HydrationMap<Like>()\n const res = await this.dataplane.getLikeRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<LikeRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Like>())\n }\n\n async getReposts(uris: string[], includeTakedowns = false): Promise<Reposts> {\n if (!uris.length) return new HydrationMap<Repost>()\n const res = await this.dataplane.getRepostRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<RepostRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Repost>())\n }\n}\n"]}
1
+ {"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/hydration/feed.ts"],"names":[],"mappings":"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","sourcesContent":["import { dedupeStrs } from '@atproto/common'\nimport { DataPlaneClient } from '../data-plane/client'\nimport { Record as FeedGenRecord } from '../lexicon/types/app/bsky/feed/generator'\nimport { Record as LikeRecord } from '../lexicon/types/app/bsky/feed/like'\nimport { Record as PostRecord } from '../lexicon/types/app/bsky/feed/post'\nimport { Record as PostgateRecord } from '../lexicon/types/app/bsky/feed/postgate'\nimport { Record as RepostRecord } from '../lexicon/types/app/bsky/feed/repost'\nimport { Record as ThreadgateRecord } from '../lexicon/types/app/bsky/feed/threadgate'\nimport {\n postUriToPostgateUri,\n postUriToThreadgateUri,\n uriToDid as didFromUri,\n} from '../util/uris'\nimport {\n HydrationMap,\n ItemRef,\n RecordInfo,\n parseRecord,\n parseString,\n split,\n} from './util'\n\nexport type Post = RecordInfo<PostRecord> & {\n violatesThreadGate: boolean\n violatesEmbeddingRules: boolean\n hasThreadGate: boolean\n hasPostGate: boolean\n tags: Set<string>\n /**\n * Debug information for internal development\n */\n debug?: {\n tags?: string[]\n [key: string]: unknown\n }\n}\nexport type Posts = HydrationMap<Post>\n\nexport type PostViewerState = {\n like?: string\n repost?: string\n bookmarked?: boolean\n threadMuted?: boolean\n}\n\nexport type PostViewerStates = HydrationMap<PostViewerState>\n\nexport type ThreadContext = {\n // Whether the root author has liked the post.\n like?: string\n}\n\nexport type ThreadContexts = HydrationMap<ThreadContext>\n\nexport type PostAgg = {\n likes: number\n replies: number\n reposts: number\n quotes: number\n bookmarks: number\n}\n\nexport type PostAggs = HydrationMap<PostAgg>\n\nexport type Like = RecordInfo<LikeRecord>\nexport type Likes = HydrationMap<Like>\n\nexport type Repost = RecordInfo<RepostRecord>\nexport type Reposts = HydrationMap<Repost>\n\nexport type FeedGenAgg = {\n likes: number\n}\n\nexport type FeedGenAggs = HydrationMap<FeedGenAgg>\n\nexport type FeedGen = RecordInfo<FeedGenRecord>\nexport type FeedGens = HydrationMap<FeedGen>\n\nexport type FeedGenViewerState = {\n like?: string\n}\n\nexport type FeedGenViewerStates = HydrationMap<FeedGenViewerState>\n\nexport type Threadgate = RecordInfo<ThreadgateRecord>\nexport type Threadgates = HydrationMap<Threadgate>\nexport type Postgate = RecordInfo<PostgateRecord>\nexport type Postgates = HydrationMap<Postgate>\n\nexport type ThreadRef = ItemRef & { threadRoot: string }\n\n// @NOTE the feed item types in the protos for author feeds and timelines\n// technically have additional fields, not supported by the mock dataplane.\nexport type FeedItem = {\n post: ItemRef\n repost?: ItemRef\n /**\n * If true, overrides the `reason` with `app.bsky.feed.defs#reasonPin`. Used\n * only in author feeds.\n */\n authorPinned?: boolean\n}\n\nexport type GetPostsHydrationOptions = {\n processDynamicTagsForView?: 'thread' | 'search'\n}\n\nexport class FeedHydrator {\n constructor(public dataplane: DataPlaneClient) {}\n\n async getPosts(\n uris: string[],\n includeTakedowns = false,\n given = new HydrationMap<Post>(),\n viewer?: string | null,\n options: GetPostsHydrationOptions = {},\n ): Promise<Posts> {\n const [have, need] = split(uris, (uri) => given.has(uri))\n const base = have.reduce(\n (acc, uri) => acc.set(uri, given.get(uri) ?? null),\n new HydrationMap<Post>(),\n )\n if (!need.length) return base\n const res = await this.dataplane.getPostRecords(\n options.processDynamicTagsForView\n ? {\n uris: need,\n viewerDid: viewer ?? undefined,\n processDynamicTagsForView: options.processDynamicTagsForView,\n }\n : {\n uris: need,\n },\n )\n return need.reduce((acc, uri, i) => {\n const record = parseRecord<PostRecord>(res.records[i], includeTakedowns)\n const violatesThreadGate = res.meta[i].violatesThreadGate\n const violatesEmbeddingRules = res.meta[i].violatesEmbeddingRules\n const hasThreadGate = res.meta[i].hasThreadGate\n const hasPostGate = res.meta[i].hasPostGate\n const tags = new Set<string>(res.records[i].tags ?? [])\n const debug = { tags: Array.from(tags) }\n return acc.set(\n uri,\n record\n ? {\n ...record,\n violatesThreadGate,\n violatesEmbeddingRules,\n hasThreadGate,\n hasPostGate,\n tags,\n debug,\n }\n : null,\n )\n }, base)\n }\n\n async getPostViewerStates(\n refs: ThreadRef[],\n viewer: string,\n ): Promise<PostViewerStates> {\n if (!refs.length) return new HydrationMap<PostViewerState>()\n const threadRoots = refs.map((r) => r.threadRoot)\n const [likes, reposts, bookmarks, threadMutesMap] = await Promise.all([\n this.dataplane.getLikesByActorAndSubjects({\n actorDid: viewer,\n refs,\n }),\n this.dataplane.getRepostsByActorAndSubjects({\n actorDid: viewer,\n refs,\n }),\n this.dataplane.getBookmarksByActorAndSubjects({\n actorDid: viewer,\n uris: refs.map((r) => r.uri),\n }),\n this.getThreadMutes(threadRoots, viewer),\n ])\n return refs.reduce((acc, { uri, threadRoot }, i) => {\n return acc.set(uri, {\n like: parseString(likes.uris[i]),\n repost: parseString(reposts.uris[i]),\n // @NOTE: The dataplane contract is that the array position will be present,\n // but the optional chaining is to ensure it works regardless of the dataplane being update to provide the data.\n bookmarked: !!bookmarks.bookmarks.at(i)?.ref?.key,\n threadMuted: threadMutesMap.get(threadRoot) ?? false,\n })\n }, new HydrationMap<PostViewerState>())\n }\n\n private async getThreadMutes(\n threadRoots: string[],\n viewer: string,\n ): Promise<Map<string, boolean>> {\n const deduped = dedupeStrs(threadRoots)\n const threadMutes = await this.dataplane.getThreadMutesOnSubjects({\n actorDid: viewer,\n threadRoots: deduped,\n })\n return deduped.reduce((acc, cur, i) => {\n return acc.set(cur, threadMutes.muted[i] ?? false)\n }, new Map<string, boolean>())\n }\n\n async getThreadContexts(refs: ThreadRef[]): Promise<ThreadContexts> {\n if (!refs.length) return new HydrationMap<ThreadContext>()\n\n const refsByRootAuthor = refs.reduce((acc, ref) => {\n const { threadRoot } = ref\n const rootAuthor = didFromUri(threadRoot)\n const existingValue = acc.get(rootAuthor) ?? []\n return acc.set(rootAuthor, [...existingValue, ref])\n }, new Map<string, ThreadRef[]>())\n const refsByRootAuthorEntries = Array.from(refsByRootAuthor.entries())\n\n const likesPromises = refsByRootAuthorEntries.map(\n ([rootAuthor, refsForAuthor]) =>\n this.dataplane.getLikesByActorAndSubjects({\n actorDid: rootAuthor,\n refs: refsForAuthor.map(({ uri, cid }) => ({ uri, cid })),\n }),\n )\n\n const rootAuthorsLikes = await Promise.all(likesPromises)\n\n const likesByUri = refsByRootAuthorEntries.reduce(\n (acc, [_rootAuthor, refsForAuthor], i) => {\n const likesForRootAuthor = rootAuthorsLikes[i]\n refsForAuthor.forEach(({ uri }, j) => {\n acc.set(uri, likesForRootAuthor.uris[j])\n })\n return acc\n },\n new Map<string, string>(),\n )\n\n return refs.reduce((acc, { uri }) => {\n return acc.set(uri, {\n like: parseString(likesByUri.get(uri)),\n })\n }, new HydrationMap<ThreadContext>())\n }\n\n async getPostAggregates(\n refs: ItemRef[],\n viewer: string | null,\n ): Promise<PostAggs> {\n if (!refs.length) return new HydrationMap<PostAgg>()\n const counts = await this.dataplane.getInteractionCounts({\n refs,\n skipCacheForDids: viewer ? [viewer] : undefined,\n })\n return refs.reduce((acc, { uri }, i) => {\n return acc.set(uri, {\n likes: counts.likes[i] ?? 0,\n reposts: counts.reposts[i] ?? 0,\n replies: counts.replies[i] ?? 0,\n quotes: counts.quotes[i] ?? 0,\n bookmarks: counts.bookmarks[i] ?? 0,\n })\n }, new HydrationMap<PostAgg>())\n }\n\n async getFeedGens(\n uris: string[],\n includeTakedowns = false,\n ): Promise<FeedGens> {\n if (!uris.length) return new HydrationMap<FeedGen>()\n const res = await this.dataplane.getFeedGeneratorRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<FeedGenRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<FeedGen>())\n }\n\n async getFeedGenViewerStates(\n uris: string[],\n viewer: string,\n ): Promise<FeedGenViewerStates> {\n if (!uris.length) return new HydrationMap<FeedGenViewerState>()\n const likes = await this.dataplane.getLikesByActorAndSubjects({\n actorDid: viewer,\n refs: uris.map((uri) => ({ uri })),\n })\n return uris.reduce((acc, uri, i) => {\n return acc.set(uri, {\n like: parseString(likes.uris[i]),\n })\n }, new HydrationMap<FeedGenViewerState>())\n }\n\n async getFeedGenAggregates(\n refs: ItemRef[],\n viewer: string | null,\n ): Promise<FeedGenAggs> {\n if (!refs.length) return new HydrationMap<FeedGenAgg>()\n const counts = await this.dataplane.getInteractionCounts({\n refs,\n skipCacheForDids: viewer ? [viewer] : undefined,\n })\n return refs.reduce((acc, { uri }, i) => {\n return acc.set(uri, {\n likes: counts.likes[i] ?? 0,\n })\n }, new HydrationMap<FeedGenAgg>())\n }\n\n async getThreadgatesForPosts(\n postUris: string[],\n includeTakedowns = false,\n ): Promise<Threadgates> {\n if (!postUris.length) return new HydrationMap<Threadgate>()\n const uris = postUris.map(postUriToThreadgateUri)\n return this.getThreadgateRecords(uris, includeTakedowns)\n }\n\n async getThreadgateRecords(\n uris: string[],\n includeTakedowns = false,\n ): Promise<Threadgates> {\n const res = await this.dataplane.getThreadGateRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<ThreadgateRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Threadgate>())\n }\n\n async getPostgatesForPosts(\n postUris: string[],\n includeTakedowns = false,\n ): Promise<Postgates> {\n if (!postUris.length) return new HydrationMap<Postgate>()\n const uris = postUris.map(postUriToPostgateUri)\n return this.getPostgateRecords(uris, includeTakedowns)\n }\n\n async getPostgateRecords(\n uris: string[],\n includeTakedowns = false,\n ): Promise<Postgates> {\n const res = await this.dataplane.getPostgateRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<PostgateRecord>(\n res.records[i],\n includeTakedowns,\n )\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Postgate>())\n }\n\n async getLikes(uris: string[], includeTakedowns = false): Promise<Likes> {\n if (!uris.length) return new HydrationMap<Like>()\n const res = await this.dataplane.getLikeRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<LikeRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Like>())\n }\n\n async getReposts(uris: string[], includeTakedowns = false): Promise<Reposts> {\n if (!uris.length) return new HydrationMap<Repost>()\n const res = await this.dataplane.getRepostRecords({ uris })\n return uris.reduce((acc, uri, i) => {\n const record = parseRecord<RepostRecord>(res.records[i], includeTakedowns)\n return acc.set(uri, record ?? null)\n }, new HydrationMap<Repost>())\n }\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  import { DataPlaneClient } from '../data-plane/client';
2
+ import { type CheckedFeatureGatesMap } from '../feature-gates';
2
3
  import { Record as ProfileRecord } from '../lexicon/types/app/bsky/actor/profile';
3
4
  import { Bookmark, BookmarkInfo, Notification } from '../proto/bsky_pb';
4
5
  import { ParsedLabelers } from '../util';
5
6
  import { ActivitySubscriptionStates, ActorHydrator, Actors, KnownFollowersStates, ProfileAggs, ProfileViewerStates } from './actor';
6
- import { FeedGenAggs, FeedGenViewerStates, FeedGens, FeedHydrator, FeedItem, Likes, Post, PostAggs, PostViewerStates, Postgates, Posts, Reposts, ThreadContexts, Threadgates } from './feed';
7
+ import { FeedGenAggs, FeedGenViewerStates, FeedGens, FeedHydrator, FeedItem, type GetPostsHydrationOptions, Likes, Post, PostAggs, PostViewerStates, Postgates, Posts, Reposts, ThreadContexts, Threadgates } from './feed';
7
8
  import { Follows, GraphHydrator, ListAggs, ListItems, ListMembershipStates, ListViewerStates, Lists, StarterPackAggs, StarterPacks, Verifications } from './graph';
8
9
  import { LabelHydrator, LabelerAggs, LabelerViewerStates, Labelers, Labels } from './label';
9
10
  import { HydrationMap, ItemRef, RecordInfo } from './util';
@@ -15,6 +16,7 @@ export declare class HydrateCtx {
15
16
  includeActorTakedowns: boolean | undefined;
16
17
  include3pBlocks: boolean | undefined;
17
18
  includeDebugField: boolean | undefined;
19
+ featureGates: CheckedFeatureGatesMap;
18
20
  constructor(vals: HydrateCtxVals);
19
21
  get skipCacheForViewer(): string[] | undefined;
20
22
  copy<V extends Partial<HydrateCtxVals>>(vals?: V): HydrateCtx & V;
@@ -26,6 +28,7 @@ export type HydrateCtxVals = {
26
28
  includeActorTakedowns?: boolean;
27
29
  include3pBlocks?: boolean;
28
30
  includeDebugField?: boolean;
31
+ featureGates?: CheckedFeatureGatesMap;
29
32
  };
30
33
  export type HydrationState = {
31
34
  ctx?: HydrateCtx;
@@ -102,7 +105,7 @@ export declare class Hydrator {
102
105
  }): Promise<HydrationState>;
103
106
  hydrateListItems(uris: string[], ctx: HydrateCtx): Promise<HydrationState>;
104
107
  hydrateListsMembership(uris: string[], did: string, ctx: HydrateCtx): Promise<HydrationState>;
105
- hydratePosts(refs: ItemRef[], ctx: HydrateCtx, state?: HydrationState): Promise<HydrationState>;
108
+ hydratePosts(refs: ItemRef[], ctx: HydrateCtx, state?: HydrationState, options?: Pick<GetPostsHydrationOptions, 'processDynamicTagsForView'>): Promise<HydrationState>;
106
109
  private hydratePostBlocks;
107
110
  hydrateFeedItems(items: FeedItem[], ctx: HydrateCtx): Promise<HydrationState>;
108
111
  hydrateThreadPosts(refs: ItemRef[], ctx: HydrateCtx): Promise<HydrationState>;
@@ -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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"}
@@ -7,6 +7,7 @@ exports.mergeManyStates = exports.mergeStates = exports.Hydrator = exports.Hydra
7
7
  const node_assert_1 = __importDefault(require("node:assert"));
8
8
  const common_1 = require("@atproto/common");
9
9
  const syntax_1 = require("@atproto/syntax");
10
+ const feature_gates_1 = require("../feature-gates");
10
11
  const lexicons_1 = require("../lexicon/lexicons");
11
12
  const record_1 = require("../lexicon/types/app/bsky/embed/record");
12
13
  const recordWithMedia_1 = require("../lexicon/types/app/bsky/embed/recordWithMedia");
@@ -62,6 +63,12 @@ class HydrateCtx {
62
63
  writable: true,
63
64
  value: this.vals.includeDebugField
64
65
  });
66
+ Object.defineProperty(this, "featureGates", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: this.vals.featureGates || new Map()
71
+ });
65
72
  }
66
73
  // Convenience with use with dataplane.getActors cache control
67
74
  get skipCacheForViewer() {
@@ -317,7 +324,7 @@ class Hydrator {
317
324
  // - mod service
318
325
  // - profile
319
326
  // - list basic
320
- async hydratePosts(refs, ctx, state = {}) {
327
+ async hydratePosts(refs, ctx, state = {}, options = {}) {
321
328
  const uris = refs.map((ref) => ref.uri);
322
329
  state.posts ?? (state.posts = new util_1.HydrationMap());
323
330
  const addPostsToHydrationState = (posts) => {
@@ -327,7 +334,9 @@ class Hydrator {
327
334
  });
328
335
  };
329
336
  // layer 0: the posts in the thread
330
- const postsLayer0 = await this.feed.getPosts(uris, ctx.includeTakedowns, state.posts);
337
+ const postsLayer0 = await this.feed.getPosts(uris, ctx.includeTakedowns, state.posts, ctx.viewer, {
338
+ processDynamicTagsForView: options.processDynamicTagsForView,
339
+ });
331
340
  addPostsToHydrationState(postsLayer0);
332
341
  const additionalRootUris = rootUrisFromPosts(postsLayer0); // supports computing threadgates
333
342
  const threadRootUris = new Set();
@@ -539,7 +548,11 @@ class Hydrator {
539
548
  // - profile
540
549
  // - list basic
541
550
  async hydrateThreadPosts(refs, ctx) {
542
- const postsState = await this.hydratePosts(refs, ctx);
551
+ const postsState = await this.hydratePosts(refs, ctx, undefined, {
552
+ processDynamicTagsForView: ctx.featureGates.get(feature_gates_1.FeatureGateID.ThreadsV2ReplyRankingExploration)
553
+ ? 'thread'
554
+ : undefined,
555
+ });
543
556
  const { posts } = postsState;
544
557
  const postsList = posts ? Array.from(posts.entries()) : [];
545
558
  const isDefined = (entry) => {
@@ -980,6 +993,7 @@ class Hydrator {
980
993
  includeTakedowns: vals.includeTakedowns,
981
994
  include3pBlocks: vals.include3pBlocks,
982
995
  includeDebugField,
996
+ featureGates: vals.featureGates,
983
997
  });
984
998
  }
985
999
  async resolveUri(uriStr) {