@corti/dictation-web 0.1.21-rc.2 → 0.1.21-rc.3

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.
@@ -1,4 +1,4 @@
1
- import { Corti } from '@corti/sdk';
1
+ import { type Corti } from '@corti/sdk';
2
2
  import { LitElement } from 'lit';
3
3
  import './components/settings-menu.js';
4
4
  import './components/audio-visualiser.js';
@@ -23,19 +23,7 @@ export declare class CortiDictation extends LitElement {
23
23
  accessToken: string;
24
24
  expiresIn: number | undefined;
25
25
  } | undefined;
26
- setAuthConfig(config: {
27
- accessToken: string;
28
- refreshToken?: string;
29
- expiresIn?: number;
30
- refreshExpiresIn?: number;
31
- refreshAccessToken?: (refreshToken?: string) => Promise<{
32
- accessToken: string;
33
- tokenType: string;
34
- expiresIn: number;
35
- refreshToken?: string;
36
- refreshExpiresIn?: number;
37
- }>;
38
- }): ServerConfig;
26
+ setAuthConfig(config: Corti.BearerOptions): Promise<ServerConfig>;
39
27
  get selectedDevice(): MediaDeviceInfo | null;
40
28
  get recordingState(): RecordingState;
41
29
  get devices(): MediaDeviceInfo[];
@@ -88,16 +88,22 @@ export class CortiDictation extends LitElement {
88
88
  throw new Error('Invalid token');
89
89
  }
90
90
  }
