@elevenlabs/react 1.12.0 → 1.12.2

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 (32) hide show
  1. package/dist/conversation/ConversationClientTools.d.ts +1 -1
  2. package/dist/conversation/ConversationClientTools.d.ts.map +1 -1
  3. package/dist/conversation/ConversationControls.d.ts +1 -1
  4. package/dist/conversation/ConversationControls.d.ts.map +1 -1
  5. package/dist/conversation/ConversationFeedback.d.ts +1 -1
  6. package/dist/conversation/ConversationFeedback.d.ts.map +1 -1
  7. package/dist/conversation/ConversationInput.d.ts +1 -1
  8. package/dist/conversation/ConversationInput.d.ts.map +1 -1
  9. package/dist/conversation/ConversationMode.d.ts +1 -1
  10. package/dist/conversation/ConversationMode.d.ts.map +1 -1
  11. package/dist/conversation/ConversationProvider.d.ts +1 -1
  12. package/dist/conversation/ConversationProvider.d.ts.map +1 -1
  13. package/dist/conversation/ConversationProvider.js +82 -22
  14. package/dist/conversation/ConversationProvider.js.map +1 -1
  15. package/dist/conversation/ConversationStatus.d.ts +1 -1
  16. package/dist/conversation/ConversationStatus.d.ts.map +1 -1
  17. package/dist/conversation/ConversationStatus.js +5 -5
  18. package/dist/conversation/ConversationStatus.js.map +1 -1
  19. package/dist/conversation/types.d.ts +1 -1
  20. package/dist/conversation/types.d.ts.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib.iife.js +39 -17
  25. package/dist/lib.iife.js.map +1 -1
  26. package/dist/scribe.d.ts +14 -2
  27. package/dist/scribe.d.ts.map +1 -1
  28. package/dist/scribe.js +6 -0
  29. package/dist/scribe.js.map +1 -1
  30. package/dist/version.d.ts +1 -1
  31. package/dist/version.js +1 -1
  32. package/package.json +5 -5
@@ -7,7 +7,7 @@ type ClientToolEntry = ClientToolsConfig["clientTools"][string];
7
7
  * name conflicts with an option-provided tool.
8
8
  */
9
9
  export declare function buildClientTools(optionTools: Record<string, ClientToolEntry> | undefined, registry: Map<string, ClientToolEntry>): Record<string, ClientToolEntry>;
