@bitbitpress/client 1.1.3 → 1.1.4

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 (46) hide show
  1. package/dist/generated/openapi.d.ts +420 -0
  2. package/dist/react/index.d.ts +76 -2
  3. package/dist/react/index.d.ts.map +1 -1
  4. package/dist/react/index.js +110 -3
  5. package/dist/react/index.js.map +1 -1
  6. package/dist/react-native-expo/BitBitPiece.d.ts +64 -0
  7. package/dist/react-native-expo/BitBitPiece.d.ts.map +1 -0
  8. package/dist/react-native-expo/BitBitPiece.js +164 -0
  9. package/dist/react-native-expo/BitBitPiece.js.map +1 -0
  10. package/dist/react-native-expo/bootstrapHtml.d.ts +13 -0
  11. package/dist/react-native-expo/bootstrapHtml.d.ts.map +1 -1
  12. package/dist/react-native-expo/bootstrapHtml.js +108 -12
  13. package/dist/react-native-expo/bootstrapHtml.js.map +1 -1
  14. package/dist/react-native-expo/index.d.ts +1 -0
  15. package/dist/react-native-expo/index.d.ts.map +1 -1
  16. package/dist/react-native-expo/index.js +1 -0
  17. package/dist/react-native-expo/index.js.map +1 -1
  18. package/dist/runtime/index.d.ts +32 -0
  19. package/dist/runtime/index.d.ts.map +1 -1
  20. package/dist/runtime/index.js +68 -2
  21. package/dist/runtime/index.js.map +1 -1
  22. package/dist/studio/BitBitMobilePreview.d.ts +33 -0
  23. package/dist/studio/BitBitMobilePreview.d.ts.map +1 -0
  24. package/dist/studio/BitBitMobilePreview.js +120 -0
  25. package/dist/studio/BitBitMobilePreview.js.map +1 -0
  26. package/dist/studio/index.d.ts +7 -0
  27. package/dist/studio/index.d.ts.map +1 -0
  28. package/dist/studio/index.js +7 -0
  29. package/dist/studio/index.js.map +1 -0
  30. package/dist/user/index.d.ts +27 -0
  31. package/dist/user/index.d.ts.map +1 -1
  32. package/dist/user/index.js +6 -1
  33. package/dist/user/index.js.map +1 -1
  34. package/dist/user/synthesisPiece.d.ts +38 -0
  35. package/dist/user/synthesisPiece.d.ts.map +1 -0
  36. package/dist/user/synthesisPiece.js +58 -0
  37. package/dist/user/synthesisPiece.js.map +1 -0
  38. package/dist/user/track-batch-manager.d.ts +10 -4
  39. package/dist/user/track-batch-manager.d.ts.map +1 -1
  40. package/dist/user/track-batch-manager.js +6 -5
  41. package/dist/user/track-batch-manager.js.map +1 -1
  42. package/dist/user/track.d.ts +9 -0
  43. package/dist/user/track.d.ts.map +1 -1
  44. package/dist/user/track.js +17 -0
  45. package/dist/user/track.js.map +1 -1
  46. package/package.json +5 -1
@@ -35,9 +35,40 @@ export interface BitBitViewContext {
35
35
  onEvent(name: string, payload?: unknown): void;
36
36
  /** Brand design tokens (also mirrored as CSS custom properties on the host). */
37
37
  theme: Record<string, string>;
38
+ /** The color scheme the host wants the view rendered in. Optional — when
39
+ * omitted, a dual-mode view should fall back to the environment's
40
+ * `prefers-color-scheme`. Native hosts set it from the OS appearance (the
41
+ * WebView can't read it reliably); web hosts usually leave it unset. */
42
+ colorScheme?: 'light' | 'dark';
38
43
  /** Navigate a link (web: location; native: linking/navigation). */
39
44
  navigate?(href: string): void;
45
+ /** Resolve a playable HLS URL for the piece's spoken content, synthesized on demand. Omit
46
+ * `ref` for the WHOLE piece's spoken content; pass `{ field }` to scope to a top-level field,
47
+ * and/or `{ index }` for a single turn. The text lives in the piece, so you don't build turns
48
+ * — you just reference what to voice. An audio player calls this on play, then hands the URL
49
+ * to `ctx.playMedia`. Absent when the host provides no TTS (players should hide playback). */
50
+ tts?(ref?: BitBitTtsRef): Promise<string>;
51
+ /** Attach an on-demand media URL (from `ctx.tts`) to an `<audio>`/`<video>` element and play
52
+ * it on every platform. The URL is HLS, so this uses native HLS where the browser supports it
53
+ * (Safari/iOS) and loads hls.js on demand elsewhere. ALWAYS use this instead of setting
54
+ * `el.src` directly — a plain `<audio src>` of an HLS playlist only plays on Safari/iOS.
55
+ * Returns a teardown to detach. Absent only in older hosts (feature-detect and fall back). */
56
+ playMedia?(el: HTMLMediaElement, url: string): () => void;
40
57
  }