91
- setAuthConfig(config) {
91
+ async setAuthConfig(config) {
92
92
  try {
93
- const decoded = decodeToken(config.accessToken);
93
+ const initialToken = 'accessToken' in config
94
+ ? { accessToken: config.accessToken }
95
+ : await config.refreshAccessToken();
96
+ if (!initialToken?.accessToken || typeof initialToken.accessToken !== 'string') {
97
+ throw new Error('Access token is required and must be a string');
98
+ }
99
+ const decoded = decodeToken(initialToken.accessToken);
94
100
  if (!decoded) {
95
101
  throw new Error('Invalid token format');
96
102
  }
97
103
  this._serverConfig = {
98
104
  environment: decoded.environment,
99
105
  tenant: decoded.tenant,
100
- accessToken: config.accessToken,
106
+ accessToken: initialToken.accessToken,
101
107
  expiresIn: config.expiresIn ?? decoded.expiresIn,
102
108
  refreshToken: config.refreshToken,
103
109
  refreshExpiresIn: config.refreshExpiresIn,
@@ -1 +1 @@
1
- {"version":3,"file":"CortiDictation.js","sourceRoot":"","sources":["../src/CortiDictation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Corti } from '@corti/sdk';\n\n// corti-dictation.ts\nimport { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { RecorderManager } from './RecorderManager.js';\nimport './components/settings-menu.js';\nimport './components/audio-visualiser.js';\nimport './icons/icons.js';\nimport ThemeStyles from './styles/theme.js';\nimport ButtonStyles from './styles/buttons.js';\nimport ComponentStyles from './styles/ComponentStyles.js';\n\nimport type { RecordingState, ServerConfig } from './types.js';\nimport { DEFAULT_DICTATION_CONFIG, LANGUAGES_SUPPORTED } from './constants.js';\nimport CalloutStyles from './styles/callout.js';\nimport { decodeToken } from './utils.js';\n\nexport class CortiDictation extends LitElement {\n static styles = [ButtonStyles, ThemeStyles, ComponentStyles, CalloutStyles];\n\n @property({ type: Object })\n dictationConfig: Corti.TranscribeConfig = DEFAULT_DICTATION_CONFIG;\n\n @property({ type: Array })\n languagesSupported: Corti.TranscribeSupportedLanguage[] = LANGUAGES_SUPPORTED;\n\n @property({ type: Boolean })\n debug_displayAudio: boolean = false;\n\n @state()\n private _serverConfig: ServerConfig | undefined;\n\n @state()\n private _audioLevel: number = 0;\n\n @state()\n private _recordingState: RecordingState = 'stopped';\n\n @state()\n private _selectedDevice: MediaDeviceInfo | undefined;\n\n @state()\n private _devices: MediaDeviceInfo[] = [];\n\n private recorderManager = new RecorderManager();\n\n async connectedCallback() {\n super.connectedCallback();\n const devices = await this.recorderManager.initialize();\n if (devices.selectedDevice) {\n this._selectedDevice = this.recorderManager.selectedDevice;\n this._devices = this.recorderManager.devices;\n this.dispatchEvent(new CustomEvent('ready'));\n }\n\n // Map event names to any extra handling logic\n const eventHandlers: Record<string, (e: CustomEvent) => void> = {\n 'recording-state-changed': e => {\n this._recordingState = e.detail.state;\n },\n 'devices-changed': () => {\n this._devices = [...this.recorderManager.devices];\n this.requestUpdate();\n },\n 'audio-level-changed': e => {\n this._audioLevel = e.detail.audioLevel;\n this.requestUpdate();\n },\n };\n\n const eventsToRelay = [\n 'recording-state-changed',\n 'recording-devices-changed',\n 'audio-level-changed',\n 'error',\n 'transcript',\n 'command',\n 'ready',\n ];\n\n eventsToRelay.forEach(eventName => {\n this.recorderManager.addEventListener(eventName, (e: Event) => {\n const customEvent = e as CustomEvent;\n // Perform any additional handling if defined\n if (eventHandlers[eventName]) {\n eventHandlers[eventName](customEvent);\n }\n // Re-dispatch the event from the component\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail: customEvent.detail,\n bubbles: true,\n composed: true,\n }),\n );\n });\n });\n }\n\n public toggleRecording() {\n this._toggleRecording();\n }\n\n public setAccessToken(token: string) {\n try {\n const decoded = decodeToken(token);\n this._serverConfig = decoded;\n return decoded;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public setAuthConfig(config: {\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n refreshExpiresIn?: number;\n refreshAccessToken?: (refreshToken?: string) => Promise<{\n accessToken: string;\n tokenType: string;\n expiresIn: number;\n refreshToken?: string;\n refreshExpiresIn?: number;\n }>;\n }) {\n try {\n const decoded = decodeToken(config.accessToken);\n if (!decoded) {\n throw new Error('Invalid token format');\n }\n \n this._serverConfig = {\n environment: decoded.environment,\n tenant: decoded.tenant,\n accessToken: config.accessToken,\n expiresIn: config.expiresIn ?? decoded.expiresIn,\n refreshToken: config.refreshToken,\n refreshExpiresIn: config.refreshExpiresIn,\n refreshAccessToken: config.refreshAccessToken,\n };\n return this._serverConfig;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public get selectedDevice(): MediaDeviceInfo | null {\n return this.recorderManager.selectedDevice || null;\n }\n\n public get recordingState(): RecordingState {\n return this._recordingState;\n }\n\n public get devices(): MediaDeviceInfo[] {\n return this._devices;\n }\n\n public async setRecordingDevice(device: MediaDeviceInfo) {\n this.recorderManager.selectedDevice = device;\n this._selectedDevice = device;\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n await this.recorderManager.stopRecording();\n await this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n });\n }\n }\n\n public setPrimaryLanguage(language: string) {\n if (LANGUAGES_SUPPORTED.includes(language)) {\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: language,\n };\n\n // If recording is in progress, restart to apply the language change\n if (this._serverConfig && this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n }\n\n _toggleRecording() {\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n } else if (this._recordingState === 'stopped') {\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n\n // Handle device change events if needed\n async _onRecordingDevicesChanged(event: Event) {\n const customEvent = event as CustomEvent;\n this.setRecordingDevice(customEvent.detail.selectedDevice);\n }\n\n // Handle language change events\n _onLanguageChanged(event: Event) {\n const customEvent = event as CustomEvent;\n const language = customEvent.detail.language;\n if (language) {\n this.setPrimaryLanguage(language);\n }\n }\n\n render() {\n if (!this._serverConfig) {\n return html` <div style=\"display: none\"></div> `;\n }\n\n const isLoading =\n this._recordingState === 'initializing' ||\n this._recordingState === 'stopping';\n const isRecording = this._recordingState === 'recording';\n return html`\n <div class=\"wrapper\">\n <button\n @click=${this._toggleRecording}\n class=${isRecording ? 'red' : 'accent'}\n >\n ${isLoading\n ? html`<icon-loading-spinner></icon-loading-spinner>`\n : isRecording\n ? html`<icon-recording></icon-recording>`\n : html`<icon-mic-on></icon-mic-on>`}\n <audio-visualiser\n .level=${this._audioLevel}\n .active=${isRecording}\n ></audio-visualiser>\n </button>\n\n <settings-menu\n .selectedDevice=${this._selectedDevice}\n .selectedLanguage=${this.dictationConfig.primaryLanguage}\n ?settingsDisabled=${this._recordingState !== 'stopped'}\n @recording-devices-changed=${this._onRecordingDevicesChanged}\n @language-changed=${this._onLanguageChanged}\n ></settings-menu>\n </div>\n `;\n }\n}\n\nexport default CortiDictation;\n"]}
1
+ {"version":3,"file":"CortiDictation.js","sourceRoot":"","sources":["../src/CortiDictation.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Corti } from '@corti/sdk';\n\n// corti-dictation.ts\nimport { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { RecorderManager } from './RecorderManager.js';\nimport './components/settings-menu.js';\nimport './components/audio-visualiser.js';\nimport './icons/icons.js';\nimport ThemeStyles from './styles/theme.js';\nimport ButtonStyles from './styles/buttons.js';\nimport ComponentStyles from './styles/ComponentStyles.js';\n\nimport type { RecordingState, ServerConfig } from './types.js';\nimport { DEFAULT_DICTATION_CONFIG, LANGUAGES_SUPPORTED } from './constants.js';\nimport CalloutStyles from './styles/callout.js';\nimport { decodeToken } from './utils.js';\n\nexport class CortiDictation extends LitElement {\n static styles = [ButtonStyles, ThemeStyles, ComponentStyles, CalloutStyles];\n\n @property({ type: Object })\n dictationConfig: Corti.TranscribeConfig = DEFAULT_DICTATION_CONFIG;\n\n @property({ type: Array })\n languagesSupported: Corti.TranscribeSupportedLanguage[] = LANGUAGES_SUPPORTED;\n\n @property({ type: Boolean })\n debug_displayAudio: boolean = false;\n\n @state()\n private _serverConfig: ServerConfig | undefined;\n\n @state()\n private _audioLevel: number = 0;\n\n @state()\n private _recordingState: RecordingState = 'stopped';\n\n @state()\n private _selectedDevice: MediaDeviceInfo | undefined;\n\n @state()\n private _devices: MediaDeviceInfo[] = [];\n\n private recorderManager = new RecorderManager();\n\n async connectedCallback() {\n super.connectedCallback();\n const devices = await this.recorderManager.initialize();\n if (devices.selectedDevice) {\n this._selectedDevice = this.recorderManager.selectedDevice;\n this._devices = this.recorderManager.devices;\n this.dispatchEvent(new CustomEvent('ready'));\n }\n\n // Map event names to any extra handling logic\n const eventHandlers: Record<string, (e: CustomEvent) => void> = {\n 'recording-state-changed': e => {\n this._recordingState = e.detail.state;\n },\n 'devices-changed': () => {\n this._devices = [...this.recorderManager.devices];\n this.requestUpdate();\n },\n 'audio-level-changed': e => {\n this._audioLevel = e.detail.audioLevel;\n this.requestUpdate();\n },\n };\n\n const eventsToRelay = [\n 'recording-state-changed',\n 'recording-devices-changed',\n 'audio-level-changed',\n 'error',\n 'transcript',\n 'command',\n 'ready',\n ];\n\n eventsToRelay.forEach(eventName => {\n this.recorderManager.addEventListener(eventName, (e: Event) => {\n const customEvent = e as CustomEvent;\n // Perform any additional handling if defined\n if (eventHandlers[eventName]) {\n eventHandlers[eventName](customEvent);\n }\n // Re-dispatch the event from the component\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail: customEvent.detail,\n bubbles: true,\n composed: true,\n }),\n );\n });\n });\n }\n\n public toggleRecording() {\n this._toggleRecording();\n }\n\n public setAccessToken(token: string) {\n try {\n const decoded = decodeToken(token);\n this._serverConfig = decoded;\n return decoded;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public async setAuthConfig(config: Corti.BearerOptions): Promise<ServerConfig> {\n try {\n const initialToken = 'accessToken' in config\n ? { accessToken: config.accessToken }\n : await config.refreshAccessToken();\n\n if (!initialToken?.accessToken || typeof initialToken.accessToken !== 'string') {\n throw new Error('Access token is required and must be a string');\n }\n\n const decoded = decodeToken(initialToken.accessToken);\n\n if (!decoded) {\n throw new Error('Invalid token format');\n }\n\n this._serverConfig = {\n environment: decoded.environment,\n tenant: decoded.tenant,\n accessToken: initialToken.accessToken,\n expiresIn: config.expiresIn ?? decoded.expiresIn,\n refreshToken: config.refreshToken,\n refreshExpiresIn: config.refreshExpiresIn,\n refreshAccessToken: config.refreshAccessToken,\n };\n\n return this._serverConfig;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public get selectedDevice(): MediaDeviceInfo | null {\n return this.recorderManager.selectedDevice || null;\n }\n\n public get recordingState(): RecordingState {\n return this._recordingState;\n }\n\n public get devices(): MediaDeviceInfo[] {\n return this._devices;\n }\n\n public async setRecordingDevice(device: MediaDeviceInfo) {\n this.recorderManager.selectedDevice = device;\n this._selectedDevice = device;\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n await this.recorderManager.stopRecording();\n await this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n });\n }\n }\n\n public setPrimaryLanguage(language: string) {\n if (LANGUAGES_SUPPORTED.includes(language)) {\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: language,\n };\n\n // If recording is in progress, restart to apply the language change\n if (this._serverConfig && this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n }\n\n _toggleRecording() {\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n } else if (this._recordingState === 'stopped') {\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n\n // Handle device change events if needed\n async _onRecordingDevicesChanged(event: Event) {\n const customEvent = event as CustomEvent;\n this.setRecordingDevice(customEvent.detail.selectedDevice);\n }\n\n // Handle language change events\n _onLanguageChanged(event: Event) {\n const customEvent = event as CustomEvent;\n const language = customEvent.detail.language;\n if (language) {\n this.setPrimaryLanguage(language);\n }\n }\n\n render() {\n if (!this._serverConfig) {\n return html` <div style=\"display: none\"></div> `;\n }\n\n const isLoading =\n this._recordingState === 'initializing' ||\n this._recordingState === 'stopping';\n const isRecording = this._recordingState === 'recording';\n return html`\n <div class=\"wrapper\">\n <button\n @click=${this._toggleRecording}\n class=${isRecording ? 'red' : 'accent'}\n >\n ${isLoading\n ? html`<icon-loading-spinner></icon-loading-spinner>`\n : isRecording\n ? html`<icon-recording></icon-recording>`\n : html`<icon-mic-on></icon-mic-on>`}\n <audio-visualiser\n .level=${this._audioLevel}\n .active=${isRecording}\n ></audio-visualiser>\n </button>\n\n <settings-menu\n .selectedDevice=${this._selectedDevice}\n .selectedLanguage=${this.dictationConfig.primaryLanguage}\n ?settingsDisabled=${this._recordingState !== 'stopped'}\n @recording-devices-changed=${this._onRecordingDevicesChanged}\n @language-changed=${this._onLanguageChanged}\n ></settings-menu>\n </div>\n `;\n }\n}\n\nexport default CortiDictation;\n"]}
@@ -6,16 +6,11 @@ export class DictationService extends EventTarget {
6
6
  this.mediaRecorder = new MediaRecorder(mediaStream);
7
7
  this.serverConfig = serverConfig;
8
8
  this.dictationConfig = dictationConfig;
9
+ const { environment, tenant: tenantName, ...authConfig } = serverConfig;
9
10
  this.cortiClient = new CortiClient({
10
- environment: serverConfig.environment,
11
- tenantName: serverConfig.tenant,
12
- auth: {
13
- accessToken: serverConfig.accessToken,
14
- refreshToken: serverConfig.refreshToken,
15
- expiresIn: serverConfig.expiresIn,
16
- refreshExpiresIn: serverConfig.refreshExpiresIn,
17
- refreshAccessToken: serverConfig.refreshAccessToken,
18
- },
11
+ environment,
12
+ tenantName,
13
+ auth: authConfig
19
14
  });
20
15
  this.mediaRecorder.ondataavailable = event => {
21
16
  if (this.webSocket?.readyState === WebSocket.OPEN) {
@@ -1 +1 @@
1
- {"version":3,"file":"DictationService.js","sourceRoot":"","sources":["../src/DictationService.ts"],"names":[],"mappings":"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","sourcesContent":["import { CortiClient, Corti } from '@corti/sdk';\n\nimport type { ServerConfig } from './types.js';\nimport { getErrorMessage } from './utils.js';\n\ntype TranscribeSocket = Awaited<\n ReturnType<CortiClient['transcribe']['connect']>\n>;\n\nexport class DictationService extends EventTarget {\n private mediaRecorder: MediaRecorder;\n private webSocket!: TranscribeSocket;\n private serverConfig: ServerConfig;\n private dictationConfig: Corti.TranscribeConfig;\n private cortiClient: CortiClient;\n\n constructor(\n mediaStream: MediaStream,\n {\n dictationConfig,\n serverConfig,\n }: { dictationConfig: Corti.TranscribeConfig; serverConfig: ServerConfig },\n ) {\n super();\n this.mediaRecorder = new MediaRecorder(mediaStream);\n this.serverConfig = serverConfig;\n this.dictationConfig = dictationConfig;\n\n this.cortiClient = new CortiClient({\n environment: serverConfig.environment,\n tenantName: serverConfig.tenant,\n auth: {\n accessToken: serverConfig.accessToken,\n refreshToken: serverConfig.refreshToken,\n expiresIn: serverConfig.expiresIn,\n refreshExpiresIn: serverConfig.refreshExpiresIn,\n refreshAccessToken: serverConfig.refreshAccessToken,\n },\n });\n\n this.mediaRecorder.ondataavailable = event => {\n if (this.webSocket?.readyState === WebSocket.OPEN) {\n this.webSocket.sendAudio(event.data);\n }\n };\n }\n\n private dispatchCustomEvent(eventName: string, detail?: unknown): void {\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n public async startRecording() {\n if (!this.serverConfig) {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: 'Invalid token',\n bubbles: true,\n composed: true,\n }),\n );\n return;\n }\n\n this.webSocket = await this.cortiClient.transcribe.connect({\n configuration: this.dictationConfig,\n });\n\n this.webSocket.on('message', message => {\n switch (message.type) {\n case 'CONFIG_ACCEPTED':\n this.mediaRecorder.start(250);\n break;\n case 'transcript':\n this.dispatchCustomEvent('transcript', message);\n break;\n case 'command':\n this.dispatchCustomEvent('command', message);\n break;\n default:\n console.warn(`Unhandled message type: ${message.type}`);\n break;\n }\n });\n\n this.webSocket.on('error', event => {\n this.stopRecording();\n\n this.dispatchCustomEvent('error', getErrorMessage(event));\n });\n\n this.webSocket.on('close', event => {\n this.dispatchCustomEvent('stream-closed', event);\n });\n }\n\n public async stopRecording(): Promise<void> {\n this.mediaRecorder?.stop();\n\n if (this.webSocket.readyState === WebSocket.OPEN) {\n this.webSocket.sendEnd({\n type: 'end',\n });\n }\n\n const timeout: NodeJS.Timeout = setTimeout(() => {\n if (this.webSocket?.readyState === WebSocket.OPEN) {\n this.webSocket.close();\n }\n }, 10000);\n\n this.webSocket.on('close', () => {\n clearTimeout(timeout);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"DictationService.js","sourceRoot":"","sources":["../src/DictationService.ts"],"names":[],"mappings":"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","sourcesContent":["import { CortiClient, Corti } from '@corti/sdk';\n\nimport type { ServerConfig } from './types.js';\nimport { getErrorMessage } from './utils.js';\n\ntype TranscribeSocket = Awaited<\n ReturnType<CortiClient['transcribe']['connect']>\n>;\n\nexport class DictationService extends EventTarget {\n private mediaRecorder: MediaRecorder;\n private webSocket!: TranscribeSocket;\n private serverConfig: ServerConfig;\n private dictationConfig: Corti.TranscribeConfig;\n private cortiClient: CortiClient;\n\n constructor(\n mediaStream: MediaStream,\n {\n dictationConfig,\n serverConfig,\n }: { dictationConfig: Corti.TranscribeConfig; serverConfig: ServerConfig },\n ) {\n super();\n this.mediaRecorder = new MediaRecorder(mediaStream);\n this.serverConfig = serverConfig;\n this.dictationConfig = dictationConfig;\n\n const { environment, tenant: tenantName, ...authConfig } = serverConfig;\n\n this.cortiClient = new CortiClient({\n environment,\n tenantName,\n auth: authConfig\n });\n\n this.mediaRecorder.ondataavailable = event => {\n if (this.webSocket?.readyState === WebSocket.OPEN) {\n this.webSocket.sendAudio(event.data);\n }\n };\n }\n\n private dispatchCustomEvent(eventName: string, detail?: unknown): void {\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n public async startRecording() {\n if (!this.serverConfig) {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: 'Invalid token',\n bubbles: true,\n composed: true,\n }),\n );\n return;\n }\n\n this.webSocket = await this.cortiClient.transcribe.connect({\n configuration: this.dictationConfig,\n });\n\n this.webSocket.on('message', message => {\n switch (message.type) {\n case 'CONFIG_ACCEPTED':\n this.mediaRecorder.start(250);\n break;\n case 'transcript':\n this.dispatchCustomEvent('transcript', message);\n break;\n case 'command':\n this.dispatchCustomEvent('command', message);\n break;\n default:\n console.warn(`Unhandled message type: ${message.type}`);\n break;\n }\n });\n\n this.webSocket.on('error', event => {\n this.stopRecording();\n\n this.dispatchCustomEvent('error', getErrorMessage(event));\n });\n\n this.webSocket.on('close', event => {\n this.dispatchCustomEvent('stream-closed', event);\n });\n }\n\n public async stopRecording(): Promise<void> {\n this.mediaRecorder?.stop();\n\n if (this.webSocket.readyState === WebSocket.OPEN) {\n this.webSocket.sendEnd({\n type: 'end',\n });\n }\n\n const timeout: NodeJS.Timeout = setTimeout(() => {\n if (this.webSocket?.readyState === WebSocket.OPEN) {\n this.webSocket.close();\n }\n }, 10000);\n\n this.webSocket.on('close', () => {\n clearTimeout(timeout);\n });\n }\n}\n"]}
package/dist/bundle.js CHANGED
@@ -3893,6 +3893,70 @@ function isFile(value) {
3893
3893
  return typeof File !== "undefined" && value instanceof File;
3894
3894
  }
3895
3895
 
3896
+ // node_modules/@corti/sdk/dist/esm/custom/RefreshBearerProvider.mjs
3897
+ var __awaiter13 = function(thisArg, _arguments, P2, generator) {
3898
+ function adopt(value) {
3899
+ return value instanceof P2 ? value : new P2(function(resolve) {
3900
+ resolve(value);
3901
+ });
3902
+ }
3903
+ return new (P2 || (P2 = Promise))(function(resolve, reject) {
3904
+ function fulfilled(value) {
3905
+ try {
3906
+ step(generator.next(value));
3907
+ } catch (e5) {
3908
+ reject(e5);
3909
+ }
3910
+ }
3911
+ function rejected(value) {
3912
+ try {
3913
+ step(generator["throw"](value));
3914
+ } catch (e5) {
3915
+ reject(e5);
3916
+ }
3917
+ }
3918
+ function step(result) {
3919
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
3920
+ }
3921
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
3922
+ });
3923
+ };
3924
+ var RefreshBearerProvider = class {
3925
+ constructor({ accessToken, refreshAccessToken, refreshToken, refreshExpiresIn, expiresIn }) {
3926
+ this.BUFFER_IN_MINUTES = 2;
3927
+ this._expiresAt = this.getExpiresAt(expiresIn, this.BUFFER_IN_MINUTES);
3928
+ this._refreshExpiresAt = this.getExpiresAt(refreshExpiresIn, 0);
3929
+ this._accessToken = accessToken || "no_token";
3930
+ this._refreshToken = refreshToken;
3931
+ this._refreshAccessToken = refreshAccessToken;
3932
+ }
3933
+ getToken() {
3934
+ return __awaiter13(this, void 0, void 0, function* () {
3935
+ if (this._accessToken && this._expiresAt > /* @__PURE__ */ new Date()) {
3936
+ return Supplier.get(this._accessToken);
3937
+ }
3938
+ return this.refresh();
3939
+ });
3940
+ }
3941
+ refresh() {
3942
+ return __awaiter13(this, void 0, void 0, function* () {
3943
+ if (!this._refreshAccessToken || this._refreshToken && this._refreshExpiresAt < /* @__PURE__ */ new Date()) {
3944
+ return Supplier.get(this._accessToken);
3945
+ }
3946
+ const tokenResponse = yield this._refreshAccessToken(this._refreshToken);
3947
+ this._accessToken = tokenResponse.accessToken;
3948
+ this._expiresAt = this.getExpiresAt(tokenResponse.expiresIn, this.BUFFER_IN_MINUTES);
3949
+ this._refreshToken = tokenResponse.refreshToken;
3950
+ this._refreshExpiresAt = this.getExpiresAt(tokenResponse.refreshExpiresIn, 0);
3951
+ return this._accessToken;
3952
+ });
3953
+ }
3954
+ getExpiresAt(expiresInSeconds = 0, bufferInMinutes = this.BUFFER_IN_MINUTES) {
3955
+ const now = /* @__PURE__ */ new Date();
3956
+ return new Date(now.getTime() + expiresInSeconds * 1e3 - bufferInMinutes * 60 * 1e3);
3957
+ }
3958
+ };
3959
+
3896
3960
  // node_modules/@corti/sdk/dist/esm/serialization/types/StreamConfigStatusMessageType.mjs
3897
3961
  var StreamConfigStatusMessageType = schemas_exports.enum_([
3898
3962
  "CONFIG_ACCEPTED",
@@ -4685,7 +4749,7 @@ function mergeOnlyDefinedHeaders(...headersArray) {
4685
4749
  }
4686
4750
 
4687
4751
  // node_modules/@corti/sdk/dist/esm/api/resources/auth/client/Client.mjs
4688
- var __awaiter13 = function(thisArg, _arguments, P2, generator) {
4752
+ var __awaiter14 = function(thisArg, _arguments, P2, generator) {
4689
4753
  function adopt(value) {
4690
4754
  return value instanceof P2 ? value : new P2(function(resolve) {
4691
4755
  resolve(value);
@@ -4732,7 +4796,7 @@ var Auth = class {
4732
4796
  return HttpResponsePromise.fromPromise(this.__getToken(request, requestOptions));
4733
4797
  }
4734
4798
  __getToken(request, requestOptions) {
4735
- return __awaiter13(this, void 0, void 0, function* () {
4799
+ return __awaiter14(this, void 0, void 0, function* () {
4736
4800
  var _a, _b;
4737
4801
  const _response = yield fetcher({
4738
4802
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).login, "protocol/openid-connect/token"),
@@ -4788,7 +4852,7 @@ var Auth = class {
4788
4852
  });
4789
4853
  }
4790
4854
  _getAuthorizationHeader() {
4791
- return __awaiter13(this, void 0, void 0, function* () {
4855
+ return __awaiter14(this, void 0, void 0, function* () {
4792
4856
  const bearer = yield Supplier.get(this._options.token);
4793
4857
  if (bearer != null) {
4794
4858
  return `Bearer ${bearer}`;
@@ -4808,7 +4872,7 @@ function getEnvironment(environment) {
4808
4872
  }
4809
4873
 
4810
4874
  // node_modules/@corti/sdk/dist/esm/custom/CortiAuth.mjs
4811
- var __awaiter14 = function(thisArg, _arguments, P2, generator) {
4875
+ var __awaiter15 = function(thisArg, _arguments, P2, generator) {
4812
4876
  function adopt(value) {
4813
4877
  return value instanceof P2 ? value : new P2(function(resolve) {
4814
4878
  resolve(value);
@@ -4852,7 +4916,7 @@ var Auth2 = class extends Auth {
4852
4916
  * Patch: added method to get Authorization URL for Authorization code flow
4853
4917
  */
4854
4918
  authorizeURL(_a, options_1) {
4855
- return __awaiter14(this, arguments, void 0, function* ({ clientId, redirectUri }, options) {
4919
+ return __awaiter15(this, arguments, void 0, function* ({ clientId, redirectUri }, options) {
4856
4920
  var _b;
4857
4921
  const authUrl = new URL(url_exports.join((_b = yield Supplier.get(this._options.baseUrl)) !== null && _b !== void 0 ? _b : (yield Supplier.get(this._options.environment)).login, yield Supplier.get(this._options.tenantName), "protocol/openid-connect/auth"));
4858
4922
  authUrl.searchParams.set("response_type", "code");
@@ -4881,7 +4945,7 @@ var Auth2 = class extends Auth {
4881
4945
  * Patch: copy of this.__getToken with patches
4882
4946
  */
4883
4947
  __getToken_custom(request, requestOptions) {
4884
- return __awaiter14(this, void 0, void 0, function* () {
4948
+ return __awaiter15(this, void 0, void 0, function* () {
4885
4949
  var _a, _b;
4886
4950
  const _response = yield fetcher({
4887
4951
  url: url_exports.join(
@@ -4968,7 +5032,7 @@ var Auth2 = class extends Auth {
4968
5032
  };
4969
5033
 
4970
5034
  // node_modules/@corti/sdk/dist/esm/api/resources/interactions/client/Client.mjs
4971
- var __awaiter15 = function(thisArg, _arguments, P2, generator) {
5035
+ var __awaiter16 = function(thisArg, _arguments, P2, generator) {
4972
5036
  function adopt(value) {
4973
5037
  return value instanceof P2 ? value : new P2(function(resolve) {
4974
5038
  resolve(value);
@@ -5012,8 +5076,8 @@ var Interactions = class {
5012
5076
  * await client.interactions.list()
5013
5077
  */
5014
5078
  list() {
5015
- return __awaiter15(this, arguments, void 0, function* (request = {}, requestOptions) {
5016
- const list2 = HttpResponsePromise.interceptFunction((request2) => __awaiter15(this, void 0, void 0, function* () {
5079
+ return __awaiter16(this, arguments, void 0, function* (request = {}, requestOptions) {
5080
+ const list2 = HttpResponsePromise.interceptFunction((request2) => __awaiter16(this, void 0, void 0, function* () {
5017
5081
  var _a, _b, _c, _d;
5018
5082
  const { sort, direction, pageSize, index, encounterStatus, patient } = request2;
5019
5083
  const _queryParams = {};
@@ -5158,7 +5222,7 @@ var Interactions = class {
5158
5222
  return HttpResponsePromise.fromPromise(this.__create(request, requestOptions));
5159
5223
  }
5160
5224
  __create(request, requestOptions) {
5161
- return __awaiter15(this, void 0, void 0, function* () {
5225
+ return __awaiter16(this, void 0, void 0, function* () {
5162
5226
  var _a, _b;
5163
5227
  const _response = yield fetcher({
5164
5228
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, "interactions/"),
@@ -5252,7 +5316,7 @@ var Interactions = class {
5252
5316
  return HttpResponsePromise.fromPromise(this.__get(id, requestOptions));
5253
5317
  }
5254
5318
  __get(id, requestOptions) {
5255
- return __awaiter15(this, void 0, void 0, function* () {
5319
+ return __awaiter16(this, void 0, void 0, function* () {
5256
5320
  var _a, _b;
5257
5321
  const _response = yield fetcher({
5258
5322
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}`),
@@ -5336,7 +5400,7 @@ var Interactions = class {
5336
5400
  return HttpResponsePromise.fromPromise(this.__delete(id, requestOptions));
5337
5401
  }
5338
5402
  __delete(id, requestOptions) {
5339
- return __awaiter15(this, void 0, void 0, function* () {
5403
+ return __awaiter16(this, void 0, void 0, function* () {
5340
5404
  var _a, _b;
5341
5405
  const _response = yield fetcher({
5342
5406
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}`),
@@ -5412,7 +5476,7 @@ var Interactions = class {
5412
5476
  return HttpResponsePromise.fromPromise(this.__update(id, request, requestOptions));
5413
5477
  }
5414
5478
  __update(id_1) {
5415
- return __awaiter15(this, arguments, void 0, function* (id, request = {}, requestOptions) {
5479
+ return __awaiter16(this, arguments, void 0, function* (id, request = {}, requestOptions) {
5416
5480
  var _a, _b;
5417
5481
  const _response = yield fetcher({
5418
5482
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}`),
@@ -5487,7 +5551,7 @@ var Interactions = class {
5487
5551
  });
5488
5552
  }
5489
5553
  _getAuthorizationHeader() {
5490
- return __awaiter15(this, void 0, void 0, function* () {
5554
+ return __awaiter16(this, void 0, void 0, function* () {
5491
5555
  const bearer = yield Supplier.get(this._options.token);
5492
5556
  if (bearer != null) {
5493
5557
  return `Bearer ${bearer}`;
@@ -5498,7 +5562,7 @@ var Interactions = class {
5498
5562
  };
5499
5563
 
5500
5564
  // node_modules/@corti/sdk/dist/esm/api/resources/recordings/client/Client.mjs
5501
- var __awaiter16 = function(thisArg, _arguments, P2, generator) {
5565
+ var __awaiter17 = function(thisArg, _arguments, P2, generator) {
5502
5566
  function adopt(value) {
5503
5567
  return value instanceof P2 ? value : new P2(function(resolve) {
5504
5568
  resolve(value);
@@ -5547,7 +5611,7 @@ var Recordings = class {
5547
5611
  return HttpResponsePromise.fromPromise(this.__list(id, requestOptions));
5548
5612
  }
5549
5613
  __list(id, requestOptions) {
5550
- return __awaiter16(this, void 0, void 0, function* () {
5614
+ return __awaiter17(this, void 0, void 0, function* () {
5551
5615
  var _a, _b;
5552
5616
  const _response = yield fetcher({
5553
5617
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/recordings/`),
@@ -5635,7 +5699,7 @@ var Recordings = class {
5635
5699
  return HttpResponsePromise.fromPromise(this.__upload(uploadable, id, requestOptions));
5636
5700
  }
5637
5701
  __upload(uploadable, id, requestOptions) {
5638
- return __awaiter16(this, void 0, void 0, function* () {
5702
+ return __awaiter17(this, void 0, void 0, function* () {
5639
5703
  var _a, _b;
5640
5704
  const _binaryUploadRequest = yield file_exports.toBinaryUploadRequest(uploadable);
5641
5705
  const _response = yield fetcher({
@@ -5724,7 +5788,7 @@ var Recordings = class {
5724
5788
  return HttpResponsePromise.fromPromise(this.__get(id, recordingId, requestOptions));
5725
5789
  }
5726
5790
  __get(id, recordingId, requestOptions) {
5727
- return __awaiter16(this, void 0, void 0, function* () {
5791
+ return __awaiter17(this, void 0, void 0, function* () {
5728
5792
  var _a, _b;
5729
5793
  const _response = yield fetcher({
5730
5794
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/recordings/${encodeURIComponent(Uuid.jsonOrThrow(recordingId, { omitUndefined: true }))}`),
@@ -5815,7 +5879,7 @@ var Recordings = class {
5815
5879
  return HttpResponsePromise.fromPromise(this.__delete(id, recordingId, requestOptions));
5816
5880
  }
5817
5881
  __delete(id, recordingId, requestOptions) {
5818
- return __awaiter16(this, void 0, void 0, function* () {
5882
+ return __awaiter17(this, void 0, void 0, function* () {
5819
5883
  var _a, _b;
5820
5884
  const _response = yield fetcher({
5821
5885
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/recordings/${encodeURIComponent(Uuid.jsonOrThrow(recordingId, { omitUndefined: true }))}`),
@@ -5885,7 +5949,7 @@ var Recordings = class {
5885
5949
  });
5886
5950
  }
5887
5951
  _getAuthorizationHeader() {
5888
- return __awaiter16(this, void 0, void 0, function* () {
5952
+ return __awaiter17(this, void 0, void 0, function* () {
5889
5953
  const bearer = yield Supplier.get(this._options.token);
5890
5954
  if (bearer != null) {
5891
5955
  return `Bearer ${bearer}`;
@@ -5896,7 +5960,7 @@ var Recordings = class {
5896
5960
  };
5897
5961
 
5898
5962
  // node_modules/@corti/sdk/dist/esm/api/resources/transcripts/client/Client.mjs
5899
- var __awaiter17 = function(thisArg, _arguments, P2, generator) {
5963
+ var __awaiter18 = function(thisArg, _arguments, P2, generator) {
5900
5964
  function adopt(value) {
5901
5965
  return value instanceof P2 ? value : new P2(function(resolve) {
5902
5966
  resolve(value);
@@ -5947,7 +6011,7 @@ var Transcripts = class {
5947
6011
  return HttpResponsePromise.fromPromise(this.__list(id, request, requestOptions));
5948
6012
  }
5949
6013
  __list(id_1) {
5950
- return __awaiter17(this, arguments, void 0, function* (id, request = {}, requestOptions) {
6014
+ return __awaiter18(this, arguments, void 0, function* (id, request = {}, requestOptions) {
5951
6015
  var _a, _b, _c;
5952
6016
  const { full } = request;
5953
6017
  const _queryParams = {};
@@ -6051,7 +6115,7 @@ var Transcripts = class {
6051
6115
  return HttpResponsePromise.fromPromise(this.__create(id, request, requestOptions));
6052
6116
  }
6053
6117
  __create(id, request, requestOptions) {
6054
- return __awaiter17(this, void 0, void 0, function* () {
6118
+ return __awaiter18(this, void 0, void 0, function* () {
6055
6119
  var _a, _b;
6056
6120
  const _response = yield fetcher({
6057
6121
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/transcripts/`),
@@ -6151,7 +6215,7 @@ var Transcripts = class {
6151
6215
  return HttpResponsePromise.fromPromise(this.__get(id, transcriptId, requestOptions));
6152
6216
  }
6153
6217
  __get(id, transcriptId, requestOptions) {
6154
- return __awaiter17(this, void 0, void 0, function* () {
6218
+ return __awaiter18(this, void 0, void 0, function* () {
6155
6219
  var _a, _b;
6156
6220
  const _response = yield fetcher({
6157
6221
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/transcripts/${encodeURIComponent(Uuid.jsonOrThrow(transcriptId, { omitUndefined: true }))}`),
@@ -6245,7 +6309,7 @@ var Transcripts = class {
6245
6309
  return HttpResponsePromise.fromPromise(this.__delete(id, transcriptId, requestOptions));
6246
6310
  }
6247
6311
  __delete(id, transcriptId, requestOptions) {
6248
- return __awaiter17(this, void 0, void 0, function* () {
6312
+ return __awaiter18(this, void 0, void 0, function* () {
6249
6313
  var _a, _b;
6250
6314
  const _response = yield fetcher({
6251
6315
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/transcripts/${encodeURIComponent(Uuid.jsonOrThrow(transcriptId, { omitUndefined: true }))}`),
@@ -6311,7 +6375,7 @@ var Transcripts = class {
6311
6375
  });
6312
6376
  }
6313
6377
  _getAuthorizationHeader() {
6314
- return __awaiter17(this, void 0, void 0, function* () {
6378
+ return __awaiter18(this, void 0, void 0, function* () {
6315
6379
  const bearer = yield Supplier.get(this._options.token);
6316
6380
  if (bearer != null) {
6317
6381
  return `Bearer ${bearer}`;
@@ -6322,7 +6386,7 @@ var Transcripts = class {
6322
6386
  };
6323
6387
 
6324
6388
  // node_modules/@corti/sdk/dist/esm/api/resources/facts/client/Client.mjs
6325
- var __awaiter18 = function(thisArg, _arguments, P2, generator) {
6389
+ var __awaiter19 = function(thisArg, _arguments, P2, generator) {
6326
6390
  function adopt(value) {
6327
6391
  return value instanceof P2 ? value : new P2(function(resolve) {
6328
6392
  resolve(value);
@@ -6365,7 +6429,7 @@ var Facts = class {
6365
6429
  return HttpResponsePromise.fromPromise(this.__factGroupsList(requestOptions));
6366
6430
  }
6367
6431
  __factGroupsList(requestOptions) {
6368
- return __awaiter18(this, void 0, void 0, function* () {
6432
+ return __awaiter19(this, void 0, void 0, function* () {
6369
6433
  var _a, _b;
6370
6434
  const _response = yield fetcher({
6371
6435
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, "factgroups/"),
@@ -6434,7 +6498,7 @@ var Facts = class {
6434
6498
  return HttpResponsePromise.fromPromise(this.__list(id, requestOptions));
6435
6499
  }
6436
6500
  __list(id, requestOptions) {
6437
- return __awaiter18(this, void 0, void 0, function* () {
6501
+ return __awaiter19(this, void 0, void 0, function* () {
6438
6502
  var _a, _b;
6439
6503
  const _response = yield fetcher({
6440
6504
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/facts/`),
@@ -6515,7 +6579,7 @@ var Facts = class {
6515
6579
  return HttpResponsePromise.fromPromise(this.__create(id, request, requestOptions));
6516
6580
  }
6517
6581
  __create(id, request, requestOptions) {
6518
- return __awaiter18(this, void 0, void 0, function* () {
6582
+ return __awaiter19(this, void 0, void 0, function* () {
6519
6583
  var _a, _b;
6520
6584
  const _response = yield fetcher({
6521
6585
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/facts/`),
@@ -6601,7 +6665,7 @@ var Facts = class {
6601
6665
  return HttpResponsePromise.fromPromise(this.__batchUpdate(id, request, requestOptions));
6602
6666
  }
6603
6667
  __batchUpdate(id, request, requestOptions) {
6604
- return __awaiter18(this, void 0, void 0, function* () {
6668
+ return __awaiter19(this, void 0, void 0, function* () {
6605
6669
  var _a, _b;
6606
6670
  const _response = yield fetcher({
6607
6671
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/facts/`),
@@ -6684,7 +6748,7 @@ var Facts = class {
6684
6748
  return HttpResponsePromise.fromPromise(this.__update(id, factId, request, requestOptions));
6685
6749
  }
6686
6750
  __update(id_1, factId_1) {
6687
- return __awaiter18(this, arguments, void 0, function* (id, factId, request = {}, requestOptions) {
6751
+ return __awaiter19(this, arguments, void 0, function* (id, factId, request = {}, requestOptions) {
6688
6752
  var _a, _b;
6689
6753
  const _response = yield fetcher({
6690
6754
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/facts/${encodeURIComponent(Uuid.jsonOrThrow(factId, { omitUndefined: true }))}`),
@@ -6751,7 +6815,7 @@ var Facts = class {
6751
6815
  });
6752
6816
  }
6753
6817
  _getAuthorizationHeader() {
6754
- return __awaiter18(this, void 0, void 0, function* () {
6818
+ return __awaiter19(this, void 0, void 0, function* () {
6755
6819
  const bearer = yield Supplier.get(this._options.token);
6756
6820
  if (bearer != null) {
6757
6821
  return `Bearer ${bearer}`;
@@ -6762,7 +6826,7 @@ var Facts = class {
6762
6826
  };
6763
6827
 
6764
6828
  // node_modules/@corti/sdk/dist/esm/api/resources/documents/client/Client.mjs
6765
- var __awaiter19 = function(thisArg, _arguments, P2, generator) {
6829
+ var __awaiter20 = function(thisArg, _arguments, P2, generator) {
6766
6830
  function adopt(value) {
6767
6831
  return value instanceof P2 ? value : new P2(function(resolve) {
6768
6832
  resolve(value);
@@ -6811,7 +6875,7 @@ var Documents = class {
6811
6875
  return HttpResponsePromise.fromPromise(this.__list(id, requestOptions));
6812
6876
  }
6813
6877
  __list(id, requestOptions) {
6814
- return __awaiter19(this, void 0, void 0, function* () {
6878
+ return __awaiter20(this, void 0, void 0, function* () {
6815
6879
  var _a, _b;
6816
6880
  const _response = yield fetcher({
6817
6881
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/documents/`),
@@ -6912,7 +6976,7 @@ var Documents = class {
6912
6976
  return HttpResponsePromise.fromPromise(this.__create(id, request, requestOptions));
6913
6977
  }
6914
6978
  __create(id, request, requestOptions) {
6915
- return __awaiter19(this, void 0, void 0, function* () {
6979
+ return __awaiter20(this, void 0, void 0, function* () {
6916
6980
  var _a, _b;
6917
6981
  const _response = yield fetcher({
6918
6982
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/documents/`),
@@ -7009,7 +7073,7 @@ var Documents = class {
7009
7073
  return HttpResponsePromise.fromPromise(this.__get(id, documentId, requestOptions));
7010
7074
  }
7011
7075
  __get(id, documentId, requestOptions) {
7012
- return __awaiter19(this, void 0, void 0, function* () {
7076
+ return __awaiter20(this, void 0, void 0, function* () {
7013
7077
  var _a, _b;
7014
7078
  const _response = yield fetcher({
7015
7079
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/documents/${encodeURIComponent(Uuid.jsonOrThrow(documentId, { omitUndefined: true }))}`),
@@ -7098,7 +7162,7 @@ var Documents = class {
7098
7162
  return HttpResponsePromise.fromPromise(this.__delete(id, documentId, requestOptions));
7099
7163
  }
7100
7164
  __delete(id, documentId, requestOptions) {
7101
- return __awaiter19(this, void 0, void 0, function* () {
7165
+ return __awaiter20(this, void 0, void 0, function* () {
7102
7166
  var _a, _b;
7103
7167
  const _response = yield fetcher({
7104
7168
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/documents/${encodeURIComponent(Uuid.jsonOrThrow(documentId, { omitUndefined: true }))}`),
@@ -7185,7 +7249,7 @@ var Documents = class {
7185
7249
  return HttpResponsePromise.fromPromise(this.__update(id, documentId, request, requestOptions));
7186
7250
  }
7187
7251
  __update(id_1, documentId_1) {
7188
- return __awaiter19(this, arguments, void 0, function* (id, documentId, request = {}, requestOptions) {
7252
+ return __awaiter20(this, arguments, void 0, function* (id, documentId, request = {}, requestOptions) {
7189
7253
  var _a, _b;
7190
7254
  const _response = yield fetcher({
7191
7255
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `interactions/${encodeURIComponent(Uuid.jsonOrThrow(id, { omitUndefined: true }))}/documents/${encodeURIComponent(Uuid.jsonOrThrow(documentId, { omitUndefined: true }))}`),
@@ -7264,7 +7328,7 @@ var Documents = class {
7264
7328
  });
7265
7329
  }
7266
7330
  _getAuthorizationHeader() {
7267
- return __awaiter19(this, void 0, void 0, function* () {
7331
+ return __awaiter20(this, void 0, void 0, function* () {
7268
7332
  const bearer = yield Supplier.get(this._options.token);
7269
7333
  if (bearer != null) {
7270
7334
  return `Bearer ${bearer}`;
@@ -7275,7 +7339,7 @@ var Documents = class {
7275
7339
  };
7276
7340
 
7277
7341
  // node_modules/@corti/sdk/dist/esm/api/resources/templates/client/Client.mjs
7278
- var __awaiter20 = function(thisArg, _arguments, P2, generator) {
7342
+ var __awaiter21 = function(thisArg, _arguments, P2, generator) {
7279
7343
  function adopt(value) {
7280
7344
  return value instanceof P2 ? value : new P2(function(resolve) {
7281
7345
  resolve(value);
@@ -7322,7 +7386,7 @@ var Templates = class {
7322
7386
  return HttpResponsePromise.fromPromise(this.__sectionList(request, requestOptions));
7323
7387
  }
7324
7388
  __sectionList() {
7325
- return __awaiter20(this, arguments, void 0, function* (request = {}, requestOptions) {
7389
+ return __awaiter21(this, arguments, void 0, function* (request = {}, requestOptions) {
7326
7390
  var _a, _b;
7327
7391
  const { org, lang } = request;
7328
7392
  const _queryParams = {};
@@ -7411,7 +7475,7 @@ var Templates = class {
7411
7475
  return HttpResponsePromise.fromPromise(this.__list(request, requestOptions));
7412
7476
  }
7413
7477
  __list() {
7414
- return __awaiter20(this, arguments, void 0, function* (request = {}, requestOptions) {
7478
+ return __awaiter21(this, arguments, void 0, function* (request = {}, requestOptions) {
7415
7479
  var _a, _b;
7416
7480
  const { org, lang, status } = request;
7417
7481
  const _queryParams = {};
@@ -7507,7 +7571,7 @@ var Templates = class {
7507
7571
  return HttpResponsePromise.fromPromise(this.__get(key, requestOptions));
7508
7572
  }
7509
7573
  __get(key, requestOptions) {
7510
- return __awaiter20(this, void 0, void 0, function* () {
7574
+ return __awaiter21(this, void 0, void 0, function* () {
7511
7575
  var _a, _b;
7512
7576
  const _response = yield fetcher({
7513
7577
  url: url_exports.join((_a = yield Supplier.get(this._options.baseUrl)) !== null && _a !== void 0 ? _a : (yield Supplier.get(this._options.environment)).base, `templates/${encodeURIComponent(key)}`),
@@ -7564,7 +7628,7 @@ var Templates = class {
7564
7628
  });
7565
7629
  }
7566
7630
  _getAuthorizationHeader() {
7567
- return __awaiter20(this, void 0, void 0, function* () {
7631
+ return __awaiter21(this, void 0, void 0, function* () {
7568
7632
  const bearer = yield Supplier.get(this._options.token);
7569
7633
  if (bearer != null) {
7570
7634
  return `Bearer ${bearer}`;
@@ -7575,7 +7639,7 @@ var Templates = class {
7575
7639
  };
7576
7640
 
7577
7641
  // node_modules/@corti/sdk/dist/esm/api/resources/stream/client/Socket.mjs
7578
- var __awaiter21 = function(thisArg, _arguments, P2, generator) {
7642
+ var __awaiter22 = function(thisArg, _arguments, P2, generator) {
7579
7643
  function adopt(value) {
7580
7644
  return value instanceof P2 ? value : new P2(function(resolve) {
7581
7645
  resolve(value);
@@ -7710,7 +7774,7 @@ var StreamSocket = class {
7710
7774
  }
7711
7775
  /** Returns a promise that resolves when the websocket is open. */
7712
7776
  waitForOpen() {
7713
- return __awaiter21(this, void 0, void 0, function* () {
7777
+ return __awaiter22(this, void 0, void 0, function* () {
7714
7778
  if (this.socket.readyState === ReconnectingWebSocket.OPEN) {
7715
7779
  return this.socket;
7716
7780
  }
@@ -7740,7 +7804,7 @@ var StreamSocket = class {
7740
7804
  };
7741
7805
 
7742
7806
  // node_modules/@corti/sdk/dist/esm/api/resources/stream/client/Client.mjs
7743
- var __awaiter22 = function(thisArg, _arguments, P2, generator) {
7807
+ var __awaiter23 = function(thisArg, _arguments, P2, generator) {
7744
7808
  function adopt(value) {
7745
7809
  return value instanceof P2 ? value : new P2(function(resolve) {
7746
7810
  resolve(value);
@@ -7772,7 +7836,7 @@ var Stream = class {
7772
7836
  this._options = _options;
7773
7837
  }
7774
7838
  connect(args) {
7775
- return __awaiter22(this, void 0, void 0, function* () {
7839
+ return __awaiter23(this, void 0, void 0, function* () {
7776
7840
  var _a;
7777
7841
  const { id, tenantName, token, headers, debug, reconnectAttempts } = args;
7778
7842
  const _queryParams = {};
@@ -7790,7 +7854,7 @@ var Stream = class {
7790
7854
  });
7791
7855
  }
7792
7856
  _getAuthorizationHeader() {
7793
- return __awaiter22(this, void 0, void 0, function* () {
7857
+ return __awaiter23(this, void 0, void 0, function* () {
7794
7858
  const bearer = yield Supplier.get(this._options.token);
7795
7859
  if (bearer != null) {
7796
7860
  return `Bearer ${bearer}`;
@@ -7831,7 +7895,7 @@ var StreamSocket2 = class extends StreamSocket {
7831
7895
  };
7832
7896
 
7833
7897
  // node_modules/@corti/sdk/dist/esm/custom/CustomStream.mjs
7834
- var __awaiter23 = function(thisArg, _arguments, P2, generator) {
7898
+ var __awaiter24 = function(thisArg, _arguments, P2, generator) {
7835
7899
  function adopt(value) {
7836
7900
  return value instanceof P2 ? value : new P2(function(resolve) {
7837
7901
  resolve(value);
@@ -7877,7 +7941,7 @@ var Stream2 = class extends Stream {
7877
7941
  const _super = Object.create(null, {
7878
7942
  connect: { get: () => super.connect }
7879
7943
  });
7880
- return __awaiter23(this, void 0, void 0, function* () {
7944
+ return __awaiter24(this, void 0, void 0, function* () {
7881
7945
  var { configuration } = _a, args = __rest2(_a, ["configuration"]);
7882
7946
  const fernWs = yield _super.connect.call(this, Object.assign(Object.assign({}, args), { token: (yield this._getAuthorizationHeader()) || "", tenantName: yield Supplier.get(this._options.tenantName) }));
7883
7947
  const ws = new StreamSocket2({ socket: fernWs.socket });
@@ -7929,7 +7993,7 @@ var Stream2 = class extends Stream {
7929
7993
  };
7930
7994
 
7931
7995
  // node_modules/@corti/sdk/dist/esm/api/resources/transcribe/client/Socket.mjs
7932
- var __awaiter24 = function(thisArg, _arguments, P2, generator) {
7996
+ var __awaiter25 = function(thisArg, _arguments, P2, generator) {
7933
7997
  function adopt(value) {
7934
7998
  return value instanceof P2 ? value : new P2(function(resolve) {
7935
7999
  resolve(value);
@@ -8064,7 +8128,7 @@ var TranscribeSocket = class {
8064
8128
  }
8065
8129
  /** Returns a promise that resolves when the websocket is open. */
8066
8130
  waitForOpen() {
8067
- return __awaiter24(this, void 0, void 0, function* () {
8131
+ return __awaiter25(this, void 0, void 0, function* () {
8068
8132
  if (this.socket.readyState === ReconnectingWebSocket.OPEN) {
8069
8133
  return this.socket;
8070
8134
  }
@@ -8094,7 +8158,7 @@ var TranscribeSocket = class {
8094
8158
  };
8095
8159
 
8096
8160
  // node_modules/@corti/sdk/dist/esm/api/resources/transcribe/client/Client.mjs
8097
- var __awaiter25 = function(thisArg, _arguments, P2, generator) {
8161
+ var __awaiter26 = function(thisArg, _arguments, P2, generator) {
8098
8162
  function adopt(value) {
8099
8163
  return value instanceof P2 ? value : new P2(function(resolve) {
8100
8164
  resolve(value);
@@ -8126,7 +8190,7 @@ var Transcribe = class {
8126
8190
  this._options = _options;
8127
8191
  }
8128
8192
  connect(args) {
8129
- return __awaiter25(this, void 0, void 0, function* () {
8193
+ return __awaiter26(this, void 0, void 0, function* () {
8130
8194
  var _a;
8131
8195
  const { tenantName, token, headers, debug, reconnectAttempts } = args;
8132
8196
  const _queryParams = {};
@@ -8144,7 +8208,7 @@ var Transcribe = class {
8144
8208
  });
8145
8209
  }
8146
8210
  _getAuthorizationHeader() {
8147
- return __awaiter25(this, void 0, void 0, function* () {
8211
+ return __awaiter26(this, void 0, void 0, function* () {
8148
8212
  const bearer = yield Supplier.get(this._options.token);
8149
8213
  if (bearer != null) {
8150
8214
  return `Bearer ${bearer}`;
@@ -8185,7 +8249,7 @@ var TranscribeSocket2 = class extends TranscribeSocket {
8185
8249
  };
8186
8250
 
8187
8251
  // node_modules/@corti/sdk/dist/esm/custom/CustomTranscribe.mjs
8188
- var __awaiter26 = function(thisArg, _arguments, P2, generator) {
8252
+ var __awaiter27 = function(thisArg, _arguments, P2, generator) {
8189
8253
  function adopt(value) {
8190
8254
  return value instanceof P2 ? value : new P2(function(resolve) {
8191
8255
  resolve(value);
@@ -8231,7 +8295,7 @@ var Transcribe2 = class extends Transcribe {
8231
8295
  const _super = Object.create(null, {
8232
8296
  connect: { get: () => super.connect }
8233
8297
  });
8234
- return __awaiter26(this, arguments, void 0, function* (_a = {}) {
8298
+ return __awaiter27(this, arguments, void 0, function* (_a = {}) {
8235
8299
  var { configuration } = _a, args = __rest3(_a, ["configuration"]);
8236
8300
  const fernWs = yield _super.connect.call(this, Object.assign(Object.assign({}, args), { token: (yield this._getAuthorizationHeader()) || "", tenantName: yield Supplier.get(this._options.tenantName) }));
8237
8301
  const ws = new TranscribeSocket2({ socket: fernWs.socket });
@@ -8282,70 +8346,6 @@ var Transcribe2 = class extends Transcribe {
8282
8346
  }
8283
8347
  };
8284
8348
 
8285
- // node_modules/@corti/sdk/dist/esm/custom/RefreshBearerProvider.mjs
8286
- var __awaiter27 = function(thisArg, _arguments, P2, generator) {
8287
- function adopt(value) {
8288
- return value instanceof P2 ? value : new P2(function(resolve) {
8289
- resolve(value);
8290
- });
8291
- }
8292
- return new (P2 || (P2 = Promise))(function(resolve, reject) {
8293
- function fulfilled(value) {
8294
- try {
8295
- step(generator.next(value));
8296
- } catch (e5) {
8297
- reject(e5);
8298
- }
8299
- }
8300
- function rejected(value) {
8301
- try {
8302
- step(generator["throw"](value));
8303
- } catch (e5) {
8304
- reject(e5);
8305
- }
8306
- }
8307
- function step(result) {
8308
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
8309
- }
8310
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8311
- });
8312
- };
8313
- var RefreshBearerProvider = class {
8314
- constructor({ accessToken, refreshAccessToken, refreshToken, refreshExpiresIn, expiresIn }) {
8315
- this.BUFFER_IN_MINUTES = 2;
8316
- this._expiresAt = this.getExpiresAt(expiresIn, this.BUFFER_IN_MINUTES);
8317
- this._refreshExpiresAt = this.getExpiresAt(refreshExpiresIn, 0);
8318
- this._accessToken = accessToken || "no_token";
8319
- this._refreshToken = refreshToken;
8320
- this._refreshAccessToken = refreshAccessToken;
8321
- }
8322
- getToken() {
8323
- return __awaiter27(this, void 0, void 0, function* () {
8324
- if (this._accessToken && this._expiresAt > /* @__PURE__ */ new Date()) {
8325
- return Supplier.get(this._accessToken);
8326
- }
8327
- return this.refresh();
8328
- });
8329
- }
8330
- refresh() {
8331
- return __awaiter27(this, void 0, void 0, function* () {
8332
- if (!this._refreshAccessToken || this._refreshToken && this._refreshExpiresAt < /* @__PURE__ */ new Date()) {
8333
- return Supplier.get(this._accessToken);
8334
- }
8335
- const tokenResponse = yield this._refreshAccessToken(this._refreshToken);
8336
- this._accessToken = tokenResponse.accessToken;
8337
- this._expiresAt = this.getExpiresAt(tokenResponse.expiresIn, this.BUFFER_IN_MINUTES);
8338
- this._refreshToken = tokenResponse.refreshToken;
8339
- this._refreshExpiresAt = this.getExpiresAt(tokenResponse.refreshExpiresIn, 0);
8340
- return this._accessToken;
8341
- });
8342
- }
8343
- getExpiresAt(expiresInSeconds = 0, bufferInMinutes = this.BUFFER_IN_MINUTES) {
8344
- const now = /* @__PURE__ */ new Date();
8345
- return new Date(now.getTime() + expiresInSeconds * 1e3 - bufferInMinutes * 60 * 1e3);
8346
- }
8347
- };
8348
-
8349
8349
  // node_modules/@corti/sdk/dist/esm/version.mjs
8350
8350
  var SDK_VERSION = "0.1.1";
8351
8351
 
@@ -8457,16 +8457,11 @@ var DictationService = class extends EventTarget {
8457
8457
  this.mediaRecorder = new MediaRecorder(mediaStream);
8458
8458
  this.serverConfig = serverConfig;
8459
8459
  this.dictationConfig = dictationConfig;
8460
+ const { environment, tenant: tenantName, ...authConfig } = serverConfig;
8460
8461
  this.cortiClient = new CortiClient({
8461
- environment: serverConfig.environment,
8462
- tenantName: serverConfig.tenant,
8463
- auth: {
8464
- accessToken: serverConfig.accessToken,
8465
- refreshToken: serverConfig.refreshToken,
8466
- expiresIn: serverConfig.expiresIn,
8467
- refreshExpiresIn: serverConfig.refreshExpiresIn,
8468
- refreshAccessToken: serverConfig.refreshAccessToken
8469
- }
8462
+ environment,
8463
+ tenantName,
8464
+ auth: authConfig
8470
8465
  });
8471
8466
  this.mediaRecorder.ondataavailable = (event) => {
8472
8467
  if (this.webSocket?.readyState === WebSocket.OPEN) {
@@ -9368,16 +9363,20 @@ var CortiDictation = class extends i4 {
9368
9363
  throw new Error("Invalid token");
9369
9364
  }
9370
9365
  }
9371
- setAuthConfig(config) {
9366
+ async setAuthConfig(config) {
9372
9367
  try {
9373
- const decoded = decodeToken(config.accessToken);
9368
+ const initialToken = "accessToken" in config ? { accessToken: config.accessToken } : await config.refreshAccessToken();
9369
+ if (!initialToken?.accessToken || typeof initialToken.accessToken !== "string") {
9370
+ throw new Error("Access token is required and must be a string");
9371
+ }
9372
+ const decoded = decodeToken(initialToken.accessToken);
9374
9373
  if (!decoded) {
9375
9374
  throw new Error("Invalid token format");
9376
9375
  }
9377
9376
  this._serverConfig = {
9378
9377
  environment: decoded.environment,
9379
9378
  tenant: decoded.tenant,
9380
- accessToken: config.accessToken,
9379
+ accessToken: initialToken.accessToken,
9381
9380
  expiresIn: config.expiresIn ?? decoded.expiresIn,
9382
9381
  refreshToken: config.refreshToken,
9383
9382
  refreshExpiresIn: config.refreshExpiresIn,
package/dist/types.d.ts CHANGED
@@ -1,16 +1,6 @@
1
+ import { type Corti } from '@corti/sdk';
1
2
  export type RecordingState = 'initializing' | 'recording' | 'stopping' | 'stopped';
2
- export interface ServerConfig {
3
+ export type ServerConfig = {
3
4
  environment: string;
4
5
  tenant: string;
5
- accessToken: string;
6
- refreshToken?: string;
7
- expiresIn?: number;
8
- refreshExpiresIn?: number;
9
- refreshAccessToken?: (refreshToken?: string) => Promise<{
10
- accessToken: string;
11
- tokenType: string;
12
- expiresIn: number;
13
- refreshToken?: string;
14
- refreshExpiresIn?: number;
15
- }>;
16
- }
6
+ } & Corti.BearerOptions;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type RecordingState =\n | 'initializing'\n | 'recording'\n | 'stopping'\n | 'stopped';\n\nexport interface ServerConfig {\n environment: string;\n tenant: string;\n accessToken: string;\n refreshToken?: string;\n expiresIn?: number;\n refreshExpiresIn?: number;\n refreshAccessToken?: (refreshToken?: string) => Promise<{\n accessToken: string;\n tokenType: string;\n expiresIn: number;\n refreshToken?: string;\n refreshExpiresIn?: number;\n }>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import { type Corti } from '@corti/sdk';\n\nexport type RecordingState =\n | 'initializing'\n | 'recording'\n | 'stopping'\n | 'stopped';\n\nexport type ServerConfig = {\n environment: string;\n tenant: string;\n} & Corti.BearerOptions;\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@corti/dictation-web",
3
3
  "description": "Web component for Corti Dictation",
4
4
  "author": "Corti ApS",
5
- "version": "0.1.21-rc.2",
5
+ "version": "0.1.21-rc.3",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",