@bitbitpress/client 0.1.8 → 0.1.10
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 +132 -117
- package/dist/examples/basic-usage.d.ts.map +1 -1
- package/dist/examples/basic-usage.js +41 -47
- package/dist/examples/basic-usage.js.map +1 -1
- package/dist/generated/openapi.d.ts +28 -40
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/user/index.d.ts +33 -32
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user/index.js +46 -22
- 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-batch-manager.d.ts +23 -0
- package/dist/user/synthesize-batch-manager.d.ts.map +1 -0
- package/dist/user/{batch-manager.js → synthesize-batch-manager.js} +28 -32
- package/dist/user/synthesize-batch-manager.js.map +1 -0
- package/dist/user/synthesize.d.ts +29 -13
- package/dist/user/synthesize.d.ts.map +1 -1
- package/dist/user/synthesize.js +43 -6
- 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
- package/dist/user/batch-manager.d.ts +0 -20
- package/dist/user/batch-manager.d.ts.map +0 -1
- package/dist/user/batch-manager.js.map +0 -1
|
@@ -18,21 +18,21 @@ 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
|
-
addItem(item) {
|
|
33
|
+
addItem(item, onStreamingData) {
|
|
34
34
|
return new Promise((resolve, reject) => {
|
|
35
|
-
this.queue.push({ item, resolve, reject });
|
|
35
|
+
this.queue.push({ item, resolve, reject, onStreamingData });
|
|
36
36
|
// Reset timer
|
|
37
37
|
if (this.timer) {
|
|
38
38
|
clearTimer(this.timer);
|
|
@@ -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();
|
|
@@ -69,19 +67,18 @@ class SynthesizeBatchManager {
|
|
|
69
67
|
}
|
|
70
68
|
exports.SynthesizeBatchManager = SynthesizeBatchManager;
|
|
71
69
|
/**
|
|
72
|
-
* Routes stream events to indexed promises
|
|
73
|
-
* Resolves each promise
|
|
70
|
+
* Routes stream events to indexed promises.
|
|
71
|
+
* Resolves each promise when complete: true or error; calls onStreamingData for events with complete: false.
|
|
74
72
|
*/
|
|
75
73
|
class StreamRouter {
|
|
76
74
|
resolvers;
|
|
77
75
|
error = null;
|
|
78
76
|
stream = null;
|
|
79
77
|
constructor(batch) {
|
|
80
|
-
// Build resolvers map from batch using array index
|
|
81
78
|
this.resolvers = new Map();
|
|
82
79
|
for (let index = 0; index < batch.length; index++) {
|
|
83
|
-
const { resolve, reject } = batch[index];
|
|
84
|
-
this.resolvers.set(index, { resolve, reject });
|
|
80
|
+
const { resolve, reject, onStreamingData } = batch[index];
|
|
81
|
+
this.resolvers.set(index, { resolve, reject, onStreamingData });
|
|
85
82
|
}
|
|
86
83
|
}
|
|
87
84
|
/**
|
|
@@ -102,8 +99,8 @@ class StreamRouter {
|
|
|
102
99
|
this.resolvers.clear();
|
|
103
100
|
}
|
|
104
101
|
/**
|
|
105
|
-
* Start consuming the stream and routing events
|
|
106
|
-
*
|
|
102
|
+
* Start consuming the stream and routing events.
|
|
103
|
+
* Data events have { index, data?, error? }; connection events have { type: 'connected' | 'complete' }.
|
|
107
104
|
*/
|
|
108
105
|
async start() {
|
|
109
106
|
if (!this.stream) {
|
|
@@ -112,20 +109,19 @@ class StreamRouter {
|
|
|
112
109
|
}
|
|
113
110
|
try {
|
|
114
111
|
for await (const event of this.stream) {
|
|
115
|
-
|
|
116
|
-
if (event.type === 'connected' || event.type === 'complete') {
|
|
112
|
+
if ('type' in event && (event.type === 'connected' || event.type === 'complete')) {
|
|
117
113
|
continue;
|
|
118
114
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
this.resolvers.delete(index);
|
|
115
|
+
if ('index' in event && typeof event.index === 'number') {
|
|
116
|
+
const entry = this.resolvers.get(event.index);
|
|
117
|
+
if (!entry)
|
|
118
|
+
continue;
|
|
119
|
+
if (event.complete === false && event.error == null) {
|
|
120
|
+
entry.onStreamingData?.(event.data);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
entry.resolve({ data: event.data, error: event.error });
|
|
124
|
+
this.resolvers.delete(event.index);
|
|
129
125
|
}
|
|
130
126
|
}
|
|
131
127
|
}
|
|
@@ -142,4 +138,4 @@ class StreamRouter {
|
|
|
142
138
|
}
|
|
143
139
|
}
|
|
144
140
|
}
|
|
145
|
-
//# sourceMappingURL=batch-manager.js.map
|
|
141
|
+
//# sourceMappingURL=synthesize-batch-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-batch-manager.js","sourceRoot":"","sources":["../../src/user/synthesize-batch-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,41 @@
|
|
|
1
1
|
import type { RequestConfig } from '../request.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { SynthesizeItems } from './typeDefs.js';
|
|
3
|
+
export type SynthesizeItemResponse = {
|
|
4
|
+
data?: unknown;
|
|
5
|
+
error?: string;
|
|
6
|
+
};
|
|
3
7
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
8
|
+
* Synthesize stream event types (SSE). Per OpenAPI spec:
|
|
9
|
+
* - Connection: `{ type: 'connected' | 'complete' }`
|
|
10
|
+
* - Data: `{ index: number, data?: unknown, complete: boolean, error?: string }`.
|
|
11
|
+
* Multiple events may be sent for the same index as partial object updates; the final event
|
|
12
|
+
* for that index has `complete: true` and contains the validated object. When `complete`
|
|
13
|
+
* is false, `data` is a partial update.
|
|
6
14
|
*/
|
|
7
15
|
export type SynthesizeEvent = {
|
|
8
|
-
type: '
|
|
9
|
-
|
|
16
|
+
type: 'connected';
|
|
17
|
+
} | {
|
|
18
|
+
type: 'complete';
|
|
19
|
+
} | {
|
|
20
|
+
index: number;
|
|
10
21
|
data?: unknown;
|
|
22
|
+
complete: boolean;
|
|
23
|
+
error?: string;
|
|
11
24
|
};
|
|
25
|
+
/** Options for synthesize stream: optional callback for streaming data updates per item index. */
|
|
26
|
+
export interface SynthesizeOptions {
|
|
27
|
+
/** Called for each data event with complete: false, with (index, streaming data). */
|
|
28
|
+
onStreamingData?: (index: number, data: unknown) => void;
|
|
29
|
+
}
|
|
12
30
|
/**
|
|
13
|
-
* Synthesize user
|
|
31
|
+
* Synthesize content items personalized to the user (streaming SSE).
|
|
14
32
|
*
|
|
15
33
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
16
|
-
* @param items - Array of items
|
|
17
|
-
* @
|
|
18
|
-
|
|
19
|
-
export declare function synthesize(config: RequestConfig, items: SynthesizeRequest['items']): Promise<AsyncIterable<SynthesizeEvent>>;
|
|
20
|
-
/**
|
|
21
|
-
* Extract the event type from the synthesize function's return type
|
|
22
|
-
* This provides a type-safe way to reference the event type
|
|
34
|
+
* @param items - Array of items: each has optional inputs (`type`: externalId | text | excludeExternalIds, `value`), output (schema as JSON string or Zod 4 schema, optional staleAfter), optional configurationKeyName
|
|
35
|
+
* @param options - Optional: onStreamingData(index, data) called for each streaming data update per item index
|
|
36
|
+
* @returns AsyncIterable yielding connection events (connected, complete) and data events (index, data?, complete, error?). Data may be partial until an event with complete: true for that index.
|
|
23
37
|
*/
|
|
38
|
+
export declare function synthesize(config: RequestConfig, items: SynthesizeItems, options?: SynthesizeOptions): Promise<AsyncIterable<SynthesizeEvent>>;
|
|
39
|
+
/** Event type inferred from synthesize stream (for type-safe usage). */
|
|
24
40
|
export type SynthesizeEventFromReturn = Awaited<ReturnType<typeof synthesize>> extends AsyncIterable<infer T> ? T : never;
|
|
25
41
|
//# sourceMappingURL=synthesize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/user/synthesize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/user/synthesize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,eAAe,CAAC;AAGxE,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA0BzE,kGAAkG;AAClG,MAAM,WAAW,iBAAiB;IAChC,qFAAqF;IACrF,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAsBzC;AAED,wEAAwE;AACxE,MAAM,MAAM,yBAAyB,GACnC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
|
package/dist/user/synthesize.js
CHANGED
|
@@ -1,19 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.synthesize = synthesize;
|
|
4
|
+
const zod_1 = require("zod");
|
|
4
5
|
const request_js_1 = require("../request.js");
|
|
6
|
+
/** Detect Zod 4 schema (has _zod internals). */
|
|
7
|
+
function isZodSchema(value) {
|
|
8
|
+
return typeof value === 'object' && value !== null && '_zod' in value;
|
|
9
|
+
}
|
|
10
|
+
/** Normalize items so output.schema is always a JSON schema string (Zod schemas are converted via toJSONSchema). */
|
|
11
|
+
function normalizeSynthesizeItems(items) {
|
|
12
|
+
return items.map((item) => {
|
|
13
|
+
const schema = item.output.schema;
|
|
14
|
+
const schemaString = isZodSchema(schema)
|
|
15
|
+
? JSON.stringify((0, zod_1.toJSONSchema)(schema))
|
|
16
|
+
: schema;
|
|
17
|
+
return {
|
|
18
|
+
...item,
|
|
19
|
+
output: {
|
|
20
|
+
...item.output,
|
|
21
|
+
schema: schemaString,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
}
|
|
5
26
|
/**
|
|
6
|
-
* Synthesize user
|
|
27
|
+
* Synthesize content items personalized to the user (streaming SSE).
|
|
7
28
|
*
|
|
8
29
|
* @param config - Request configuration with base URL, timeout, fetch, and optional token
|
|
9
|
-
* @param items - Array of items
|
|
10
|
-
* @
|
|
30
|
+
* @param items - Array of items: each has optional inputs (`type`: externalId | text | excludeExternalIds, `value`), output (schema as JSON string or Zod 4 schema, optional staleAfter), optional configurationKeyName
|
|
31
|
+
* @param options - Optional: onStreamingData(index, data) called for each streaming data update per item index
|
|
32
|
+
* @returns AsyncIterable yielding connection events (connected, complete) and data events (index, data?, complete, error?). Data may be partial until an event with complete: true for that index.
|
|
11
33
|
*/
|
|
12
|
-
async function synthesize(config, items) {
|
|
13
|
-
|
|
34
|
+
async function synthesize(config, items, options) {
|
|
35
|
+
const normalizedItems = normalizeSynthesizeItems(items);
|
|
36
|
+
const stream = await (0, request_js_1.makeRequest)(config, {
|
|
14
37
|
method: 'POST',
|
|
15
38
|
path: '/v1/user/synthesize',
|
|
16
|
-
body: { items },
|
|
39
|
+
body: { items: normalizedItems },
|
|
17
40
|
});
|
|
41
|
+
const onStreamingData = options?.onStreamingData;
|
|
42
|
+
if (!onStreamingData)
|
|
43
|
+
return stream;
|
|
44
|
+
return (async function* wrap() {
|
|
45
|
+
for await (const event of stream) {
|
|
46
|
+
if ('index' in event &&
|
|
47
|
+
typeof event.index === 'number' &&
|
|
48
|
+
event.complete === false &&
|
|
49
|
+
event.error == null) {
|
|
50
|
+
onStreamingData(event.index, event.data);
|
|
51
|
+
}
|
|
52
|
+
yield event;
|
|
53
|
+
}
|
|
54
|
+
})();
|
|
18
55
|
}
|
|
19
56
|
//# sourceMappingURL=synthesize.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../../src/user/synthesize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"synthesize.js","sourceRoot":"","sources":["../../src/user/synthesize.ts"],"names":[],"mappings":";;AA2DA,gCA0BC;AArFD,6BAAmC;AAEnC,8CAA4C;AAmB5C,gDAAgD;AAChD,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AACxE,CAAC;AAED,oHAAoH;AACpH,SAAS,wBAAwB,CAC/B,KAAsB;IAEtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAA,kBAAY,EAAC,MAAM,CAAC,CAAC;YACtC,CAAC,CAAC,MAAM,CAAC;QACX,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE;gBACN,GAAG,IAAI,CAAC,MAAM;gBACd,MAAM,EAAE,YAAY;aACrB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;;;GAOG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,KAAsB,EACtB,OAA2B;IAE3B,MAAM,eAAe,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAW,EAAiC,MAAM,EAAE;QACvE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;KACjC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;IACjD,IAAI,CAAC,eAAe;QAAE,OAAO,MAAM,CAAC;IACpC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI;QAC1B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IACE,OAAO,IAAI,KAAK;gBAChB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAC/B,KAAK,CAAC,QAAQ,KAAK,KAAK;gBACxB,KAAK,CAAC,KAAK,IAAI,IAAI,EACnB,CAAC;gBACD,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;AACP,CAAC"}
|
package/dist/user/token.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import type { RequestConfig } from '../request.js';
|
|
|
3
3
|
export type TokenRequest = paths['/v1/auth/token']['post']['requestBody']['content']['application/json'];
|
|
4
4
|
export type TokenResponse = paths['/v1/auth/token']['post']['responses'][200]['content']['application/json']['data'];
|
|
5
5
|
/**
|
|
6
|
-
* Exchange SSO token for authentication token
|
|
6
|
+
* Exchange SSO token for a BitBitPress authentication token (required for other endpoints).
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, and fetch
|
|
9
|
-
* @param ssoToken - The
|
|
10
|
-
* @returns Promise that resolves with token
|
|
9
|
+
* @param ssoToken - The token from your authentication provider (OIDC)
|
|
10
|
+
* @returns Promise that resolves with token data (idToken, accessToken, refreshToken, expiresIn)
|
|
11
11
|
*/
|
|
12
12
|
export declare function exchangeToken(config: RequestConfig, ssoToken: TokenRequest['ssoToken']): Promise<NonNullable<TokenResponse>>;
|
|
13
13
|
//# sourceMappingURL=token.d.ts.map
|
package/dist/user/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/user/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,YAAY,GACtB,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3F;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/user/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,YAAY,GACtB,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,GACvB,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3F;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAYrC"}
|
package/dist/user/token.js
CHANGED
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.exchangeToken = exchangeToken;
|
|
4
4
|
const request_js_1 = require("../request.js");
|
|
5
5
|
/**
|
|
6
|
-
* Exchange SSO token for authentication token
|
|
6
|
+
* Exchange SSO token for a BitBitPress authentication token (required for other endpoints).
|
|
7
7
|
*
|
|
8
8
|
* @param config - Request configuration with base URL, timeout, and fetch
|
|
9
|
-
* @param ssoToken - The
|
|
10
|
-
* @returns Promise that resolves with token
|
|
9
|
+
* @param ssoToken - The token from your authentication provider (OIDC)
|
|
10
|
+
* @returns Promise that resolves with token data (idToken, accessToken, refreshToken, expiresIn)
|
|
11
11
|
*/
|
|
12
12
|
async function exchangeToken(config, ssoToken) {
|
|
13
13
|
const response = await (0, request_js_1.makeRequest)(config, {
|
package/dist/user/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/user/token.ts"],"names":[],"mappings":";;AAiBA,
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/user/token.ts"],"names":[],"mappings":";;AAiBA,sCAeC;AA9BD,8CAA4C;AAQ5C;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CACjC,MAAqB,EACrB,QAAkC;IAElC,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAAgB,MAAM,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE,QAAQ,EAAE;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/user/typeDefs.d.ts
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import type { ZodType } from 'zod';
|
|
1
2
|
import type { paths } from '../generated/openapi.js';
|
|
3
|
+
/** Request body for POST /v1/user/synthesize */
|
|
2
4
|
export type SynthesizeRequest = paths['/v1/user/synthesize']['post']['requestBody']['content']['application/json'];
|
|
5
|
+
/** Request body for POST /v1/user/synthesize (alias for SynthesizeRequest). */
|
|
6
|
+
export type BitBitPressSynthesizeRequest = SynthesizeRequest;
|
|
7
|
+
/** Array of synthesize items (API shape). */
|
|
8
|
+
export type SynthesizeItems = SynthesizeItem[];
|
|
9
|
+
/** Single synthesize item (API shape). */
|
|
10
|
+
export type SynthesizeItem = Omit<SynthesizeRequest['items'][number], 'output'> & {
|
|
11
|
+
output: Omit<SynthesizeRequest['items'][number]['output'], 'schema'> & {
|
|
12
|
+
schema: SynthesizeOutputSchema;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/** Single input in an item's inputs array (externalId, text, or excludeExternalIds). */
|
|
16
|
+
export type SynthesizeInput = NonNullable<SynthesizeItem['inputs']>[number];
|
|
17
|
+
/** Output schema for a synthesize item: JSON schema as string, or a Zod 4 schema (converted to JSON schema string when sending). */
|
|
18
|
+
export type SynthesizeOutputSchema = string | ZodType;
|
|
19
|
+
/** Request body for POST /v1/user/recommendations (optional body) */
|
|
20
|
+
export type RecommendationsRequestBody = NonNullable<paths['/v1/user/recommendations']['post']['requestBody']>['content']['application/json'];
|
|
3
21
|
//# sourceMappingURL=typeDefs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeDefs.d.ts","sourceRoot":"","sources":["../../src/user/typeDefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"typeDefs.d.ts","sourceRoot":"","sources":["../../src/user/typeDefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAC3B,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAErF,+EAA+E;AAC/E,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;AAE7D,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,cAAc,EAAE,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAClC,QAAQ,CACP,GAAG;IACJ,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG;QACrE,MAAM,EAAE,sBAAsB,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,wFAAwF;AACxF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,oIAAoI;AACpI,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtD,qEAAqE;AACrE,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAClD,KAAK,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CACzD,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { RequestConfig } from '../request.js';
|
|
2
|
-
import type { SynthesizeRequest } from './typeDefs.js';
|
|
3
|
-
/**
|
|
4
|
-
* Batch manager for synthesizeItem
|
|
5
|
-
* Resolves each item individually based on its index in the response
|
|
6
|
-
*/
|
|
7
|
-
export declare class SynthesizeBatchManager {
|
|
8
|
-
private queue;
|
|
9
|
-
private timer;
|
|
10
|
-
private config;
|
|
11
|
-
private batchTimeout;
|
|
12
|
-
constructor(config: RequestConfig, batchTimeout: number);
|
|
13
|
-
/**
|
|
14
|
-
* Update the request configuration (e.g., when token changes)
|
|
15
|
-
*/
|
|
16
|
-
updateConfig(config: RequestConfig): void;
|
|
17
|
-
addItem(item: SynthesizeRequest['items'][number]): Promise<unknown>;
|
|
18
|
-
private flush;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=batch-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-manager.d.ts","sourceRoot":"","sources":["../../src/user/batch-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAkBvD;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAIL;IACR,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM;IAKvD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIzC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAenE,OAAO,CAAC,KAAK;CA4Bd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-manager.js","sourceRoot":"","sources":["../../src/user/batch-manager.ts"],"names":[],"mappings":"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"}
|