@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.
- package/CHANGELOG.md +29 -0
- package/dist/api/app/bsky/feed/searchPosts.d.ts.map +1 -1
- package/dist/api/app/bsky/feed/searchPosts.js +18 -3
- package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.d.ts.map +1 -1
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js +1 -0
- package/dist/api/app/bsky/unspecced/getPostThreadV2.js.map +1 -1
- package/dist/auth-verifier.d.ts.map +1 -1
- package/dist/auth-verifier.js +6 -1
- package/dist/auth-verifier.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/feature-gates.d.ts +17 -6
- package/dist/feature-gates.d.ts.map +1 -1
- package/dist/feature-gates.js +24 -13
- package/dist/feature-gates.js.map +1 -1
- package/dist/hydration/feed.d.ts +4 -1
- package/dist/hydration/feed.d.ts.map +1 -1
- package/dist/hydration/feed.js +10 -2
- package/dist/hydration/feed.js.map +1 -1
- package/dist/hydration/hydrator.d.ts +5 -2
- package/dist/hydration/hydrator.d.ts.map +1 -1
- package/dist/hydration/hydrator.js +17 -3
- package/dist/hydration/hydrator.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +8 -0
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +20 -0
- package/dist/proto/bsky_pb.js.map +1 -1
- package/dist/views/index.d.ts +4 -0
- package/dist/views/index.d.ts.map +1 -1
- package/dist/views/index.js +31 -8
- package/dist/views/index.js.map +1 -1
- package/dist/views/threads-v2.d.ts +3 -1
- package/dist/views/threads-v2.d.ts.map +1 -1
- package/dist/views/threads-v2.js +122 -12
- package/dist/views/threads-v2.js.map +1 -1
- package/package.json +7 -7
- package/proto/bsky.proto +2 -0
- package/src/api/app/bsky/feed/searchPosts.ts +28 -2
- package/src/api/app/bsky/unspecced/getPostThreadV2.ts +4 -0
- package/src/auth-verifier.ts +9 -1
- package/src/config.ts +15 -0
- package/src/feature-gates.ts +28 -9
- package/src/hydration/feed.ts +17 -1
- package/src/hydration/hydrator.ts +17 -1
- package/src/index.ts +2 -0
- package/src/proto/bsky_pb.ts +12 -0
- package/src/views/index.ts +52 -22
- package/src/views/threads-v2.ts +156 -13
package/dist/feature-gates.d.ts
CHANGED
|
@@ -3,13 +3,19 @@ export type Config = {
|
|
|
3
3
|
apiKey?: string;
|
|
4
4
|
env?: 'development' | 'staging' | 'production' | string;
|
|
5
5
|
};
|
|
6
|
-
export declare enum
|
|
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
|
|
26
|
+
ids: typeof FeatureGateID;
|
|
21
27
|
constructor(config: Config);
|
|
22
28
|
start(): Promise<void>;
|
|
23
29
|
destroy(): void;
|
|
24
30
|
user({ did }: {
|
|
25
|
-
did
|
|
26
|
-
}):
|
|
27
|
-
check(
|
|
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;
|
|
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"}
|
package/dist/feature-gates.js
CHANGED
|
@@ -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.
|
|
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
|
|
11
|
-
(function (
|
|
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
|
-
|
|
17
|
-
|
|
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:
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
user({ did }) {
|
|
78
|
+
return did
|
|
79
|
+
? {
|
|
80
|
+
userID: did,
|
|
81
|
+
}
|
|
82
|
+
: undefined;
|
|
81
83
|
}
|
|
82
|
-
check(
|
|
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,
|
|
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"]}
|
package/dist/hydration/feed.d.ts
CHANGED
|
@@ -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
|
|
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":"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
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/hydration/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/hydration/feed.js
CHANGED
|
@@ -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(
|
|
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":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;
|
|
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) {
|