@humeai/voice-embed 0.1.3 → 0.1.5-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SocketConfig, UserTranscriptMessage, AssistantTranscriptMessage } from '@humeai/voice';
2
- export { AssistantTranscriptMessage, EmotionScores, JSONMessage, LanguageModelOption, SocketConfig, ToolCall, ToolError, ToolResponse, UserTranscriptMessage } from '@humeai/voice';
2
+ export { AssistantTranscriptMessage, ChatMetadataMessage, EmotionScores, JSONMessage, LanguageModelOption, SocketConfig, ToolCall, ToolError, ToolResponse, UserTranscriptMessage } from '@humeai/voice';
3
3
  import { z } from 'zod';
4
4
 
5
5
  type EmbeddedVoiceConfig = {
@@ -295,6 +295,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
295
295
  end: number;
296
296
  } | null | undefined;
297
297
  }>;
298
+ from_text: z.ZodCatch<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
298
299
  }, "strip", z.ZodTypeAny, {
299
300
  type: "user_message";
300
301
  message: {
@@ -310,6 +311,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
310
311
  end: number;
311
312
  } | null | undefined;
312
313
  };
314
+ from_text?: boolean | null | undefined;
313
315
  }, {
314
316
  type: "user_message";
315
317
  message: {
@@ -325,6 +327,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
325
327
  end: number;
326
328
  } | null | undefined;
327
329
  };
330
+ from_text?: unknown;
328
331
  }>, {
329
332
  type: "user_message";
330
333
  message: {
@@ -340,6 +343,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
340
343
  end: number;
341
344
  } | null | undefined;
342
345
  };
346
+ from_text?: boolean | null | undefined;
343
347
  } & {
344
348
  receivedAt: Date;
345
349
  }, {
@@ -357,6 +361,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
357
361
  end: number;
358
362
  } | null | undefined;
359
363
  };
364
+ from_text?: unknown;
360
365
  }>, z.ZodEffects<z.ZodObject<{
361
366
  type: z.ZodLiteral<"assistant_message">;
362
367
  id: z.ZodString;
@@ -494,6 +499,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
494
499
  end: number;
495
500
  } | null | undefined;
496
501
  };
502
+ from_text?: boolean | null | undefined;
497
503
  } & {
498
504
  receivedAt: Date;
499
505
  }) | ({
@@ -533,6 +539,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
533
539
  end: number;
534
540
  } | null | undefined;
535
541
  };
542
+ from_text?: unknown;
536
543
  } | {
537
544
  type: "assistant_message";
538
545
  message: {
@@ -606,6 +613,7 @@ declare const TRANSCRIPT_MESSAGE_ACTION: (message: UserTranscriptMessage | Assis
606
613
  end: number;
607
614
  } | null | undefined;
608
615
  };
616
+ from_text?: boolean | null | undefined;
609
617
  } & {
610
618
  receivedAt: Date;
611
619
  }) | ({
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SocketConfig, UserTranscriptMessage, AssistantTranscriptMessage } from '@humeai/voice';
2
- export { AssistantTranscriptMessage, EmotionScores, JSONMessage, LanguageModelOption, SocketConfig, ToolCall, ToolError, ToolResponse, UserTranscriptMessage } from '@humeai/voice';
2
+ export { AssistantTranscriptMessage, ChatMetadataMessage, EmotionScores, JSONMessage, LanguageModelOption, SocketConfig, ToolCall, ToolError, ToolResponse, UserTranscriptMessage } from '@humeai/voice';
3
3
  import { z } from 'zod';
4
4
 
5
5
  type EmbeddedVoiceConfig = {
@@ -295,6 +295,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
295
295
  end: number;
296
296
  } | null | undefined;
297
297
  }>;
298
+ from_text: z.ZodCatch<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
298
299
  }, "strip", z.ZodTypeAny, {
299
300
  type: "user_message";
300
301
  message: {
@@ -310,6 +311,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
310
311
  end: number;
311
312
  } | null | undefined;
312
313
  };
314
+ from_text?: boolean | null | undefined;
313
315
  }, {
314
316
  type: "user_message";
315
317
  message: {
@@ -325,6 +327,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
325
327
  end: number;
326
328
  } | null | undefined;
327
329
  };
330
+ from_text?: unknown;
328
331
  }>, {
329
332
  type: "user_message";
330
333
  message: {
@@ -340,6 +343,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
340
343
  end: number;
341
344
  } | null | undefined;
342
345
  };
346
+ from_text?: boolean | null | undefined;
343
347
  } & {
344
348
  receivedAt: Date;
345
349
  }, {
@@ -357,6 +361,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
357
361
  end: number;
358
362
  } | null | undefined;
359
363
  };
364
+ from_text?: unknown;
360
365
  }>, z.ZodEffects<z.ZodObject<{
361
366
  type: z.ZodLiteral<"assistant_message">;
362
367
  id: z.ZodString;
@@ -494,6 +499,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
494
499
  end: number;
495
500
  } | null | undefined;
496
501
  };
