@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.
Files changed (49) hide show
  1. package/README.md +132 -117
  2. package/dist/examples/basic-usage.d.ts.map +1 -1
  3. package/dist/examples/basic-usage.js +41 -47
  4. package/dist/examples/basic-usage.js.map +1 -1
  5. package/dist/generated/openapi.d.ts +28 -40
  6. package/dist/index.d.ts +3 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/user/index.d.ts +33 -32
  9. package/dist/user/index.d.ts.map +1 -1
  10. package/dist/user/index.js +46 -22
  11. package/dist/user/index.js.map +1 -1
  12. package/dist/user/profile.d.ts +2 -2
  13. package/dist/user/profile.d.ts.map +1 -1
  14. package/dist/user/profile.js +2 -2
  15. package/dist/user/profile.js.map +1 -1
  16. package/dist/user/recommendations.d.ts +5 -12
  17. package/dist/user/recommendations.d.ts.map +1 -1
  18. package/dist/user/recommendations.js +3 -3
  19. package/dist/user/recommendations.js.map +1 -1
  20. package/dist/user/report.d.ts +3 -3
  21. package/dist/user/report.d.ts.map +1 -1
  22. package/dist/user/report.js +3 -3
  23. package/dist/user/report.js.map +1 -1
  24. package/dist/user/signal-batch-manager.d.ts +5 -7
  25. package/dist/user/signal-batch-manager.d.ts.map +1 -1
  26. package/dist/user/signal-batch-manager.js +7 -7
  27. package/dist/user/signal-batch-manager.js.map +1 -1
  28. package/dist/user/signal.d.ts +3 -3
  29. package/dist/user/signal.d.ts.map +1 -1
  30. package/dist/user/signal.js +3 -3
  31. package/dist/user/signal.js.map +1 -1
  32. package/dist/user/synthesize-batch-manager.d.ts +23 -0
  33. package/dist/user/synthesize-batch-manager.d.ts.map +1 -0
  34. package/dist/user/{batch-manager.js → synthesize-batch-manager.js} +28 -32
  35. package/dist/user/synthesize-batch-manager.js.map +1 -0
  36. package/dist/user/synthesize.d.ts +29 -13
  37. package/dist/user/synthesize.d.ts.map +1 -1
  38. package/dist/user/synthesize.js +43 -6
  39. package/dist/user/synthesize.js.map +1 -1
  40. package/dist/user/token.d.ts +3 -3
  41. package/dist/user/token.d.ts.map +1 -1
  42. package/dist/user/token.js +3 -3
  43. package/dist/user/token.js.map +1 -1
  44. package/dist/user/typeDefs.d.ts +18 -0
  45. package/dist/user/typeDefs.d.ts.map +1 -1
  46. package/package.json +1 -1
  47. package/dist/user/batch-manager.d.ts +0 -20
  48. package/dist/user/batch-manager.d.ts.map +0 -1
  49. 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
- config;
21
+ getConfig;
22
22
  batchTimeout;
23
- constructor(config, batchTimeout) {
24
- this.config = config;
23
+ constructor(getConfig, batchTimeout) {
24
+ this.getConfig = getConfig;
25
25
  this.batchTimeout = batchTimeout;
26
26
  }
27
27
  /**
28
- * Update the request configuration (e.g., when token changes)
28
+ * Update the config getter (e.g., when token refresh logic changes)
29
29
  */
30
30
  updateConfig(config) {
31
- this.config = config;
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
- // Create a shared stream router that will distribute events to indexed promises
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)(this.config, items)
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 with the data field from the event (excluding 'connected' and 'complete' events)
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
- * Resolves promises with the data field from events (DAILY_SUMMARY or CUSTOM) for their index
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
- // Skip connection and completion events - we only care about data events
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
- // Handle data events (DAILY_SUMMARY or CUSTOM) - route to specific index
120
- if (event.index !== undefined &&
121
- (event.type === 'DAILY_SUMMARY' || event.type === 'CUSTOM')) {
122
- const index = event.index;
123
- const resolver = this.resolvers.get(index);
124
- if (resolver) {
125
- // Resolve the promise with only the data field
126
- resolver.resolve(event.data);
127
- // Remove the resolver since it's been resolved
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 { SynthesizeRequest } from './typeDefs.js';
2
+ import type { SynthesizeItems } from './typeDefs.js';
3
+ export type SynthesizeItemResponse = {
4
+ data?: unknown;
5
+ error?: string;
6
+ };
3
7
  /**
4
- * Type for synthesize stream events
5
- * Derived from the synthesize function's return type
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: 'DAILY_SUMMARY' | 'CUSTOM' | 'connected' | 'complete';
9
- index?: number;
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 content (streaming)
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 to synthesize (type: SynthesizeRequest['items'])
17
- * @returns AsyncIterable that yields synthesis events (DAILY_SUMMARY, CUSTOM, connected, complete)
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":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAMzC;AAED;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GACnC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
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"}
@@ -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 content (streaming)
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 to synthesize (type: SynthesizeRequest['items'])
10
- * @returns AsyncIterable that yields synthesis events (DAILY_SUMMARY, CUSTOM, connected, complete)
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
- return (0, request_js_1.makeRequest)(config, {
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":";;AAqBA,gCASC;AA7BD,8CAA4C;AAa5C;;;;;;GAMG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,KAAiC;IAEjC,OAAO,IAAA,wBAAW,EAAC,MAAM,EAAE;QACzB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,EAAE,KAAK,EAAE;KAChB,CAAC,CAAC;AACL,CAAC"}
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"}
@@ -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 SSO token to exchange for an authentication token
10
- * @returns Promise that resolves with token response containing idToken or accessToken
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
@@ -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,CAcrC"}
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"}
@@ -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 SSO token to exchange for an authentication token
10
- * @returns Promise that resolves with token response containing idToken or accessToken
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, {
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/user/token.ts"],"names":[],"mappings":";;AAiBA,sCAiBC;AAhCD,8CAA4C;AAQ5C;;;;;;GAMG;AACI,KAAK,UAAU,aAAa,CACjC,MAAqB,EACrB,QAAkC;IAElC,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAEhC,MAAM,EAAE;QACR,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"}
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"}
@@ -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;AAGrD,MAAM,MAAM,iBAAiB,GAC3B,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,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,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitbitpress/client",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "BitBitPress TypeScript client library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -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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"}