@bitbitpress/client 0.1.8 → 0.1.9
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/README.md +106 -118
- package/dist/examples/basic-usage.d.ts.map +1 -1
- package/dist/examples/basic-usage.js +39 -47
- package/dist/examples/basic-usage.js.map +1 -1
- package/dist/generated/openapi.d.ts +26 -39
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/user/batch-manager.d.ts +6 -5
- package/dist/user/batch-manager.d.ts.map +1 -1
- package/dist/user/batch-manager.js +15 -23
- package/dist/user/batch-manager.js.map +1 -1
- package/dist/user/index.d.ts +28 -32
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user/index.js +44 -20
- package/dist/user/index.js.map +1 -1
- package/dist/user/profile.d.ts +2 -2
- package/dist/user/profile.d.ts.map +1 -1
- package/dist/user/profile.js +2 -2
- package/dist/user/profile.js.map +1 -1
- package/dist/user/recommendations.d.ts +5 -12
- package/dist/user/recommendations.d.ts.map +1 -1
- package/dist/user/recommendations.js +3 -3
- package/dist/user/recommendations.js.map +1 -1
- package/dist/user/report.d.ts +3 -3
- package/dist/user/report.d.ts.map +1 -1
- package/dist/user/report.js +3 -3
- package/dist/user/report.js.map +1 -1
- package/dist/user/signal-batch-manager.d.ts +5 -7
- package/dist/user/signal-batch-manager.d.ts.map +1 -1
- package/dist/user/signal-batch-manager.js +7 -7
- package/dist/user/signal-batch-manager.js.map +1 -1
- package/dist/user/signal.d.ts +3 -3
- package/dist/user/signal.d.ts.map +1 -1
- package/dist/user/signal.js +3 -3
- package/dist/user/signal.js.map +1 -1
- package/dist/user/synthesize.d.ts +19 -13
- package/dist/user/synthesize.d.ts.map +1 -1
- package/dist/user/synthesize.js +26 -4
- package/dist/user/synthesize.js.map +1 -1
- package/dist/user/token.d.ts +3 -3
- package/dist/user/token.d.ts.map +1 -1
- package/dist/user/token.js +3 -3
- package/dist/user/token.js.map +1 -1
- package/dist/user/typeDefs.d.ts +18 -0
- package/dist/user/typeDefs.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -18,17 +18,17 @@ const clearTimer = getClearTimeout();
|
|
|
18
18
|
class SynthesizeBatchManager {
|
|
19
19
|
queue = [];
|
|
20
20
|
timer = null;
|
|
21
|
-
|
|
21
|
+
getConfig;
|
|
22
22
|
batchTimeout;
|
|
23
|
-
constructor(
|
|
24
|
-
this.
|
|
23
|
+
constructor(getConfig, batchTimeout) {
|
|
24
|
+
this.getConfig = getConfig;
|
|
25
25
|
this.batchTimeout = batchTimeout;
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Update the
|
|
28
|
+
* Update the config getter (e.g., when token refresh logic changes)
|
|
29
29
|
*/
|
|
30
30
|
updateConfig(config) {
|
|
31
|
-
this.
|
|
31
|
+
this.getConfig = () => Promise.resolve(config);
|
|
32
32
|
}
|
|
33
33
|
addItem(item) {
|
|
34
34
|
return new Promise((resolve, reject) => {
|
|
@@ -42,7 +42,7 @@ class SynthesizeBatchManager {
|
|
|
42
42
|
}, this.batchTimeout);
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
flush() {
|
|
45
|
+
async flush() {
|
|
46
46
|
if (this.queue.length === 0) {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
@@ -50,12 +50,10 @@ class SynthesizeBatchManager {
|
|
|
50
50
|
// Clear queue and reset state
|
|
51
51
|
this.queue = [];
|
|
52
52
|
this.timer = null;
|
|
53
|
-
|
|
53
|
+
const config = await this.getConfig();
|
|
54
54
|
const router = new StreamRouter(batch);
|
|
55
|
-
// Send batch request in the background
|
|
56
|
-
// Don't await - let it run asynchronously
|
|
57
55
|
const items = batch.map((b) => b.item);
|
|
58
|
-
(0, synthesize_js_1.synthesize)(
|
|
56
|
+
(0, synthesize_js_1.synthesize)(config, items)
|
|
59
57
|
.then((stream) => {
|
|
60
58
|
router.setStream(stream);
|
|
61
59
|
router.start();
|
|
@@ -102,8 +100,8 @@ class StreamRouter {
|
|
|
102
100
|
this.resolvers.clear();
|
|
103
101
|
}
|
|
104
102
|
/**
|
|
105
|
-
* Start consuming the stream and routing events
|
|
106
|
-
*
|
|
103
|
+
* Start consuming the stream and routing events.
|
|
104
|
+
* Data events have { index, data?, error? }; connection events have { type: 'connected' | 'complete' }.
|
|
107
105
|
*/
|
|
108
106
|
async start() {
|
|
109
107
|
if (!this.stream) {
|
|
@@ -112,20 +110,14 @@ class StreamRouter {
|
|
|
112
110
|
}
|
|
113
111
|
try {
|
|
114
112
|
for await (const event of this.stream) {
|
|
115
|
-
|
|
116
|
-
if (event.type === 'connected' || event.type === 'complete') {
|
|
113
|
+
if ('type' in event && (event.type === 'connected' || event.type === 'complete')) {
|
|
117
114
|
continue;
|
|
118
115
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
(event.type === 'DAILY_SUMMARY' || event.type === 'CUSTOM')) {
|
|
122
|
-
const index = event.index;
|
|
123
|
-
const resolver = this.resolvers.get(index);
|
|
116
|
+
if ('index' in event && typeof event.index === 'number') {
|
|
117
|
+
const resolver = this.resolvers.get(event.index);
|
|
124
118
|
if (resolver) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
// Remove the resolver since it's been resolved
|
|
128
|
-
this.resolvers.delete(index);
|
|
119
|
+
resolver.resolve({ data: event.data, error: event.error });
|
|
120
|
+
this.resolvers.delete(event.index);
|
|
129
121
|
}
|
|
130
122
|
}
|
|
131
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-manager.js","sourceRoot":"","sources":["../../src/user/batch-manager.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"batch-manager.js","sourceRoot":"","sources":["../../src/user/batch-manager.ts"],"names":[],"mappings":";;;AACA,mDAA2F;AAG3F,mDAAmD;AACnD,SAAS,aAAa;IACpB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;AAMrC;;;GAGG;AACH,MAAa,sBAAsB;IACzB,KAAK,GAIR,EAAE,CAAC;IACA,KAAK,GAAiB,IAAI,CAAC;IAC3B,SAAS,CAA+B;IACxC,YAAY,CAAS;IAE7B,YAAY,SAAuC,EAAE,YAAoB;QACvE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAqB;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,IAAoB;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAE3C,cAAc;YACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9B,8BAA8B;QAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,IAAA,0BAAU,EAAC,MAAM,EAAE,KAAK,CAAC;aACtB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,8BAA8B;YAC9B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AA9DD,wDA8DC;AAED;;;GAGG;AACH,MAAM,YAAY;IACR,SAAS,CAMf;IACM,KAAK,GAAiB,IAAI,CAAC;IAC3B,MAAM,GAA0C,IAAI,CAAC;IAE7D,YACE,KAIE;QAEF,mDAAmD;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAMrB,CAAC;QACJ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAsC;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAY;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,+BAA+B;QAC/B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;oBACjF,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACjD,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+BAA+B;YAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
package/dist/user/index.d.ts
CHANGED
|
@@ -3,79 +3,75 @@ import { type RecommendationsRequest, type RecommendationsResponse } from './rec
|
|
|
3
3
|
import { type ProfileResponse } from './profile.js';
|
|
4
4
|
import { type ReportRequest, type ReportResponse } from './report.js';
|
|
5
5
|
import { type Signal, type SignalRequest, type SignalResponse } from './signal.js';
|
|
6
|
-
import { type SynthesizeEvent } from './synthesize.js';
|
|
6
|
+
import { type SynthesizeEvent, type SynthesizeItemResponse } from './synthesize.js';
|
|
7
7
|
import { type TokenRequest, type TokenResponse } from './token.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { SynthesizeItem, SynthesizeItems } from './typeDefs.js';
|
|
9
9
|
/**
|
|
10
|
-
* User-related API methods interface
|
|
11
|
-
* Provides type-safe access to all user API endpoints
|
|
10
|
+
* User-related API methods interface (aligned with OpenAPI spec paths).
|
|
12
11
|
*/
|
|
13
12
|
export interface UserMethods {
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
* Exchanges SSO token for authentication token and sets it for all user methods
|
|
14
|
+
* Exchange SSO token for a BitBitPress token and store it for subsequent calls.
|
|
17
15
|
*
|
|
18
|
-
* @param ssoToken -
|
|
16
|
+
* @param ssoToken - Token from your authentication provider (OIDC)
|
|
19
17
|
* @returns Promise that resolves when authentication is complete
|
|
20
18
|
*/
|
|
21
19
|
authenticate(ssoToken: string): Promise<void>;
|
|
22
20
|
/**
|
|
23
|
-
* Exchange SSO token for
|
|
21
|
+
* Exchange SSO token for a BitBitPress token (returns token without storing it).
|
|
24
22
|
*
|
|
25
|
-
* @param ssoToken -
|
|
26
|
-
* @returns Promise that resolves with
|
|
23
|
+
* @param ssoToken - Token from your authentication provider (OIDC)
|
|
24
|
+
* @returns Promise that resolves with token data (idToken, accessToken, refreshToken, expiresIn)
|
|
27
25
|
*/
|
|
28
26
|
token(ssoToken: TokenRequest['ssoToken']): Promise<TokenResponse>;
|
|
29
27
|
/**
|
|
30
|
-
* Get user profile
|
|
28
|
+
* Get user profile (e.g. suggested interest topics).
|
|
31
29
|
*
|
|
32
|
-
* @returns Promise that resolves with
|
|
30
|
+
* @returns Promise that resolves with profile data (e.g. suggestedInterestTopics)
|
|
33
31
|
*/
|
|
34
32
|
profile(): Promise<NonNullable<ProfileResponse>>;
|
|
35
33
|
/**
|
|
36
|
-
*
|
|
34
|
+
* Retrieve recommended articles for the authenticated user based on their interests.
|
|
37
35
|
*
|
|
38
|
-
* @param options - Optional
|
|
39
|
-
* @returns Promise that resolves with
|
|
36
|
+
* @param options - Optional: limit, cursor, fields (dot/bracket notation for asset fields)
|
|
37
|
+
* @returns Promise that resolves with items (assetId, score, fields) and optional cursor
|
|
40
38
|
*/
|
|
41
39
|
recommendations(options?: RecommendationsRequest): Promise<NonNullable<RecommendationsResponse>>;
|
|
42
40
|
/**
|
|
43
|
-
*
|
|
41
|
+
* Create a user-provided bit to be ingested (e.g. news or content the user wants to share).
|
|
44
42
|
*
|
|
45
|
-
* @param options -
|
|
46
|
-
* @returns Promise that resolves
|
|
43
|
+
* @param options - title (optional) and content (required)
|
|
44
|
+
* @returns Promise that resolves when the report is accepted
|
|
47
45
|
*/
|
|
48
46
|
report(options: ReportRequest): Promise<NonNullable<ReportResponse>>;
|
|
49
47
|
/**
|
|
50
|
-
* Record user signals (e.g. clicked topic, read article) to inform profile
|
|
48
|
+
* Record user signals (e.g. clicked topic, read article) to inform profile and recommendations.
|
|
51
49
|
*
|
|
52
|
-
* @param options -
|
|
53
|
-
* @returns Promise that resolves with
|
|
50
|
+
* @param options - signals array and optional isSynchronous
|
|
51
|
+
* @returns Promise that resolves with response data (recorded: boolean)
|
|
54
52
|
*/
|
|
55
53
|
signal(options: SignalRequest): Promise<NonNullable<SignalResponse>>;
|
|
56
54
|
/**
|
|
57
|
-
* Record a single signal (batched)
|
|
58
|
-
* Signals are batched and sent together after the configured timeout
|
|
55
|
+
* Record a single signal (batched). Signals are sent together after the configured timeout.
|
|
59
56
|
*
|
|
60
57
|
* @param signal - Single signal to record
|
|
61
|
-
* @returns Promise that resolves with
|
|
58
|
+
* @returns Promise that resolves with response data (recorded: boolean)
|
|
62
59
|
*/
|
|
63
60
|
signalItem(signal: Signal): Promise<NonNullable<SignalResponse>>;
|
|
64
61
|
/**
|
|
65
|
-
* Synthesize user
|
|
62
|
+
* Synthesize content items personalized to the user (streaming SSE).
|
|
66
63
|
*
|
|
67
|
-
* @param items - Array of items
|
|
68
|
-
* @returns AsyncIterable
|
|
64
|
+
* @param items - Array of items: optional inputs (type: externalId | text | excludeExternalIds, value), output (schema, optional staleAfter), optional configurationKeyName
|
|
65
|
+
* @returns AsyncIterable yielding connection events (connected, complete) and data events (index, data?, error?)
|
|
69
66
|
*/
|
|
70
|
-
synthesize(items:
|
|
67
|
+
synthesize(items: SynthesizeItems): Promise<AsyncIterable<SynthesizeEvent>>;
|
|
71
68
|
/**
|
|
72
|
-
* Synthesize a single item (batched)
|
|
73
|
-
* Items are batched and sent together after the configured timeout
|
|
69
|
+
* Synthesize a single item (batched). Items are sent together after the configured timeout.
|
|
74
70
|
*
|
|
75
71
|
* @param item - Single item to synthesize
|
|
76
|
-
* @returns Promise that resolves with the data
|
|
72
|
+
* @returns Promise that resolves with the synthesized data for that item's index
|
|
77
73
|
*/
|
|
78
|
-
synthesizeItem(item:
|
|
74
|
+
synthesizeItem(item: SynthesizeItem): Promise<SynthesizeItemResponse>;
|
|
79
75
|
}
|
|
80
76
|
/**
|
|
81
77
|
* User-related API methods
|
package/dist/user/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjG,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjG,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAElE;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;IAEjD;;;;;OAKG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEjG;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC;IAE5E;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,sBAAsB,GAAE,MAAY,EACpC,kBAAkB,GAAE,MAAY,GAC/B,WAAW,CAmFb"}
|
package/dist/user/index.js
CHANGED
|
@@ -13,36 +13,60 @@ const token_js_1 = require("./token.js");
|
|
|
13
13
|
* User-related API methods
|
|
14
14
|
*/
|
|
15
15
|
function createUserMethods(config, synthesizeBatchTimeout = 250, signalBatchTimeout = 250) {
|
|
16
|
-
// Store token in closure -
|
|
16
|
+
// Store token and last SSO token in closure - set by authenticate
|
|
17
17
|
let userToken;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const synthesizeBatchManager = new batch_manager_js_1.SynthesizeBatchManager(getConfigWithToken(), synthesizeBatchTimeout);
|
|
24
|
-
const signalBatchManager = new signal_batch_manager_js_1.SignalBatchManager(getConfigWithToken(), signalBatchTimeout);
|
|
25
|
-
return {
|
|
26
|
-
async authenticate(ssoToken) {
|
|
18
|
+
let lastSsoToken;
|
|
19
|
+
let tokenExpiresAt; // ms timestamp
|
|
20
|
+
/** Exchange SSO token and store access token + expiry. Returns true if a token was stored. */
|
|
21
|
+
const exchangeAndStoreToken = async (ssoToken) => {
|
|
22
|
+
try {
|
|
27
23
|
const tokenResponse = await (0, token_js_1.exchangeToken)(config, ssoToken);
|
|
28
|
-
const accessToken = tokenResponse?.idToken
|
|
24
|
+
const accessToken = tokenResponse?.idToken ?? tokenResponse?.accessToken;
|
|
29
25
|
if (accessToken) {
|
|
30
26
|
userToken = accessToken;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
const expiresIn = tokenResponse?.expiresIn;
|
|
28
|
+
tokenExpiresAt =
|
|
29
|
+
typeof expiresIn === 'number'
|
|
30
|
+
? Date.now() + expiresIn * 1000
|
|
31
|
+
: undefined;
|
|
32
|
+
return true;
|
|
34
33
|
}
|
|
35
|
-
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Exchange failed
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
40
|
+
/** Returns config with current token. If token is missing or expired, attempts to re-authenticate with lastSsoToken. */
|
|
41
|
+
const getConfigWithToken = async () => {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
const missingOrExpired = userToken === undefined ||
|
|
44
|
+
(tokenExpiresAt !== undefined && now >= tokenExpiresAt);
|
|
45
|
+
if (missingOrExpired && lastSsoToken !== undefined) {
|
|
46
|
+
await exchangeAndStoreToken(lastSsoToken);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
...config,
|
|
50
|
+
token: userToken,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const synthesizeBatchManager = new batch_manager_js_1.SynthesizeBatchManager(getConfigWithToken, synthesizeBatchTimeout);
|
|
54
|
+
const signalBatchManager = new signal_batch_manager_js_1.SignalBatchManager(getConfigWithToken, signalBatchTimeout);
|
|
55
|
+
return {
|
|
56
|
+
async authenticate(ssoToken) {
|
|
57
|
+
lastSsoToken = ssoToken;
|
|
58
|
+
const stored = await exchangeAndStoreToken(ssoToken);
|
|
59
|
+
if (!stored) {
|
|
36
60
|
throw new Error('Token exchange failed: no access token in response');
|
|
37
61
|
}
|
|
38
62
|
},
|
|
39
63
|
token: (ssoToken) => (0, token_js_1.exchangeToken)(config, ssoToken),
|
|
40
|
-
profile: () => (
|
|
41
|
-
recommendations: (options) => (0, recommendations_js_1.getRecommendations)(
|
|
42
|
-
report: (options) => (0, report_js_1.reportBit)(
|
|
43
|
-
signal: (options) => (0, signal_js_1.recordSignal)(
|
|
64
|
+
profile: () => getConfigWithToken().then(profile_js_1.getProfile),
|
|
65
|
+
recommendations: (options) => getConfigWithToken().then((cfg) => (0, recommendations_js_1.getRecommendations)(cfg, options)),
|
|
66
|
+
report: (options) => getConfigWithToken().then((cfg) => (0, report_js_1.reportBit)(cfg, options)),
|
|
67
|
+
signal: (options) => getConfigWithToken().then((cfg) => (0, signal_js_1.recordSignal)(cfg, options)),
|
|
44
68
|
signalItem: (signal) => signalBatchManager.addSignal(signal),
|
|
45
|
-
synthesize: (items) => (0, synthesize_js_1.synthesize)(
|
|
69
|
+
synthesize: (items) => getConfigWithToken().then((cfg) => (0, synthesize_js_1.synthesize)(cfg, items)),
|
|
46
70
|
synthesizeItem: (item) => synthesizeBatchManager.addItem(item),
|
|
47
71
|
};
|
|
48
72
|
}
|
package/dist/user/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
|
package/dist/user/profile.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import type { paths } from '../generated/openapi.js';
|
|
|
2
2
|
import type { RequestConfig } from '../request.js';
|
|
3
3
|
export type ProfileResponse = paths['/v1/user/profile']['get']['responses'][200]['content']['application/json']['data'];
|
|
4
4
|
/**
|
|
5
|
-
* Get user profile information
|
|
5
|
+
* Get user profile information (e.g. suggested interest topics).
|
|
6
6
|
*
|
|
7
7
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
8
|
-
* @returns Promise that resolves with
|
|
8
|
+
* @returns Promise that resolves with profile data (`suggestedInterestTopics` per OpenAPI)
|
|
9
9
|
*/
|
|
10
10
|
export declare function getProfile(config: RequestConfig): Promise<NonNullable<ProfileResponse>>;
|
|
11
11
|
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/user/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,eAAe,GACzB,KAAK,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/user/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,eAAe,GACzB,KAAK,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAWvC"}
|
package/dist/user/profile.js
CHANGED
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getProfile = getProfile;
|
|
4
4
|
const request_js_1 = require("../request.js");
|
|
5
5
|
/**
|
|
6
|
-
* Get user profile information
|
|
6
|
+
* Get user profile information (e.g. suggested interest topics).
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @returns Promise that resolves with
|
|
9
|
+
* @returns Promise that resolves with profile data (`suggestedInterestTopics` per OpenAPI)
|
|
10
10
|
*/
|
|
11
11
|
async function getProfile(config) {
|
|
12
12
|
const response = await (0, request_js_1.makeRequest)(config, {
|
package/dist/user/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/user/profile.ts"],"names":[],"mappings":";;AAcA,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/user/profile.ts"],"names":[],"mappings":";;AAcA,gCAaC;AAzBD,8CAA4C;AAM5C;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAAkB,MAAM,EAAE;QAC1D,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import type { paths } from '../generated/openapi.js';
|
|
2
2
|
import type { RequestConfig } from '../request.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
'application/json': infer U;
|
|
6
|
-
};
|
|
7
|
-
} ? U : RB extends {
|
|
8
|
-
content?: {
|
|
9
|
-
'application/json': infer U;
|
|
10
|
-
};
|
|
11
|
-
} ? U : never : never;
|
|
3
|
+
import type { RecommendationsRequestBody } from './typeDefs.js';
|
|
4
|
+
export type RecommendationsRequest = RecommendationsRequestBody;
|
|
12
5
|
export type RecommendationsResponse = paths['/v1/user/recommendations']['post']['responses'][200]['content']['application/json']['data'];
|
|
13
6
|
/**
|
|
14
|
-
*
|
|
7
|
+
* Retrieve recommended articles for the authenticated user based on their interests.
|
|
15
8
|
*
|
|
16
9
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
17
|
-
* @param options - Optional
|
|
18
|
-
* @returns Promise that resolves with
|
|
10
|
+
* @param options - Optional: limit, cursor, and fields (dot/bracket notation for asset fields)
|
|
11
|
+
* @returns Promise that resolves with items (assetId, score, fields) and optional cursor
|
|
19
12
|
*/
|
|
20
13
|
export declare function getRecommendations(config: RequestConfig, options?: RecommendationsRequest): Promise<NonNullable<RecommendationsResponse>>;
|
|
21
14
|
//# sourceMappingURL=recommendations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../src/user/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../src/user/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAChE,MAAM,MAAM,uBAAuB,GACjC,KAAK,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAErG;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAY/C"}
|
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getRecommendations = getRecommendations;
|
|
4
4
|
const request_js_1 = require("../request.js");
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Retrieve recommended articles for the authenticated user based on their interests.
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @param options - Optional
|
|
10
|
-
* @returns Promise that resolves with
|
|
9
|
+
* @param options - Optional: limit, cursor, and fields (dot/bracket notation for asset fields)
|
|
10
|
+
* @returns Promise that resolves with items (assetId, score, fields) and optional cursor
|
|
11
11
|
*/
|
|
12
12
|
async function getRecommendations(config, options) {
|
|
13
13
|
const response = await (0, request_js_1.makeRequest)(config, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/user/recommendations.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../src/user/recommendations.ts"],"names":[],"mappings":";;AAgBA,gDAeC;AA7BD,8CAA4C;AAO5C;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,OAAgC;IAEhC,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAA0B,MAAM,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/user/report.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import type { RequestConfig } from '../request.js';
|
|
|
3
3
|
export type ReportRequest = paths['/v1/user/report']['post']['requestBody']['content']['application/json'];
|
|
4
4
|
export type ReportResponse = paths['/v1/user/report']['post']['responses'][200]['content']['application/json']['data'];
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Create a user-provided bit to be ingested (e.g. news or other content the user wants to share).
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @param options -
|
|
10
|
-
* @returns Promise that resolves
|
|
9
|
+
* @param options - title (optional) and content (required)
|
|
10
|
+
* @returns Promise that resolves when the report is accepted
|
|
11
11
|
*/
|
|
12
12
|
export declare function reportBit(config: RequestConfig, options: ReportRequest): Promise<NonNullable<ReportResponse>>;
|
|
13
13
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/user/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjF,MAAM,MAAM,cAAc,GACxB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/user/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjF,MAAM,MAAM,cAAc,GACxB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAYtC"}
|
package/dist/user/report.js
CHANGED
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.reportBit = reportBit;
|
|
4
4
|
const request_js_1 = require("../request.js");
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Create a user-provided bit to be ingested (e.g. news or other content the user wants to share).
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @param options -
|
|
10
|
-
* @returns Promise that resolves
|
|
9
|
+
* @param options - title (optional) and content (required)
|
|
10
|
+
* @returns Promise that resolves when the report is accepted
|
|
11
11
|
*/
|
|
12
12
|
async function reportBit(config, options) {
|
|
13
13
|
const response = await (0, request_js_1.makeRequest)(config, {
|
package/dist/user/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/user/report.ts"],"names":[],"mappings":";;AAiBA,
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/user/report.ts"],"names":[],"mappings":";;AAiBA,8BAeC;AA9BD,8CAA4C;AAQ5C;;;;;;GAMG;AACI,KAAK,UAAU,SAAS,CAC7B,MAAqB,EACrB,OAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAAiB,MAAM,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RequestConfig } from '../request.js';
|
|
2
|
-
import { type Signal } from './signal.js';
|
|
2
|
+
import { type Signal, type SignalResponse } from './signal.js';
|
|
3
3
|
/**
|
|
4
4
|
* Batch manager for signalItem
|
|
5
5
|
* Batches individual signals and sends them together after the timeout
|
|
@@ -7,16 +7,14 @@ import { type Signal } from './signal.js';
|
|
|
7
7
|
export declare class SignalBatchManager {
|
|
8
8
|
private queue;
|
|
9
9
|
private timer;
|
|
10
|
-
private
|
|
10
|
+
private getConfig;
|
|
11
11
|
private batchTimeout;
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(getConfig: () => Promise<RequestConfig>, batchTimeout: number);
|
|
13
13
|
/**
|
|
14
|
-
* Update the
|
|
14
|
+
* Update the config getter (e.g., when token refresh logic changes)
|
|
15
15
|
*/
|
|
16
16
|
updateConfig(config: RequestConfig): void;
|
|
17
|
-
addSignal(signal: Signal): Promise<
|
|
18
|
-
recorded?: boolean;
|
|
19
|
-
}>;
|
|
17
|
+
addSignal(signal: Signal): Promise<NonNullable<SignalResponse>>;
|
|
20
18
|
private flush;
|
|
21
19
|
}
|
|
22
20
|
//# sourceMappingURL=signal-batch-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-batch-manager.d.ts","sourceRoot":"","sources":["../../src/user/signal-batch-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"signal-batch-manager.d.ts","sourceRoot":"","sources":["../../src/user/signal-batch-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAkB7E;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAIL;IACR,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAS;gBAEjB,SAAS,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM;IAKzE;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIzC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAejD,KAAK;CA6BpB"}
|
|
@@ -18,17 +18,17 @@ const clearTimer = getClearTimeout();
|
|
|
18
18
|
class SignalBatchManager {
|
|
19
19
|
queue = [];
|
|
20
20
|
timer = null;
|
|
21
|
-
|
|
21
|
+
getConfig;
|
|
22
22
|
batchTimeout;
|
|
23
|
-
constructor(
|
|
24
|
-
this.
|
|
23
|
+
constructor(getConfig, batchTimeout) {
|
|
24
|
+
this.getConfig = getConfig;
|
|
25
25
|
this.batchTimeout = batchTimeout;
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Update the
|
|
28
|
+
* Update the config getter (e.g., when token refresh logic changes)
|
|
29
29
|
*/
|
|
30
30
|
updateConfig(config) {
|
|
31
|
-
this.
|
|
31
|
+
this.getConfig = () => Promise.resolve(config);
|
|
32
32
|
}
|
|
33
33
|
addSignal(signal) {
|
|
34
34
|
return new Promise((resolve, reject) => {
|
|
@@ -51,9 +51,9 @@ class SignalBatchManager {
|
|
|
51
51
|
this.queue = [];
|
|
52
52
|
this.timer = null;
|
|
53
53
|
try {
|
|
54
|
-
|
|
54
|
+
const config = await this.getConfig();
|
|
55
55
|
const signals = batch.map((b) => b.signal);
|
|
56
|
-
const response = await (0, signal_js_1.recordSignal)(
|
|
56
|
+
const response = await (0, signal_js_1.recordSignal)(config, { signals });
|
|
57
57
|
// Resolve all promises with the same response
|
|
58
58
|
// The API returns a single response for the batch
|
|
59
59
|
for (const { resolve } of batch) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-batch-manager.js","sourceRoot":"","sources":["../../src/user/signal-batch-manager.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"signal-batch-manager.js","sourceRoot":"","sources":["../../src/user/signal-batch-manager.ts"],"names":[],"mappings":";;;AACA,2CAA6E;AAE7E,mDAAmD;AACnD,SAAS,aAAa;IACpB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AACjC,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;AAMrC;;;GAGG;AACH,MAAa,kBAAkB;IACrB,KAAK,GAIR,EAAE,CAAC;IACA,KAAK,GAAiB,IAAI,CAAC;IAC3B,SAAS,CAA+B;IACxC,YAAY,CAAS;IAE7B,YAAY,SAAuC,EAAE,YAAoB;QACvE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAqB;QAChC,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAE7C,cAAc;YACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9B,8BAA8B;QAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAY,EAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAEzD,8CAA8C;YAC9C,kDAAkD;YAClD,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,8BAA8B;YAC9B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAlED,gDAkEC"}
|
package/dist/user/signal.d.ts
CHANGED
|
@@ -4,11 +4,11 @@ export type SignalRequest = paths['/v1/user/signal']['post']['requestBody']['con
|
|
|
4
4
|
export type SignalResponse = paths['/v1/user/signal']['post']['responses'][200]['content']['application/json']['data'];
|
|
5
5
|
export type Signal = SignalRequest['signals'][number];
|
|
6
6
|
/**
|
|
7
|
-
* Record user signals (e.g. clicked topic, read article) to inform profile interests
|
|
7
|
+
* Record user signals (e.g. clicked topic, read article) to inform profile interests. Powers recommendations.
|
|
8
8
|
*
|
|
9
9
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
10
|
-
* @param options -
|
|
11
|
-
* @returns Promise that resolves with
|
|
10
|
+
* @param options - signals array (signal text, type: active|passive, optional negative, contentContext) and optional isSynchronous
|
|
11
|
+
* @returns Promise that resolves with response data (recorded: boolean)
|
|
12
12
|
*/
|
|
13
13
|
export declare function recordSignal(config: RequestConfig, options: SignalRequest): Promise<NonNullable<SignalResponse>>;
|
|
14
14
|
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/user/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjF,MAAM,MAAM,cAAc,GACxB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAG5F,MAAM,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/user/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACjF,MAAM,MAAM,cAAc,GACxB,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAG5F,MAAM,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAYtC"}
|
package/dist/user/signal.js
CHANGED
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.recordSignal = recordSignal;
|
|
4
4
|
const request_js_1 = require("../request.js");
|
|
5
5
|
/**
|
|
6
|
-
* Record user signals (e.g. clicked topic, read article) to inform profile interests
|
|
6
|
+
* Record user signals (e.g. clicked topic, read article) to inform profile interests. Powers recommendations.
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @param options -
|
|
10
|
-
* @returns Promise that resolves with
|
|
9
|
+
* @param options - signals array (signal text, type: active|passive, optional negative, contentContext) and optional isSynchronous
|
|
10
|
+
* @returns Promise that resolves with response data (recorded: boolean)
|
|
11
11
|
*/
|
|
12
12
|
async function recordSignal(config, options) {
|
|
13
13
|
const response = await (0, request_js_1.makeRequest)(config, {
|
package/dist/user/signal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/user/signal.ts"],"names":[],"mappings":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/user/signal.ts"],"names":[],"mappings":";;AAoBA,oCAeC;AAjCD,8CAA4C;AAW5C;;;;;;GAMG;AACI,KAAK,UAAU,YAAY,CAChC,MAAqB,EACrB,OAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAAiB,MAAM,EAAE;QACzD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|