502
+ from_text?: boolean | null | undefined;
497
503
  } & {
498
504
  receivedAt: Date;
499
505
  }) | ({
@@ -533,6 +539,7 @@ declare const FrameToClientActionSchema: z.ZodUnion<[z.ZodObject<{
533
539
  end: number;
534
540
  } | null | undefined;
535
541
  };
542
+ from_text?: unknown;
536
543
  } | {
537
544
  type: "assistant_message";
538
545
  message: {
@@ -606,6 +613,7 @@ declare const TRANSCRIPT_MESSAGE_ACTION: (message: UserTranscriptMessage | Assis
606
613
  end: number;
607
614
  } | null | undefined;
608
615
  };
616
+ from_text?: boolean | null | undefined;
609
617
  } & {
610
618
  receivedAt: Date;
611
619
  }) | ({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/embed.ts","../src/lib/embed-messages.ts"],"sourcesContent":["export * from './lib/embed';\n\nexport {\n COLLAPSE_WIDGET_ACTION,\n EXPAND_WIDGET_ACTION,\n MINIMIZE_WIDGET_ACTION,\n RESIZE_FRAME_ACTION,\n TRANSCRIPT_MESSAGE_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n parseClientToFrameAction,\n type FrameToClientAction,\n type WindowDimensions,\n} from './lib/embed-messages';\n\nexport type {\n AssistantTranscriptMessage,\n SocketConfig,\n JSONMessage,\n UserTranscriptMessage,\n EmotionScores,\n ToolCall,\n ToolResponse,\n ToolError,\n} from '@humeai/voice';\n\nexport { LanguageModelOption } from '@humeai/voice';\n","import type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport { createSocketConfig } from '@humeai/voice';\n\nimport type { ClientToFrameAction } from './embed-messages';\nimport {\n EXPAND_FROM_CLIENT_ACTION,\n FrameToClientActionSchema,\n SEND_WINDOW_SIZE_ACTION,\n UPDATE_CONFIG_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n} from './embed-messages';\n\nexport type EmbeddedVoiceConfig = {\n rendererUrl: string;\n iframeTitle?: string;\n} & SocketConfig;\n\nexport type TranscriptMessageHandler = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => void;\n\nexport type CloseHandler = () => void;\n\nexport class EmbeddedVoice {\n private iframe: HTMLIFrameElement;\n\n private isMounted: boolean = false;\n\n private managedContainer: HTMLElement | null = null;\n\n private config: EmbeddedVoiceConfig;\n\n private onMessage: TranscriptMessageHandler;\n\n private onClose: CloseHandler;\n\n private openOnMount: boolean;\n\n private constructor({\n onMessage = () => {},\n onClose = () => {},\n openOnMount,\n ...config\n }: {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & EmbeddedVoiceConfig) {\n this.config = config;\n this.iframe = this.createIframe(config);\n this.onMessage = onMessage;\n this.onClose = onClose;\n this.openOnMount = openOnMount ?? false;\n this.messageHandler = this.messageHandler.bind(this);\n this.messageHandler = this.messageHandler.bind(this);\n }\n\n static create({\n rendererUrl,\n onMessage,\n onClose,\n openOnMount,\n ...config\n }: Partial<EmbeddedVoiceConfig> & {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & NonNullable<Pick<EmbeddedVoiceConfig, 'auth'>>): EmbeddedVoice {\n const parsedConfig = createSocketConfig(config);\n\n return new EmbeddedVoice({\n rendererUrl: rendererUrl ?? 'https://voice-widget.hume.ai',\n onMessage,\n onClose,\n openOnMount,\n ...parsedConfig,\n });\n }\n\n mount(container?: HTMLElement) {\n const messageHandler = (event: MessageEvent<unknown>) => {\n this.messageHandler(event);\n };\n\n const resizeHandler = () => {\n this.sendWindowSize();\n };\n\n const el = container ?? this.createContainer();\n\n this.managedContainer = el;\n\n try {\n window.addEventListener('message', messageHandler);\n window.addEventListener('resize', resizeHandler);\n el.appendChild(this.iframe);\n this.isMounted = true;\n } catch (e) {\n this.isMounted = false;\n }\n\n const unmount = () => {\n try {\n window.removeEventListener('message', messageHandler);\n window.removeEventListener('resize', resizeHandler);\n this.iframe.remove();\n this.isMounted = false;\n } catch (e) {\n this.isMounted = true;\n }\n\n if (!container) {\n el.remove();\n }\n };\n\n return unmount;\n }\n\n private createContainer() {\n const div = document.createElement('div');\n\n Object.assign(div.style, {\n background: 'transparent',\n position: 'fixed',\n bottom: '0',\n right: '0',\n margin: '24px',\n zIndex: '999999',\n fontSize: '0px',\n pointerEvents: 'none',\n });\n\n div.id = 'hume-embedded-voice-container';\n\n document.body.appendChild(div);\n\n return div;\n }\n\n private createIframe({ rendererUrl, iframeTitle }: EmbeddedVoiceConfig) {\n const el = document.createElement('iframe');\n\n Object.assign(el.style, {\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n border: 'none',\n height: '0px',\n width: '0px',\n opacity: '0',\n });\n\n el.id = 'hume-embedded-voice';\n el.src = `${rendererUrl}`;\n\n el.setAttribute('title', iframeTitle ?? 'Hume Empathic Voice Widget');\n el.setAttribute('frameborder', '0');\n el.setAttribute('allowtransparency', 'true');\n el.setAttribute('scrolling', 'no');\n el.setAttribute('allow', 'microphone');\n\n if (el.contentWindow) {\n el.contentWindow.document.documentElement.style.backgroundColor =\n 'transparent';\n el.contentWindow.document.body.style.backgroundColor = 'transparent';\n }\n\n return el;\n }\n\n private messageHandler(event: MessageEvent<unknown>) {\n if (!this.iframe) {\n return;\n }\n\n if (event.origin !== new URL(this.iframe.src).origin) {\n return;\n }\n\n const action = FrameToClientActionSchema.safeParse(event.data);\n\n if (!action.success) {\n return;\n }\n\n switch (action.data.type) {\n case WIDGET_IFRAME_IS_READY_ACTION.type: {\n this.showIframe();\n this.sendConfigObject();\n this.sendWindowSize();\n if (this.openOnMount) {\n this.openEmbed();\n }\n break;\n }\n case 'resize_frame': {\n this.resizeIframe(action.data.payload);\n break;\n }\n case 'transcript_message': {\n this.onMessage(action.data.payload);\n break;\n }\n case 'collapse_widget': {\n this.onClose();\n break;\n }\n }\n }\n\n openEmbed() {\n const action = EXPAND_FROM_CLIENT_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendConfigObject() {\n const action = UPDATE_CONFIG_ACTION(this.config);\n this.sendMessageToFrame(action);\n }\n\n private sendWindowSize() {\n const action = SEND_WINDOW_SIZE_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendMessageToFrame(action: ClientToFrameAction) {\n const frame = this.iframe;\n\n if (!frame.contentWindow) {\n return;\n }\n\n frame.contentWindow.postMessage(action, new URL(frame.src).origin);\n }\n\n private showIframe() {\n this.iframe.style.opacity = '1';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'all';\n }\n }\n\n private hideIframe() {\n this.iframe.style.opacity = '0';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'none';\n }\n }\n\n private resizeIframe({ width, height }: { width: number; height: number }) {\n this.iframe.style.width = `${width}px`;\n this.iframe.style.height = `${height}px`;\n }\n}\n","/** \n \n client frame \n \n ┌───────────────────────────┐ \n │ mount iframe │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ iframe is ready │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ send config │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ widget is open │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is collapsed │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is minimized │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ transcript message │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ resize window │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ unmount iframe │ ───────────▶ \n └───────────────────────────┘ \n */\nimport type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport {\n AssistantTranscriptMessageSchema,\n SocketConfigSchema,\n UserTranscriptMessageSchema,\n} from '@humeai/voice';\nimport { z } from 'zod';\n\nconst WindowDimensionsSchema = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport type WindowDimensions = z.infer<typeof WindowDimensionsSchema>;\n\n// ---------------------------------------------------------------------------\n// Client to frame actions\n// ---------------------------------------------------------------------------\nexport const ClientToFrameActionSchema = z.union([\n z.object({\n type: z.literal('update_config'),\n payload: SocketConfigSchema,\n }),\n z.object({\n type: z.literal('cancel'),\n }),\n z.object({\n type: z.literal('expand_widget_from_client'),\n payload: WindowDimensionsSchema,\n }),\n z.object({\n type: z.literal('send_window_size'),\n payload: WindowDimensionsSchema,\n }),\n]);\n\nexport type ClientToFrameAction = z.infer<typeof ClientToFrameActionSchema>;\n\nexport const UPDATE_CONFIG_ACTION = (config: SocketConfig) =>\n ({\n type: 'update_config',\n payload: config,\n }) satisfies ClientToFrameAction;\n\nexport const EXPAND_FROM_CLIENT_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'expand_widget_from_client',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const SEND_WINDOW_SIZE_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'send_window_size',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const parseClientToFrameAction = (\n data: unknown,\n): Promise<ClientToFrameAction> => {\n return new Promise((resolve, reject) => {\n try {\n const value = ClientToFrameActionSchema.parse(data);\n resolve(value);\n } catch (error) {\n reject(error);\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// Frame to client actions\n// ---------------------------------------------------------------------------\nexport const FrameToClientActionSchema = z.union([\n z.object({\n type: z.literal('expand_widget'),\n }),\n z.object({\n type: z.literal('collapse_widget'),\n }),\n z.object({\n type: z.literal('minimize_widget'),\n }),\n z.object({\n type: z.literal('widget_iframe_is_ready'),\n }),\n z.object({\n type: z.literal('transcript_message'),\n payload: z.union([\n UserTranscriptMessageSchema,\n AssistantTranscriptMessageSchema,\n ]),\n }),\n z.object({\n type: z.literal('resize_frame'),\n payload: z.object({\n width: z.number(),\n height: z.number(),\n }),\n }),\n]);\n\nexport type FrameToClientAction = z.infer<typeof FrameToClientActionSchema>;\n\nexport const EXPAND_WIDGET_ACTION = {\n type: 'expand_widget',\n} satisfies FrameToClientAction;\n\nexport const COLLAPSE_WIDGET_ACTION = {\n type: 'collapse_widget' as const,\n} satisfies FrameToClientAction;\n\nexport const MINIMIZE_WIDGET_ACTION = {\n type: 'minimize_widget',\n} satisfies FrameToClientAction;\n\nexport const WIDGET_IFRAME_IS_READY_ACTION = {\n type: 'widget_iframe_is_ready',\n} satisfies FrameToClientAction;\n\nexport const TRANSCRIPT_MESSAGE_ACTION = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => {\n return {\n type: 'transcript_message',\n payload: message,\n } satisfies FrameToClientAction;\n};\n\nexport const RESIZE_FRAME_ACTION = (dimensions: {\n width: number;\n height: number;\n}) => {\n return {\n type: 'resize_frame',\n payload: {\n width: dimensions.width,\n height: dimensions.height,\n },\n } satisfies FrameToClientAction;\n};\n"],"mappings":"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","names":["import_voice","import_voice"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/embed.ts","../src/lib/embed-messages.ts"],"sourcesContent":["export * from './lib/embed';\n\nexport {\n COLLAPSE_WIDGET_ACTION,\n EXPAND_WIDGET_ACTION,\n MINIMIZE_WIDGET_ACTION,\n RESIZE_FRAME_ACTION,\n TRANSCRIPT_MESSAGE_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n parseClientToFrameAction,\n type FrameToClientAction,\n type WindowDimensions,\n} from './lib/embed-messages';\n\nexport type {\n AssistantTranscriptMessage,\n SocketConfig,\n JSONMessage,\n UserTranscriptMessage,\n EmotionScores,\n ToolCall,\n ToolResponse,\n ToolError,\n ChatMetadataMessage,\n} from '@humeai/voice';\n\nexport { LanguageModelOption } from '@humeai/voice';\n","import type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport { createSocketConfig } from '@humeai/voice';\n\nimport type { ClientToFrameAction } from './embed-messages';\nimport {\n EXPAND_FROM_CLIENT_ACTION,\n FrameToClientActionSchema,\n SEND_WINDOW_SIZE_ACTION,\n UPDATE_CONFIG_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n} from './embed-messages';\n\nexport type EmbeddedVoiceConfig = {\n rendererUrl: string;\n iframeTitle?: string;\n} & SocketConfig;\n\nexport type TranscriptMessageHandler = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => void;\n\nexport type CloseHandler = () => void;\n\nexport class EmbeddedVoice {\n private iframe: HTMLIFrameElement;\n\n private isMounted: boolean = false;\n\n private managedContainer: HTMLElement | null = null;\n\n private config: EmbeddedVoiceConfig;\n\n private onMessage: TranscriptMessageHandler;\n\n private onClose: CloseHandler;\n\n private openOnMount: boolean;\n\n private constructor({\n onMessage = () => {},\n onClose = () => {},\n openOnMount,\n ...config\n }: {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & EmbeddedVoiceConfig) {\n this.config = config;\n this.iframe = this.createIframe(config);\n this.onMessage = onMessage;\n this.onClose = onClose;\n this.openOnMount = openOnMount ?? false;\n this.messageHandler = this.messageHandler.bind(this);\n this.messageHandler = this.messageHandler.bind(this);\n }\n\n static create({\n rendererUrl,\n onMessage,\n onClose,\n openOnMount,\n ...config\n }: Partial<EmbeddedVoiceConfig> & {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & NonNullable<Pick<EmbeddedVoiceConfig, 'auth'>>): EmbeddedVoice {\n const parsedConfig = createSocketConfig(config);\n\n return new EmbeddedVoice({\n rendererUrl: rendererUrl ?? 'https://voice-widget.hume.ai',\n onMessage,\n onClose,\n openOnMount,\n ...parsedConfig,\n });\n }\n\n mount(container?: HTMLElement) {\n const messageHandler = (event: MessageEvent<unknown>) => {\n this.messageHandler(event);\n };\n\n const resizeHandler = () => {\n this.sendWindowSize();\n };\n\n const el = container ?? this.createContainer();\n\n this.managedContainer = el;\n\n try {\n window.addEventListener('message', messageHandler);\n window.addEventListener('resize', resizeHandler);\n el.appendChild(this.iframe);\n this.isMounted = true;\n } catch (e) {\n this.isMounted = false;\n }\n\n const unmount = () => {\n try {\n window.removeEventListener('message', messageHandler);\n window.removeEventListener('resize', resizeHandler);\n this.iframe.remove();\n this.isMounted = false;\n } catch (e) {\n this.isMounted = true;\n }\n\n if (!container) {\n el.remove();\n }\n };\n\n return unmount;\n }\n\n private createContainer() {\n const div = document.createElement('div');\n\n Object.assign(div.style, {\n background: 'transparent',\n position: 'fixed',\n bottom: '0',\n right: '0',\n margin: '24px',\n zIndex: '999999',\n fontSize: '0px',\n pointerEvents: 'none',\n });\n\n div.id = 'hume-embedded-voice-container';\n\n document.body.appendChild(div);\n\n return div;\n }\n\n private createIframe({ rendererUrl, iframeTitle }: EmbeddedVoiceConfig) {\n const el = document.createElement('iframe');\n\n Object.assign(el.style, {\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n border: 'none',\n height: '0px',\n width: '0px',\n opacity: '0',\n });\n\n el.id = 'hume-embedded-voice';\n el.src = `${rendererUrl}`;\n\n el.setAttribute('title', iframeTitle ?? 'Hume Empathic Voice Widget');\n el.setAttribute('frameborder', '0');\n el.setAttribute('allowtransparency', 'true');\n el.setAttribute('scrolling', 'no');\n el.setAttribute('allow', 'microphone');\n\n if (el.contentWindow) {\n el.contentWindow.document.documentElement.style.backgroundColor =\n 'transparent';\n el.contentWindow.document.body.style.backgroundColor = 'transparent';\n }\n\n return el;\n }\n\n private messageHandler(event: MessageEvent<unknown>) {\n if (!this.iframe) {\n return;\n }\n\n if (event.origin !== new URL(this.iframe.src).origin) {\n return;\n }\n\n const action = FrameToClientActionSchema.safeParse(event.data);\n\n if (!action.success) {\n return;\n }\n\n switch (action.data.type) {\n case WIDGET_IFRAME_IS_READY_ACTION.type: {\n this.showIframe();\n this.sendConfigObject();\n this.sendWindowSize();\n if (this.openOnMount) {\n this.openEmbed();\n }\n break;\n }\n case 'resize_frame': {\n this.resizeIframe(action.data.payload);\n break;\n }\n case 'transcript_message': {\n this.onMessage(action.data.payload);\n break;\n }\n case 'collapse_widget': {\n this.onClose();\n break;\n }\n }\n }\n\n openEmbed() {\n const action = EXPAND_FROM_CLIENT_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendConfigObject() {\n const action = UPDATE_CONFIG_ACTION(this.config);\n this.sendMessageToFrame(action);\n }\n\n private sendWindowSize() {\n const action = SEND_WINDOW_SIZE_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendMessageToFrame(action: ClientToFrameAction) {\n const frame = this.iframe;\n\n if (!frame.contentWindow) {\n return;\n }\n\n frame.contentWindow.postMessage(action, new URL(frame.src).origin);\n }\n\n private showIframe() {\n this.iframe.style.opacity = '1';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'all';\n }\n }\n\n private hideIframe() {\n this.iframe.style.opacity = '0';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'none';\n }\n }\n\n private resizeIframe({ width, height }: { width: number; height: number }) {\n this.iframe.style.width = `${width}px`;\n this.iframe.style.height = `${height}px`;\n }\n}\n","/** \n \n client frame \n \n ┌───────────────────────────┐ \n │ mount iframe │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ iframe is ready │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ send config │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ widget is open │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is collapsed │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is minimized │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ transcript message │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ resize window │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ unmount iframe │ ───────────▶ \n └───────────────────────────┘ \n */\nimport type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport {\n AssistantTranscriptMessageSchema,\n SocketConfigSchema,\n UserTranscriptMessageSchema,\n} from '@humeai/voice';\nimport { z } from 'zod';\n\nconst WindowDimensionsSchema = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport type WindowDimensions = z.infer<typeof WindowDimensionsSchema>;\n\n// ---------------------------------------------------------------------------\n// Client to frame actions\n// ---------------------------------------------------------------------------\nexport const ClientToFrameActionSchema = z.union([\n z.object({\n type: z.literal('update_config'),\n payload: SocketConfigSchema,\n }),\n z.object({\n type: z.literal('cancel'),\n }),\n z.object({\n type: z.literal('expand_widget_from_client'),\n payload: WindowDimensionsSchema,\n }),\n z.object({\n type: z.literal('send_window_size'),\n payload: WindowDimensionsSchema,\n }),\n]);\n\nexport type ClientToFrameAction = z.infer<typeof ClientToFrameActionSchema>;\n\nexport const UPDATE_CONFIG_ACTION = (config: SocketConfig) =>\n ({\n type: 'update_config',\n payload: config,\n }) satisfies ClientToFrameAction;\n\nexport const EXPAND_FROM_CLIENT_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'expand_widget_from_client',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const SEND_WINDOW_SIZE_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'send_window_size',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const parseClientToFrameAction = (\n data: unknown,\n): Promise<ClientToFrameAction> => {\n return new Promise((resolve, reject) => {\n try {\n const value = ClientToFrameActionSchema.parse(data);\n resolve(value);\n } catch (error) {\n reject(error);\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// Frame to client actions\n// ---------------------------------------------------------------------------\nexport const FrameToClientActionSchema = z.union([\n z.object({\n type: z.literal('expand_widget'),\n }),\n z.object({\n type: z.literal('collapse_widget'),\n }),\n z.object({\n type: z.literal('minimize_widget'),\n }),\n z.object({\n type: z.literal('widget_iframe_is_ready'),\n }),\n z.object({\n type: z.literal('transcript_message'),\n payload: z.union([\n UserTranscriptMessageSchema,\n AssistantTranscriptMessageSchema,\n ]),\n }),\n z.object({\n type: z.literal('resize_frame'),\n payload: z.object({\n width: z.number(),\n height: z.number(),\n }),\n }),\n]);\n\nexport type FrameToClientAction = z.infer<typeof FrameToClientActionSchema>;\n\nexport const EXPAND_WIDGET_ACTION = {\n type: 'expand_widget',\n} satisfies FrameToClientAction;\n\nexport const COLLAPSE_WIDGET_ACTION = {\n type: 'collapse_widget' as const,\n} satisfies FrameToClientAction;\n\nexport const MINIMIZE_WIDGET_ACTION = {\n type: 'minimize_widget',\n} satisfies FrameToClientAction;\n\nexport const WIDGET_IFRAME_IS_READY_ACTION = {\n type: 'widget_iframe_is_ready',\n} satisfies FrameToClientAction;\n\nexport const TRANSCRIPT_MESSAGE_ACTION = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => {\n return {\n type: 'transcript_message',\n payload: message,\n } satisfies FrameToClientAction;\n};\n\nexport const RESIZE_FRAME_ACTION = (dimensions: {\n width: number;\n height: number;\n}) => {\n return {\n type: 'resize_frame',\n payload: {\n width: dimensions.width,\n height: dimensions.height,\n },\n } satisfies FrameToClientAction;\n};\n"],"mappings":"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","names":["import_voice","import_voice"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/embed.ts","../src/lib/embed-messages.ts","../src/index.ts"],"sourcesContent":["import type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport { createSocketConfig } from '@humeai/voice';\n\nimport type { ClientToFrameAction } from './embed-messages';\nimport {\n EXPAND_FROM_CLIENT_ACTION,\n FrameToClientActionSchema,\n SEND_WINDOW_SIZE_ACTION,\n UPDATE_CONFIG_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n} from './embed-messages';\n\nexport type EmbeddedVoiceConfig = {\n rendererUrl: string;\n iframeTitle?: string;\n} & SocketConfig;\n\nexport type TranscriptMessageHandler = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => void;\n\nexport type CloseHandler = () => void;\n\nexport class EmbeddedVoice {\n private iframe: HTMLIFrameElement;\n\n private isMounted: boolean = false;\n\n private managedContainer: HTMLElement | null = null;\n\n private config: EmbeddedVoiceConfig;\n\n private onMessage: TranscriptMessageHandler;\n\n private onClose: CloseHandler;\n\n private openOnMount: boolean;\n\n private constructor({\n onMessage = () => {},\n onClose = () => {},\n openOnMount,\n ...config\n }: {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & EmbeddedVoiceConfig) {\n this.config = config;\n this.iframe = this.createIframe(config);\n this.onMessage = onMessage;\n this.onClose = onClose;\n this.openOnMount = openOnMount ?? false;\n this.messageHandler = this.messageHandler.bind(this);\n this.messageHandler = this.messageHandler.bind(this);\n }\n\n static create({\n rendererUrl,\n onMessage,\n onClose,\n openOnMount,\n ...config\n }: Partial<EmbeddedVoiceConfig> & {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & NonNullable<Pick<EmbeddedVoiceConfig, 'auth'>>): EmbeddedVoice {\n const parsedConfig = createSocketConfig(config);\n\n return new EmbeddedVoice({\n rendererUrl: rendererUrl ?? 'https://voice-widget.hume.ai',\n onMessage,\n onClose,\n openOnMount,\n ...parsedConfig,\n });\n }\n\n mount(container?: HTMLElement) {\n const messageHandler = (event: MessageEvent<unknown>) => {\n this.messageHandler(event);\n };\n\n const resizeHandler = () => {\n this.sendWindowSize();\n };\n\n const el = container ?? this.createContainer();\n\n this.managedContainer = el;\n\n try {\n window.addEventListener('message', messageHandler);\n window.addEventListener('resize', resizeHandler);\n el.appendChild(this.iframe);\n this.isMounted = true;\n } catch (e) {\n this.isMounted = false;\n }\n\n const unmount = () => {\n try {\n window.removeEventListener('message', messageHandler);\n window.removeEventListener('resize', resizeHandler);\n this.iframe.remove();\n this.isMounted = false;\n } catch (e) {\n this.isMounted = true;\n }\n\n if (!container) {\n el.remove();\n }\n };\n\n return unmount;\n }\n\n private createContainer() {\n const div = document.createElement('div');\n\n Object.assign(div.style, {\n background: 'transparent',\n position: 'fixed',\n bottom: '0',\n right: '0',\n margin: '24px',\n zIndex: '999999',\n fontSize: '0px',\n pointerEvents: 'none',\n });\n\n div.id = 'hume-embedded-voice-container';\n\n document.body.appendChild(div);\n\n return div;\n }\n\n private createIframe({ rendererUrl, iframeTitle }: EmbeddedVoiceConfig) {\n const el = document.createElement('iframe');\n\n Object.assign(el.style, {\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n border: 'none',\n height: '0px',\n width: '0px',\n opacity: '0',\n });\n\n el.id = 'hume-embedded-voice';\n el.src = `${rendererUrl}`;\n\n el.setAttribute('title', iframeTitle ?? 'Hume Empathic Voice Widget');\n el.setAttribute('frameborder', '0');\n el.setAttribute('allowtransparency', 'true');\n el.setAttribute('scrolling', 'no');\n el.setAttribute('allow', 'microphone');\n\n if (el.contentWindow) {\n el.contentWindow.document.documentElement.style.backgroundColor =\n 'transparent';\n el.contentWindow.document.body.style.backgroundColor = 'transparent';\n }\n\n return el;\n }\n\n private messageHandler(event: MessageEvent<unknown>) {\n if (!this.iframe) {\n return;\n }\n\n if (event.origin !== new URL(this.iframe.src).origin) {\n return;\n }\n\n const action = FrameToClientActionSchema.safeParse(event.data);\n\n if (!action.success) {\n return;\n }\n\n switch (action.data.type) {\n case WIDGET_IFRAME_IS_READY_ACTION.type: {\n this.showIframe();\n this.sendConfigObject();\n this.sendWindowSize();\n if (this.openOnMount) {\n this.openEmbed();\n }\n break;\n }\n case 'resize_frame': {\n this.resizeIframe(action.data.payload);\n break;\n }\n case 'transcript_message': {\n this.onMessage(action.data.payload);\n break;\n }\n case 'collapse_widget': {\n this.onClose();\n break;\n }\n }\n }\n\n openEmbed() {\n const action = EXPAND_FROM_CLIENT_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendConfigObject() {\n const action = UPDATE_CONFIG_ACTION(this.config);\n this.sendMessageToFrame(action);\n }\n\n private sendWindowSize() {\n const action = SEND_WINDOW_SIZE_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendMessageToFrame(action: ClientToFrameAction) {\n const frame = this.iframe;\n\n if (!frame.contentWindow) {\n return;\n }\n\n frame.contentWindow.postMessage(action, new URL(frame.src).origin);\n }\n\n private showIframe() {\n this.iframe.style.opacity = '1';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'all';\n }\n }\n\n private hideIframe() {\n this.iframe.style.opacity = '0';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'none';\n }\n }\n\n private resizeIframe({ width, height }: { width: number; height: number }) {\n this.iframe.style.width = `${width}px`;\n this.iframe.style.height = `${height}px`;\n }\n}\n","/** \n \n client frame \n \n ┌───────────────────────────┐ \n │ mount iframe │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ iframe is ready │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ send config │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ widget is open │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is collapsed │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is minimized │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ transcript message │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ resize window │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ unmount iframe │ ───────────▶ \n └───────────────────────────┘ \n */\nimport type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport {\n AssistantTranscriptMessageSchema,\n SocketConfigSchema,\n UserTranscriptMessageSchema,\n} from '@humeai/voice';\nimport { z } from 'zod';\n\nconst WindowDimensionsSchema = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport type WindowDimensions = z.infer<typeof WindowDimensionsSchema>;\n\n// ---------------------------------------------------------------------------\n// Client to frame actions\n// ---------------------------------------------------------------------------\nexport const ClientToFrameActionSchema = z.union([\n z.object({\n type: z.literal('update_config'),\n payload: SocketConfigSchema,\n }),\n z.object({\n type: z.literal('cancel'),\n }),\n z.object({\n type: z.literal('expand_widget_from_client'),\n payload: WindowDimensionsSchema,\n }),\n z.object({\n type: z.literal('send_window_size'),\n payload: WindowDimensionsSchema,\n }),\n]);\n\nexport type ClientToFrameAction = z.infer<typeof ClientToFrameActionSchema>;\n\nexport const UPDATE_CONFIG_ACTION = (config: SocketConfig) =>\n ({\n type: 'update_config',\n payload: config,\n }) satisfies ClientToFrameAction;\n\nexport const EXPAND_FROM_CLIENT_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'expand_widget_from_client',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const SEND_WINDOW_SIZE_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'send_window_size',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const parseClientToFrameAction = (\n data: unknown,\n): Promise<ClientToFrameAction> => {\n return new Promise((resolve, reject) => {\n try {\n const value = ClientToFrameActionSchema.parse(data);\n resolve(value);\n } catch (error) {\n reject(error);\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// Frame to client actions\n// ---------------------------------------------------------------------------\nexport const FrameToClientActionSchema = z.union([\n z.object({\n type: z.literal('expand_widget'),\n }),\n z.object({\n type: z.literal('collapse_widget'),\n }),\n z.object({\n type: z.literal('minimize_widget'),\n }),\n z.object({\n type: z.literal('widget_iframe_is_ready'),\n }),\n z.object({\n type: z.literal('transcript_message'),\n payload: z.union([\n UserTranscriptMessageSchema,\n AssistantTranscriptMessageSchema,\n ]),\n }),\n z.object({\n type: z.literal('resize_frame'),\n payload: z.object({\n width: z.number(),\n height: z.number(),\n }),\n }),\n]);\n\nexport type FrameToClientAction = z.infer<typeof FrameToClientActionSchema>;\n\nexport const EXPAND_WIDGET_ACTION = {\n type: 'expand_widget',\n} satisfies FrameToClientAction;\n\nexport const COLLAPSE_WIDGET_ACTION = {\n type: 'collapse_widget' as const,\n} satisfies FrameToClientAction;\n\nexport const MINIMIZE_WIDGET_ACTION = {\n type: 'minimize_widget',\n} satisfies FrameToClientAction;\n\nexport const WIDGET_IFRAME_IS_READY_ACTION = {\n type: 'widget_iframe_is_ready',\n} satisfies FrameToClientAction;\n\nexport const TRANSCRIPT_MESSAGE_ACTION = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => {\n return {\n type: 'transcript_message',\n payload: message,\n } satisfies FrameToClientAction;\n};\n\nexport const RESIZE_FRAME_ACTION = (dimensions: {\n width: number;\n height: number;\n}) => {\n return {\n type: 'resize_frame',\n payload: {\n width: dimensions.width,\n height: dimensions.height,\n },\n } satisfies FrameToClientAction;\n};\n","export * from './lib/embed';\n\nexport {\n COLLAPSE_WIDGET_ACTION,\n EXPAND_WIDGET_ACTION,\n MINIMIZE_WIDGET_ACTION,\n RESIZE_FRAME_ACTION,\n TRANSCRIPT_MESSAGE_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n parseClientToFrameAction,\n type FrameToClientAction,\n type WindowDimensions,\n} from './lib/embed-messages';\n\nexport type {\n AssistantTranscriptMessage,\n SocketConfig,\n JSONMessage,\n UserTranscriptMessage,\n EmotionScores,\n ToolCall,\n ToolResponse,\n ToolError,\n} from '@humeai/voice';\n\nexport { LanguageModelOption } from '@humeai/voice';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/lib/embed.ts","../src/lib/embed-messages.ts","../src/index.ts"],"sourcesContent":["import type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport { createSocketConfig } from '@humeai/voice';\n\nimport type { ClientToFrameAction } from './embed-messages';\nimport {\n EXPAND_FROM_CLIENT_ACTION,\n FrameToClientActionSchema,\n SEND_WINDOW_SIZE_ACTION,\n UPDATE_CONFIG_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n} from './embed-messages';\n\nexport type EmbeddedVoiceConfig = {\n rendererUrl: string;\n iframeTitle?: string;\n} & SocketConfig;\n\nexport type TranscriptMessageHandler = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => void;\n\nexport type CloseHandler = () => void;\n\nexport class EmbeddedVoice {\n private iframe: HTMLIFrameElement;\n\n private isMounted: boolean = false;\n\n private managedContainer: HTMLElement | null = null;\n\n private config: EmbeddedVoiceConfig;\n\n private onMessage: TranscriptMessageHandler;\n\n private onClose: CloseHandler;\n\n private openOnMount: boolean;\n\n private constructor({\n onMessage = () => {},\n onClose = () => {},\n openOnMount,\n ...config\n }: {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & EmbeddedVoiceConfig) {\n this.config = config;\n this.iframe = this.createIframe(config);\n this.onMessage = onMessage;\n this.onClose = onClose;\n this.openOnMount = openOnMount ?? false;\n this.messageHandler = this.messageHandler.bind(this);\n this.messageHandler = this.messageHandler.bind(this);\n }\n\n static create({\n rendererUrl,\n onMessage,\n onClose,\n openOnMount,\n ...config\n }: Partial<EmbeddedVoiceConfig> & {\n onMessage?: TranscriptMessageHandler;\n onClose?: CloseHandler;\n openOnMount?: boolean;\n } & NonNullable<Pick<EmbeddedVoiceConfig, 'auth'>>): EmbeddedVoice {\n const parsedConfig = createSocketConfig(config);\n\n return new EmbeddedVoice({\n rendererUrl: rendererUrl ?? 'https://voice-widget.hume.ai',\n onMessage,\n onClose,\n openOnMount,\n ...parsedConfig,\n });\n }\n\n mount(container?: HTMLElement) {\n const messageHandler = (event: MessageEvent<unknown>) => {\n this.messageHandler(event);\n };\n\n const resizeHandler = () => {\n this.sendWindowSize();\n };\n\n const el = container ?? this.createContainer();\n\n this.managedContainer = el;\n\n try {\n window.addEventListener('message', messageHandler);\n window.addEventListener('resize', resizeHandler);\n el.appendChild(this.iframe);\n this.isMounted = true;\n } catch (e) {\n this.isMounted = false;\n }\n\n const unmount = () => {\n try {\n window.removeEventListener('message', messageHandler);\n window.removeEventListener('resize', resizeHandler);\n this.iframe.remove();\n this.isMounted = false;\n } catch (e) {\n this.isMounted = true;\n }\n\n if (!container) {\n el.remove();\n }\n };\n\n return unmount;\n }\n\n private createContainer() {\n const div = document.createElement('div');\n\n Object.assign(div.style, {\n background: 'transparent',\n position: 'fixed',\n bottom: '0',\n right: '0',\n margin: '24px',\n zIndex: '999999',\n fontSize: '0px',\n pointerEvents: 'none',\n });\n\n div.id = 'hume-embedded-voice-container';\n\n document.body.appendChild(div);\n\n return div;\n }\n\n private createIframe({ rendererUrl, iframeTitle }: EmbeddedVoiceConfig) {\n const el = document.createElement('iframe');\n\n Object.assign(el.style, {\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n border: 'none',\n height: '0px',\n width: '0px',\n opacity: '0',\n });\n\n el.id = 'hume-embedded-voice';\n el.src = `${rendererUrl}`;\n\n el.setAttribute('title', iframeTitle ?? 'Hume Empathic Voice Widget');\n el.setAttribute('frameborder', '0');\n el.setAttribute('allowtransparency', 'true');\n el.setAttribute('scrolling', 'no');\n el.setAttribute('allow', 'microphone');\n\n if (el.contentWindow) {\n el.contentWindow.document.documentElement.style.backgroundColor =\n 'transparent';\n el.contentWindow.document.body.style.backgroundColor = 'transparent';\n }\n\n return el;\n }\n\n private messageHandler(event: MessageEvent<unknown>) {\n if (!this.iframe) {\n return;\n }\n\n if (event.origin !== new URL(this.iframe.src).origin) {\n return;\n }\n\n const action = FrameToClientActionSchema.safeParse(event.data);\n\n if (!action.success) {\n return;\n }\n\n switch (action.data.type) {\n case WIDGET_IFRAME_IS_READY_ACTION.type: {\n this.showIframe();\n this.sendConfigObject();\n this.sendWindowSize();\n if (this.openOnMount) {\n this.openEmbed();\n }\n break;\n }\n case 'resize_frame': {\n this.resizeIframe(action.data.payload);\n break;\n }\n case 'transcript_message': {\n this.onMessage(action.data.payload);\n break;\n }\n case 'collapse_widget': {\n this.onClose();\n break;\n }\n }\n }\n\n openEmbed() {\n const action = EXPAND_FROM_CLIENT_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendConfigObject() {\n const action = UPDATE_CONFIG_ACTION(this.config);\n this.sendMessageToFrame(action);\n }\n\n private sendWindowSize() {\n const action = SEND_WINDOW_SIZE_ACTION({\n width: window.screen.availWidth,\n height: window.screen.availHeight,\n });\n this.sendMessageToFrame(action);\n }\n\n private sendMessageToFrame(action: ClientToFrameAction) {\n const frame = this.iframe;\n\n if (!frame.contentWindow) {\n return;\n }\n\n frame.contentWindow.postMessage(action, new URL(frame.src).origin);\n }\n\n private showIframe() {\n this.iframe.style.opacity = '1';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'all';\n }\n }\n\n private hideIframe() {\n this.iframe.style.opacity = '0';\n if (this.managedContainer) {\n this.managedContainer.style.pointerEvents = 'none';\n }\n }\n\n private resizeIframe({ width, height }: { width: number; height: number }) {\n this.iframe.style.width = `${width}px`;\n this.iframe.style.height = `${height}px`;\n }\n}\n","/** \n \n client frame \n \n ┌───────────────────────────┐ \n │ mount iframe │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ iframe is ready │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ send config │ ───────────▶ \n └───────────────────────────┘ \n ┌───────────────────────────┐\n ◀─────────── │ widget is open │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is collapsed │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ widget is minimized │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ transcript message │\n └───────────────────────────┘\n ┌───────────────────────────┐\n ◀─────────── │ resize window │\n └───────────────────────────┘\n ┌───────────────────────────┐ \n │ unmount iframe │ ───────────▶ \n └───────────────────────────┘ \n */\nimport type {\n AssistantTranscriptMessage,\n SocketConfig,\n UserTranscriptMessage,\n} from '@humeai/voice';\nimport {\n AssistantTranscriptMessageSchema,\n SocketConfigSchema,\n UserTranscriptMessageSchema,\n} from '@humeai/voice';\nimport { z } from 'zod';\n\nconst WindowDimensionsSchema = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport type WindowDimensions = z.infer<typeof WindowDimensionsSchema>;\n\n// ---------------------------------------------------------------------------\n// Client to frame actions\n// ---------------------------------------------------------------------------\nexport const ClientToFrameActionSchema = z.union([\n z.object({\n type: z.literal('update_config'),\n payload: SocketConfigSchema,\n }),\n z.object({\n type: z.literal('cancel'),\n }),\n z.object({\n type: z.literal('expand_widget_from_client'),\n payload: WindowDimensionsSchema,\n }),\n z.object({\n type: z.literal('send_window_size'),\n payload: WindowDimensionsSchema,\n }),\n]);\n\nexport type ClientToFrameAction = z.infer<typeof ClientToFrameActionSchema>;\n\nexport const UPDATE_CONFIG_ACTION = (config: SocketConfig) =>\n ({\n type: 'update_config',\n payload: config,\n }) satisfies ClientToFrameAction;\n\nexport const EXPAND_FROM_CLIENT_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'expand_widget_from_client',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const SEND_WINDOW_SIZE_ACTION = (dimensions: WindowDimensions) =>\n ({\n type: 'send_window_size',\n payload: dimensions,\n }) satisfies ClientToFrameAction;\n\nexport const parseClientToFrameAction = (\n data: unknown,\n): Promise<ClientToFrameAction> => {\n return new Promise((resolve, reject) => {\n try {\n const value = ClientToFrameActionSchema.parse(data);\n resolve(value);\n } catch (error) {\n reject(error);\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// Frame to client actions\n// ---------------------------------------------------------------------------\nexport const FrameToClientActionSchema = z.union([\n z.object({\n type: z.literal('expand_widget'),\n }),\n z.object({\n type: z.literal('collapse_widget'),\n }),\n z.object({\n type: z.literal('minimize_widget'),\n }),\n z.object({\n type: z.literal('widget_iframe_is_ready'),\n }),\n z.object({\n type: z.literal('transcript_message'),\n payload: z.union([\n UserTranscriptMessageSchema,\n AssistantTranscriptMessageSchema,\n ]),\n }),\n z.object({\n type: z.literal('resize_frame'),\n payload: z.object({\n width: z.number(),\n height: z.number(),\n }),\n }),\n]);\n\nexport type FrameToClientAction = z.infer<typeof FrameToClientActionSchema>;\n\nexport const EXPAND_WIDGET_ACTION = {\n type: 'expand_widget',\n} satisfies FrameToClientAction;\n\nexport const COLLAPSE_WIDGET_ACTION = {\n type: 'collapse_widget' as const,\n} satisfies FrameToClientAction;\n\nexport const MINIMIZE_WIDGET_ACTION = {\n type: 'minimize_widget',\n} satisfies FrameToClientAction;\n\nexport const WIDGET_IFRAME_IS_READY_ACTION = {\n type: 'widget_iframe_is_ready',\n} satisfies FrameToClientAction;\n\nexport const TRANSCRIPT_MESSAGE_ACTION = (\n message: UserTranscriptMessage | AssistantTranscriptMessage,\n) => {\n return {\n type: 'transcript_message',\n payload: message,\n } satisfies FrameToClientAction;\n};\n\nexport const RESIZE_FRAME_ACTION = (dimensions: {\n width: number;\n height: number;\n}) => {\n return {\n type: 'resize_frame',\n payload: {\n width: dimensions.width,\n height: dimensions.height,\n },\n } satisfies FrameToClientAction;\n};\n","export * from './lib/embed';\n\nexport {\n COLLAPSE_WIDGET_ACTION,\n EXPAND_WIDGET_ACTION,\n MINIMIZE_WIDGET_ACTION,\n RESIZE_FRAME_ACTION,\n TRANSCRIPT_MESSAGE_ACTION,\n WIDGET_IFRAME_IS_READY_ACTION,\n parseClientToFrameAction,\n type FrameToClientAction,\n type WindowDimensions,\n} from './lib/embed-messages';\n\nexport type {\n AssistantTranscriptMessage,\n SocketConfig,\n JSONMessage,\n UserTranscriptMessage,\n EmotionScores,\n ToolCall,\n ToolResponse,\n ToolError,\n ChatMetadataMessage,\n} from '@humeai/voice';\n\nexport { LanguageModelOption } from '@humeai/voice';\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humeai/voice-embed",
3
- "version": "0.1.3",
3
+ "version": "0.1.5-beta.1",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -23,12 +23,12 @@
23
23
  "tsup": "^8.0.2",
24
24
  "typescript": "^5.4.3",
25
25
  "vitest": "^1.4.0",
26
- "@humeai/typescript-config": "0.0.0",
27
- "@humeai/eslint-config": "0.0.1"
26
+ "@humeai/eslint-config": "0.0.1",
27
+ "@humeai/typescript-config": "0.0.0"
28
28
  },
29
29
  "dependencies": {
30
30
  "zod": "^3.22.4",
31
- "@humeai/voice": "0.1.3"
31
+ "@humeai/voice": "0.1.5-beta.1"
32
32
  },
33
33
  "browserslist": [
34
34
  "last 2 Chrome versions, last 2 iOS major versions, Firefox ESR, not dead"