58
+ /** What `ctx.tts(ref)` points at — a REFERENCE into the piece's spoken content, not the text:
59
+ * omit for the whole piece, `field` scopes to a top-level field, `index` picks a single turn. */
60
+ export interface BitBitTtsRef {
61
+ field?: string;
62
+ index?: number;
63
+ }
64
+ /**
65
+ * Attach an HLS URL (from `ctx.tts`) to a media element and make it play on every platform:
66
+ * native HLS where the browser supports it (Safari/iOS), else hls.js loaded on demand from the
67
+ * CDN (Chrome/Firefox/Android). Returns a teardown that detaches the source / destroys hls.js.
68
+ * This is the default `ctx.playMedia` for web (Shadow-DOM) hosts; the WebView/iframe hosts
69
+ * provide an equivalent inline in their bootstrap.
70
+ */
71
+ export declare function attachHlsMedia(el: HTMLMediaElement, url: string): () => void;
41
72
  /** Handle returned by a mounted view: push new props as `data` streams in,
42
73
  * and tear down. */
43
74
  export interface GeneratedUiViewHandle {
@@ -54,6 +85,7 @@ export interface GeneratedUiModule {
54
85
  /**
55
86
  * Load a generated bundle. `src` is either a URL to the ESM (served by the
56
87
  * API/CDN) or the bundle source as a string (dynamic-imported via a Blob URL).
88
+ * Results are cached by `src`.
57
89
  */
58
90
  export declare function loadGeneratedModule(src: string): Promise<GeneratedUiModule>;
59
91
  export interface MountGeneratedViewOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;mCAEmC;AACnC,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD;yEACqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;gEAEgE;AAChE,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,EAAE,CAAC,CAAC;IACR;;6EAEyE;IACzE,OAAO,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;qBACqB;AACrB,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;0CAG0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,qBAAqB,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CACvF;AAUD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyBjF;AAED,MAAM,WAAW,yBAAyB;IACxC;;mFAE+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,yBAA8B,GACtC,qBAAqB,CAqBvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;mCAEmC;AACnC,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,OAAO;IAClD;yEACqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;gEAEgE;AAChE,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,EAAE,CAAC,CAAC;IACR;;6EAEyE;IACzE,OAAO,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B;;;6EAGyE;IACzE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;mGAI+F;IAC/F,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;mGAI+F;IAC/F,SAAS,CAAC,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CAC3D;AAED;kGACkG;AAClG,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,IAAI,CAqC5E;AAED;qBACqB;AACrB,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;0CAG0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,qBAAqB,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CACvF;AAeD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQ3E;AA6BD,MAAM,WAAW,yBAAyB;IACxC;;mFAE+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,yBAA8B,GACtC,qBAAqB,CA0BvB"}
@@ -8,17 +8,77 @@
8
8
  * never shares a React instance with the bundle, sidestepping duplicate-React
9
9
  * hook errors. The contract here is types + DOM glue only (no React import).
10
10
  */
11
+ /** Load an ES module from a runtime URL. Kept behind a parameter (not a literal import) so a
12
+ * bundler leaves it as a real dynamic import instead of trying to resolve the CDN URL at build. */
13
+ function importFromUrl(url) {
14
+ return import(/* @vite-ignore */ /* webpackIgnore: true */ url);
15
+ }
16
+ /**
17
+ * Attach an HLS URL (from `ctx.tts`) to a media element and make it play on every platform:
18
+ * native HLS where the browser supports it (Safari/iOS), else hls.js loaded on demand from the
19
+ * CDN (Chrome/Firefox/Android). Returns a teardown that detaches the source / destroys hls.js.
20
+ * This is the default `ctx.playMedia` for web (Shadow-DOM) hosts; the WebView/iframe hosts
21
+ * provide an equivalent inline in their bootstrap.
22
+ */
23
+ export function attachHlsMedia(el, url) {
24
+ if (el.canPlayType('application/vnd.apple.mpegurl')) {
25
+ el.src = url;
26
+ return () => {
27
+ el.removeAttribute('src');
28
+ el.load();
29
+ };
30
+ }
31
+ let destroyed = false;
32
+ let hls = null;
33
+ void importFromUrl('https://esm.sh/hls.js@1')
34
+ .then((mod) => {
35
+ if (destroyed)
36
+ return;
37
+ const Hls = (mod.default ?? mod);
38
+ if (!Hls?.isSupported()) {
39
+ el.src = url; // last resort — better than silence
40
+ return;
41
+ }
42
+ const instance = new Hls();
43
+ hls = instance;
44
+ instance.loadSource(url);
45
+ instance.attachMedia(el);
46
+ })
47
+ .catch(() => {
48
+ if (!destroyed)
49
+ el.src = url;
50
+ });
51
+ return () => {
52
+ destroyed = true;
53
+ hls?.destroy();
54
+ };
55
+ }
11
56
  function isGeneratedUiModule(value) {
12
57
  return typeof value?.mount === 'function';
13
58
  }
14
59
  function toViewHandle(result) {
15
60
  return typeof result === 'function' ? { update: () => { }, unmount: result } : result;
16
61
  }
62
+ // Cache loaded modules by source so a remount (e.g. after an in-place edit) reuses the
63
+ // already-imported module instead of re-creating a Blob URL and re-importing — keeping
64
+ // the remount a near-instant re-render rather than an async reload flash.
65
+ const moduleCache = new Map();
17
66
  /**
18
67
  * Load a generated bundle. `src` is either a URL to the ESM (served by the
19
68
  * API/CDN) or the bundle source as a string (dynamic-imported via a Blob URL).
69
+ * Results are cached by `src`.
20
70
  */
21
- export async function loadGeneratedModule(src) {
71
+ export function loadGeneratedModule(src) {
72
+ const cached = moduleCache.get(src);
73
+ if (cached)
74
+ return cached;
75
+ const promise = importGeneratedModule(src);
76
+ moduleCache.set(src, promise);
77
+ // Don't cache a failed load — let a later attempt retry.
78
+ promise.catch(() => moduleCache.delete(src));
79
+ return promise;
80
+ }
81
+ async function importGeneratedModule(src) {
22
82
  const isUrl = /^(https?:|blob:|data:|\/)/.test(src);
23
83
  let url = src;
24
84
  let revoke;
@@ -75,7 +135,13 @@ export function mountGeneratedView(host, mod, props, options = {}) {
75
135
  handle.update(next);
76
136
  },
77
137
  unmount: () => {
78
- handle.unmount();
138
+ // The host app may edit the mounted DOM in place (e.g. contenteditable), which
139
+ // can break the bundle framework's own teardown reconciliation. Swallow that —
140
+ // removing the container below discards the whole subtree regardless.
141
+ try {
142
+ handle.unmount();
143
+ }
144
+ catch { }
79
145
  if (root.contains(container))
80
146
  root.removeChild(container);
81
147
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { BitBitTtsRef } from '../runtime/index.js';
2
+ export interface BitBitMobilePreviewProps {
3
+ /** The mobile bundle source (Preact ESM). */
4
+ code: string;
5
+ /** Field values passed to the bundle as `props.data`. */
6
+ data: unknown;
7
+ /** Render mode override (`ctx.colorScheme`). */
8
+ colorScheme?: 'light' | 'dark';
9
+ /** Brand tokens for `ctx.theme`. Bundles bake their own colors, so usually unused. */
10
+ theme?: Record<string, string>;
11
+ /** Resolve on-demand audio for an `<audio>` player (mint a streaming URL). */
12
+ onTts?: (ref?: BitBitTtsRef) => Promise<string>;
13
+ /** Emulated device logical size (CSS px). Defaults to iPhone 15 Pro Max (430×932). */
14
+ deviceWidth?: number;
15
+ deviceHeight?: number;
16
+ }
17
+ /**
18
+ * Renders a MOBILE piece bundle inside an `<iframe>` so it runs against a real phone-sized
19
+ * viewport: `vw`/`vh`/`100dvh`, `position: fixed`, and safe-area insets all resolve to the
20
+ * frame, matching the native WebView. (A Shadow-DOM mount resolves them against the desktop
21
+ * window instead, rendering the UI ~2-3x oversized.) It reuses the native bootstrap HTML +
22
+ * message protocol; only the parent side of the bridge (data/scheme in, tts out) lives here.
23
+ */
24
+ export declare function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, deviceWidth, deviceHeight, }: BitBitMobilePreviewProps): import("react").DetailedReactHTMLElement<{
25
+ ref: import("react").RefObject<HTMLDivElement>;
26
+ style: {
27
+ position: "relative";
28
+ width: string;
29
+ height: string;
30
+ overflow: "hidden";
31
+ };
32
+ }, HTMLDivElement>;
33
+ //# sourceMappingURL=BitBitMobilePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitBitMobilePreview.d.ts","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,KAAK,EACL,KAAK,EACL,WAA0B,EAC1B,YAA4B,GAC7B,EAAE,wBAAwB;;;;;;;;mBAiI1B"}
@@ -0,0 +1,120 @@
1
+ import { createElement, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { buildBootstrapHtml } from '../react-native-expo/bootstrapHtml.js';
3
+ /** iPhone 15 Pro Max logical viewport (CSS px) — the emulated device. A `<meta viewport>`
4
+ * is ignored inside a desktop iframe, so the ONLY way the bundle sees a real phone-width
5
+ * viewport is to size the iframe to these exact dimensions and scale it down to fit. */
6
+ const DEVICE_WIDTH = 430;
7
+ const DEVICE_HEIGHT = 932;
8
+ /**
9
+ * Renders a MOBILE piece bundle inside an `<iframe>` so it runs against a real phone-sized
10
+ * viewport: `vw`/`vh`/`100dvh`, `position: fixed`, and safe-area insets all resolve to the
11
+ * frame, matching the native WebView. (A Shadow-DOM mount resolves them against the desktop
12
+ * window instead, rendering the UI ~2-3x oversized.) It reuses the native bootstrap HTML +
13
+ * message protocol; only the parent side of the bridge (data/scheme in, tts out) lives here.
14
+ */
15
+ export function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, deviceWidth = DEVICE_WIDTH, deviceHeight = DEVICE_HEIGHT, }) {
16
+ const iframeRef = useRef(null);
17
+ const wrapperRef = useRef(null);
18
+ const dataRef = useRef(data);
19
+ dataRef.current = data;
20
+ const onTtsRef = useRef(onTts);
21
+ onTtsRef.current = onTts;
22
+ const readyRef = useRef(false);
23
+ // Fit the fixed-resolution device into whatever space the frame gives us.
24
+ const [scale, setScale] = useState(1);
25
+ useEffect(() => {
26
+ const el = wrapperRef.current;
27
+ if (!el)
28
+ return;
29
+ const measure = () => {
30
+ const { width, height } = el.getBoundingClientRect();
31
+ if (width > 0 && height > 0)
32
+ setScale(Math.min(width / deviceWidth, height / deviceHeight));
33
+ };
34
+ measure();
35
+ const observer = new ResizeObserver(measure);
36
+ observer.observe(el);
37
+ return () => observer.disconnect();
38
+ }, [deviceWidth, deviceHeight]);
39
+ // Rebuilt only when the bundle changes (which reloads the iframe). `colorScheme` is baked as
40
+ // the initial value and updated live via postMessage after, so a scheme toggle doesn't reload.
41
+ // biome-ignore lint/correctness/useExhaustiveDependencies: bake initial scheme/tts, update live
42
+ const srcDoc = useMemo(() => buildBootstrapHtml({
43
+ bundle: code,
44
+ theme: theme ?? {},
45
+ ...(colorScheme ? { colorScheme } : {}),
46
+ enableTts: onTtsRef.current != null,
47
+ autoHeight: false,
48
+ }), [code]);
49
+ // A reload (new bundle) starts a fresh document — don't push to it until it re-signals ready.
50
+ // biome-ignore lint/correctness/useExhaustiveDependencies: code is a deliberate reset trigger — a new bundle reloads the iframe, so readyRef must clear until it re-signals ready.
51
+ useEffect(() => {
52
+ readyRef.current = false;
53
+ }, [code]);
54
+ useEffect(() => {
55
+ const send = (m) => iframeRef.current?.contentWindow?.postMessage(m, '*');
56
+ const onMessage = (e) => {
57
+ if (e.source !== iframeRef.current?.contentWindow)
58
+ return;
59
+ const m = e.data;
60
+ if (!m || typeof m !== 'object')
61
+ return;
62
+ if (m.kind === 'ready') {
63
+ readyRef.current = true;
64
+ send({ kind: 'update', data: dataRef.current });
65
+ }
66
+ else if (m.kind === 'tts') {
67
+ const fn = onTtsRef.current;
68
+ const id = m.id;
69
+ if (!fn) {
70
+ send({ kind: 'resolveTts', id, error: 'Audio unavailable' });
71
+ return;
72
+ }
73
+ Promise.resolve(fn(m.ref)).then((url) => send({ kind: 'resolveTts', id, url }), (err) => send({
74
+ kind: 'resolveTts',
75
+ id,
76
+ error: err instanceof Error ? err.message : 'Could not load audio',
77
+ }));
78
+ }
79
+ };
80
+ window.addEventListener('message', onMessage);
81
+ return () => window.removeEventListener('message', onMessage);
82
+ }, []);
83
+ // Push fresh field values once the iframe is ready, and on every change after.
84
+ useEffect(() => {
85
+ if (readyRef.current)
86
+ iframeRef.current?.contentWindow?.postMessage({ kind: 'update', data }, '*');
87
+ }, [data]);
88
+ // Live light/dark without reloading.
89
+ useEffect(() => {
90
+ if (readyRef.current)
91
+ iframeRef.current?.contentWindow?.postMessage({ kind: 'setColorScheme', scheme: colorScheme ?? null }, '*');
92
+ }, [colorScheme]);
93
+ // The iframe renders at the device's real resolution (so the bundle sees a 430px viewport);
94
+ // a centered scale() shrinks it to fit the frame without touching the internal layout.
95
+ return createElement('div', {
96
+ ref: wrapperRef,
97
+ style: {
98
+ position: 'relative',
99
+ width: '100%',
100
+ height: '100%',
101
+ overflow: 'hidden',
102
+ },
103
+ }, createElement('div', {
104
+ style: {
105
+ position: 'absolute',
106
+ top: '50%',
107
+ left: '50%',
108
+ width: deviceWidth,
109
+ height: deviceHeight,
110
+ transform: `translate(-50%, -50%) scale(${scale})`,
111
+ transformOrigin: 'center center',
112
+ },
113
+ }, createElement('iframe', {
114
+ ref: iframeRef,
115
+ srcDoc,
116
+ title: 'Mobile preview',
117
+ style: { width: '100%', height: '100%', border: '0', display: 'block' },
118
+ })));
119
+ }
120
+ //# sourceMappingURL=BitBitMobilePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitBitMobilePreview.js","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Studio-only entry (`@bitbitpress/client/studio`) — first-party authoring tools for the
3
+ * BitBit studio, NOT part of the customer-facing runtime. Kept in this package (not bitbit-web)
4
+ * so the mobile preview stays byte-faithful to the native WebView bootstrap it reuses.
5
+ */
6
+ export { BitBitMobilePreview, type BitBitMobilePreviewProps, } from './BitBitMobilePreview.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/studio/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Studio-only entry (`@bitbitpress/client/studio`) — first-party authoring tools for the
3
+ * BitBit studio, NOT part of the customer-facing runtime. Kept in this package (not bitbit-web)
4
+ * so the mobile preview stays byte-faithful to the native WebView bootstrap it reuses.
5
+ */
6
+ export { BitBitMobilePreview, } from './BitBitMobilePreview.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/studio/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,mBAAmB,GAEpB,MAAM,0BAA0B,CAAC"}
@@ -6,6 +6,7 @@ import { type RecommendationsRequest, type RecommendationsResponse } from './rec
6
6
  import { type ReportRequest, type ReportResponse } from './report.js';
7
7
  import { type Signal, type SignalRequest, type SignalResponse } from './signal.js';
8
8
  import { type CreateUserSubmissionRequest, type CreateUserSubmissionResponse, type ListUserSubmissionsRequest, type ListUserSubmissionsResponse, type SubmissionFeed, type SubmissionState, type SubmitRequest, type SubmitResponse } from './submissions.js';
9
+ import { type SynthesisPieceResponse, type SynthesisPieceTtsRef } from './synthesisPiece.js';
9
10
  import { type SynthesizeEvent, type SynthesizeItemResponse } from './synthesize.js';
10
11
  import { type SynthesizeOnStreamingData } from './synthesize-batch-manager.js';
11
12
  import { type SynthesisUiStreamEvent, type SynthesizeUiEvent, type SynthesizeUiRequest, type SynthesizeUiRequestItem } from './synthesizeUi.js';
@@ -129,6 +130,13 @@ export interface UserMethods {
129
130
  * @param event - Single event to record
130
131
  */
131
132
  trackItem(event: TrackEvent): Promise<NonNullable<TrackResponse>>;
133
+ /**
134
+ * Record a single SynthesisPiece embed event (batched) — the piece counterpart of `trackItem`,
135
+ * posted to the dedicated piece-events endpoint so a shared keyName is never misattributed.
136
+ *
137
+ * @param event - Single event to record
138
+ */
139
+ trackPieceItem(event: TrackEvent): Promise<NonNullable<TrackResponse>>;
132
140
  /**
133
141
  * Synthesize content items personalized to the user (streaming SSE).
134
142
  *
@@ -180,6 +188,25 @@ export interface UserMethods {
180
188
  * (bundles + theme) then per-item data events, index-matched to `items`.
181
189
  */
182
190
  synthesizeUis(items: SynthesizeUiRequestItem[], platform?: SynthesizeUiRequest['platform']): Promise<AsyncIterable<SynthesizeUiEvent>>;
191
+ /**
192
+ * Resolve a published synthesis piece for embedding by `keyName` — its generated
193
+ * web bundle, current field values (incl. pre-generated `audioData.url`s), and
194
+ * deployment theme. This is the path `<BitBitPiece keyName>` uses under the hood.
195
+ *
196
+ * @param keyName - Stable identifier of the piece to embed
197
+ */
198
+ getSynthesisPiece(keyName: string): Promise<SynthesisPieceResponse>;
199
+ /**
200
+ * Mint a short-lived streaming audio URL for a published piece's spoken turns — the
201
+ * on-demand TTS a rendered audio player calls on play. Pass one turn for a single narration,
202
+ * or several (each its own voice) for a multi-speaker dialogue synthesized as one clip. Every
203
+ * turn's `text` must be part of the piece (`keyName`). This is the path `<BitBitPiece
204
+ * keyName>` wires into `ctx.tts` under the hood.
205
+ *
206
+ * @param keyName - Stable identifier of the piece the turns belong to
207
+ * @param turns - The ordered turns to synthesize
208
+ */
209
+ synthesisPieceTtsUrl(keyName: string, ref?: SynthesisPieceTtsRef): Promise<string>;
183
210
  }
184
211
  /**
185
212
  * User-related API methods (uses shared auth store).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ const report_js_1 = require("./report.js");
8
8
  const signal_js_1 = require("./signal.js");
9
9
  const signal_batch_manager_js_1 = require("./signal-batch-manager.js");
10
10
  const submissions_js_1 = require("./submissions.js");
11
+ const synthesisPiece_js_1 = require("./synthesisPiece.js");
11
12
  const synthesize_js_1 = require("./synthesize.js");
12
13
  const synthesize_batch_manager_js_1 = require("./synthesize-batch-manager.js");
13
14
  const synthesizeUi_js_1 = require("./synthesizeUi.js");
@@ -21,7 +22,8 @@ function createUserMethods(authStore, config, synthesizeBatchTimeout = 250, sign
21
22
  const getConfigWithToken = authStore.getConfigWithToken.bind(authStore);
22
23
  const synthesizeBatchManager = new synthesize_batch_manager_js_1.SynthesizeBatchManager(getConfigWithToken, synthesizeBatchTimeout);
23
24
  const signalBatchManager = new signal_batch_manager_js_1.SignalBatchManager(getConfigWithToken, signalBatchTimeout);
24
- const trackBatchManager = new track_batch_manager_js_1.TrackBatchManager(getConfigWithToken, signalBatchTimeout);
25
+ const trackBatchManager = new track_batch_manager_js_1.TrackBatchManager(getConfigWithToken, signalBatchTimeout, track_js_1.recordEvents);
26
+ const pieceTrackBatchManager = new track_batch_manager_js_1.TrackBatchManager(getConfigWithToken, signalBatchTimeout, track_js_1.recordPieceEvents);
25
27
  return {
26
28
  authenticate: authStore.authenticate.bind(authStore),
27
29
  token: (ssoToken) => (0, token_js_1.exchangeToken)(config, ssoToken),
@@ -38,12 +40,15 @@ function createUserMethods(authStore, config, synthesizeBatchTimeout = 250, sign
38
40
  signalItem: (signal) => signalBatchManager.addSignal(signal),
39
41
  track: (options) => getConfigWithToken().then((cfg) => (0, track_js_1.recordEvents)(cfg, options)),
40
42
  trackItem: (event) => trackBatchManager.addEvent(event),
43
+ trackPieceItem: (event) => pieceTrackBatchManager.addEvent(event),
41
44
  synthesize: (items, options) => getConfigWithToken().then((cfg) => (0, synthesize_js_1.synthesize)(cfg, items, options)),
42
45
  synthesizeItem: (item, onStreamingData) => synthesizeBatchManager.addItem(item, onStreamingData),
43
46
  interactions: (options) => getConfigWithToken().then((cfg) => (0, interaction_js_1.getInteractions)(cfg, options)),
44
47
  respondToInteraction: (interactionId, options) => getConfigWithToken().then((cfg) => (0, interaction_js_1.respondToInteraction)(cfg, interactionId, options)),
45
48
  synthesizeUi: (request) => getConfigWithToken().then((cfg) => (0, synthesizeUi_js_1.synthesizeUi)(cfg, request)),
46
49
  synthesizeUis: (items, platform) => getConfigWithToken().then((cfg) => (0, synthesizeUi_js_1.synthesizeUis)(cfg, items, platform)),
50
+ getSynthesisPiece: (keyName) => getConfigWithToken().then((cfg) => (0, synthesisPiece_js_1.getSynthesisPiece)(cfg, keyName)),
51
+ synthesisPieceTtsUrl: (keyName, ref) => getConfigWithToken().then((cfg) => (0, synthesisPiece_js_1.synthesisPieceTtsUrl)(cfg, keyName, ref)),
47
52
  };
48
53
  }
49
54
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":";;AAiTA,8CAgGC;AA/YD,qDAO0B;AAC1B,6CAKsB;AACtB,6DAI8B;AAC9B,2CAAiF;AACjF,2CAAiG;AACjG,uEAA+D;AAC/D,qDAc0B;AAC1B,2DAK6B;AAC7B,mDAAgG;AAChG,+EAGuC;AACvC,uDAO2B;AAC3B,yCAAkF;AAClF,yCAMoB;AACpB,qEAA6D;AA4O7D;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,SAAoB,EACpB,MAAqB,EACrB,yBAAiC,GAAG,EACpC,qBAA6B,GAAG;IAEhC,MAAM,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExE,MAAM,sBAAsB,GAAG,IAAI,oDAAsB,CACvD,kBAAkB,EAClB,sBAAsB,CACvB,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAI,4CAAkB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC1F,MAAM,iBAAiB,GAAG,IAAI,0CAAiB,CAC7C,kBAAkB,EAClB,kBAAkB,EAClB,uBAAY,CACb,CAAC;IACF,MAAM,sBAAsB,GAAG,IAAI,0CAAiB,CAClD,kBAAkB,EAClB,kBAAkB,EAClB,4BAAiB,CAClB,CAAC;IAEF,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAEpD,KAAK,EAAE,CAAC,QAAkC,EAAE,EAAE,CAAC,IAAA,wBAAa,EAAC,MAAM,EAAE,QAAQ,CAAC;QAE9E,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,uBAAU,CAAC;QAEpD,aAAa,EAAE,CAAC,OAA6B,EAAE,EAAE,CAC/C,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE9D,eAAe,EAAE,CAAC,OAAgC,EAAE,EAAE,CACpD,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uCAAkB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEtE,MAAM,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE/F,gBAAgB,EAAE,CAAC,OAAoC,EAAE,EAAE,CACzD,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,qCAAoB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAExE,WAAW,EAAE,CAAC,OAAe,EAAE,OAAoC,EAAE,EAAE,CACrE,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,oCAAmB,EAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEhF,MAAM,EAAE,CAAC,OAAsB,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uBAAM,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE5F,eAAe,EAAE,CAAC,OAA0E,EAAE,EAAE,CAC9F,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,mCAAkB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEtE,cAAc,EAAE,CAAC,OAAsE,EAAE,EAAE,CACzF,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,mCAAkB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEtE,MAAM,EAAE,CAAC,OAAsB,EAAE,EAAE,CACjC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,wBAAY,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEhE,UAAU,EAAE,CAAC,MAAc,EAAwC,EAAE,CACnE,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC;QAEtC,KAAK,EAAE,CAAC,OAAqB,EAAE,EAAE,CAC/B,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uBAAY,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEhE,SAAS,EAAE,CAAC,KAAiB,EAAuC,EAAE,CACpE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEnC,cAAc,EAAE,CAAC,KAAiB,EAAuC,EAAE,CACzE,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAExC,UAAU,EAAE,CACV,KAAsB,EACtB,OAAsE,EACtE,EAAE,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,0BAAU,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExE,cAAc,EAAE,CACd,IAAoB,EACpB,eAA2C,EACV,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;QAE3F,YAAY,EAAE,CAAC,OAA4B,EAAE,EAAE,CAC7C,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gCAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEnE,oBAAoB,EAAE,CAAC,aAAqB,EAAE,OAAmC,EAAE,EAAE,CACnF,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,qCAAoB,EAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAEvF,YAAY,EAAE,CAAC,OAA4B,EAAE,EAAE,CAC7C,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,8BAAY,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEhE,aAAa,EAAE,CAAC,KAAgC,EAAE,QAA0C,EAAE,EAAE,CAC9F,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,+BAAa,EAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEzE,iBAAiB,EAAE,CAAC,OAAe,EAAE,EAAE,CACrC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,qCAAiB,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAErE,oBAAoB,EAAE,CAAC,OAAe,EAAE,GAA0B,EAAE,EAAE,CACpE,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,wCAAoB,EAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;KAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { paths } from '../generated/openapi.js';
2
+ import type { RequestConfig } from '../request.js';
3
+ /** A resolved published piece: its generated web bundle + current field values +
4
+ * deployment theme, ready to mount via `<BitBitPiece>`. */
5
+ export type SynthesisPieceResponse = {
6
+ uiWebCode: string;
7
+ fields: Record<string, unknown>;
8
+ theme: Record<string, string>;
9
+ };
10
+ /**
11
+ * Resolve a published synthesis piece for embedding by its `keyName`: the
12
+ * generated web bundle (`uiWebCode`), current field values (`fields`, including
13
+ * any pre-generated `audioData.url`s), and deployment `theme`. Used by
14
+ * `<BitBitPiece keyName>`. Hits the batch endpoint with a single item.
15
+ *
16
+ * @param config - Request configuration with base URL, timeout, fetch, and optional token
17
+ * @param keyName - Stable identifier of the piece to embed
18
+ * @returns Promise resolving with the piece's bundle, fields, and theme
19
+ */
20
+ export declare function getSynthesisPiece(config: RequestConfig, keyName: string): Promise<SynthesisPieceResponse>;
21
+ type SynthesisPieceTtsBody = paths['/v1/user/synthesis-piece/tts']['post']['requestBody']['content']['application/json'];
22
+ /** A reference into a published piece's spoken content — omit for the whole piece, `field` scopes
23
+ * to a top-level field, `index` picks a single turn. The text lives in the piece. */
24
+ export type SynthesisPieceTtsRef = Pick<SynthesisPieceTtsBody, 'field' | 'index'>;
25
+ /**
26
+ * Mint a short-lived HLS URL for a published piece's spoken content — the on-demand TTS entry
27
+ * point a rendered audio player calls on play (via `ctx.tts`). The request REFERENCES the piece's
28
+ * content (omit `ref` for the whole piece, `field` to scope, `index` for a single turn); the
29
+ * server resolves the turns from the piece itself. Play the returned URL via `ctx.playMedia`.
30
+ *
31
+ * @param config - Request configuration with base URL, timeout, fetch, and optional token
32
+ * @param keyName - Stable identifier of the piece to voice
33
+ * @param ref - Optional reference into the piece's spoken content
34
+ * @returns Promise resolving with the playable streaming URL
35
+ */
36
+ export declare function synthesisPieceTtsUrl(config: RequestConfig, keyName: string, ref?: SynthesisPieceTtsRef): Promise<string>;
37
+ export {};
38
+ //# sourceMappingURL=synthesisPiece.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthesisPiece.d.ts","sourceRoot":"","sources":["../../src/user/synthesisPiece.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMnD;4DAC4D;AAC5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,CAAC,CAgBjC;AAED,KAAK,qBAAqB,GACxB,KAAK,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAI9F;sFACsF;AACtF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;AAElF;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,oBAAoB,GACzB,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSynthesisPiece = getSynthesisPiece;
4
+ exports.synthesisPieceTtsUrl = synthesisPieceTtsUrl;
5
+ const request_js_1 = require("../request.js");
6
+ /**
7
+ * Resolve a published synthesis piece for embedding by its `keyName`: the
8
+ * generated web bundle (`uiWebCode`), current field values (`fields`, including
9
+ * any pre-generated `audioData.url`s), and deployment `theme`. Used by
10
+ * `<BitBitPiece keyName>`. Hits the batch endpoint with a single item.
11
+ *
12
+ * @param config - Request configuration with base URL, timeout, fetch, and optional token
13
+ * @param keyName - Stable identifier of the piece to embed
14
+ * @returns Promise resolving with the piece's bundle, fields, and theme
15
+ */
16
+ async function getSynthesisPiece(config, keyName) {
17
+ const response = await (0, request_js_1.makeRequest)(config, {
18
+ method: 'POST',
19
+ path: '/v1/user/synthesis-piece',
20
+ body: { items: [{ keyName }] },
21
+ });
22
+ const item = response?.items?.[0];
23
+ if (!item || item.error || typeof item.uiWebCode !== 'string') {
24
+ throw new Error(item?.error ?? 'Failed to load piece: no data in response');
25
+ }
26
+ return {
27
+ uiWebCode: item.uiWebCode,
28
+ fields: (item.fields ?? {}),
29
+ theme: response.theme,
30
+ };
31
+ }
32
+ /**
33
+ * Mint a short-lived HLS URL for a published piece's spoken content — the on-demand TTS entry
34
+ * point a rendered audio player calls on play (via `ctx.tts`). The request REFERENCES the piece's
35
+ * content (omit `ref` for the whole piece, `field` to scope, `index` for a single turn); the
36
+ * server resolves the turns from the piece itself. Play the returned URL via `ctx.playMedia`.
37
+ *
38
+ * @param config - Request configuration with base URL, timeout, fetch, and optional token
39
+ * @param keyName - Stable identifier of the piece to voice
40
+ * @param ref - Optional reference into the piece's spoken content
41
+ * @returns Promise resolving with the playable streaming URL
42
+ */
43
+ async function synthesisPieceTtsUrl(config, keyName, ref) {
44
+ const response = await (0, request_js_1.makeRequest)(config, {
45
+ method: 'POST',
46
+ path: '/v1/user/synthesis-piece/tts',
47
+ body: {
48
+ keyName,
49
+ ...(ref?.field != null ? { field: ref.field } : {}),
50
+ ...(ref?.index != null ? { index: ref.index } : {}),
51
+ },
52
+ });
53
+ if (!response?.url) {
54
+ throw new Error(response?.error ?? 'Failed to synthesize audio');
55
+ }
56
+ return response.url;
57
+ }
58
+ //# sourceMappingURL=synthesisPiece.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthesisPiece.js","sourceRoot":"","sources":["../../src/user/synthesisPiece.ts"],"names":[],"mappings":";;AAyBA,8CAmBC;AAsBD,oDAkBC;AAlFD,8CAA4C;AAa5C;;;;;;;;;GASG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAAqB,EACrB,OAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAA0B,MAAM,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,0BAA0B;QAChC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;KAC/B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,2CAA2C,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA4B;QACtD,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC;AAWD;;;;;;;;;;GAUG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,OAAe,EACf,GAA0B;IAE1B,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAW,EAAwB,MAAM,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,8BAA8B;QACpC,IAAI,EAAE;YACJ,OAAO;YACP,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD;KACF,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,4BAA4B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC;AACtB,CAAC"}
@@ -1,17 +1,23 @@
1
1
  import type { RequestConfig } from '../request.js';
2
- import { type TrackEvent, type TrackResponse } from './track.js';
2
+ import type { TrackEvent, TrackResponse } from './track.js';
3
+ /** Sends a batch of events to a specific endpoint (UI `/events` or piece `/piece-events`). */
4
+ type RecordFn = (config: RequestConfig, options: {
5
+ events: TrackEvent[];
6
+ }) => Promise<NonNullable<TrackResponse>>;
3
7
  /**
4
- * Batch manager for `trackItem` — batches individual events and sends them
5
- * together after the timeout. Mirrors SignalBatchManager.
8
+ * Batch manager for `trackItem` / `trackPieceItem` — batches individual events and sends them
9
+ * together after the timeout via the injected `record` function. Mirrors SignalBatchManager.
6
10
  */
7
11
  export declare class TrackBatchManager {
8
12
  private queue;
9
13
  private timer;
10
14
  private getConfig;
11
15
  private batchTimeout;
12
- constructor(getConfig: () => Promise<RequestConfig>, batchTimeout: number);
16
+ private record;
17
+ constructor(getConfig: () => Promise<RequestConfig>, batchTimeout: number, record: RecordFn);
13
18
  updateConfig(config: RequestConfig): void;
14
19
  addEvent(event: TrackEvent): Promise<NonNullable<TrackResponse>>;
15
20
  private flush;
16
21
  }
22
+ export {};
17
23
  //# sourceMappingURL=track-batch-manager.d.ts.map