10
- export declare function ConversationClientToolsProvider({ children, }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
10
+ export declare function ConversationClientToolsProvider({ children, }: React.PropsWithChildren): import("react").JSX.Element;
11
11
  /**
12
12
  * Registers a named client tool with the nearest `ConversationProvider`.
13
13
  * The tool is available during any active conversation and is automatically
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationClientTools.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationClientTools.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,KAAK,eAAe,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAYjC;AAeD,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,2CAqCzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,SAAS,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvD,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,MAAM,EAC3D,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAiB3C"}
1
+ {"version":3,"file":"ConversationClientTools.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationClientTools.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,KAAK,eAAe,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAYjC;AAeD,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,+BAqCzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,SAAS,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvD,KAAK,SAAS,MAAM,GAAG,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,MAAM,EAC3D,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAiB3C"}
@@ -27,7 +27,7 @@ export declare const ConversationControlsContext: import("react").Context<Conver
27
27
  * Reads from `ConversationContext` and provides stable action references to
28
28
  * `ConversationControlsContext`. Must be rendered inside a `ConversationProvider`.
29
29
  */
30
- export declare function ConversationControlsProvider({ children, }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
30
+ export declare function ConversationControlsProvider({ children, }: React.PropsWithChildren): import("react").JSX.Element;
31
31
  /**
32
32
  * Returns stable action references for controlling the conversation.
33
33
  * All function references are stable and will never cause re-renders.
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationControls.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationControls.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACjE,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtD,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,uBAAuB,KAC9B,IAAI,CAAC;IACV,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,yBAAyB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7E,SAAS,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjD,iBAAiB,EAAE,CACjB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,iBAAiB,KAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,kBAAkB,EAAE,CAClB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,KACzC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,iFAAiF;IACjF,yBAAyB,EAAE,MAAM,UAAU,CAAC;IAC5C,kFAAkF;IAClF,0BAA0B,EAAE,MAAM,UAAU,CAAC;IAC7C,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,2DACe,CAAC;AAExD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,2CAgKzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,yBAAyB,CAQnE"}
1
+ {"version":3,"file":"ConversationControls.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationControls.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACjE,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtD,oBAAoB,EAAE,CACpB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,uBAAuB,KAC9B,IAAI,CAAC;IACV,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,yBAAyB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7E,SAAS,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjD,iBAAiB,EAAE,CACjB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,iBAAiB,KAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,kBAAkB,EAAE,CAClB,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,KACzC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,iFAAiF;IACjF,yBAAyB,EAAE,MAAM,UAAU,CAAC;IAC5C,kFAAkF;IAClF,0BAA0B,EAAE,MAAM,UAAU,CAAC;IAC7C,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,2DACe,CAAC;AAExD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,+BAgKzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,yBAAyB,CAQnE"}
@@ -8,7 +8,7 @@ export type ConversationFeedbackValue = {
8
8
  * a `sendFeedback` action through `ConversationFeedbackContext`.
9
9
  * Must be rendered inside a `ConversationProvider`.
10
10
  */
11
- export declare function ConversationFeedbackProvider({ children, }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
11
+ export declare function ConversationFeedbackProvider({ children, }: React.PropsWithChildren): import("react").JSX.Element;
12
12
  /**
13
13
  * Returns the current feedback state and a `sendFeedback` action.
14
14
  * Re-renders only when `canSendFeedback` changes.
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationFeedback.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationFeedback.tsx"],"names":[],"mappings":"AAYA,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,2CAiCzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,yBAAyB,CAQnE"}
1
+ {"version":3,"file":"ConversationFeedback.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationFeedback.tsx"],"names":[],"mappings":"AAYA,MAAM,MAAM,yBAAyB,GAAG;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAChE,CAAC;AAKF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,+BAiCzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,yBAAyB,CAQnE"}
@@ -13,7 +13,7 @@ export type ConversationInputProviderProps = React.PropsWithChildren<{
13
13
  * `setMuted` calls `conversation.setMicMuted()` and updates local state.
14
14
  * Must be rendered inside a `ConversationProvider`.
15
15
  */
16
- export declare function ConversationInputProvider({ children, isMuted: controlledIsMuted, onMutedChange, }: ConversationInputProviderProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function ConversationInputProvider({ children, isMuted: controlledIsMuted, onMutedChange, }: ConversationInputProviderProps): import("react").JSX.Element;
17
17
  /**
18
18
  * Returns the current microphone mute state and a function to change it.
19
19
  * Re-renders only when the mute state changes.
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationInput.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationInput.tsx"],"names":[],"mappings":"AAcA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACnE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C,CAAC,CAAC;AAMH;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,OAAO,EAAE,iBAAiB,EAC1B,aAAa,GACd,EAAE,8BAA8B,2CA8ChC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D"}
1
+ {"version":3,"file":"ConversationInput.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationInput.tsx"],"names":[],"mappings":"AAcA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACnE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C,CAAC,CAAC;AAMH;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,OAAO,EAAE,iBAAiB,EAC1B,aAAa,GACd,EAAE,8BAA8B,+BA8ChC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D"}
@@ -8,7 +8,7 @@ export type ConversationModeValue = {
8
8
  * Manages its own `mode` state and provides it through
9
9
  * `ConversationModeContext`. Must be rendered inside a `ConversationProvider`.
10
10
  */
11
- export declare function ConversationModeProvider({ children, }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
11
+ export declare function ConversationModeProvider({ children, }: React.PropsWithChildren): import("react").JSX.Element;
12
12
  /**
13
13
  * Returns the current conversation mode (speaking/listening) and
14
14
  * convenience booleans. Re-renders only when the mode changes.
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationMode.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationMode.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,2CA0BzB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,CAQ3D"}
1
+ {"version":3,"file":"ConversationMode.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationMode.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,UAAU,GAAG,WAAW,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,+BA0BzB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,qBAAqB,CAQ3D"}
@@ -2,6 +2,6 @@ import { type HookOptions } from "./types.js";
2
2
  import { type ConversationInputProviderProps } from "./ConversationInput.js";
3
3
  type ConversationInputControlProps = Pick<ConversationInputProviderProps, "isMuted" | "onMutedChange">;
4
4
  export type ConversationProviderProps = React.PropsWithChildren<HookOptions & ConversationInputControlProps>;
5
- export declare function ConversationProvider({ children, isMuted, onMutedChange, ...defaultOptions }: ConversationProviderProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function ConversationProvider({ children, isMuted, onMutedChange, ...defaultOptions }: ConversationProviderProps): import("react").JSX.Element;
6
6
  export {};
7
7
  //# sourceMappingURL=ConversationProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationProvider.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationProvider.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,wBAAwB,CAAC;AAUhC,KAAK,6BAA6B,GAAG,IAAI,CACvC,8BAA8B,EAC9B,SAAS,GAAG,eAAe,CAC5B,CAAC;AAUF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,iBAAiB,CAC7D,WAAW,GAAG,6BAA6B,CAC5C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,OAAO,EACP,aAAa,EACb,GAAG,cAAc,EAClB,EAAE,yBAAyB,2CA4N3B"}
1
+ {"version":3,"file":"ConversationProvider.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationProvider.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,wBAAwB,CAAC;AAUhC,KAAK,6BAA6B,GAAG,IAAI,CACvC,8BAA8B,EAC9B,SAAS,GAAG,eAAe,CAC5B,CAAC;AAWF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,iBAAiB,CAC7D,WAAW,GAAG,6BAA6B,CAC5C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,OAAO,EACP,aAAa,EACb,GAAG,cAAc,EAClB,EAAE,yBAAyB,+BA8S3B"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from "react";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
3
  import { Conversation, } from "@elevenlabs/client";
4
4
  import { CALLBACK_KEYS, mergeOptions, parseLocation, getOriginForLocation, getLivekitUrlForLocation, } from "@elevenlabs/client/internal";
5
5
  import { ConversationContext, } from "./ConversationContext.js";
@@ -41,17 +41,6 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
41
41
  const [conversation, setConversation] = useState(null);
42
42
  const stableCallbacks = useStableCallbacks(defaultOptions);
43
43
  const registerCallbacks = useCallback((callbacks) => listenerMap.register(callbacks), [listenerMap]);
44
- // Sync provider state when session ends externally (agent disconnect,
45
- // raw instance endSession(), etc.). Uses the listener map so it composes
46
- // with user-provided onDisconnect callbacks.
47
- useLayoutEffect(() => {
48
- return listenerMap.register({
49
- onDisconnect: () => {
50
- conversationRef.current = null;
51
- setConversation(null);
52
- },
53
- });
54
- }, [listenerMap]);
55
44
  const startSession = useCallback((options) => {
56
45
  if (conversationRef.current) {
57
46
  return;
@@ -75,9 +64,33 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
75
64
  const clientTools = buildClientTools(sessionOptions.clientTools, clientToolsRegistry);
76
65
  clientToolsRef.current = clientTools;
77
66
  sessionOptions.clientTools = clientTools;
78
- const userOnConversationCreated = sessionOptions.onConversationCreated;
79
67
  const isStaleStartSession = () => startSessionId !== startSessionIdRef.current;
68
+ // A superseded session can outlive its replacement's start: its async
69
+ // teardown keeps emitting events (final "disconnected", teardown
70
+ // onDisconnect, errors) that would otherwise reach the listener map
71
+ // and clobber sub-provider state now reflecting the newer session
72
+ // (e.g. ConversationModeProvider resets mode on onDisconnect). Drop
73
+ // every callback once this start is stale.
74
+ for (const key of CALLBACK_KEYS) {
75
+ const callback = sessionOptions[key];
76
+ if (typeof callback === "function") {
77
+ sessionOptions[key] = (...args) => {
78
+ if (!isStaleStartSession()) {
79
+ callback(...args);
80
+ }
81
+ };
82
+ }
83
+ }
84
+ const userOnConversationCreated = sessionOptions.onConversationCreated;
85
+ const userOnDisconnect = sessionOptions.onDisconnect;
86
+ // Set once this session's conversation is known. endSession() clears
87
+ // conversationRef optimistically (so restart-from-callback patterns
88
+ // keep working), which means a session's own onDisconnect can still
89
+ // arrive after a *newer* session has taken the ref — this check stops
90
+ // that late arrival from clearing state that isn't its own.
91
+ let thisSessionConv = null;
80
92
  const handleConversationCreated = (conv) => {
93
+ thisSessionConv = conv;
81
94
  if (shouldEndRef.current || isStaleStartSession()) {
82
95
  return;
83
96
  }
@@ -92,9 +105,43 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
92
105
  lockRef.current = null;
93
106
  sessionOptions.onConnect?.(props);
94
107
  };
108
+ // "disconnecting" marks the moment the session stops being usable, on
109
+ // every path (agent hangup, raw endSession(), provider endSession()) —
110
+ // release the conversation here so it clears in the same React batch
111
+ // as the status transition, and consumers never observe a live status
112
+ // with a released conversation (or vice versa). Stale sessions are
113
+ // dropped entirely so a late "disconnected" can't clobber the status
114
+ // of a session that replaced this one.
115
+ const handleStatusChange = props => {
116
+ if (isStaleStartSession()) {
117
+ return;
118
+ }
119
+ if (props.status === "disconnecting" &&
120
+ thisSessionConv !== null &&
121
+ conversationRef.current === thisSessionConv) {
122
+ conversationRef.current = null;
123
+ setConversation(null);
124
+ }
125
+ sessionOptions.onStatusChange?.(props);
126
+ };
127
+ // Syncs provider state when this session ends, whether externally
128
+ // (agent disconnect) or via endSession(). Only clears conversationRef
129
+ // if it still points at this session's conversation.
130
+ const handleDisconnect = details => {
131
+ if (isStaleStartSession()) {
132
+ return;
133
+ }
134
+ if (conversationRef.current === thisSessionConv) {
135
+ conversationRef.current = null;
136
+ setConversation(null);
137
+ }
138
+ userOnDisconnect?.(details);
139
+ };
95
140
  const providerLifecycleOptions = {
96
141
  onConversationCreated: handleConversationCreated,
97
142
  onConnect: handleConnect,
143
+ onDisconnect: handleDisconnect,
144
+ onStatusChange: handleStatusChange,
98
145
  };
99
146
  const startSessionOptions = {
100
147
  ...sessionOptions,
@@ -106,11 +153,14 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
106
153
  return;
107
154
  }
108
155
  if (shouldEndRef.current) {
109
- conv.endSession();
156
+ conv
157
+ .endSession()
158
+ .catch(error => console.warn("Error ending session:", error));
110
159
  lockRef.current = null;
111
160
  return;
112
161
  }
113
162
  if (conversationRef.current !== conv) {
163
+ thisSessionConv = conv;
114
164
  conversationRef.current = conv;
115
165
  setConversation(conv);
116
166
  }
@@ -129,9 +179,7 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
129
179
  // rejecting, but never calls onError — surface the failure here
130
180
  // so listeners (e.g. ConversationStatusProvider) transition to
131
181
  // the "error" state with a meaningful message.
132
- const message = error instanceof Error
133
- ? error.message
134
- : "Session failed to start";
182
+ const message = error instanceof Error ? error.message : "Session failed to start";
135
183
  sessionOptions.onError?.(message, error);
136
184
  });
137
185
  }, [stableCallbacks, listenerMap, clientToolsRegistry, clientToolsRef]);
@@ -142,10 +190,14 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
142
190
  conversationRef.current = null;
143
191
  setConversation(null);
144
192
  if (pendingConnection) {
145
- pendingConnection.then(c => c.endSession(), () => { });
193
+ pendingConnection.then(c => c
194
+ .endSession()
195
+ .catch(error => console.warn("Error ending session:", error)), () => { });
146
196
  }
147
197
  else {
148
- conv?.endSession();
198
+ conv
199
+ ?.endSession()
200
+ .catch(error => console.warn("Error ending session:", error));
149
201
  }
150
202
  }, []);
151
203
  // Cleanup on unmount
@@ -153,10 +205,10 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
153
205
  return () => {
154
206
  shouldEndRef.current = true;
155
207
  if (lockRef.current) {
156
- lockRef.current.then(conv => conv.endSession(), () => { });
208
+ lockRef.current.then(conv => conv.endSession().catch(() => { }), () => { });
157
209
  }
158
210
  else {
159
- conversationRef.current?.endSession();
211
+ conversationRef.current?.endSession().catch(() => { });
160
212
  }
161
213
  };
162
214
  }, []);
@@ -168,7 +220,15 @@ export function ConversationProvider({ children, isMuted, onMutedChange, ...defa
168
220
  registerCallbacks,
169
221
  clientToolsRegistry,
170
222
  clientToolsRef,
171
- }), [conversation, conversationRef, startSession, endSession, registerCallbacks, clientToolsRegistry, clientToolsRef]);
223
+ }), [
224
+ conversation,
225
+ conversationRef,
226
+ startSession,
227
+ endSession,
228
+ registerCallbacks,
229
+ clientToolsRegistry,
230
+ clientToolsRef,
231
+ ]);
172
232
  const wrappedChildren = SUB_PROVIDERS_WITHOUT_PROPS.reduceRight((nested, Provider) => _jsx(Provider, { children: nested }), _jsx(ConversationInputProvider, { isMuted: isMuted, onMutedChange: onMutedChange, children: children }));
173
233
  return (_jsx(ConversationContext.Provider, { value: contextValue, children: wrappedChildren }));
174
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationProvider.js","sourceRoot":"","sources":["../../src/conversation/ConversationProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConversationProvider.js","sourceRoot":"","sources":["../../src/conversation/ConversationProvider.tsx"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export type ConversationStatusValue = {
8
8
  * callbacks. Manages its own `status`/`message` state and provides it through
9
9
  * `ConversationStatusContext`. Must be rendered inside a `ConversationProvider`.
10
10
  */
11
- export declare function ConversationStatusProvider({ children, }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
11
+ export declare function ConversationStatusProvider({ children, }: React.PropsWithChildren): import("react").JSX.Element;
12
12
  /**
13
13
  * Returns the current conversation status and any error message.
14
14
  * Re-renders when the connection status or error message changes.
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationStatus.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationStatus.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,2CA+BzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,uBAAuB,CAQ/D"}
1
+ {"version":3,"file":"ConversationStatus.d.ts","sourceRoot":"","sources":["../../src/conversation/ConversationStatus.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,YAAY,GACZ,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,QAAQ,GACT,EAAE,KAAK,CAAC,iBAAiB,+BA+BzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,uBAAuB,CAQ/D"}
@@ -12,11 +12,11 @@ export function ConversationStatusProvider({ children, }) {
12
12
  const [message, setMessage] = useState(undefined);
13
13
  useRegisterCallbacks({
14
14
  onStatusChange({ status: newStatus }) {
15
- if (newStatus === "disconnecting") {
16
- // Transient state keep current status
17
- return;
18
- }
19
- setStatus(newStatus);
15
+ // "disconnecting" means the provider has already released the
16
+ // conversation (endSession clears it optimistically), so report
17
+ // "disconnected" immediately — holding "connected" here would let
18
+ // consumers observe status === "connected" with no conversation.
19
+ setStatus(newStatus === "disconnecting" ? "disconnected" : newStatus);
20
20
  // Clear error message when transitioning to a non-error state
21
21
  setMessage(undefined);
22
22
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationStatus.js","sourceRoot":"","sources":["../../src/conversation/ConversationStatus.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAahE,MAAM,yBAAyB,GAAG,aAAa,CAC7C,IAAI,CACL,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,EACzC,QAAQ,GACgB;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACvB,QAAQ,CAAoC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YAClC,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;gBAClC,wCAAwC;gBACxC,OAAO;YACT,CAAC;YACD,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,8DAA8D;YAC9D,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,YAAY;YAClB,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAC3B,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB,CAAC;IAEF,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC7C,QAAQ,GAC0B,CACtC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"ConversationStatus.js","sourceRoot":"","sources":["../../src/conversation/ConversationStatus.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAahE,MAAM,yBAAyB,GAAG,aAAa,CAC7C,IAAI,CACL,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,EACzC,QAAQ,GACgB;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACvB,QAAQ,CAAoC,cAAc,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAEtE,oBAAoB,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YAClC,8DAA8D;YAC9D,gEAAgE;YAChE,kEAAkE;YAClE,iEAAiE;YACjE,SAAS,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACtE,8DAA8D;YAC9D,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,YAAY;YAClB,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAC3B,CAAC,MAAM,EAAE,OAAO,CAAC,CAClB,CAAC;IAEF,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC7C,QAAQ,GAC0B,CACtC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -2,7 +2,7 @@ import type { SessionConfig, ClientToolsConfig, InputConfig, AudioWorkletConfig,
2
2
  export type ClientToolResult = string | number | void;
3
3
  export type ClientTool<Parameters extends Record<string, unknown> = Record<string, unknown>, Result extends ClientToolResult = ClientToolResult> = (parameters: Parameters) => Promise<Result> | Result;
4
4
  export type ClientTools = Record<string, ClientTool>;
5
- export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onAgentToolRequest" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart" | "onAgentReasoningResponsePart" | "onAgentResponseCorrection" | "onAudioAlignment" | "onGuardrailTriggered" | "onAgentTyping" | "onExternalAgentConnected" | "onPing">;
5
+ export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onAgentToolRequest" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart" | "onAgentReasoningResponsePart" | "onAgentResponseCorrection" | "onRichContent" | "onAudioAlignment" | "onGuardrailTriggered" | "onAgentTyping" | "onExternalAgentConnected" | "onPing" | "onIncomingEvent" | "onOutgoingEvent">;
6
6
  export type HookOptions = Partial<SessionConfig & HookCallbacks & ConversationLifecycleOptions & ClientToolsConfig & InputConfig & OutputConfig & AudioWorkletConfig & FormatConfig & {
7
7
  serverLocation?: Location | string;
8
8
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,4BAA4B,EAC5B,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtD,MAAM,MAAM,UAAU,CACpB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,MAAM,SAAS,gBAAgB,GAAG,gBAAgB,IAChD,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,SAAS,EACP,WAAW,GACX,cAAc,GACd,SAAS,GACT,WAAW,GACX,SAAS,GACT,cAAc,GACd,gBAAgB,GAChB,yBAAyB,GACzB,SAAS,GACT,2BAA2B,GAC3B,YAAY,GACZ,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,wBAAwB,GACxB,eAAe,GACf,uBAAuB,GACvB,yBAAyB,GACzB,yBAAyB,GACzB,8BAA8B,GAC9B,2BAA2B,GAC3B,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,0BAA0B,GAC1B,QAAQ,CACX,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,aAAa,GACX,aAAa,GACb,4BAA4B,GAC5B,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,kBAAkB,GAClB,YAAY,GAAG;IACb,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACpC,CACJ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conversation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,4BAA4B,EAC5B,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtD,MAAM,MAAM,UAAU,CACpB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,MAAM,SAAS,gBAAgB,GAAG,gBAAgB,IAChD,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,SAAS,EACP,WAAW,GACX,cAAc,GACd,SAAS,GACT,WAAW,GACX,SAAS,GACT,cAAc,GACd,gBAAgB,GAChB,yBAAyB,GACzB,SAAS,GACT,2BAA2B,GAC3B,YAAY,GACZ,gBAAgB,GAChB,qBAAqB,GACrB,oBAAoB,GACpB,wBAAwB,GACxB,eAAe,GACf,uBAAuB,GACvB,yBAAyB,GACzB,yBAAyB,GACzB,8BAA8B,GAC9B,2BAA2B,GAC3B,eAAe,GACf,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,0BAA0B,GAC1B,QAAQ,GACR,iBAAiB,GACjB,iBAAiB,CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,aAAa,GACX,aAAa,GACb,4BAA4B,GAC5B,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,kBAAkB,GAClB,YAAY,GAAG;IACb,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACpC,CACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from "@elevenlabs/client";
2
2
  export { useScribe, AudioFormat, CommitStrategy, RealtimeEvents, } from "./scribe.js";
3
- export type { ScribeStatus, TranscriptSegment, WordTimestamp, ScribeCallbacks, ScribeHookOptions, UseScribeReturn, RealtimeConnection, } from "./scribe.js";
3
+ export type { ScribeStatus, TranscriptSegment, WordTimestamp, WordTimestampCharacter, ScribeCallbacks, ScribeHookOptions, UseScribeReturn, RealtimeConnection, } from "./scribe.js";
4
4
  export { ConversationProvider } from "./conversation/ConversationProvider.js";
5
5
  export { useConversationControls } from "./conversation/ConversationControls.js";
6
6
  export { useConversationStatus } from "./conversation/ConversationStatus.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EACL,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EACL,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,YAAY,EACV,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACxF,YAAY,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAE/D,cAAc,oBAAoB,CAAC;AAEnC,iBAAiB;AACjB,OAAO,EACL,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAWrB,2BAA2B;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAE/D,cAAc,oBAAoB,CAAC;AAEnC,iBAAiB;AACjB,OAAO,EACL,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAYrB,2BAA2B;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC"}
package/dist/lib.iife.js CHANGED
@@ -4,7 +4,7 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
4
4
  var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
5
5
  //#endregion
6
6
  //#region src/version.ts
7
- const PACKAGE_VERSION = "1.12.0";
7
+ const PACKAGE_VERSION = "1.12.2";
8
8
  //#endregion
9
9
  //#region src/scribe.ts
10
10
  function useScribe(options = {}) {
@@ -194,6 +194,7 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
194
194
  onConnect?.();
195
195
  });
196
196
  connection.on(_elevenlabs_client.RealtimeEvents.CLOSE, () => {
197
+ if (connectionRef.current && connectionRef.current !== connection) return;
197
198
  setStatus("disconnected");
198
199
  setIsMuted(false);
199
200
  connectionRef.current = null;
@@ -347,7 +348,7 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
347
348
  }, [registerCallbacks, activeKeyToken]);
348
349
  }
349
350
  //#endregion
350
- //#region ../../node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react-jsx-runtime.production.js
351
+ //#region ../../node_modules/.pnpm/react@19.2.8/node_modules/react/cjs/react-jsx-runtime.production.js
351
352
  /**
352
353
  * @license React
353
354
  * react-jsx-runtime.production.js
@@ -508,8 +509,7 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
508
509
  const [message, setMessage] = (0, react.useState)(void 0);
509
510
  useRegisterCallbacks({
510
511
  onStatusChange({ status: newStatus }) {
511
- if (newStatus === "disconnecting") return;
512
- setStatus(newStatus);
512
+ setStatus(newStatus === "disconnecting" ? "disconnected" : newStatus);
513
513
  setMessage(void 0);
514
514
  },
515
515
  onError(errorMessage) {
@@ -864,12 +864,6 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
864
864
  const [conversation, setConversation] = (0, react.useState)(null);
865
865
  const stableCallbacks = useStableCallbacks(defaultOptions);
866
866
  const registerCallbacks = (0, react.useCallback)((callbacks) => listenerMap.register(callbacks), [listenerMap]);
867
- (0, react.useLayoutEffect)(() => {
868
- return listenerMap.register({ onDisconnect: () => {
869
- conversationRef.current = null;
870
- setConversation(null);
871
- } });
872
- }, [listenerMap]);
873
867
  const startSession = (0, react.useCallback)((options) => {
874
868
  if (conversationRef.current) return;
875
869
  if (lockRef.current) return;
@@ -885,9 +879,18 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
885
879
  const clientTools = buildClientTools(sessionOptions.clientTools, clientToolsRegistry);
886
880
  clientToolsRef.current = clientTools;
887
881
  sessionOptions.clientTools = clientTools;
888
- const userOnConversationCreated = sessionOptions.onConversationCreated;
889
882
  const isStaleStartSession = () => startSessionId !== startSessionIdRef.current;
883
+ for (const key of _elevenlabs_client_internal.CALLBACK_KEYS) {
884
+ const callback = sessionOptions[key];
885
+ if (typeof callback === "function") sessionOptions[key] = (...args) => {
886
+ if (!isStaleStartSession()) callback(...args);
887
+ };
888
+ }
889
+ const userOnConversationCreated = sessionOptions.onConversationCreated;
890
+ const userOnDisconnect = sessionOptions.onDisconnect;
891
+ let thisSessionConv = null;
890
892
  const handleConversationCreated = (conv) => {
893
+ thisSessionConv = conv;
891
894
  if (shouldEndRef.current || isStaleStartSession()) return;
892
895
  conversationRef.current = conv;
893
896
  setConversation(conv);
@@ -898,9 +901,27 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
898
901
  lockRef.current = null;
899
902
  sessionOptions.onConnect?.(props);
900
903
  };
904
+ const handleStatusChange = (props) => {
905
+ if (isStaleStartSession()) return;
906
+ if (props.status === "disconnecting" && thisSessionConv !== null && conversationRef.current === thisSessionConv) {
907
+ conversationRef.current = null;
908
+ setConversation(null);
909
+ }
910
+ sessionOptions.onStatusChange?.(props);
911
+ };
912
+ const handleDisconnect = (details) => {
913
+ if (isStaleStartSession()) return;
914
+ if (conversationRef.current === thisSessionConv) {
915
+ conversationRef.current = null;
916
+ setConversation(null);
917
+ }
918
+ userOnDisconnect?.(details);
919
+ };
901
920
  const providerLifecycleOptions = {
902
921
  onConversationCreated: handleConversationCreated,
903
- onConnect: handleConnect
922
+ onConnect: handleConnect,
923
+ onDisconnect: handleDisconnect,
924
+ onStatusChange: handleStatusChange
904
925
  };
905
926
  const startSessionOptions = {
906
927
  ...sessionOptions,
@@ -910,11 +931,12 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
910
931
  lockRef.current.then((conv) => {
911
932
  if (isStaleStartSession()) return;
912
933
  if (shouldEndRef.current) {
913
- conv.endSession();
934
+ conv.endSession().catch((error) => console.warn("Error ending session:", error));
914
935
  lockRef.current = null;
915
936
  return;
916
937
  }
917
938
  if (conversationRef.current !== conv) {
939
+ thisSessionConv = conv;
918
940
  conversationRef.current = conv;
919
941
  setConversation(conv);
920
942
  }
@@ -940,14 +962,14 @@ var ElevenLabsReact = (function(exports, _elevenlabs_client_internal, _elevenlab
940
962
  const conv = conversationRef.current;
941
963
  conversationRef.current = null;
942
964
  setConversation(null);
943
- if (pendingConnection) pendingConnection.then((c) => c.endSession(), () => {});
944
- else conv?.endSession();
965
+ if (pendingConnection) pendingConnection.then((c) => c.endSession().catch((error) => console.warn("Error ending session:", error)), () => {});
966
+ else conv?.endSession().catch((error) => console.warn("Error ending session:", error));
945
967
  }, []);
946
968
  (0, react.useEffect)(() => {
947
969
  return () => {
948
970
  shouldEndRef.current = true;
949
- if (lockRef.current) lockRef.current.then((conv) => conv.endSession(), () => {});
950
- else conversationRef.current?.endSession();
971
+ if (lockRef.current) lockRef.current.then((conv) => conv.endSession().catch(() => {}), () => {});
972
+ else conversationRef.current?.endSession().catch(() => {});
951
973
  };
952
974
  }, []);
953
975
  const contextValue = (0, react.useMemo)(() => ({
@@ -1 +1 @@
1
- {"version":3,"file":"lib.iife.js","names":["Scribe","RealtimeEvents","VoiceConversation","CALLBACK_KEYS","CALLBACK_KEYS","Conversation","CALLBACK_KEYS"],"sources":["../src/version.ts","../src/scribe.ts","../src/conversation/ConversationContext.tsx","../../../node_modules/.pnpm/react@19.2.6/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.6/node_modules/react/jsx-runtime.js","../src/conversation/ConversationControls.tsx","../src/conversation/ConversationStatus.tsx","../src/conversation/ConversationInput.tsx","../src/conversation/ConversationMode.tsx","../src/conversation/ConversationFeedback.tsx","../src/conversation/ConversationClientTools.tsx","../src/conversation/ListenerSet.ts","../src/conversation/ListenerMap.ts","../src/conversation/useStableCallbacks.ts","../src/conversation/ConversationProvider.tsx","../src/conversation/useConversation.ts","../src/index.ts"],"sourcesContent":["// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"1.12.0\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Detected language code (only present when includeLanguageDetection is enabled) */\n languageCode?: string;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n language_code?: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: MicrophoneOptions[\"microphone\"];\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n /** Include detected language information in transcription results */\n includeLanguageDetection?: boolean;\n\n // Keyterms and verbatim control\n keyterms?: string[];\n noVerbatim?: boolean;\n\n /**\n * Whether the session may be logged by ElevenLabs. Set to `false` to use zero\n * retention mode, which makes history features unavailable for the session.\n * Zero retention mode may only be used by enterprise customers.\n * @default true\n */\n enableLogging?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n isMuted: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Mute / unmute\n mute: () => void;\n unmute: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n includeLanguageDetection: defaultIncludeLanguageDetection,\n\n // Keyterms and verbatim control\n keyterms: defaultKeyterms,\n noVerbatim: defaultNoVerbatim,\n\n // Logging\n enableLogging: defaultEnableLogging,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [isMuted, setIsMuted] = useState<boolean>(false);\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n const includeLanguageDetection =\n runtimeOptions.includeLanguageDetection ??\n defaultIncludeLanguageDetection;\n const enableLogging =\n runtimeOptions.enableLogging ?? defaultEnableLogging;\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n keyterms: runtimeOptions.keyterms || defaultKeyterms,\n noVerbatim: runtimeOptions.noVerbatim ?? defaultNoVerbatim,\n microphone,\n includeTimestamps,\n includeLanguageDetection,\n enableLogging,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n keyterms: runtimeOptions.keyterms || defaultKeyterms,\n noVerbatim: runtimeOptions.noVerbatim ?? defaultNoVerbatim,\n includeTimestamps,\n includeLanguageDetection,\n enableLogging,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n languageCode: message.language_code,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n setIsMuted(false);\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n defaultIncludeLanguageDetection,\n defaultKeyterms,\n defaultNoVerbatim,\n defaultEnableLogging,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n setIsMuted(false);\n }, []);\n\n const mute = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.mute();\n setIsMuted(true);\n }, []);\n\n const unmute = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.unmute();\n setIsMuted(false);\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n // eslint-disable-next-line react-hooks/set-state-in-effect -- autoConnect intentionally starts the connection when the hook mounts\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n isMuted,\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n mute,\n unmute,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n type MutableRefObject,\n type RefObject,\n} from \"react\";\nimport type {\n Callbacks,\n ClientToolsConfig,\n Conversation,\n} from \"@elevenlabs/client\";\nimport type { HookOptions } from \"./types.js\";\n\ntype ClientToolEntry = ClientToolsConfig[\"clientTools\"][string];\n\nexport type ConversationContextValue = {\n conversation: Conversation | null;\n /** Stable ref to the active conversation — use in callbacks to avoid re-renders. */\n conversationRef: RefObject<Conversation | null>;\n startSession: (options?: HookOptions) => void;\n endSession: () => void;\n /**\n * For sub-providers — register callback handlers to be composed into the\n * next `Conversation.startSession()` call. Returns an unsubscribe function.\n */\n registerCallbacks: (callbacks: Partial<Callbacks>) => () => void;\n /** Registry of hook-registered client tools. Survives across sessions. */\n clientToolsRegistry: Map<string, ClientToolEntry>;\n /** Ref to the live clientTools object currently held by BaseConversation. */\n clientToolsRef: MutableRefObject<Record<string, ClientToolEntry>>;\n};\n\nexport const ConversationContext =\n createContext<ConversationContextValue | null>(null);\n\n/**\n * Returns the raw `Conversation` instance (or `null` if no session is active).\n * This is a public escape hatch for advanced use cases that need direct access\n * to the underlying `@elevenlabs/client` Conversation object.\n *\n * Can be used outside a `ConversationProvider` — returns `null` in that case.\n */\nexport function useRawConversation(): Conversation | null {\n const ctx = useContext(ConversationContext);\n return ctx?.conversation ?? null;\n}\n\n/**\n * Returns a stable ref to the active `Conversation` instance.\n * The ref's `.current` is `null` when no session is active, and updates\n * without causing re-renders — ideal for use inside callbacks and sub-providers.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRawConversationRef(): RefObject<Conversation | null> {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"useRawConversationRef must be used within a ConversationProvider\"\n );\n }\n return ctx.conversationRef;\n}\n\n/**\n * Registers callback handlers with the nearest `ConversationProvider`.\n * Uses a ref internally so the latest callback values are always invoked\n * without re-subscribing on every render.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRegisterCallbacks(callbacks: Partial<Callbacks>): void {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"useRegisterCallbacks must be used within a ConversationProvider\"\n );\n }\n\n const { registerCallbacks } = ctx;\n const callbacksRef = useRef(callbacks);\n\n // Re-subscribe when the set of provided callback keys changes.\n const activeKeyToken = Object.keys(callbacks)\n .filter(key => callbacks[key as keyof Callbacks] !== undefined)\n .sort()\n .join(\"|\");\n\n useLayoutEffect(() => {\n callbacksRef.current = callbacks;\n });\n\n useLayoutEffect(() => {\n const activeKeys = activeKeyToken === \"\" ? [] : activeKeyToken.split(\"|\");\n const stableCallbacks = Object.fromEntries(\n activeKeys.map((key: string) => [\n key,\n (...args: never[]) => {\n const fn = callbacksRef.current[key as keyof Callbacks];\n if (typeof fn === \"function\") {\n (fn as (...a: never[]) => void)(...args);\n }\n },\n ])\n ) as Partial<Callbacks>;\n return registerCallbacks(stableCallbacks);\n }, [registerCallbacks, activeKeyToken]);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, useCallback, useContext, useMemo } from \"react\";\nimport {\n VoiceConversation,\n type FormatConfig,\n type InputDeviceConfig,\n type OutputConfig,\n type MultimodalMessageInput,\n type UploadFileResult,\n type ContextualUpdateOptions,\n} from \"@elevenlabs/client\";\nimport type { HookOptions } from \"./types.js\";\nimport { ConversationContext } from \"./ConversationContext.js\";\n\nconst EMPTY_FREQUENCY_DATA = new Uint8Array(0);\n\nexport type ConversationControlsValue = {\n startSession: (options?: HookOptions) => void;\n endSession: () => void;\n sendUserMessage: (text: string) => void;\n sendMultimodalMessage: (options: MultimodalMessageInput) => void;\n uploadFile: (file: Blob) => Promise<UploadFileResult>;\n sendContextualUpdate: (\n text: string,\n options?: ContextualUpdateOptions\n ) => void;\n sendUserActivity: () => void;\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => void;\n setVolume: (options: { volume: number }) => void;\n changeInputDevice: (\n config: Partial<FormatConfig> & InputDeviceConfig\n ) => Promise<void>;\n changeOutputDevice: (\n config: Partial<FormatConfig> & OutputConfig\n ) => Promise<void>;\n /** Returns byte frequency data (0-255) for the input, focused on 100-8000 Hz. */\n getInputByteFrequencyData: () => Uint8Array;\n /** Returns byte frequency data (0-255) for the output, focused on 100-8000 Hz. */\n getOutputByteFrequencyData: () => Uint8Array;\n getInputVolume: () => number;\n getOutputVolume: () => number;\n getId: () => string;\n};\n\nexport const ConversationControlsContext =\n createContext<ConversationControlsValue | null>(null);\n\n/**\n * Reads from `ConversationContext` and provides stable action references to\n * `ConversationControlsContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationControlsProvider({\n children,\n}: React.PropsWithChildren) {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"ConversationControlsProvider must be rendered inside a ConversationProvider\"\n );\n }\n\n const { conversationRef } = ctx;\n\n const getConversation = useCallback(() => {\n const conversation = conversationRef.current;\n if (!conversation) {\n throw new Error(\"No active conversation. Call startSession() first.\");\n }\n return conversation;\n }, [conversationRef]);\n\n const sendUserMessage = useCallback(\n (text: string) => {\n getConversation().sendUserMessage(text);\n },\n [getConversation]\n );\n\n const sendMultimodalMessage = useCallback(\n (options: MultimodalMessageInput) => {\n getConversation().sendMultimodalMessage(options);\n },\n [getConversation]\n );\n\n const uploadFile = useCallback(\n (file: Blob) => {\n return getConversation().uploadFile(file);\n },\n [getConversation]\n );\n\n const sendContextualUpdate = useCallback(\n (text: string, options?: ContextualUpdateOptions) => {\n getConversation().sendContextualUpdate(text, options);\n },\n [getConversation]\n );\n\n const sendUserActivity = useCallback(() => {\n getConversation().sendUserActivity();\n }, [getConversation]);\n\n const sendMCPToolApprovalResult = useCallback(\n (toolCallId: string, isApproved: boolean) => {\n getConversation().sendMCPToolApprovalResult(toolCallId, isApproved);\n },\n [getConversation]\n );\n\n const setVolume = useCallback(\n (options: { volume: number }) => {\n getConversation().setVolume(options);\n },\n [getConversation]\n );\n\n const changeInputDevice = useCallback(\n async (config: Partial<FormatConfig> & InputDeviceConfig) => {\n const conversation = getConversation();\n if (conversation instanceof VoiceConversation) {\n return await conversation.changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n [getConversation]\n );\n\n const changeOutputDevice = useCallback(\n async (config: Partial<FormatConfig> & OutputConfig) => {\n const conversation = getConversation();\n if (conversation instanceof VoiceConversation) {\n return await conversation.changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n [getConversation]\n );\n\n const getInputByteFrequencyData = useCallback(() => {\n return (\n conversationRef.current?.getInputByteFrequencyData() ??\n EMPTY_FREQUENCY_DATA\n );\n }, [conversationRef]);\n\n const getOutputByteFrequencyData = useCallback(() => {\n return (\n conversationRef.current?.getOutputByteFrequencyData() ??\n EMPTY_FREQUENCY_DATA\n );\n }, [conversationRef]);\n\n const getInputVolume = useCallback(() => {\n return conversationRef.current?.getInputVolume() ?? 0;\n }, [conversationRef]);\n\n const getOutputVolume = useCallback(() => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n }, [conversationRef]);\n\n const getId = useCallback(() => {\n return getConversation().getId();\n }, [getConversation]);\n\n const value = useMemo<ConversationControlsValue>(\n () => ({\n startSession: ctx.startSession,\n endSession: ctx.endSession,\n sendUserMessage,\n sendMultimodalMessage,\n uploadFile,\n sendContextualUpdate,\n sendUserActivity,\n sendMCPToolApprovalResult,\n setVolume,\n changeInputDevice,\n changeOutputDevice,\n getInputByteFrequencyData,\n getOutputByteFrequencyData,\n getInputVolume,\n getOutputVolume,\n getId,\n }),\n [\n ctx.startSession,\n ctx.endSession,\n sendUserMessage,\n sendMultimodalMessage,\n uploadFile,\n sendContextualUpdate,\n sendUserActivity,\n sendMCPToolApprovalResult,\n setVolume,\n changeInputDevice,\n changeOutputDevice,\n getInputByteFrequencyData,\n getOutputByteFrequencyData,\n getInputVolume,\n getOutputVolume,\n getId,\n ]\n );\n\n return (\n <ConversationControlsContext.Provider value={value}>\n {children}\n </ConversationControlsContext.Provider>\n );\n}\n\n/**\n * Returns stable action references for controlling the conversation.\n * All function references are stable and will never cause re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationControls(): ConversationControlsValue {\n const ctx = useContext(ConversationControlsContext);\n if (!ctx) {\n throw new Error(\n \"useConversationControls must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\n\nexport type ConversationStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"error\";\n\nexport type ConversationStatusValue = {\n status: ConversationStatus;\n message?: string;\n};\n\nconst ConversationStatusContext = createContext<ConversationStatusValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and registers `onStatusChange` + `onError`\n * callbacks. Manages its own `status`/`message` state and provides it through\n * `ConversationStatusContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationStatusProvider({\n children,\n}: React.PropsWithChildren) {\n const [status, setStatus] =\n useState<ConversationStatusValue[\"status\"]>(\"disconnected\");\n const [message, setMessage] = useState<string | undefined>(undefined);\n\n useRegisterCallbacks({\n onStatusChange({ status: newStatus }) {\n if (newStatus === \"disconnecting\") {\n // Transient state — keep current status\n return;\n }\n setStatus(newStatus);\n // Clear error message when transitioning to a non-error state\n setMessage(undefined);\n },\n onError(errorMessage) {\n setStatus(\"error\");\n setMessage(errorMessage);\n },\n });\n\n const value = useMemo<ConversationStatusValue>(\n () => ({ status, message }),\n [status, message]\n );\n\n return (\n <ConversationStatusContext.Provider value={value}>\n {children}\n </ConversationStatusContext.Provider>\n );\n}\n\n/**\n * Returns the current conversation status and any error message.\n * Re-renders when the connection status or error message changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationStatus(): ConversationStatusValue {\n const ctx = useContext(ConversationStatusContext);\n if (!ctx) {\n throw new Error(\n \"useConversationStatus must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useRawConversation,\n useRawConversationRef,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\n\nexport type ConversationInputValue = {\n isMuted: boolean;\n setMuted: (isMuted: boolean) => void;\n};\n\nexport type ConversationInputProviderProps = React.PropsWithChildren<{\n /** Controlled mute state. If omitted, provider manages state internally. */\n isMuted?: boolean;\n /** Called whenever mute state is changed via setMuted. */\n onMutedChange?: (isMuted: boolean) => void;\n}>;\n\nconst ConversationInputContext = createContext<ConversationInputValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and manages microphone mute state.\n * `setMuted` calls `conversation.setMicMuted()` and updates local state.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationInputProvider({\n children,\n isMuted: controlledIsMuted,\n onMutedChange,\n}: ConversationInputProviderProps) {\n const conversation = useRawConversation();\n const conversationRef = useRawConversationRef();\n const isControlled = typeof controlledIsMuted === \"boolean\";\n const [uncontrolledIsMuted, setUncontrolledIsMuted] = useState(false);\n const isMuted = isControlled ? controlledIsMuted : uncontrolledIsMuted;\n\n useRegisterCallbacks({\n onDisconnect() {\n if (!isControlled) {\n setUncontrolledIsMuted(false);\n }\n },\n });\n\n useEffect(() => {\n if (isControlled && conversation) {\n conversation.setMicMuted(controlledIsMuted);\n }\n }, [conversation, controlledIsMuted, isControlled]);\n\n const setMuted = useCallback(\n (muted: boolean) => {\n const conversation = conversationRef.current;\n if (!conversation) {\n throw new Error(\"No active conversation. Call startSession() first.\");\n }\n if (!isControlled) {\n conversation.setMicMuted(muted);\n setUncontrolledIsMuted(muted);\n }\n onMutedChange?.(muted);\n },\n [conversationRef, isControlled, onMutedChange]\n );\n\n const value = useMemo<ConversationInputValue>(\n () => ({ isMuted, setMuted }),\n [isMuted, setMuted]\n );\n\n return (\n <ConversationInputContext.Provider value={value}>\n {children}\n </ConversationInputContext.Provider>\n );\n}\n\n/**\n * Returns the current microphone mute state and a function to change it.\n * Re-renders only when the mute state changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationInput(): ConversationInputValue {\n const ctx = useContext(ConversationInputContext);\n if (!ctx) {\n throw new Error(\n \"useConversationInput must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport type { Mode } from \"@elevenlabs/client\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\n\nexport type ConversationModeValue = {\n mode: \"speaking\" | \"listening\";\n isSpeaking: boolean;\n isListening: boolean;\n};\n\nconst ConversationModeContext = createContext<ConversationModeValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and registers an `onModeChange` callback.\n * Manages its own `mode` state and provides it through\n * `ConversationModeContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationModeProvider({\n children,\n}: React.PropsWithChildren) {\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useRegisterCallbacks({\n onModeChange({ mode: newMode }) {\n setMode(newMode);\n },\n onDisconnect() {\n setMode(\"listening\");\n },\n });\n\n const value = useMemo<ConversationModeValue>(\n () => ({\n mode,\n isSpeaking: mode === \"speaking\",\n isListening: mode === \"listening\",\n }),\n [mode]\n );\n\n return (\n <ConversationModeContext.Provider value={value}>\n {children}\n </ConversationModeContext.Provider>\n );\n}\n\n/**\n * Returns the current conversation mode (speaking/listening) and\n * convenience booleans. Re-renders only when the mode changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationMode(): ConversationModeValue {\n const ctx = useContext(ConversationModeContext);\n if (!ctx) {\n throw new Error(\n \"useConversationMode must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useRawConversationRef,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\n\nexport type ConversationFeedbackValue = {\n canSendFeedback: boolean;\n sendFeedback: (like: boolean | null, eventId?: number) => void;\n};\n\nconst ConversationFeedbackContext =\n createContext<ConversationFeedbackValue | null>(null);\n\n/**\n * Reads from `ConversationContext` and registers an `onCanSendFeedbackChange`\n * callback. Manages its own `canSendFeedback` state and provides it along with\n * a `sendFeedback` action through `ConversationFeedbackContext`.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationFeedbackProvider({\n children,\n}: React.PropsWithChildren) {\n const conversationRef = useRawConversationRef();\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n\n useRegisterCallbacks({\n onCanSendFeedbackChange({ canSendFeedback: newValue }) {\n setCanSendFeedback(newValue);\n },\n onDisconnect() {\n setCanSendFeedback(false);\n },\n });\n\n const sendFeedback = useCallback(\n (like: boolean | null, eventId?: number) => {\n conversationRef.current?.sendFeedback(like, eventId);\n },\n [conversationRef]\n );\n\n const value = useMemo<ConversationFeedbackValue>(\n () => ({\n canSendFeedback,\n sendFeedback,\n }),\n [canSendFeedback, sendFeedback]\n );\n\n return (\n <ConversationFeedbackContext.Provider value={value}>\n {children}\n </ConversationFeedbackContext.Provider>\n );\n}\n\n/**\n * Returns the current feedback state and a `sendFeedback` action.\n * Re-renders only when `canSendFeedback` changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationFeedback(): ConversationFeedbackValue {\n const ctx = useContext(ConversationFeedbackContext);\n if (!ctx) {\n throw new Error(\n \"useConversationFeedback must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useCallback, useContext, useLayoutEffect, useRef } from \"react\";\nimport type { ClientToolsConfig } from \"@elevenlabs/client\";\nimport { ConversationContext } from \"./ConversationContext.js\";\nimport type { ClientTool, ClientTools } from \"./types.js\";\n\ntype ClientToolEntry = ClientToolsConfig[\"clientTools\"][string];\n\n/**\n * Creates a fresh clientTools object by merging option-provided tools with\n * hook-registered tools from the registry. Throws if a hook-registered tool\n * name conflicts with an option-provided tool.\n */\nexport function buildClientTools(\n optionTools: Record<string, ClientToolEntry> | undefined,\n registry: Map<string, ClientToolEntry>\n): Record<string, ClientToolEntry> {\n const clientTools: Record<string, ClientToolEntry> = { ...optionTools };\n for (const [name, handler] of registry) {\n if (Object.hasOwn(clientTools, name)) {\n throw new Error(\n `Client tool \"${name}\" is already provided via props/options. ` +\n `Remove it from props or do not register it with useConversationClientTool.`\n );\n }\n clientTools[name] = handler;\n }\n return clientTools;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-provider\n// ---------------------------------------------------------------------------\n\ntype RegisterClientTool = (\n name: string,\n handler: ClientToolEntry\n) => () => void;\n\nconst ConversationClientToolsContext = createContext<RegisterClientTool | null>(\n null\n);\n\nexport function ConversationClientToolsProvider({\n children,\n}: React.PropsWithChildren) {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"ConversationClientToolsProvider must be rendered inside a ConversationProvider\"\n );\n }\n\n const { clientToolsRegistry, clientToolsRef } = ctx;\n\n const registerClientTool: RegisterClientTool = useCallback(\n (name, handler) => {\n if (clientToolsRegistry.has(name)) {\n throw new Error(\n `Client tool \"${name}\" is already registered by another hook. ` +\n `Each tool name must be unique.`\n );\n }\n clientToolsRegistry.set(name, handler);\n clientToolsRef.current[name] = handler;\n return () => {\n if (clientToolsRegistry.get(name) === handler) {\n clientToolsRegistry.delete(name);\n }\n if (clientToolsRef.current[name] === handler) {\n delete clientToolsRef.current[name];\n }\n };\n },\n [clientToolsRegistry, clientToolsRef]\n );\n\n return (\n <ConversationClientToolsContext.Provider value={registerClientTool}>\n {children}\n </ConversationClientToolsContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Registers a named client tool with the nearest `ConversationProvider`.\n * The tool is available during any active conversation and is automatically\n * unregistered when the component unmounts.\n *\n * The handler always reflects the latest closure value (ref pattern),\n * so it is safe to reference component state or props without listing\n * them as dependencies.\n *\n * @typeParam TTools - An interface mapping tool names to function signatures.\n * @typeParam TName - The specific tool name (inferred from the first argument).\n * @param name - The tool name (must match the name configured on the agent).\n * @param handler - The function invoked when the agent calls this tool.\n *\n * @example\n * ```tsx\n * type Tools = {\n * get_weather: (params: { city: string }) => string;\n * set_volume: (params: { level: number }) => void;\n * };\n *\n * useConversationClientTool<Tools>(\"get_weather\", (params) => {\n * return `Weather in ${params.city} is sunny.`;\n * });\n * ```\n */\nexport function useConversationClientTool<\n TTools extends ClientTools = Record<string, ClientTool>,\n TName extends string & keyof TTools = string & keyof TTools,\n>(name: TName, handler: TTools[TName]): void {\n const registerClientTool = useContext(ConversationClientToolsContext);\n if (!registerClientTool) {\n throw new Error(\n \"useConversationClientTool must be used within a ConversationProvider\"\n );\n }\n\n const handlerRef = useRef(handler);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n handlerRef.current = handler;\n\n useLayoutEffect(() => {\n const stableHandler: ClientToolEntry = parameters =>\n handlerRef.current(parameters as Parameters<TTools[TName]>[0]);\n return registerClientTool(name, stableHandler);\n }, [registerClientTool, name]);\n}\n","export class ListenerSet<Args extends unknown[]> {\n private listeners = new Set<(...args: Args) => void>();\n\n add(fn: (...args: Args) => void): () => void {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n invoke(...args: Args): void {\n for (const fn of this.listeners) fn(...args);\n }\n\n get size(): number {\n return this.listeners.size;\n }\n}\n","import { ListenerSet } from \"./ListenerSet.js\";\n\nfunction assertFunction(\n value: unknown,\n key: string\n): asserts value is (...args: unknown[]) => void {\n if (typeof value !== \"function\") {\n throw new Error(`Expected function for key \"${key}\", got ${typeof value}`);\n }\n}\n\n/**\n * A map of named listener sets. Each key maps to a `ListenerSet` that can have\n * multiple listeners registered. Typed through `T` so that `register` and\n * `compose` preserve per-key callback signatures.\n *\n * All keys are pre-initialized in the constructor so `register` can validate\n * keys. `compose()` only includes keys with at least one registered listener,\n * preserving callback-presence semantics used by the client as feature guards.\n * For included keys, composed functions delegate to the live listener set, so\n * listeners added/removed after `compose()` still take effect. Keys with no\n * listeners at compose time are omitted entirely; call `compose()` again after\n * registering listeners to pick up newly populated keys.\n */\nexport class ListenerMap<\n T extends Record<string, ((...args: never[]) => void) | undefined>,\n> {\n private sets = new Map<string, ListenerSet<unknown[]>>();\n\n constructor(keys: readonly (keyof T & string)[]) {\n for (const key of keys) {\n this.sets.set(key, new ListenerSet<unknown[]>());\n }\n }\n\n /**\n * Register listeners for one or more keys. Returns a function that removes\n * all listeners added by this call.\n */\n register(callbacks: Partial<T>): () => void {\n const removers = Object.entries(callbacks)\n .filter(([, fn]) => fn !== undefined)\n .map(([key, fn]) => {\n assertFunction(fn, key);\n const set = this.sets.get(key);\n if (!set) {\n throw new Error(`Unknown callback key \"${key}\"`);\n }\n return set.add(fn);\n });\n return () => {\n for (const remove of removers) remove();\n };\n }\n\n /**\n * Compose all registered listeners into a single callbacks object. Each\n * composed function delegates to the live listener set, so listeners\n * added/removed after this call still take effect.\n */\n compose(): Partial<T> {\n return Object.fromEntries(\n Array.from(this.sets.entries())\n .filter(([, set]) => set.size > 0)\n .map(([key, set]) => [\n key,\n (...args: never[]) => {\n set.invoke(...args);\n },\n ])\n ) as Partial<T>;\n }\n}\n","import { useMemo, useRef } from \"react\";\nimport type { Callbacks } from \"@elevenlabs/client\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\nimport type { HookOptions } from \"./types.js\";\n\n/**\n * Wraps user-provided callback props in stable ref-backed functions,\n * preventing stale closure bugs when the session outlives renders.\n *\n * Returns a `Partial<Callbacks>` containing only the keys the caller\n * actually provided. Function references are stable per key across\n * renders, but always invoke the latest prop value. The returned object\n * reference is stable as long as the set of provided keys doesn't change.\n */\nexport function useStableCallbacks(props: HookOptions): Partial<Callbacks> {\n // Store the latest prop value for each callback in a ref.\n // Uses Record<string, unknown> to avoid TypeScript's union-to-intersection\n // issue when indexing Callbacks with a union of all its keys.\n const callbackRefs = useRef<Record<string, unknown>>({});\n\n // Compute a stable scalar from the set of provided keys so we can\n // memoize the result object.\n const activeKeys = CALLBACK_KEYS.filter(key => props[key] !== undefined);\n const activeKeySet = activeKeys.join(\"|\");\n const stableCallbacks = useMemo(\n () =>\n Object.fromEntries(\n activeKeys.map(key => [\n key,\n (...args: unknown[]) => {\n const fn = callbackRefs.current[key] as\n | ((...a: unknown[]) => void)\n | undefined;\n fn?.(...args);\n },\n ])\n ) as Partial<Callbacks>,\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKeySet is a stable scalar derived from activeKeys\n [activeKeySet]\n );\n\n for (const key of CALLBACK_KEYS) {\n // eslint-disable-next-line react-hooks/refs -- callback refs intentionally track latest props for stable event handlers\n callbackRefs.current[key] = props[key];\n }\n\n return stableCallbacks;\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n Conversation,\n type Options,\n type Callbacks,\n type ConversationLifecycleOptions,\n} from \"@elevenlabs/client\";\nimport {\n CALLBACK_KEYS,\n mergeOptions,\n parseLocation,\n getOriginForLocation,\n getLivekitUrlForLocation,\n} from \"@elevenlabs/client/internal\";\n\nimport { type HookOptions } from \"./types.js\";\nimport {\n ConversationContext,\n type ConversationContextValue,\n} from \"./ConversationContext.js\";\nimport { ConversationControlsProvider } from \"./ConversationControls.js\";\nimport { ConversationStatusProvider } from \"./ConversationStatus.js\";\nimport {\n ConversationInputProvider,\n type ConversationInputProviderProps,\n} from \"./ConversationInput.js\";\nimport { ConversationModeProvider } from \"./ConversationMode.js\";\nimport { ConversationFeedbackProvider } from \"./ConversationFeedback.js\";\nimport {\n ConversationClientToolsProvider,\n buildClientTools,\n} from \"./ConversationClientTools.js\";\nimport { ListenerMap } from \"./ListenerMap.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\n\ntype ConversationInputControlProps = Pick<\n ConversationInputProviderProps,\n \"isMuted\" | \"onMutedChange\"\n>;\n\nconst SUB_PROVIDERS_WITHOUT_PROPS: React.ComponentType<React.PropsWithChildren>[] = [\n ConversationControlsProvider,\n ConversationStatusProvider,\n ConversationModeProvider,\n ConversationFeedbackProvider,\n ConversationClientToolsProvider,\n];\n\nexport type ConversationProviderProps = React.PropsWithChildren<\n HookOptions & ConversationInputControlProps\n>;\n\nexport function ConversationProvider({\n children,\n isMuted,\n onMutedChange,\n ...defaultOptions\n}: ConversationProviderProps) {\n /** The active conversation instance, if any. */\n const conversationRef = useRef<Conversation | null>(null);\n /** In-flight startSession promise, used to prevent duplicate connections. */\n const lockRef = useRef<Promise<Conversation> | null>(null);\n /** Monotonic id used to ignore stale async handlers from older starts. */\n const startSessionIdRef = useRef(0);\n /** Signals that endSession was called while a connection was still pending. */\n const shouldEndRef = useRef(false);\n /** Registry of hook-registered client tools. Survives across sessions. */\n const [clientToolsRegistry] = useState(\n () => new Map<string, NonNullable<Options[\"clientTools\"]>[string]>()\n );\n /** Ref to the live clientTools object currently held by BaseConversation. */\n const clientToolsRef = useRef<Record<string, NonNullable<Options[\"clientTools\"]>[string]>>({});\n /** Always holds the latest provider props, avoiding stale closures in callbacks. */\n const defaultOptionsRef = useRef(defaultOptions);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n defaultOptionsRef.current = defaultOptions;\n\n /** Callback registry for sub-providers (status, mode, feedback, etc.). */\n const [listenerMap] = useState(\n () => new ListenerMap<Callbacks>(CALLBACK_KEYS)\n );\n\n /** Reactive mirror of conversationRef, triggers re-renders for context consumers. */\n const [conversation, setConversation] = useState<Conversation | null>(null);\n\n const stableCallbacks = useStableCallbacks(defaultOptions);\n\n const registerCallbacks = useCallback(\n (callbacks: Partial<Callbacks>) => listenerMap.register(callbacks),\n [listenerMap]\n );\n\n // Sync provider state when session ends externally (agent disconnect,\n // raw instance endSession(), etc.). Uses the listener map so it composes\n // with user-provided onDisconnect callbacks.\n useLayoutEffect(() => {\n return listenerMap.register({\n onDisconnect: () => {\n conversationRef.current = null;\n setConversation(null);\n },\n });\n }, [listenerMap]);\n\n const startSession = useCallback(\n (options?: HookOptions) => {\n if (conversationRef.current) {\n return;\n }\n if (lockRef.current) {\n return;\n }\n\n shouldEndRef.current = false;\n const startSessionId = ++startSessionIdRef.current;\n\n const defaults = defaultOptionsRef.current;\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || defaults?.serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n // Strip raw callbacks from defaults — stableCallbacks provides\n // ref-backed versions that won't go stale across renders.\n const defaultConfig = { ...defaults };\n for (const key of CALLBACK_KEYS) {\n delete (defaultConfig as Record<string, unknown>)[key];\n }\n\n const sessionOptions = mergeOptions<Options>(\n { livekitUrl: calculatedLivekitUrl },\n defaultConfig,\n stableCallbacks,\n listenerMap.compose(),\n options ?? {},\n { origin }\n );\n\n const clientTools = buildClientTools(\n sessionOptions.clientTools,\n clientToolsRegistry\n );\n clientToolsRef.current = clientTools;\n sessionOptions.clientTools = clientTools;\n\n const userOnConversationCreated = sessionOptions.onConversationCreated;\n const isStaleStartSession = () =>\n startSessionId !== startSessionIdRef.current;\n\n const handleConversationCreated = (conv: Conversation) => {\n if (shouldEndRef.current || isStaleStartSession()) {\n return;\n }\n conversationRef.current = conv;\n setConversation(conv);\n userOnConversationCreated?.(conv);\n };\n\n const handleConnect: NonNullable<Callbacks[\"onConnect\"]> = props => {\n if (shouldEndRef.current || isStaleStartSession()) {\n return;\n }\n lockRef.current = null;\n sessionOptions.onConnect?.(props);\n };\n\n const providerLifecycleOptions: ConversationLifecycleOptions &\n Pick<Callbacks, \"onConnect\"> = {\n onConversationCreated: handleConversationCreated,\n onConnect: handleConnect,\n };\n\n const startSessionOptions: Options = {\n ...sessionOptions,\n ...providerLifecycleOptions,\n };\n\n lockRef.current = Conversation.startSession(startSessionOptions);\n\n lockRef.current.then(\n conv => {\n if (isStaleStartSession()) {\n return;\n }\n if (shouldEndRef.current) {\n conv.endSession();\n lockRef.current = null;\n return;\n }\n if (conversationRef.current !== conv) {\n conversationRef.current = conv;\n setConversation(conv);\n }\n lockRef.current = null;\n },\n (error: unknown) => {\n if (isStaleStartSession()) {\n return;\n }\n conversationRef.current = null;\n setConversation(null);\n lockRef.current = null;\n if (shouldEndRef.current) {\n return;\n }\n // The client SDK calls onStatusChange(\"disconnected\") before\n // rejecting, but never calls onError — surface the failure here\n // so listeners (e.g. ConversationStatusProvider) transition to\n // the \"error\" state with a meaningful message.\n const message =\n error instanceof Error\n ? error.message\n : \"Session failed to start\";\n sessionOptions.onError?.(message, error);\n }\n );\n },\n [stableCallbacks, listenerMap, clientToolsRegistry, clientToolsRef]\n );\n\n const endSession = useCallback(() => {\n shouldEndRef.current = true;\n const pendingConnection = lockRef.current;\n const conv = conversationRef.current;\n conversationRef.current = null;\n setConversation(null);\n\n if (pendingConnection) {\n pendingConnection.then(c => c.endSession(), () => {});\n } else {\n conv?.endSession();\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n shouldEndRef.current = true;\n if (lockRef.current) {\n lockRef.current.then(conv => conv.endSession(), () => {});\n } else {\n conversationRef.current?.endSession();\n }\n };\n }, []);\n\n const contextValue = useMemo<ConversationContextValue>(\n () => ({\n conversation,\n conversationRef,\n startSession,\n endSession,\n registerCallbacks,\n clientToolsRegistry,\n clientToolsRef,\n }),\n [conversation, conversationRef, startSession, endSession, registerCallbacks, clientToolsRegistry, clientToolsRef]\n );\n\n const wrappedChildren = SUB_PROVIDERS_WITHOUT_PROPS.reduceRight<React.ReactNode>(\n (nested, Provider) => <Provider>{nested}</Provider>,\n <ConversationInputProvider\n isMuted={isMuted}\n onMutedChange={onMutedChange}\n >\n {children}\n </ConversationInputProvider>\n );\n\n return (\n <ConversationContext.Provider value={contextValue}>\n {wrappedChildren}\n </ConversationContext.Provider>\n );\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\n\nimport { useConversationControls } from \"./ConversationControls.js\";\nimport { useConversationStatus } from \"./ConversationStatus.js\";\nimport { useConversationInput } from \"./ConversationInput.js\";\nimport { useConversationMode } from \"./ConversationMode.js\";\nimport { useConversationFeedback } from \"./ConversationFeedback.js\";\nimport {\n useRawConversation,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\nimport type { HookOptions } from \"./types.js\";\n\nexport type UseConversationOptions = HookOptions & {\n micMuted?: boolean;\n volume?: number;\n};\n\n/**\n * Convenience hook that combines all granular conversation hooks into a single\n * return value. Less performant than using individual hooks because any state\n * change in any sub-context triggers a re-render of the consuming component.\n *\n * Accepts optional `micMuted`, `volume`, session config, and callback props.\n * Session config and callbacks passed here are used as defaults when calling\n * `startSession()` without arguments. Callbacks are also registered with the\n * provider so they stay up-to-date across re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversation(props: UseConversationOptions = {}) {\n const { micMuted, volume, ...hookOptions } = props;\n\n const stableCallbacks = useStableCallbacks(hookOptions);\n useRegisterCallbacks(stableCallbacks);\n\n const hookOptionsRef = useRef(hookOptions);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n hookOptionsRef.current = hookOptions;\n\n const controls = useConversationControls();\n const { status, message } = useConversationStatus();\n const { isMuted, setMuted } = useConversationInput();\n const { mode, isSpeaking, isListening } = useConversationMode();\n const { canSendFeedback, sendFeedback } = useConversationFeedback();\n\n const startSession = useCallback(\n (options?: HookOptions) => {\n // Strip callbacks from the hook-level defaults: those are registered via\n // useRegisterCallbacks and kept ref-stable across renders.\n // NOTE: We intentionally do NOT strip callbacks from the `options` parameter\n // here. Callbacks passed directly to startSession() are treated as one-shot\n // per-session overrides, and may capture render-local state. This asymmetry\n // (hook callbacks are ref-stable; startSession callbacks are one-shot) is\n // intentional and relied on by the public API.\n const sessionConfig = { ...hookOptionsRef.current };\n for (const key of CALLBACK_KEYS) {\n delete (sessionConfig as Record<string, unknown>)[key];\n }\n controls.startSession({\n ...sessionConfig,\n ...options,\n } as HookOptions);\n },\n [controls, hookOptionsRef]\n );\n\n const conversation = useRawConversation();\n\n useEffect(() => {\n if (micMuted !== undefined && conversation) {\n setMuted(micMuted);\n }\n }, [micMuted, conversation, setMuted]);\n\n useEffect(() => {\n if (volume !== undefined && conversation) {\n conversation.setVolume({ volume });\n }\n }, [volume, conversation]);\n\n return {\n ...controls,\n startSession,\n status,\n message,\n isMuted: micMuted ?? isMuted,\n setMuted,\n mode,\n isSpeaking,\n isListening,\n canSendFeedback,\n sendFeedback,\n };\n}\n","import { setSourceInfo } from \"@elevenlabs/client/internal\";\nimport { PACKAGE_VERSION } from \"./version.js\";\n\nsetSourceInfo({ name: \"react_sdk\", version: PACKAGE_VERSION });\n\nexport * from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe.js\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe.js\";\n\n// Conversation context API\nexport { ConversationProvider } from \"./conversation/ConversationProvider.js\";\nexport { useConversationControls } from \"./conversation/ConversationControls.js\";\nexport { useConversationStatus } from \"./conversation/ConversationStatus.js\";\nexport { useConversationInput } from \"./conversation/ConversationInput.js\";\nexport { useConversationMode } from \"./conversation/ConversationMode.js\";\nexport { useConversationFeedback } from \"./conversation/ConversationFeedback.js\";\nexport { useRawConversation } from \"./conversation/ConversationContext.js\";\nexport { useConversation } from \"./conversation/useConversation.js\";\nexport { useConversationClientTool } from \"./conversation/ConversationClientTools.js\";\nexport type { UseConversationOptions } from \"./conversation/useConversation.js\";\nexport type { ConversationControlsValue } from \"./conversation/ConversationControls.js\";\nexport type { ConversationInputValue } from \"./conversation/ConversationInput.js\";\nexport type {\n ConversationStatus,\n ConversationStatusValue,\n} from \"./conversation/ConversationStatus.js\";\nexport type { ConversationModeValue } from \"./conversation/ConversationMode.js\";\nexport type { ConversationFeedbackValue } from \"./conversation/ConversationFeedback.js\";\nexport type { ConversationProviderProps } from \"./conversation/ConversationProvider.js\";\nexport type {\n HookOptions,\n HookCallbacks,\n ClientTool,\n ClientTools,\n ClientToolResult,\n} from \"./conversation/types.js\";\n"],"x_google_ignoreList":[3,4],"mappings":"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"}
1
+ {"version":3,"file":"lib.iife.js","names":["Scribe","RealtimeEvents","VoiceConversation","CALLBACK_KEYS","CALLBACK_KEYS","Conversation","CALLBACK_KEYS"],"sources":["../src/version.ts","../src/scribe.ts","../src/conversation/ConversationContext.tsx","../../../node_modules/.pnpm/react@19.2.8/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.8/node_modules/react/jsx-runtime.js","../src/conversation/ConversationControls.tsx","../src/conversation/ConversationStatus.tsx","../src/conversation/ConversationInput.tsx","../src/conversation/ConversationMode.tsx","../src/conversation/ConversationFeedback.tsx","../src/conversation/ConversationClientTools.tsx","../src/conversation/ListenerSet.ts","../src/conversation/ListenerMap.ts","../src/conversation/useStableCallbacks.ts","../src/conversation/ConversationProvider.tsx","../src/conversation/useConversation.ts","../src/index.ts"],"sourcesContent":["// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"1.12.2\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestampCharacter {\n /** The character that was transcribed */\n text: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n}\n\nexport interface WordTimestamp {\n /** The word or sound that was transcribed */\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n /** `\"audio_event\"` covers non-word sounds such as laughter or footsteps */\n type?: \"word\" | \"spacing\" | \"audio_event\";\n speaker_id?: string;\n logprob?: number;\n characters?: WordTimestampCharacter[];\n /** The channel this word was spoken on (for multichannel audio). Undefined for single-channel transcriptions. */\n channel_index?: number;\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Detected language code (only present when includeLanguageDetection is enabled) */\n languageCode?: string;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n language_code?: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: MicrophoneOptions[\"microphone\"];\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n /** Include detected language information in transcription results */\n includeLanguageDetection?: boolean;\n\n // Keyterms and verbatim control\n keyterms?: string[];\n noVerbatim?: boolean;\n\n /**\n * Whether the session may be logged by ElevenLabs. Set to `false` to use zero\n * retention mode, which makes history features unavailable for the session.\n * Zero retention mode may only be used by enterprise customers.\n * @default true\n */\n enableLogging?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n isMuted: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Mute / unmute\n mute: () => void;\n unmute: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n includeLanguageDetection: defaultIncludeLanguageDetection,\n\n // Keyterms and verbatim control\n keyterms: defaultKeyterms,\n noVerbatim: defaultNoVerbatim,\n\n // Logging\n enableLogging: defaultEnableLogging,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [isMuted, setIsMuted] = useState<boolean>(false);\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n const includeLanguageDetection =\n runtimeOptions.includeLanguageDetection ??\n defaultIncludeLanguageDetection;\n const enableLogging =\n runtimeOptions.enableLogging ?? defaultEnableLogging;\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n keyterms: runtimeOptions.keyterms || defaultKeyterms,\n noVerbatim: runtimeOptions.noVerbatim ?? defaultNoVerbatim,\n microphone,\n includeTimestamps,\n includeLanguageDetection,\n enableLogging,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n keyterms: runtimeOptions.keyterms || defaultKeyterms,\n noVerbatim: runtimeOptions.noVerbatim ?? defaultNoVerbatim,\n includeTimestamps,\n includeLanguageDetection,\n enableLogging,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n languageCode: message.language_code,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n // A socket that has already been replaced must not tear down the\n // session that replaced it. A null ref still runs: disconnect()\n // clears it before this fires, and that close is this session's.\n if (connectionRef.current && connectionRef.current !== connection) {\n return;\n }\n\n setStatus(\"disconnected\");\n setIsMuted(false);\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n defaultIncludeLanguageDetection,\n defaultKeyterms,\n defaultNoVerbatim,\n defaultEnableLogging,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n setIsMuted(false);\n }, []);\n\n const mute = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.mute();\n setIsMuted(true);\n }, []);\n\n const unmute = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.unmute();\n setIsMuted(false);\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n // eslint-disable-next-line react-hooks/set-state-in-effect -- autoConnect intentionally starts the connection when the hook mounts\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n isMuted,\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n mute,\n unmute,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n type MutableRefObject,\n type RefObject,\n} from \"react\";\nimport type {\n Callbacks,\n ClientToolsConfig,\n Conversation,\n} from \"@elevenlabs/client\";\nimport type { HookOptions } from \"./types.js\";\n\ntype ClientToolEntry = ClientToolsConfig[\"clientTools\"][string];\n\nexport type ConversationContextValue = {\n conversation: Conversation | null;\n /** Stable ref to the active conversation — use in callbacks to avoid re-renders. */\n conversationRef: RefObject<Conversation | null>;\n startSession: (options?: HookOptions) => void;\n endSession: () => void;\n /**\n * For sub-providers — register callback handlers to be composed into the\n * next `Conversation.startSession()` call. Returns an unsubscribe function.\n */\n registerCallbacks: (callbacks: Partial<Callbacks>) => () => void;\n /** Registry of hook-registered client tools. Survives across sessions. */\n clientToolsRegistry: Map<string, ClientToolEntry>;\n /** Ref to the live clientTools object currently held by BaseConversation. */\n clientToolsRef: MutableRefObject<Record<string, ClientToolEntry>>;\n};\n\nexport const ConversationContext =\n createContext<ConversationContextValue | null>(null);\n\n/**\n * Returns the raw `Conversation` instance (or `null` if no session is active).\n * This is a public escape hatch for advanced use cases that need direct access\n * to the underlying `@elevenlabs/client` Conversation object.\n *\n * Can be used outside a `ConversationProvider` — returns `null` in that case.\n */\nexport function useRawConversation(): Conversation | null {\n const ctx = useContext(ConversationContext);\n return ctx?.conversation ?? null;\n}\n\n/**\n * Returns a stable ref to the active `Conversation` instance.\n * The ref's `.current` is `null` when no session is active, and updates\n * without causing re-renders — ideal for use inside callbacks and sub-providers.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRawConversationRef(): RefObject<Conversation | null> {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"useRawConversationRef must be used within a ConversationProvider\"\n );\n }\n return ctx.conversationRef;\n}\n\n/**\n * Registers callback handlers with the nearest `ConversationProvider`.\n * Uses a ref internally so the latest callback values are always invoked\n * without re-subscribing on every render.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRegisterCallbacks(callbacks: Partial<Callbacks>): void {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"useRegisterCallbacks must be used within a ConversationProvider\"\n );\n }\n\n const { registerCallbacks } = ctx;\n const callbacksRef = useRef(callbacks);\n\n // Re-subscribe when the set of provided callback keys changes.\n const activeKeyToken = Object.keys(callbacks)\n .filter(key => callbacks[key as keyof Callbacks] !== undefined)\n .sort()\n .join(\"|\");\n\n useLayoutEffect(() => {\n callbacksRef.current = callbacks;\n });\n\n useLayoutEffect(() => {\n const activeKeys = activeKeyToken === \"\" ? [] : activeKeyToken.split(\"|\");\n const stableCallbacks = Object.fromEntries(\n activeKeys.map((key: string) => [\n key,\n (...args: never[]) => {\n const fn = callbacksRef.current[key as keyof Callbacks];\n if (typeof fn === \"function\") {\n (fn as (...a: never[]) => void)(...args);\n }\n },\n ])\n ) as Partial<Callbacks>;\n return registerCallbacks(stableCallbacks);\n }, [registerCallbacks, activeKeyToken]);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, useCallback, useContext, useMemo } from \"react\";\nimport {\n VoiceConversation,\n type FormatConfig,\n type InputDeviceConfig,\n type OutputConfig,\n type MultimodalMessageInput,\n type UploadFileResult,\n type ContextualUpdateOptions,\n} from \"@elevenlabs/client\";\nimport type { HookOptions } from \"./types.js\";\nimport { ConversationContext } from \"./ConversationContext.js\";\n\nconst EMPTY_FREQUENCY_DATA = new Uint8Array(0);\n\nexport type ConversationControlsValue = {\n startSession: (options?: HookOptions) => void;\n endSession: () => void;\n sendUserMessage: (text: string) => void;\n sendMultimodalMessage: (options: MultimodalMessageInput) => void;\n uploadFile: (file: Blob) => Promise<UploadFileResult>;\n sendContextualUpdate: (\n text: string,\n options?: ContextualUpdateOptions\n ) => void;\n sendUserActivity: () => void;\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => void;\n setVolume: (options: { volume: number }) => void;\n changeInputDevice: (\n config: Partial<FormatConfig> & InputDeviceConfig\n ) => Promise<void>;\n changeOutputDevice: (\n config: Partial<FormatConfig> & OutputConfig\n ) => Promise<void>;\n /** Returns byte frequency data (0-255) for the input, focused on 100-8000 Hz. */\n getInputByteFrequencyData: () => Uint8Array;\n /** Returns byte frequency data (0-255) for the output, focused on 100-8000 Hz. */\n getOutputByteFrequencyData: () => Uint8Array;\n getInputVolume: () => number;\n getOutputVolume: () => number;\n getId: () => string;\n};\n\nexport const ConversationControlsContext =\n createContext<ConversationControlsValue | null>(null);\n\n/**\n * Reads from `ConversationContext` and provides stable action references to\n * `ConversationControlsContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationControlsProvider({\n children,\n}: React.PropsWithChildren) {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"ConversationControlsProvider must be rendered inside a ConversationProvider\"\n );\n }\n\n const { conversationRef } = ctx;\n\n const getConversation = useCallback(() => {\n const conversation = conversationRef.current;\n if (!conversation) {\n throw new Error(\"No active conversation. Call startSession() first.\");\n }\n return conversation;\n }, [conversationRef]);\n\n const sendUserMessage = useCallback(\n (text: string) => {\n getConversation().sendUserMessage(text);\n },\n [getConversation]\n );\n\n const sendMultimodalMessage = useCallback(\n (options: MultimodalMessageInput) => {\n getConversation().sendMultimodalMessage(options);\n },\n [getConversation]\n );\n\n const uploadFile = useCallback(\n (file: Blob) => {\n return getConversation().uploadFile(file);\n },\n [getConversation]\n );\n\n const sendContextualUpdate = useCallback(\n (text: string, options?: ContextualUpdateOptions) => {\n getConversation().sendContextualUpdate(text, options);\n },\n [getConversation]\n );\n\n const sendUserActivity = useCallback(() => {\n getConversation().sendUserActivity();\n }, [getConversation]);\n\n const sendMCPToolApprovalResult = useCallback(\n (toolCallId: string, isApproved: boolean) => {\n getConversation().sendMCPToolApprovalResult(toolCallId, isApproved);\n },\n [getConversation]\n );\n\n const setVolume = useCallback(\n (options: { volume: number }) => {\n getConversation().setVolume(options);\n },\n [getConversation]\n );\n\n const changeInputDevice = useCallback(\n async (config: Partial<FormatConfig> & InputDeviceConfig) => {\n const conversation = getConversation();\n if (conversation instanceof VoiceConversation) {\n return await conversation.changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n [getConversation]\n );\n\n const changeOutputDevice = useCallback(\n async (config: Partial<FormatConfig> & OutputConfig) => {\n const conversation = getConversation();\n if (conversation instanceof VoiceConversation) {\n return await conversation.changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n [getConversation]\n );\n\n const getInputByteFrequencyData = useCallback(() => {\n return (\n conversationRef.current?.getInputByteFrequencyData() ??\n EMPTY_FREQUENCY_DATA\n );\n }, [conversationRef]);\n\n const getOutputByteFrequencyData = useCallback(() => {\n return (\n conversationRef.current?.getOutputByteFrequencyData() ??\n EMPTY_FREQUENCY_DATA\n );\n }, [conversationRef]);\n\n const getInputVolume = useCallback(() => {\n return conversationRef.current?.getInputVolume() ?? 0;\n }, [conversationRef]);\n\n const getOutputVolume = useCallback(() => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n }, [conversationRef]);\n\n const getId = useCallback(() => {\n return getConversation().getId();\n }, [getConversation]);\n\n const value = useMemo<ConversationControlsValue>(\n () => ({\n startSession: ctx.startSession,\n endSession: ctx.endSession,\n sendUserMessage,\n sendMultimodalMessage,\n uploadFile,\n sendContextualUpdate,\n sendUserActivity,\n sendMCPToolApprovalResult,\n setVolume,\n changeInputDevice,\n changeOutputDevice,\n getInputByteFrequencyData,\n getOutputByteFrequencyData,\n getInputVolume,\n getOutputVolume,\n getId,\n }),\n [\n ctx.startSession,\n ctx.endSession,\n sendUserMessage,\n sendMultimodalMessage,\n uploadFile,\n sendContextualUpdate,\n sendUserActivity,\n sendMCPToolApprovalResult,\n setVolume,\n changeInputDevice,\n changeOutputDevice,\n getInputByteFrequencyData,\n getOutputByteFrequencyData,\n getInputVolume,\n getOutputVolume,\n getId,\n ]\n );\n\n return (\n <ConversationControlsContext.Provider value={value}>\n {children}\n </ConversationControlsContext.Provider>\n );\n}\n\n/**\n * Returns stable action references for controlling the conversation.\n * All function references are stable and will never cause re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationControls(): ConversationControlsValue {\n const ctx = useContext(ConversationControlsContext);\n if (!ctx) {\n throw new Error(\n \"useConversationControls must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\n\nexport type ConversationStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"error\";\n\nexport type ConversationStatusValue = {\n status: ConversationStatus;\n message?: string;\n};\n\nconst ConversationStatusContext = createContext<ConversationStatusValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and registers `onStatusChange` + `onError`\n * callbacks. Manages its own `status`/`message` state and provides it through\n * `ConversationStatusContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationStatusProvider({\n children,\n}: React.PropsWithChildren) {\n const [status, setStatus] =\n useState<ConversationStatusValue[\"status\"]>(\"disconnected\");\n const [message, setMessage] = useState<string | undefined>(undefined);\n\n useRegisterCallbacks({\n onStatusChange({ status: newStatus }) {\n // \"disconnecting\" means the provider has already released the\n // conversation (endSession clears it optimistically), so report\n // \"disconnected\" immediately — holding \"connected\" here would let\n // consumers observe status === \"connected\" with no conversation.\n setStatus(newStatus === \"disconnecting\" ? \"disconnected\" : newStatus);\n // Clear error message when transitioning to a non-error state\n setMessage(undefined);\n },\n onError(errorMessage) {\n setStatus(\"error\");\n setMessage(errorMessage);\n },\n });\n\n const value = useMemo<ConversationStatusValue>(\n () => ({ status, message }),\n [status, message]\n );\n\n return (\n <ConversationStatusContext.Provider value={value}>\n {children}\n </ConversationStatusContext.Provider>\n );\n}\n\n/**\n * Returns the current conversation status and any error message.\n * Re-renders when the connection status or error message changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationStatus(): ConversationStatusValue {\n const ctx = useContext(ConversationStatusContext);\n if (!ctx) {\n throw new Error(\n \"useConversationStatus must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useRawConversation,\n useRawConversationRef,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\n\nexport type ConversationInputValue = {\n isMuted: boolean;\n setMuted: (isMuted: boolean) => void;\n};\n\nexport type ConversationInputProviderProps = React.PropsWithChildren<{\n /** Controlled mute state. If omitted, provider manages state internally. */\n isMuted?: boolean;\n /** Called whenever mute state is changed via setMuted. */\n onMutedChange?: (isMuted: boolean) => void;\n}>;\n\nconst ConversationInputContext = createContext<ConversationInputValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and manages microphone mute state.\n * `setMuted` calls `conversation.setMicMuted()` and updates local state.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationInputProvider({\n children,\n isMuted: controlledIsMuted,\n onMutedChange,\n}: ConversationInputProviderProps) {\n const conversation = useRawConversation();\n const conversationRef = useRawConversationRef();\n const isControlled = typeof controlledIsMuted === \"boolean\";\n const [uncontrolledIsMuted, setUncontrolledIsMuted] = useState(false);\n const isMuted = isControlled ? controlledIsMuted : uncontrolledIsMuted;\n\n useRegisterCallbacks({\n onDisconnect() {\n if (!isControlled) {\n setUncontrolledIsMuted(false);\n }\n },\n });\n\n useEffect(() => {\n if (isControlled && conversation) {\n conversation.setMicMuted(controlledIsMuted);\n }\n }, [conversation, controlledIsMuted, isControlled]);\n\n const setMuted = useCallback(\n (muted: boolean) => {\n const conversation = conversationRef.current;\n if (!conversation) {\n throw new Error(\"No active conversation. Call startSession() first.\");\n }\n if (!isControlled) {\n conversation.setMicMuted(muted);\n setUncontrolledIsMuted(muted);\n }\n onMutedChange?.(muted);\n },\n [conversationRef, isControlled, onMutedChange]\n );\n\n const value = useMemo<ConversationInputValue>(\n () => ({ isMuted, setMuted }),\n [isMuted, setMuted]\n );\n\n return (\n <ConversationInputContext.Provider value={value}>\n {children}\n </ConversationInputContext.Provider>\n );\n}\n\n/**\n * Returns the current microphone mute state and a function to change it.\n * Re-renders only when the mute state changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationInput(): ConversationInputValue {\n const ctx = useContext(ConversationInputContext);\n if (!ctx) {\n throw new Error(\n \"useConversationInput must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport type { Mode } from \"@elevenlabs/client\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\n\nexport type ConversationModeValue = {\n mode: \"speaking\" | \"listening\";\n isSpeaking: boolean;\n isListening: boolean;\n};\n\nconst ConversationModeContext = createContext<ConversationModeValue | null>(\n null\n);\n\n/**\n * Reads from `ConversationContext` and registers an `onModeChange` callback.\n * Manages its own `mode` state and provides it through\n * `ConversationModeContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationModeProvider({\n children,\n}: React.PropsWithChildren) {\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useRegisterCallbacks({\n onModeChange({ mode: newMode }) {\n setMode(newMode);\n },\n onDisconnect() {\n setMode(\"listening\");\n },\n });\n\n const value = useMemo<ConversationModeValue>(\n () => ({\n mode,\n isSpeaking: mode === \"speaking\",\n isListening: mode === \"listening\",\n }),\n [mode]\n );\n\n return (\n <ConversationModeContext.Provider value={value}>\n {children}\n </ConversationModeContext.Provider>\n );\n}\n\n/**\n * Returns the current conversation mode (speaking/listening) and\n * convenience booleans. Re-renders only when the mode changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationMode(): ConversationModeValue {\n const ctx = useContext(ConversationModeContext);\n if (!ctx) {\n throw new Error(\n \"useConversationMode must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useRawConversationRef,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\n\nexport type ConversationFeedbackValue = {\n canSendFeedback: boolean;\n sendFeedback: (like: boolean | null, eventId?: number) => void;\n};\n\nconst ConversationFeedbackContext =\n createContext<ConversationFeedbackValue | null>(null);\n\n/**\n * Reads from `ConversationContext` and registers an `onCanSendFeedbackChange`\n * callback. Manages its own `canSendFeedback` state and provides it along with\n * a `sendFeedback` action through `ConversationFeedbackContext`.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationFeedbackProvider({\n children,\n}: React.PropsWithChildren) {\n const conversationRef = useRawConversationRef();\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n\n useRegisterCallbacks({\n onCanSendFeedbackChange({ canSendFeedback: newValue }) {\n setCanSendFeedback(newValue);\n },\n onDisconnect() {\n setCanSendFeedback(false);\n },\n });\n\n const sendFeedback = useCallback(\n (like: boolean | null, eventId?: number) => {\n conversationRef.current?.sendFeedback(like, eventId);\n },\n [conversationRef]\n );\n\n const value = useMemo<ConversationFeedbackValue>(\n () => ({\n canSendFeedback,\n sendFeedback,\n }),\n [canSendFeedback, sendFeedback]\n );\n\n return (\n <ConversationFeedbackContext.Provider value={value}>\n {children}\n </ConversationFeedbackContext.Provider>\n );\n}\n\n/**\n * Returns the current feedback state and a `sendFeedback` action.\n * Re-renders only when `canSendFeedback` changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationFeedback(): ConversationFeedbackValue {\n const ctx = useContext(ConversationFeedbackContext);\n if (!ctx) {\n throw new Error(\n \"useConversationFeedback must be used within a ConversationProvider\"\n );\n }\n return ctx;\n}\n","import { createContext, useCallback, useContext, useLayoutEffect, useRef } from \"react\";\nimport type { ClientToolsConfig } from \"@elevenlabs/client\";\nimport { ConversationContext } from \"./ConversationContext.js\";\nimport type { ClientTool, ClientTools } from \"./types.js\";\n\ntype ClientToolEntry = ClientToolsConfig[\"clientTools\"][string];\n\n/**\n * Creates a fresh clientTools object by merging option-provided tools with\n * hook-registered tools from the registry. Throws if a hook-registered tool\n * name conflicts with an option-provided tool.\n */\nexport function buildClientTools(\n optionTools: Record<string, ClientToolEntry> | undefined,\n registry: Map<string, ClientToolEntry>\n): Record<string, ClientToolEntry> {\n const clientTools: Record<string, ClientToolEntry> = { ...optionTools };\n for (const [name, handler] of registry) {\n if (Object.hasOwn(clientTools, name)) {\n throw new Error(\n `Client tool \"${name}\" is already provided via props/options. ` +\n `Remove it from props or do not register it with useConversationClientTool.`\n );\n }\n clientTools[name] = handler;\n }\n return clientTools;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-provider\n// ---------------------------------------------------------------------------\n\ntype RegisterClientTool = (\n name: string,\n handler: ClientToolEntry\n) => () => void;\n\nconst ConversationClientToolsContext = createContext<RegisterClientTool | null>(\n null\n);\n\nexport function ConversationClientToolsProvider({\n children,\n}: React.PropsWithChildren) {\n const ctx = useContext(ConversationContext);\n if (!ctx) {\n throw new Error(\n \"ConversationClientToolsProvider must be rendered inside a ConversationProvider\"\n );\n }\n\n const { clientToolsRegistry, clientToolsRef } = ctx;\n\n const registerClientTool: RegisterClientTool = useCallback(\n (name, handler) => {\n if (clientToolsRegistry.has(name)) {\n throw new Error(\n `Client tool \"${name}\" is already registered by another hook. ` +\n `Each tool name must be unique.`\n );\n }\n clientToolsRegistry.set(name, handler);\n clientToolsRef.current[name] = handler;\n return () => {\n if (clientToolsRegistry.get(name) === handler) {\n clientToolsRegistry.delete(name);\n }\n if (clientToolsRef.current[name] === handler) {\n delete clientToolsRef.current[name];\n }\n };\n },\n [clientToolsRegistry, clientToolsRef]\n );\n\n return (\n <ConversationClientToolsContext.Provider value={registerClientTool}>\n {children}\n </ConversationClientToolsContext.Provider>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\n/**\n * Registers a named client tool with the nearest `ConversationProvider`.\n * The tool is available during any active conversation and is automatically\n * unregistered when the component unmounts.\n *\n * The handler always reflects the latest closure value (ref pattern),\n * so it is safe to reference component state or props without listing\n * them as dependencies.\n *\n * @typeParam TTools - An interface mapping tool names to function signatures.\n * @typeParam TName - The specific tool name (inferred from the first argument).\n * @param name - The tool name (must match the name configured on the agent).\n * @param handler - The function invoked when the agent calls this tool.\n *\n * @example\n * ```tsx\n * type Tools = {\n * get_weather: (params: { city: string }) => string;\n * set_volume: (params: { level: number }) => void;\n * };\n *\n * useConversationClientTool<Tools>(\"get_weather\", (params) => {\n * return `Weather in ${params.city} is sunny.`;\n * });\n * ```\n */\nexport function useConversationClientTool<\n TTools extends ClientTools = Record<string, ClientTool>,\n TName extends string & keyof TTools = string & keyof TTools,\n>(name: TName, handler: TTools[TName]): void {\n const registerClientTool = useContext(ConversationClientToolsContext);\n if (!registerClientTool) {\n throw new Error(\n \"useConversationClientTool must be used within a ConversationProvider\"\n );\n }\n\n const handlerRef = useRef(handler);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n handlerRef.current = handler;\n\n useLayoutEffect(() => {\n const stableHandler: ClientToolEntry = parameters =>\n handlerRef.current(parameters as Parameters<TTools[TName]>[0]);\n return registerClientTool(name, stableHandler);\n }, [registerClientTool, name]);\n}\n","export class ListenerSet<Args extends unknown[]> {\n private listeners = new Set<(...args: Args) => void>();\n\n add(fn: (...args: Args) => void): () => void {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n invoke(...args: Args): void {\n for (const fn of this.listeners) fn(...args);\n }\n\n get size(): number {\n return this.listeners.size;\n }\n}\n","import { ListenerSet } from \"./ListenerSet.js\";\n\nfunction assertFunction(\n value: unknown,\n key: string\n): asserts value is (...args: unknown[]) => void {\n if (typeof value !== \"function\") {\n throw new Error(`Expected function for key \"${key}\", got ${typeof value}`);\n }\n}\n\n/**\n * A map of named listener sets. Each key maps to a `ListenerSet` that can have\n * multiple listeners registered. Typed through `T` so that `register` and\n * `compose` preserve per-key callback signatures.\n *\n * All keys are pre-initialized in the constructor so `register` can validate\n * keys. `compose()` only includes keys with at least one registered listener,\n * preserving callback-presence semantics used by the client as feature guards.\n * For included keys, composed functions delegate to the live listener set, so\n * listeners added/removed after `compose()` still take effect. Keys with no\n * listeners at compose time are omitted entirely; call `compose()` again after\n * registering listeners to pick up newly populated keys.\n */\nexport class ListenerMap<\n T extends Record<string, ((...args: never[]) => void) | undefined>,\n> {\n private sets = new Map<string, ListenerSet<unknown[]>>();\n\n constructor(keys: readonly (keyof T & string)[]) {\n for (const key of keys) {\n this.sets.set(key, new ListenerSet<unknown[]>());\n }\n }\n\n /**\n * Register listeners for one or more keys. Returns a function that removes\n * all listeners added by this call.\n */\n register(callbacks: Partial<T>): () => void {\n const removers = Object.entries(callbacks)\n .filter(([, fn]) => fn !== undefined)\n .map(([key, fn]) => {\n assertFunction(fn, key);\n const set = this.sets.get(key);\n if (!set) {\n throw new Error(`Unknown callback key \"${key}\"`);\n }\n return set.add(fn);\n });\n return () => {\n for (const remove of removers) remove();\n };\n }\n\n /**\n * Compose all registered listeners into a single callbacks object. Each\n * composed function delegates to the live listener set, so listeners\n * added/removed after this call still take effect.\n */\n compose(): Partial<T> {\n return Object.fromEntries(\n Array.from(this.sets.entries())\n .filter(([, set]) => set.size > 0)\n .map(([key, set]) => [\n key,\n (...args: never[]) => {\n set.invoke(...args);\n },\n ])\n ) as Partial<T>;\n }\n}\n","import { useMemo, useRef } from \"react\";\nimport type { Callbacks } from \"@elevenlabs/client\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\nimport type { HookOptions } from \"./types.js\";\n\n/**\n * Wraps user-provided callback props in stable ref-backed functions,\n * preventing stale closure bugs when the session outlives renders.\n *\n * Returns a `Partial<Callbacks>` containing only the keys the caller\n * actually provided. Function references are stable per key across\n * renders, but always invoke the latest prop value. The returned object\n * reference is stable as long as the set of provided keys doesn't change.\n */\nexport function useStableCallbacks(props: HookOptions): Partial<Callbacks> {\n // Store the latest prop value for each callback in a ref.\n // Uses Record<string, unknown> to avoid TypeScript's union-to-intersection\n // issue when indexing Callbacks with a union of all its keys.\n const callbackRefs = useRef<Record<string, unknown>>({});\n\n // Compute a stable scalar from the set of provided keys so we can\n // memoize the result object.\n const activeKeys = CALLBACK_KEYS.filter(key => props[key] !== undefined);\n const activeKeySet = activeKeys.join(\"|\");\n const stableCallbacks = useMemo(\n () =>\n Object.fromEntries(\n activeKeys.map(key => [\n key,\n (...args: unknown[]) => {\n const fn = callbackRefs.current[key] as\n | ((...a: unknown[]) => void)\n | undefined;\n fn?.(...args);\n },\n ])\n ) as Partial<Callbacks>,\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKeySet is a stable scalar derived from activeKeys\n [activeKeySet]\n );\n\n for (const key of CALLBACK_KEYS) {\n // eslint-disable-next-line react-hooks/refs -- callback refs intentionally track latest props for stable event handlers\n callbackRefs.current[key] = props[key];\n }\n\n return stableCallbacks;\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Conversation,\n type Options,\n type Callbacks,\n type ConversationLifecycleOptions,\n} from \"@elevenlabs/client\";\nimport {\n CALLBACK_KEYS,\n mergeOptions,\n parseLocation,\n getOriginForLocation,\n getLivekitUrlForLocation,\n} from \"@elevenlabs/client/internal\";\n\nimport { type HookOptions } from \"./types.js\";\nimport {\n ConversationContext,\n type ConversationContextValue,\n} from \"./ConversationContext.js\";\nimport { ConversationControlsProvider } from \"./ConversationControls.js\";\nimport { ConversationStatusProvider } from \"./ConversationStatus.js\";\nimport {\n ConversationInputProvider,\n type ConversationInputProviderProps,\n} from \"./ConversationInput.js\";\nimport { ConversationModeProvider } from \"./ConversationMode.js\";\nimport { ConversationFeedbackProvider } from \"./ConversationFeedback.js\";\nimport {\n ConversationClientToolsProvider,\n buildClientTools,\n} from \"./ConversationClientTools.js\";\nimport { ListenerMap } from \"./ListenerMap.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\n\ntype ConversationInputControlProps = Pick<\n ConversationInputProviderProps,\n \"isMuted\" | \"onMutedChange\"\n>;\n\nconst SUB_PROVIDERS_WITHOUT_PROPS: React.ComponentType<React.PropsWithChildren>[] =\n [\n ConversationControlsProvider,\n ConversationStatusProvider,\n ConversationModeProvider,\n ConversationFeedbackProvider,\n ConversationClientToolsProvider,\n ];\n\nexport type ConversationProviderProps = React.PropsWithChildren<\n HookOptions & ConversationInputControlProps\n>;\n\nexport function ConversationProvider({\n children,\n isMuted,\n onMutedChange,\n ...defaultOptions\n}: ConversationProviderProps) {\n /** The active conversation instance, if any. */\n const conversationRef = useRef<Conversation | null>(null);\n /** In-flight startSession promise, used to prevent duplicate connections. */\n const lockRef = useRef<Promise<Conversation> | null>(null);\n /** Monotonic id used to ignore stale async handlers from older starts. */\n const startSessionIdRef = useRef(0);\n /** Signals that endSession was called while a connection was still pending. */\n const shouldEndRef = useRef(false);\n /** Registry of hook-registered client tools. Survives across sessions. */\n const [clientToolsRegistry] = useState(\n () => new Map<string, NonNullable<Options[\"clientTools\"]>[string]>()\n );\n /** Ref to the live clientTools object currently held by BaseConversation. */\n const clientToolsRef = useRef<\n Record<string, NonNullable<Options[\"clientTools\"]>[string]>\n >({});\n /** Always holds the latest provider props, avoiding stale closures in callbacks. */\n const defaultOptionsRef = useRef(defaultOptions);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n defaultOptionsRef.current = defaultOptions;\n\n /** Callback registry for sub-providers (status, mode, feedback, etc.). */\n const [listenerMap] = useState(\n () => new ListenerMap<Callbacks>(CALLBACK_KEYS)\n );\n\n /** Reactive mirror of conversationRef, triggers re-renders for context consumers. */\n const [conversation, setConversation] = useState<Conversation | null>(null);\n\n const stableCallbacks = useStableCallbacks(defaultOptions);\n\n const registerCallbacks = useCallback(\n (callbacks: Partial<Callbacks>) => listenerMap.register(callbacks),\n [listenerMap]\n );\n\n const startSession = useCallback(\n (options?: HookOptions) => {\n if (conversationRef.current) {\n return;\n }\n if (lockRef.current) {\n return;\n }\n\n shouldEndRef.current = false;\n const startSessionId = ++startSessionIdRef.current;\n\n const defaults = defaultOptionsRef.current;\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || defaults?.serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n // Strip raw callbacks from defaults — stableCallbacks provides\n // ref-backed versions that won't go stale across renders.\n const defaultConfig = { ...defaults };\n for (const key of CALLBACK_KEYS) {\n delete (defaultConfig as Record<string, unknown>)[key];\n }\n\n const sessionOptions = mergeOptions<Options>(\n { livekitUrl: calculatedLivekitUrl },\n defaultConfig,\n stableCallbacks,\n listenerMap.compose(),\n options ?? {},\n { origin }\n );\n\n const clientTools = buildClientTools(\n sessionOptions.clientTools,\n clientToolsRegistry\n );\n clientToolsRef.current = clientTools;\n sessionOptions.clientTools = clientTools;\n\n const isStaleStartSession = () =>\n startSessionId !== startSessionIdRef.current;\n\n // A superseded session can outlive its replacement's start: its async\n // teardown keeps emitting events (final \"disconnected\", teardown\n // onDisconnect, errors) that would otherwise reach the listener map\n // and clobber sub-provider state now reflecting the newer session\n // (e.g. ConversationModeProvider resets mode on onDisconnect). Drop\n // every callback once this start is stale.\n for (const key of CALLBACK_KEYS) {\n const callback = sessionOptions[key];\n if (typeof callback === \"function\") {\n (sessionOptions as Record<string, unknown>)[key] = (\n ...args: never[]\n ) => {\n if (!isStaleStartSession()) {\n (callback as (...a: never[]) => void)(...args);\n }\n };\n }\n }\n\n const userOnConversationCreated = sessionOptions.onConversationCreated;\n const userOnDisconnect = sessionOptions.onDisconnect;\n\n // Set once this session's conversation is known. endSession() clears\n // conversationRef optimistically (so restart-from-callback patterns\n // keep working), which means a session's own onDisconnect can still\n // arrive after a *newer* session has taken the ref — this check stops\n // that late arrival from clearing state that isn't its own.\n let thisSessionConv: Conversation | null = null;\n\n const handleConversationCreated = (conv: Conversation) => {\n thisSessionConv = conv;\n if (shouldEndRef.current || isStaleStartSession()) {\n return;\n }\n conversationRef.current = conv;\n setConversation(conv);\n userOnConversationCreated?.(conv);\n };\n\n const handleConnect: NonNullable<Callbacks[\"onConnect\"]> = props => {\n if (shouldEndRef.current || isStaleStartSession()) {\n return;\n }\n lockRef.current = null;\n sessionOptions.onConnect?.(props);\n };\n\n // \"disconnecting\" marks the moment the session stops being usable, on\n // every path (agent hangup, raw endSession(), provider endSession()) —\n // release the conversation here so it clears in the same React batch\n // as the status transition, and consumers never observe a live status\n // with a released conversation (or vice versa). Stale sessions are\n // dropped entirely so a late \"disconnected\" can't clobber the status\n // of a session that replaced this one.\n const handleStatusChange: NonNullable<\n Callbacks[\"onStatusChange\"]\n > = props => {\n if (isStaleStartSession()) {\n return;\n }\n if (\n props.status === \"disconnecting\" &&\n thisSessionConv !== null &&\n conversationRef.current === thisSessionConv\n ) {\n conversationRef.current = null;\n setConversation(null);\n }\n sessionOptions.onStatusChange?.(props);\n };\n\n // Syncs provider state when this session ends, whether externally\n // (agent disconnect) or via endSession(). Only clears conversationRef\n // if it still points at this session's conversation.\n const handleDisconnect: NonNullable<\n Callbacks[\"onDisconnect\"]\n > = details => {\n if (isStaleStartSession()) {\n return;\n }\n if (conversationRef.current === thisSessionConv) {\n conversationRef.current = null;\n setConversation(null);\n }\n userOnDisconnect?.(details);\n };\n\n const providerLifecycleOptions: ConversationLifecycleOptions &\n Pick<Callbacks, \"onConnect\" | \"onDisconnect\" | \"onStatusChange\"> = {\n onConversationCreated: handleConversationCreated,\n onConnect: handleConnect,\n onDisconnect: handleDisconnect,\n onStatusChange: handleStatusChange,\n };\n\n const startSessionOptions: Options = {\n ...sessionOptions,\n ...providerLifecycleOptions,\n };\n\n lockRef.current = Conversation.startSession(startSessionOptions);\n\n lockRef.current.then(\n conv => {\n if (isStaleStartSession()) {\n return;\n }\n if (shouldEndRef.current) {\n conv\n .endSession()\n .catch(error => console.warn(\"Error ending session:\", error));\n lockRef.current = null;\n return;\n }\n if (conversationRef.current !== conv) {\n thisSessionConv = conv;\n conversationRef.current = conv;\n setConversation(conv);\n }\n lockRef.current = null;\n },\n (error: unknown) => {\n if (isStaleStartSession()) {\n return;\n }\n conversationRef.current = null;\n setConversation(null);\n lockRef.current = null;\n if (shouldEndRef.current) {\n return;\n }\n // The client SDK calls onStatusChange(\"disconnected\") before\n // rejecting, but never calls onError — surface the failure here\n // so listeners (e.g. ConversationStatusProvider) transition to\n // the \"error\" state with a meaningful message.\n const message =\n error instanceof Error ? error.message : \"Session failed to start\";\n sessionOptions.onError?.(message, error);\n }\n );\n },\n [stableCallbacks, listenerMap, clientToolsRegistry, clientToolsRef]\n );\n\n const endSession = useCallback(() => {\n shouldEndRef.current = true;\n const pendingConnection = lockRef.current;\n const conv = conversationRef.current;\n conversationRef.current = null;\n setConversation(null);\n\n if (pendingConnection) {\n pendingConnection.then(\n c =>\n c\n .endSession()\n .catch(error => console.warn(\"Error ending session:\", error)),\n () => {}\n );\n } else {\n conv\n ?.endSession()\n .catch(error => console.warn(\"Error ending session:\", error));\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n shouldEndRef.current = true;\n if (lockRef.current) {\n lockRef.current.then(\n conv => conv.endSession().catch(() => {}),\n () => {}\n );\n } else {\n conversationRef.current?.endSession().catch(() => {});\n }\n };\n }, []);\n\n const contextValue = useMemo<ConversationContextValue>(\n () => ({\n conversation,\n conversationRef,\n startSession,\n endSession,\n registerCallbacks,\n clientToolsRegistry,\n clientToolsRef,\n }),\n [\n conversation,\n conversationRef,\n startSession,\n endSession,\n registerCallbacks,\n clientToolsRegistry,\n clientToolsRef,\n ]\n );\n\n const wrappedChildren =\n SUB_PROVIDERS_WITHOUT_PROPS.reduceRight<React.ReactNode>(\n (nested, Provider) => <Provider>{nested}</Provider>,\n <ConversationInputProvider\n isMuted={isMuted}\n onMutedChange={onMutedChange}\n >\n {children}\n </ConversationInputProvider>\n );\n\n return (\n <ConversationContext.Provider value={contextValue}>\n {wrappedChildren}\n </ConversationContext.Provider>\n );\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\n\nimport { useConversationControls } from \"./ConversationControls.js\";\nimport { useConversationStatus } from \"./ConversationStatus.js\";\nimport { useConversationInput } from \"./ConversationInput.js\";\nimport { useConversationMode } from \"./ConversationMode.js\";\nimport { useConversationFeedback } from \"./ConversationFeedback.js\";\nimport {\n useRawConversation,\n useRegisterCallbacks,\n} from \"./ConversationContext.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\nimport type { HookOptions } from \"./types.js\";\n\nexport type UseConversationOptions = HookOptions & {\n micMuted?: boolean;\n volume?: number;\n};\n\n/**\n * Convenience hook that combines all granular conversation hooks into a single\n * return value. Less performant than using individual hooks because any state\n * change in any sub-context triggers a re-render of the consuming component.\n *\n * Accepts optional `micMuted`, `volume`, session config, and callback props.\n * Session config and callbacks passed here are used as defaults when calling\n * `startSession()` without arguments. Callbacks are also registered with the\n * provider so they stay up-to-date across re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversation(props: UseConversationOptions = {}) {\n const { micMuted, volume, ...hookOptions } = props;\n\n const stableCallbacks = useStableCallbacks(hookOptions);\n useRegisterCallbacks(stableCallbacks);\n\n const hookOptionsRef = useRef(hookOptions);\n // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n hookOptionsRef.current = hookOptions;\n\n const controls = useConversationControls();\n const { status, message } = useConversationStatus();\n const { isMuted, setMuted } = useConversationInput();\n const { mode, isSpeaking, isListening } = useConversationMode();\n const { canSendFeedback, sendFeedback } = useConversationFeedback();\n\n const startSession = useCallback(\n (options?: HookOptions) => {\n // Strip callbacks from the hook-level defaults: those are registered via\n // useRegisterCallbacks and kept ref-stable across renders.\n // NOTE: We intentionally do NOT strip callbacks from the `options` parameter\n // here. Callbacks passed directly to startSession() are treated as one-shot\n // per-session overrides, and may capture render-local state. This asymmetry\n // (hook callbacks are ref-stable; startSession callbacks are one-shot) is\n // intentional and relied on by the public API.\n const sessionConfig = { ...hookOptionsRef.current };\n for (const key of CALLBACK_KEYS) {\n delete (sessionConfig as Record<string, unknown>)[key];\n }\n controls.startSession({\n ...sessionConfig,\n ...options,\n } as HookOptions);\n },\n [controls, hookOptionsRef]\n );\n\n const conversation = useRawConversation();\n\n useEffect(() => {\n if (micMuted !== undefined && conversation) {\n setMuted(micMuted);\n }\n }, [micMuted, conversation, setMuted]);\n\n useEffect(() => {\n if (volume !== undefined && conversation) {\n conversation.setVolume({ volume });\n }\n }, [volume, conversation]);\n\n return {\n ...controls,\n startSession,\n status,\n message,\n isMuted: micMuted ?? isMuted,\n setMuted,\n mode,\n isSpeaking,\n isListening,\n canSendFeedback,\n sendFeedback,\n };\n}\n","import { setSourceInfo } from \"@elevenlabs/client/internal\";\nimport { PACKAGE_VERSION } from \"./version.js\";\n\nsetSourceInfo({ name: \"react_sdk\", version: PACKAGE_VERSION });\n\nexport * from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe.js\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n WordTimestampCharacter,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe.js\";\n\n// Conversation context API\nexport { ConversationProvider } from \"./conversation/ConversationProvider.js\";\nexport { useConversationControls } from \"./conversation/ConversationControls.js\";\nexport { useConversationStatus } from \"./conversation/ConversationStatus.js\";\nexport { useConversationInput } from \"./conversation/ConversationInput.js\";\nexport { useConversationMode } from \"./conversation/ConversationMode.js\";\nexport { useConversationFeedback } from \"./conversation/ConversationFeedback.js\";\nexport { useRawConversation } from \"./conversation/ConversationContext.js\";\nexport { useConversation } from \"./conversation/useConversation.js\";\nexport { useConversationClientTool } from \"./conversation/ConversationClientTools.js\";\nexport type { UseConversationOptions } from \"./conversation/useConversation.js\";\nexport type { ConversationControlsValue } from \"./conversation/ConversationControls.js\";\nexport type { ConversationInputValue } from \"./conversation/ConversationInput.js\";\nexport type {\n ConversationStatus,\n ConversationStatusValue,\n} from \"./conversation/ConversationStatus.js\";\nexport type { ConversationModeValue } from \"./conversation/ConversationMode.js\";\nexport type { ConversationFeedbackValue } from \"./conversation/ConversationFeedback.js\";\nexport type { ConversationProviderProps } from \"./conversation/ConversationProvider.js\";\nexport type {\n HookOptions,\n HookCallbacks,\n ClientTool,\n ClientTools,\n ClientToolResult,\n} from \"./conversation/types.js\";\n"],"x_google_ignoreList":[3,4],"mappings":"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"}
package/dist/scribe.d.ts CHANGED
@@ -1,15 +1,27 @@
1
1
  import type { RealtimeConnection, MicrophoneOptions, AudioFormat, CommitStrategy } from "@elevenlabs/client";
2
2
  export type ScribeStatus = "disconnected" | "connecting" | "connected" | "transcribing" | "error";
3
+ export interface WordTimestampCharacter {
4
+ /** The character that was transcribed */
5
+ text: string;
6
+ /** Start time in seconds */
7
+ start?: number;
8
+ /** End time in seconds */
9
+ end?: number;
10
+ }
3
11
  export interface WordTimestamp {
12
+ /** The word or sound that was transcribed */
4
13
  text?: string;
5
14
  /** Start time in seconds */
6
15
  start?: number;
7
16
  /** End time in seconds */
8
17
  end?: number;
9
- type?: "word" | "spacing";
18
+ /** `"audio_event"` covers non-word sounds such as laughter or footsteps */
19
+ type?: "word" | "spacing" | "audio_event";
10
20
  speaker_id?: string;
11
21
  logprob?: number;
12
- characters?: string[];
22
+ characters?: WordTimestampCharacter[];
23
+ /** The channel this word was spoken on (for multichannel audio). Undefined for single-channel transcriptions. */
24
+ channel_index?: number;
13
25
  }
14
26
  export interface TranscriptSegment {
15
27
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"scribe.d.ts","sourceRoot":"","sources":["../src/scribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scribe.d.ts","sourceRoot":"","sources":["../src/scribe.ts"],"names":[],"mappings":"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"}
package/dist/scribe.js CHANGED
@@ -227,6 +227,12 @@ export function useScribe(options = {}) {
227
227
  onConnect?.();
228
228
  });
229
229
  connection.on(RealtimeEvents.CLOSE, () => {
230
+ // A socket that has already been replaced must not tear down the
231
+ // session that replaced it. A null ref still runs: disconnect()
232
+ // clears it before this fires, and that close is this session's.
233
+ if (connectionRef.current && connectionRef.current !== connection) {
234
+ return;
235
+ }
230
236
  setStatus("disconnected");
231
237
  setIsMuted(false);
232
238
  connectionRef.current = null;
@@ -1 +1 @@
1
- {"version":3,"file":"scribe.js","sourceRoot":"","sources":["../src/scribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scribe.js","sourceRoot":"","sources":["../src/scribe.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const PACKAGE_VERSION = "1.12.0";
1
+ export declare const PACKAGE_VERSION = "1.12.2";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is auto-generated during build
2
- export const PACKAGE_VERSION = "1.12.0";
2
+ export const PACKAGE_VERSION = "1.12.2";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevenlabs/react",
3
- "version": "1.12.0",
3
+ "version": "1.12.2",
4
4
  "description": "ElevenLabs React Library",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "author": "ElevenLabs",
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@elevenlabs/client": "1.17.0"
21
+ "@elevenlabs/client": "1.19.0"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0"
@@ -26,13 +26,13 @@
26
26
  "devDependencies": {
27
27
  "@eslint/js": "^10.0.1",
28
28
  "@testing-library/react": "^16.3.2",
29
- "@types/react": "^19.2.14",
29
+ "@types/react": "^19.2.18",
30
30
  "eslint": "^10.3.0",
31
31
  "eslint-import-resolver-typescript": "^4.4.4",
32
32
  "eslint-plugin-import-x": "^4.16.2",
33
33
  "eslint-plugin-react-hooks": "^7.1.1",
34
- "react": "19.2.6",
35
- "react-dom": "19.2.6",
34
+ "react": "19.2.8",
35
+ "react-dom": "19.2.8",
36
36
  "rolldown": "^1.0.0-rc.9",
37
37
  "typescript": "^5.5.4",
38
38
  "typescript-eslint": "^8.59.2",