assemblyai 4.33.0 → 4.33.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/CHANGELOG.md CHANGED
@@ -4,9 +4,12 @@
4
4
 
5
5
  - Add streaming parameters to match the Python SDK:
6
6
  - `voiceFocus` and `voiceFocusThreshold` (replaces the unreleased `noiseSuppressionModel` / `noiseSuppressionThreshold`)
7
- - `continuousPartials`
8
- - `customerSupportAudioCapture` (logs a warning when enabled records session audio for AssemblyAI support)
7
+ - `continuousPartials` (U3Pro speech models only)
8
+ - `customerSupportAudioCapture` internal/unstable; sent on the wire as `_customer_support_audio_capture` to mirror the server's stability marker. Records session audio for AssemblyAI support; only enable when coordinating with support
9
+ - `includePartialTurns` — explicitly include or exclude partial (non-final) turns
10
+ - `redactPii`, `redactPiiPolicies`, `redactPiiSub` — server-side PII redaction on final turns
9
11
  - `webhookUrl`, `webhookAuthHeaderName`, `webhookAuthHeaderValue`
12
+ - Add `StreamingPiiPolicy` and `StreamingPiiSubstitution` exported types. `StreamingPiiPolicy` covers the full server-side `AAIEntities` enum (65 entities)
10
13
  - Add `speaker` field to `StreamingWord`
11
14
 
12
15
  ## [4.20.0]
@@ -65,7 +65,7 @@
65
65
  defaultUserAgentString += navigator.userAgent;
66
66
  }
67
67
  const defaultUserAgent = {
68
- sdk: { name: "JavaScript", version: "4.33.0" },
68
+ sdk: { name: "JavaScript", version: "4.33.1" },
69
69
  };
70
70
  if (typeof process !== "undefined") {
71
71
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -981,9 +981,17 @@ Learn more at https://github.com/AssemblyAI/assemblyai-node-sdk/blob/main/docs/c
981
981
  if (this.params.continuousPartials !== undefined) {
982
982
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
983
983
  }
984
+ if (this.params.interruptionDelay !== undefined) {
985
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
986
+ }
984
987
  if (this.params.customerSupportAudioCapture) {
985
988
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
986
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
989
+ // The server's canonical wire name is `_customer_support_audio_capture`
990
+ // (leading underscore = "not officially supported / unstable"). The
991
+ // server also accepts `customer_support_audio_capture` via
992
+ // `populate_by_name=True`, but we send the underscore form to honor
993
+ // the server's stability marker.
994
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
987
995
  }
988
996
  if (this.params.webhookUrl) {
989
997
  searchParams.set("webhook_url", this.params.webhookUrl);
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).assemblyai={})}(this,(function(e){"use strict";function t(e,t){var s={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(s[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(s[i[n]]=e[i[n]])}return s}function s(e,t,s,i){return new(s||(s=Promise))((function(n,r){function o(e){try{c(i.next(e))}catch(e){r(e)}}function a(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const i={cache:"no-store"};let n="";"undefined"!=typeof navigator&&navigator.userAgent&&(n+=navigator.userAgent);const r={sdk:{name:"JavaScript",version:"4.33.0"}};"undefined"!=typeof process&&(process.versions.node&&-1===n.indexOf("Node")&&(r.runtime_env={name:"Node",version:process.versions.node}),process.versions.bun&&-1===n.indexOf("Bun")&&(r.runtime_env={name:"Bun",version:process.versions.bun})),"undefined"!=typeof Deno&&process.versions.bun&&-1===n.indexOf("Deno")&&(r.runtime_env={name:"Deno",version:Deno.version.deno});class o{constructor(e){var t;this.params=e,!1===e.userAgent?this.userAgent=void 0:this.userAgent=(t=e.userAgent||{},n+(!1===t?"":" AssemblyAI/1.0 ("+Object.entries(Object.assign(Object.assign({},r),t)).map((([e,t])=>t?`${e}=${t.name}/${t.version}`:"")).join(" ")+")"))}fetch(e,t){return s(this,void 0,void 0,(function*(){t=Object.assign(Object.assign({},i),t);let s={Authorization:this.params.apiKey,"Content-Type":"application/json"};(null==i?void 0:i.headers)&&(s=Object.assign(Object.assign({},s),i.headers)),(null==t?void 0:t.headers)&&(s=Object.assign(Object.assign({},s),t.headers)),this.userAgent&&(s["User-Agent"]=this.userAgent,"undefined"!=typeof window&&"chrome"in window&&(s["AssemblyAI-Agent"]=this.userAgent)),t.headers=s,e.startsWith("http")||(e=this.params.baseUrl+e);const n=yield fetch(e,t);if(n.status>=400){let e;const t=yield n.text();if(t){try{e=JSON.parse(t)}catch(e){}if(null==e?void 0:e.error)throw new Error(e.error);throw new Error(t)}throw new Error(`HTTP Error: ${n.status} ${n.statusText}`)}return n}))}fetchJson(e,t){return s(this,void 0,void 0,(function*(){return(yield this.fetch(e,t)).json()}))}}class a extends o{summary(e,t){return this.fetchJson("/lemur/v3/generate/summary",{method:"POST",body:JSON.stringify(e),signal:t})}questionAnswer(e,t){return this.fetchJson("/lemur/v3/generate/question-answer",{method:"POST",body:JSON.stringify(e),signal:t})}actionItems(e,t){return this.fetchJson("/lemur/v3/generate/action-items",{method:"POST",body:JSON.stringify(e),signal:t})}task(e,t){return this.fetchJson("/lemur/v3/generate/task",{method:"POST",body:JSON.stringify(e),signal:t})}getResponse(e,t){return this.fetchJson(`/lemur/v3/${e}`,{signal:t})}purgeRequestData(e,t){return this.fetchJson(`/lemur/v3/${e}`,{method:"DELETE",signal:t})}}const{WritableStream:c}="undefined"!=typeof window?window:"undefined"!=typeof global?global:globalThis;var l,d;const h=null!==(d=null!==(l=null!==WebSocket&&void 0!==WebSocket?WebSocket:null===global||void 0===global?void 0:global.WebSocket)&&void 0!==l?l:null===window||void 0===window?void 0:window.WebSocket)&&void 0!==d?d:null===self||void 0===self?void 0:self.WebSocket,u=(e,t)=>t?new h(e,t):new h(e),p={[4e3]:"Sample rate must be a positive integer",[4001]:"Not Authorized",[4002]:"Insufficient funds",[4003]:"This feature is paid-only and requires you to add a credit card. Please visit https://app.assemblyai.com/ to add a credit card to your account.",[4004]:"Session ID does not exist",[4008]:"Session has expired",[4010]:"Session is closed",[4029]:"Rate limited",[4030]:"Unique session violation",[4031]:"Session Timeout",[4032]:"Audio too short",[4033]:"Audio too long",[4034]:"Audio too small to transcode",[4100]:"Bad JSON",[4101]:"Bad schema",[4102]:"Too many streams",[4103]:"This session has been reconnected. This WebSocket is no longer valid.",[1013]:"Reconnect attempts exhausted",[4104]:"Could not parse word boost parameter"};class m extends Error{}const f={[3005]:"Server error",[3006]:"Input validation error",[3007]:"Audio chunk duration violation",[3008]:"Session expired: maximum session duration exceeded",[3009]:"Too many concurrent sessions",[4e3]:"Sample rate must be a positive integer",[4001]:"Not Authorized",[4002]:"Insufficient funds",[4003]:"This feature is paid-only and requires you to add a credit card. Please visit https://app.assemblyai.com/ to add a credit card to your account.",[4004]:"Session ID does not exist",[4008]:"Session has expired",[4010]:"Session is closed",[4029]:"Rate limited",[4030]:"Unique session violation",[4031]:"Session Timeout",[4032]:"Audio too short",[4033]:"Audio too long",[4034]:"Audio too small to transcode",[4101]:"Bad schema",[4102]:"Too many streams",[4103]:"This session has been reconnected. This WebSocket is no longer valid."};class v extends Error{}const y='{"terminate_session":true}';class g{constructor(e){var t,s;if(this.listeners={},this.realtimeUrl=null!==(t=e.realtimeUrl)&&void 0!==t?t:"wss://api.assemblyai.com/v2/realtime/ws",this.sampleRate=null!==(s=e.sampleRate)&&void 0!==s?s:16e3,this.wordBoost=e.wordBoost,this.encoding=e.encoding,this.endUtteranceSilenceThreshold=e.endUtteranceSilenceThreshold,this.disablePartialTranscripts=e.disablePartialTranscripts,"token"in e&&e.token&&(this.token=e.token),"apiKey"in e&&e.apiKey&&(this.apiKey=e.apiKey),!this.token&&!this.apiKey)throw new Error("API key or temporary token is required.")}connectionUrl(){const e=new URL(this.realtimeUrl);if("wss:"!==e.protocol)throw new Error("Invalid protocol, must be wss");const t=new URLSearchParams;return this.token&&t.set("token",this.token),t.set("sample_rate",this.sampleRate.toString()),this.wordBoost&&this.wordBoost.length>0&&t.set("word_boost",JSON.stringify(this.wordBoost)),this.encoding&&t.set("encoding",this.encoding),t.set("enable_extra_session_information","true"),this.disablePartialTranscripts&&t.set("disable_partial_transcripts",this.disablePartialTranscripts.toString()),e.search=t.toString(),e}on(e,t){this.listeners[e]=t}connect(){return new Promise((e=>{if(this.socket)throw new Error("Already connected");const t=this.connectionUrl();this.token?this.socket=u(t.toString()):(console.warn("API key authentication is not supported for the RealtimeTranscriber in browser environment. Use temporary token authentication instead.\nLearn more at https://github.com/AssemblyAI/assemblyai-node-sdk/blob/main/docs/compat.md#browser-compatibility."),this.socket=u(t.toString(),{headers:{Authorization:this.apiKey}})),this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{void 0!==this.endUtteranceSilenceThreshold&&null!==this.endUtteranceSilenceThreshold&&this.configureEndUtteranceSilenceThreshold(this.endUtteranceSilenceThreshold)},this.socket.onclose=({code:e,reason:t})=>{var s,i;t||e in p&&(t=p[e]),null===(i=(s=this.listeners).close)||void 0===i||i.call(s,e,t)},this.socket.onerror=e=>{var t,s,i,n;e.error?null===(s=(t=this.listeners).error)||void 0===s||s.call(t,e.error):null===(n=(i=this.listeners).error)||void 0===n||n.call(i,new Error(e.message))},this.socket.onmessage=({data:t})=>{var s,i,n,r,o,a,c,l,d,h,u,p,f,v,y;const g=JSON.parse(t.toString());if("error"in g)null===(i=(s=this.listeners).error)||void 0===i||i.call(s,new m(g.error));else switch(g.message_type){case"SessionBegins":{const t={sessionId:g.session_id,expiresAt:new Date(g.expires_at)};e(t),null===(r=(n=this.listeners).open)||void 0===r||r.call(n,t);break}case"PartialTranscript":g.created=new Date(g.created),null===(a=(o=this.listeners).transcript)||void 0===a||a.call(o,g),null===(l=(c=this.listeners)["transcript.partial"])||void 0===l||l.call(c,g);break;case"FinalTranscript":g.created=new Date(g.created),null===(h=(d=this.listeners).transcript)||void 0===h||h.call(d,g),null===(p=(u=this.listeners)["transcript.final"])||void 0===p||p.call(u,g);break;case"SessionInformation":null===(v=(f=this.listeners).session_information)||void 0===v||v.call(f,g);break;case"SessionTerminated":null===(y=this.sessionTerminatedResolve)||void 0===y||y.call(this)}}}))}sendAudio(e){this.send(e)}stream(){return new c({write:e=>{this.sendAudio(e)}})}forceEndUtterance(){this.send('{"force_end_utterance":true}')}configureEndUtteranceSilenceThreshold(e){this.send(`{"end_utterance_silence_threshold":${e}}`)}send(e){if(!this.socket||this.socket.readyState!==this.socket.OPEN)throw new Error("Socket is not open for communication");this.socket.send(e)}close(){return s(this,arguments,void 0,(function*(e=!0){var t;if(this.socket){if(this.socket.readyState===this.socket.OPEN)if(e){const e=new Promise((e=>{this.sessionTerminatedResolve=e}));this.socket.send(y),yield e}else this.socket.send(y);(null===(t=this.socket)||void 0===t?void 0:t.removeAllListeners)&&this.socket.removeAllListeners(),this.socket.close()}this.listeners={},this.socket=void 0}))}}class b extends o{constructor(e){super(e),this.rtFactoryParams=e}createService(e){return this.transcriber(e)}transcriber(e){const t=Object.assign({},e);return t.token||t.apiKey||(t.apiKey=this.rtFactoryParams.apiKey),new g(t)}createTemporaryToken(e){return s(this,void 0,void 0,(function*(){return(yield this.fetchJson("/v2/realtime/token",{method:"POST",body:JSON.stringify(e)})).token}))}}function w(e){return e.startsWith("http")||e.startsWith("https")||e.startsWith("data:")?null:e.startsWith("file://")?e.substring(7):e.startsWith("file:")?e.substring(5):e}class S extends o{constructor(e,t){super(e),this.files=t}transcribe(e,t){return s(this,void 0,void 0,(function*(){const s=yield this.submit(e);return yield this.waitUntilReady(s.id,t)}))}submit(e){return s(this,void 0,void 0,(function*(){let s,i;if("audio"in e){const{audio:n}=e,r=t(e,["audio"]);if("string"==typeof n){const e=w(n);s=null!==e?yield this.files.upload(e):n.startsWith("data:")?yield this.files.upload(n):n}else s=yield this.files.upload(n);i=Object.assign(Object.assign({},r),{audio_url:s})}else i=e;return yield this.fetchJson("/v2/transcript",{method:"POST",body:JSON.stringify(i)})}))}create(e,t){return s(this,void 0,void 0,(function*(){var s;const i=w(e.audio_url);if(null!==i){const t=yield this.files.upload(i);e.audio_url=t}const n=yield this.fetchJson("/v2/transcript",{method:"POST",body:JSON.stringify(e)});return null===(s=null==t?void 0:t.poll)||void 0===s||s?yield this.waitUntilReady(n.id,t):n}))}waitUntilReady(e,t){return s(this,void 0,void 0,(function*(){var s,i;const n=null!==(s=null==t?void 0:t.pollingInterval)&&void 0!==s?s:3e3,r=null!==(i=null==t?void 0:t.pollingTimeout)&&void 0!==i?i:-1,o=Date.now();for(;;){const t=yield this.get(e);if("completed"===t.status||"error"===t.status)return t;if(r>0&&Date.now()-o>r)throw new Error("Polling timeout");yield new Promise((e=>setTimeout(e,n)))}}))}get(e){return this.fetchJson(`/v2/transcript/${e}`)}list(e){return s(this,void 0,void 0,(function*(){let t="/v2/transcript";"string"==typeof e?t=e:e&&(t=`${t}?${new URLSearchParams(Object.keys(e).map((t=>{var s;return[t,(null===(s=e[t])||void 0===s?void 0:s.toString())||""]})))}`);const s=yield this.fetchJson(t);for(const e of s.transcripts)e.created=new Date(e.created),e.completed&&(e.completed=new Date(e.completed));return s}))}delete(e){return this.fetchJson(`/v2/transcript/${e}`,{method:"DELETE"})}wordSearch(e,t){const s=new URLSearchParams({words:t.join(",")});return this.fetchJson(`/v2/transcript/${e}/word-search?${s.toString()}`)}sentences(e){return this.fetchJson(`/v2/transcript/${e}/sentences`)}paragraphs(e){return this.fetchJson(`/v2/transcript/${e}/paragraphs`)}subtitles(e){return s(this,arguments,void 0,(function*(e,t="srt",s){let i=`/v2/transcript/${e}/${t}`;if(s){const e=new URLSearchParams;e.set("chars_per_caption",s.toString()),i+=`?${e.toString()}`}const n=yield this.fetch(i);return yield n.text()}))}redactions(e){return this.redactedAudio(e)}redactedAudio(e){return this.fetchJson(`/v2/transcript/${e}/redacted-audio`)}redactedAudioFile(e){return s(this,void 0,void 0,(function*(){const{redacted_audio_url:t,status:s}=yield this.redactedAudio(e);if("redacted_audio_ready"!==s)throw new Error(`Redacted audio status is ${s}`);const i=yield fetch(t);if(!i.ok)throw new Error(`Failed to fetch redacted audio: ${i.statusText}`);return{arrayBuffer:i.arrayBuffer.bind(i),blob:i.blob.bind(i),body:i.body,bodyUsed:i.bodyUsed}}))}}class k extends o{upload(e){return s(this,void 0,void 0,(function*(){let t;t="string"==typeof e?e.startsWith("data:")?function(e){const t=e.split(","),s=t[0].match(/:(.*?);/)[1],i=atob(t[1]);let n=i.length;const r=new Uint8Array(n);for(;n--;)r[n]=i.charCodeAt(n);return new Blob([r],{type:s})}(e):yield function(e){return s(this,void 0,void 0,(function*(){throw new Error("Interacting with the file system is not supported in this environment.")}))}():e;return(yield this.fetchJson("/v2/upload",{method:"POST",body:t,headers:{"Content-Type":"application/octet-stream"},duplex:"half"})).upload_url}))}}const _='{"type":"Terminate"}';class T{constructor(e){if(this.listeners={},this.params=Object.assign(Object.assign({},e),{websocketBaseUrl:e.websocketBaseUrl||"wss://streaming.assemblyai.com/v3/ws"}),"token"in e&&e.token&&(this.token=e.token),"apiKey"in e&&e.apiKey&&(this.apiKey=e.apiKey),!this.token&&!this.apiKey)throw new Error("API key or temporary token is required.")}connectionUrl(){var e,t;const s=new URL(null!==(e=this.params.websocketBaseUrl)&&void 0!==e?e:"");if("wss:"!==s.protocol)throw new Error("Invalid protocol, must be wss");const i=new URLSearchParams;this.token&&i.set("token",this.token),i.set("sample_rate",this.params.sampleRate.toString()),this.params.endOfTurnConfidenceThreshold&&i.set("end_of_turn_confidence_threshold",this.params.endOfTurnConfidenceThreshold.toString()),void 0!==this.params.minEndOfTurnSilenceWhenConfident&&(void 0!==this.params.minTurnSilence?console.warn("[Deprecation Warning] Both `minEndOfTurnSilenceWhenConfident` and `minTurnSilence` are set. Using `minTurnSilence`; `minEndOfTurnSilenceWhenConfident` is deprecated."):console.warn("[Deprecation Warning] `minEndOfTurnSilenceWhenConfident` is deprecated and will be removed in a future release. Please use `minTurnSilence` instead."));const n=null!==(t=this.params.minTurnSilence)&&void 0!==t?t:this.params.minEndOfTurnSilenceWhenConfident;return void 0!==n&&i.set("min_turn_silence",n.toString()),this.params.maxTurnSilence&&i.set("max_turn_silence",this.params.maxTurnSilence.toString()),void 0!==this.params.vadThreshold&&i.set("vad_threshold",this.params.vadThreshold.toString()),this.params.formatTurns&&i.set("format_turns",this.params.formatTurns.toString()),this.params.encoding&&i.set("encoding",this.params.encoding.toString()),this.params.keytermsPrompt?i.set("keyterms_prompt",JSON.stringify(this.params.keytermsPrompt)):this.params.keyterms&&(console.warn("[Deprecation Warning] `keyterms` is deprecated and will be removed in a future release. Please use `keytermsPrompt` instead."),i.set("keyterms_prompt",JSON.stringify(this.params.keyterms))),this.params.prompt&&i.set("prompt",this.params.prompt),this.params.filterProfanity&&i.set("filter_profanity",this.params.filterProfanity.toString()),"u3-pro"===this.params.speechModel&&console.warn("[Deprecation Warning] The speech model `u3-pro` is deprecated and will be removed in a future release. Please use `u3-rt-pro` instead."),i.set("speech_model",this.params.speechModel.toString()),void 0!==this.params.languageDetection&&i.set("language_detection",this.params.languageDetection.toString()),this.params.domain&&i.set("domain",this.params.domain),void 0!==this.params.inactivityTimeout&&i.set("inactivity_timeout",this.params.inactivityTimeout.toString()),void 0!==this.params.speakerLabels&&i.set("speaker_labels",this.params.speakerLabels.toString()),void 0!==this.params.maxSpeakers&&i.set("max_speakers",this.params.maxSpeakers.toString()),this.params.voiceFocus&&i.set("voice_focus",this.params.voiceFocus),void 0!==this.params.voiceFocusThreshold&&i.set("voice_focus_threshold",this.params.voiceFocusThreshold.toString()),void 0!==this.params.continuousPartials&&i.set("continuous_partials",this.params.continuousPartials.toString()),this.params.customerSupportAudioCapture&&(console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support."),i.set("customer_support_audio_capture",this.params.customerSupportAudioCapture.toString())),this.params.webhookUrl&&i.set("webhook_url",this.params.webhookUrl),this.params.webhookAuthHeaderName&&i.set("webhook_auth_header_name",this.params.webhookAuthHeaderName),this.params.webhookAuthHeaderValue&&i.set("webhook_auth_header_value",this.params.webhookAuthHeaderValue),void 0!==this.params.includePartialTurns&&i.set("include_partial_turns",this.params.includePartialTurns.toString()),void 0!==this.params.redactPii&&i.set("redact_pii",this.params.redactPii.toString()),void 0!==this.params.redactPiiPolicies&&i.set("redact_pii_policies",JSON.stringify(this.params.redactPiiPolicies)),void 0!==this.params.redactPiiSub&&i.set("redact_pii_sub",this.params.redactPiiSub),void 0!==this.params.llmGateway&&i.set("llm_gateway",JSON.stringify(this.params.llmGateway)),s.search=i.toString(),s}on(e,t){this.listeners[e]=t}connect(){return new Promise((e=>{if(this.socket)throw new Error("Already connected");const t=this.connectionUrl();this.token?this.socket=u(t.toString()):(console.warn("API key authentication is not supported for the StreamingTranscriber in browser environment. Use temporary token authentication instead.\nLearn more at https://github.com/AssemblyAI/assemblyai-node-sdk/blob/main/docs/compat.md#browser-compatibility."),this.socket=u(t.toString(),{headers:{Authorization:this.apiKey}})),this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{},this.socket.onclose=({code:e,reason:t})=>{var s,i;t||e in f&&(t=f[e]),null===(i=(s=this.listeners).close)||void 0===i||i.call(s,e,t)},this.socket.onerror=e=>{var t,s,i,n;e.error?null===(s=(t=this.listeners).error)||void 0===s||s.call(t,e.error):null===(n=(i=this.listeners).error)||void 0===n||n.call(i,new Error(e.message))},this.socket.onmessage=({data:t})=>{var s,i,n,r,o,a,c,l,d,h,u,p,m;const f=JSON.parse(t.toString());if("error"in f){const e=new v(f.error);return"error_code"in f&&(e.code=f.error_code),void(null===(i=(s=this.listeners).error)||void 0===i||i.call(s,e))}switch(f.type){case"Begin":e(f),null===(r=(n=this.listeners).open)||void 0===r||r.call(n,f);break;case"Turn":null===(a=(o=this.listeners).turn)||void 0===a||a.call(o,f);break;case"SpeechStarted":null===(l=(c=this.listeners).speechStarted)||void 0===l||l.call(c,f);break;case"LLMGatewayResponse":null===(h=(d=this.listeners).llmGatewayResponse)||void 0===h||h.call(d,f);break;case"Warning":{const e=f;console.warn(`Streaming warning (code=${e.warning_code}): ${e.warning}`),null===(p=(u=this.listeners).warning)||void 0===p||p.call(u,e);break}case"Termination":null===(m=this.sessionTerminatedResolve)||void 0===m||m.call(this)}}}))}stream(){return new c({write:e=>{this.sendAudio(e)}})}sendAudio(e){this.send(e)}updateConfiguration(e){const{min_end_of_turn_silence_when_confident:s,min_turn_silence:i}=e,n=t(e,["min_end_of_turn_silence_when_confident","min_turn_silence"]);void 0!==s&&(void 0!==i?console.warn("[Deprecation Warning] Both `min_end_of_turn_silence_when_confident` and `min_turn_silence` are set. Using `min_turn_silence`; `min_end_of_turn_silence_when_confident` is deprecated."):console.warn("[Deprecation Warning] `min_end_of_turn_silence_when_confident` is deprecated and will be removed in a future release. Please use `min_turn_silence` instead."));const r=null!=i?i:s,o=Object.assign(Object.assign({type:"UpdateConfiguration"},n),void 0!==r?{min_turn_silence:r}:{});this.send(JSON.stringify(o))}forceEndpoint(){this.send(JSON.stringify({type:"ForceEndpoint"}))}send(e){if(!this.socket||this.socket.readyState!==this.socket.OPEN)throw new Error("Socket is not open for communication");this.socket.send(e)}close(){return s(this,arguments,void 0,(function*(e=!0){var t;if(this.socket){if(this.socket.readyState===this.socket.OPEN)if(e){const e=new Promise((e=>{this.sessionTerminatedResolve=e}));this.socket.send(_),yield e}else this.socket.send(_);(null===(t=this.socket)||void 0===t?void 0:t.removeAllListeners)&&this.socket.removeAllListeners(),this.socket.close()}this.listeners={},this.socket=void 0}))}}class O extends o{constructor(e){super(e),this.baseServiceParams=e}transcriber(e){const t=Object.assign({},e);return t.token||t.apiKey||(t.apiKey=this.baseServiceParams.apiKey),new T(t)}createTemporaryToken(e){return s(this,void 0,void 0,(function*(){const t=new URLSearchParams;Object.entries(e).forEach((([e,s])=>{null!=s&&t.append(e,String(s))}));const s=t.toString(),i=s?`/v3/token?${s}`:"/v3/token";return(yield this.fetchJson(i,{method:"GET"})).token}))}}e.AssemblyAI=class{constructor(e){e.baseUrl=e.baseUrl||"https://api.assemblyai.com",e.baseUrl&&e.baseUrl.endsWith("/")&&(e.baseUrl=e.baseUrl.slice(0,-1)),this.files=new k(e),this.transcripts=new S(e,this.files),this.lemur=new a(e),this.realtime=new b(e),this.streaming=new O(Object.assign(Object.assign({},e),{baseUrl:e.streamingBaseUrl||"https://streaming.assemblyai.com"}))}},e.FileService=k,e.LemurService=a,e.RealtimeService=class extends g{},e.RealtimeServiceFactory=class extends b{},e.RealtimeTranscriber=g,e.RealtimeTranscriberFactory=b,e.StreamingTranscriber=T,e.TranscriptService=S}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).assemblyai={})}(this,(function(e){"use strict";function t(e,t){var s={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(s[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(s[i[n]]=e[i[n]])}return s}function s(e,t,s,i){return new(s||(s=Promise))((function(n,r){function o(e){try{c(i.next(e))}catch(e){r(e)}}function a(e){try{c(i.throw(e))}catch(e){r(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,a)}c((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const i={cache:"no-store"};let n="";"undefined"!=typeof navigator&&navigator.userAgent&&(n+=navigator.userAgent);const r={sdk:{name:"JavaScript",version:"4.33.1"}};"undefined"!=typeof process&&(process.versions.node&&-1===n.indexOf("Node")&&(r.runtime_env={name:"Node",version:process.versions.node}),process.versions.bun&&-1===n.indexOf("Bun")&&(r.runtime_env={name:"Bun",version:process.versions.bun})),"undefined"!=typeof Deno&&process.versions.bun&&-1===n.indexOf("Deno")&&(r.runtime_env={name:"Deno",version:Deno.version.deno});class o{constructor(e){var t;this.params=e,!1===e.userAgent?this.userAgent=void 0:this.userAgent=(t=e.userAgent||{},n+(!1===t?"":" AssemblyAI/1.0 ("+Object.entries(Object.assign(Object.assign({},r),t)).map((([e,t])=>t?`${e}=${t.name}/${t.version}`:"")).join(" ")+")"))}fetch(e,t){return s(this,void 0,void 0,(function*(){t=Object.assign(Object.assign({},i),t);let s={Authorization:this.params.apiKey,"Content-Type":"application/json"};(null==i?void 0:i.headers)&&(s=Object.assign(Object.assign({},s),i.headers)),(null==t?void 0:t.headers)&&(s=Object.assign(Object.assign({},s),t.headers)),this.userAgent&&(s["User-Agent"]=this.userAgent,"undefined"!=typeof window&&"chrome"in window&&(s["AssemblyAI-Agent"]=this.userAgent)),t.headers=s,e.startsWith("http")||(e=this.params.baseUrl+e);const n=yield fetch(e,t);if(n.status>=400){let e;const t=yield n.text();if(t){try{e=JSON.parse(t)}catch(e){}if(null==e?void 0:e.error)throw new Error(e.error);throw new Error(t)}throw new Error(`HTTP Error: ${n.status} ${n.statusText}`)}return n}))}fetchJson(e,t){return s(this,void 0,void 0,(function*(){return(yield this.fetch(e,t)).json()}))}}class a extends o{summary(e,t){return this.fetchJson("/lemur/v3/generate/summary",{method:"POST",body:JSON.stringify(e),signal:t})}questionAnswer(e,t){return this.fetchJson("/lemur/v3/generate/question-answer",{method:"POST",body:JSON.stringify(e),signal:t})}actionItems(e,t){return this.fetchJson("/lemur/v3/generate/action-items",{method:"POST",body:JSON.stringify(e),signal:t})}task(e,t){return this.fetchJson("/lemur/v3/generate/task",{method:"POST",body:JSON.stringify(e),signal:t})}getResponse(e,t){return this.fetchJson(`/lemur/v3/${e}`,{signal:t})}purgeRequestData(e,t){return this.fetchJson(`/lemur/v3/${e}`,{method:"DELETE",signal:t})}}const{WritableStream:c}="undefined"!=typeof window?window:"undefined"!=typeof global?global:globalThis;var l,d;const h=null!==(d=null!==(l=null!==WebSocket&&void 0!==WebSocket?WebSocket:null===global||void 0===global?void 0:global.WebSocket)&&void 0!==l?l:null===window||void 0===window?void 0:window.WebSocket)&&void 0!==d?d:null===self||void 0===self?void 0:self.WebSocket,u=(e,t)=>t?new h(e,t):new h(e),p={[4e3]:"Sample rate must be a positive integer",[4001]:"Not Authorized",[4002]:"Insufficient funds",[4003]:"This feature is paid-only and requires you to add a credit card. Please visit https://app.assemblyai.com/ to add a credit card to your account.",[4004]:"Session ID does not exist",[4008]:"Session has expired",[4010]:"Session is closed",[4029]:"Rate limited",[4030]:"Unique session violation",[4031]:"Session Timeout",[4032]:"Audio too short",[4033]:"Audio too long",[4034]:"Audio too small to transcode",[4100]:"Bad JSON",[4101]:"Bad schema",[4102]:"Too many streams",[4103]:"This session has been reconnected. This WebSocket is no longer valid.",[1013]:"Reconnect attempts exhausted",[4104]:"Could not parse word boost parameter"};class m extends Error{}const f={[3005]:"Server error",[3006]:"Input validation error",[3007]:"Audio chunk duration violation",[3008]:"Session expired: maximum session duration exceeded",[3009]:"Too many concurrent sessions",[4e3]:"Sample rate must be a positive integer",[4001]:"Not Authorized",[4002]:"Insufficient funds",[4003]:"This feature is paid-only and requires you to add a credit card. Please visit https://app.assemblyai.com/ to add a credit card to your account.",[4004]:"Session ID does not exist",[4008]:"Session has expired",[4010]:"Session is closed",[4029]:"Rate limited",[4030]:"Unique session violation",[4031]:"Session Timeout",[4032]:"Audio too short",[4033]:"Audio too long",[4034]:"Audio too small to transcode",[4101]:"Bad schema",[4102]:"Too many streams",[4103]:"This session has been reconnected. This WebSocket is no longer valid."};class v extends Error{}const y='{"terminate_session":true}';class g{constructor(e){var t,s;if(this.listeners={},this.realtimeUrl=null!==(t=e.realtimeUrl)&&void 0!==t?t:"wss://api.assemblyai.com/v2/realtime/ws",this.sampleRate=null!==(s=e.sampleRate)&&void 0!==s?s:16e3,this.wordBoost=e.wordBoost,this.encoding=e.encoding,this.endUtteranceSilenceThreshold=e.endUtteranceSilenceThreshold,this.disablePartialTranscripts=e.disablePartialTranscripts,"token"in e&&e.token&&(this.token=e.token),"apiKey"in e&&e.apiKey&&(this.apiKey=e.apiKey),!this.token&&!this.apiKey)throw new Error("API key or temporary token is required.")}connectionUrl(){const e=new URL(this.realtimeUrl);if("wss:"!==e.protocol)throw new Error("Invalid protocol, must be wss");const t=new URLSearchParams;return this.token&&t.set("token",this.token),t.set("sample_rate",this.sampleRate.toString()),this.wordBoost&&this.wordBoost.length>0&&t.set("word_boost",JSON.stringify(this.wordBoost)),this.encoding&&t.set("encoding",this.encoding),t.set("enable_extra_session_information","true"),this.disablePartialTranscripts&&t.set("disable_partial_transcripts",this.disablePartialTranscripts.toString()),e.search=t.toString(),e}on(e,t){this.listeners[e]=t}connect(){return new Promise((e=>{if(this.socket)throw new Error("Already connected");const t=this.connectionUrl();this.token?this.socket=u(t.toString()):(console.warn("API key authentication is not supported for the RealtimeTranscriber in browser environment. Use temporary token authentication instead.\nLearn more at https://github.com/AssemblyAI/assemblyai-node-sdk/blob/main/docs/compat.md#browser-compatibility."),this.socket=u(t.toString(),{headers:{Authorization:this.apiKey}})),this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{void 0!==this.endUtteranceSilenceThreshold&&null!==this.endUtteranceSilenceThreshold&&this.configureEndUtteranceSilenceThreshold(this.endUtteranceSilenceThreshold)},this.socket.onclose=({code:e,reason:t})=>{var s,i;t||e in p&&(t=p[e]),null===(i=(s=this.listeners).close)||void 0===i||i.call(s,e,t)},this.socket.onerror=e=>{var t,s,i,n;e.error?null===(s=(t=this.listeners).error)||void 0===s||s.call(t,e.error):null===(n=(i=this.listeners).error)||void 0===n||n.call(i,new Error(e.message))},this.socket.onmessage=({data:t})=>{var s,i,n,r,o,a,c,l,d,h,u,p,f,v,y;const g=JSON.parse(t.toString());if("error"in g)null===(i=(s=this.listeners).error)||void 0===i||i.call(s,new m(g.error));else switch(g.message_type){case"SessionBegins":{const t={sessionId:g.session_id,expiresAt:new Date(g.expires_at)};e(t),null===(r=(n=this.listeners).open)||void 0===r||r.call(n,t);break}case"PartialTranscript":g.created=new Date(g.created),null===(a=(o=this.listeners).transcript)||void 0===a||a.call(o,g),null===(l=(c=this.listeners)["transcript.partial"])||void 0===l||l.call(c,g);break;case"FinalTranscript":g.created=new Date(g.created),null===(h=(d=this.listeners).transcript)||void 0===h||h.call(d,g),null===(p=(u=this.listeners)["transcript.final"])||void 0===p||p.call(u,g);break;case"SessionInformation":null===(v=(f=this.listeners).session_information)||void 0===v||v.call(f,g);break;case"SessionTerminated":null===(y=this.sessionTerminatedResolve)||void 0===y||y.call(this)}}}))}sendAudio(e){this.send(e)}stream(){return new c({write:e=>{this.sendAudio(e)}})}forceEndUtterance(){this.send('{"force_end_utterance":true}')}configureEndUtteranceSilenceThreshold(e){this.send(`{"end_utterance_silence_threshold":${e}}`)}send(e){if(!this.socket||this.socket.readyState!==this.socket.OPEN)throw new Error("Socket is not open for communication");this.socket.send(e)}close(){return s(this,arguments,void 0,(function*(e=!0){var t;if(this.socket){if(this.socket.readyState===this.socket.OPEN)if(e){const e=new Promise((e=>{this.sessionTerminatedResolve=e}));this.socket.send(y),yield e}else this.socket.send(y);(null===(t=this.socket)||void 0===t?void 0:t.removeAllListeners)&&this.socket.removeAllListeners(),this.socket.close()}this.listeners={},this.socket=void 0}))}}class b extends o{constructor(e){super(e),this.rtFactoryParams=e}createService(e){return this.transcriber(e)}transcriber(e){const t=Object.assign({},e);return t.token||t.apiKey||(t.apiKey=this.rtFactoryParams.apiKey),new g(t)}createTemporaryToken(e){return s(this,void 0,void 0,(function*(){return(yield this.fetchJson("/v2/realtime/token",{method:"POST",body:JSON.stringify(e)})).token}))}}function w(e){return e.startsWith("http")||e.startsWith("https")||e.startsWith("data:")?null:e.startsWith("file://")?e.substring(7):e.startsWith("file:")?e.substring(5):e}class S extends o{constructor(e,t){super(e),this.files=t}transcribe(e,t){return s(this,void 0,void 0,(function*(){const s=yield this.submit(e);return yield this.waitUntilReady(s.id,t)}))}submit(e){return s(this,void 0,void 0,(function*(){let s,i;if("audio"in e){const{audio:n}=e,r=t(e,["audio"]);if("string"==typeof n){const e=w(n);s=null!==e?yield this.files.upload(e):n.startsWith("data:")?yield this.files.upload(n):n}else s=yield this.files.upload(n);i=Object.assign(Object.assign({},r),{audio_url:s})}else i=e;return yield this.fetchJson("/v2/transcript",{method:"POST",body:JSON.stringify(i)})}))}create(e,t){return s(this,void 0,void 0,(function*(){var s;const i=w(e.audio_url);if(null!==i){const t=yield this.files.upload(i);e.audio_url=t}const n=yield this.fetchJson("/v2/transcript",{method:"POST",body:JSON.stringify(e)});return null===(s=null==t?void 0:t.poll)||void 0===s||s?yield this.waitUntilReady(n.id,t):n}))}waitUntilReady(e,t){return s(this,void 0,void 0,(function*(){var s,i;const n=null!==(s=null==t?void 0:t.pollingInterval)&&void 0!==s?s:3e3,r=null!==(i=null==t?void 0:t.pollingTimeout)&&void 0!==i?i:-1,o=Date.now();for(;;){const t=yield this.get(e);if("completed"===t.status||"error"===t.status)return t;if(r>0&&Date.now()-o>r)throw new Error("Polling timeout");yield new Promise((e=>setTimeout(e,n)))}}))}get(e){return this.fetchJson(`/v2/transcript/${e}`)}list(e){return s(this,void 0,void 0,(function*(){let t="/v2/transcript";"string"==typeof e?t=e:e&&(t=`${t}?${new URLSearchParams(Object.keys(e).map((t=>{var s;return[t,(null===(s=e[t])||void 0===s?void 0:s.toString())||""]})))}`);const s=yield this.fetchJson(t);for(const e of s.transcripts)e.created=new Date(e.created),e.completed&&(e.completed=new Date(e.completed));return s}))}delete(e){return this.fetchJson(`/v2/transcript/${e}`,{method:"DELETE"})}wordSearch(e,t){const s=new URLSearchParams({words:t.join(",")});return this.fetchJson(`/v2/transcript/${e}/word-search?${s.toString()}`)}sentences(e){return this.fetchJson(`/v2/transcript/${e}/sentences`)}paragraphs(e){return this.fetchJson(`/v2/transcript/${e}/paragraphs`)}subtitles(e){return s(this,arguments,void 0,(function*(e,t="srt",s){let i=`/v2/transcript/${e}/${t}`;if(s){const e=new URLSearchParams;e.set("chars_per_caption",s.toString()),i+=`?${e.toString()}`}const n=yield this.fetch(i);return yield n.text()}))}redactions(e){return this.redactedAudio(e)}redactedAudio(e){return this.fetchJson(`/v2/transcript/${e}/redacted-audio`)}redactedAudioFile(e){return s(this,void 0,void 0,(function*(){const{redacted_audio_url:t,status:s}=yield this.redactedAudio(e);if("redacted_audio_ready"!==s)throw new Error(`Redacted audio status is ${s}`);const i=yield fetch(t);if(!i.ok)throw new Error(`Failed to fetch redacted audio: ${i.statusText}`);return{arrayBuffer:i.arrayBuffer.bind(i),blob:i.blob.bind(i),body:i.body,bodyUsed:i.bodyUsed}}))}}class k extends o{upload(e){return s(this,void 0,void 0,(function*(){let t;t="string"==typeof e?e.startsWith("data:")?function(e){const t=e.split(","),s=t[0].match(/:(.*?);/)[1],i=atob(t[1]);let n=i.length;const r=new Uint8Array(n);for(;n--;)r[n]=i.charCodeAt(n);return new Blob([r],{type:s})}(e):yield function(e){return s(this,void 0,void 0,(function*(){throw new Error("Interacting with the file system is not supported in this environment.")}))}():e;return(yield this.fetchJson("/v2/upload",{method:"POST",body:t,headers:{"Content-Type":"application/octet-stream"},duplex:"half"})).upload_url}))}}const _='{"type":"Terminate"}';class T{constructor(e){if(this.listeners={},this.params=Object.assign(Object.assign({},e),{websocketBaseUrl:e.websocketBaseUrl||"wss://streaming.assemblyai.com/v3/ws"}),"token"in e&&e.token&&(this.token=e.token),"apiKey"in e&&e.apiKey&&(this.apiKey=e.apiKey),!this.token&&!this.apiKey)throw new Error("API key or temporary token is required.")}connectionUrl(){var e,t;const s=new URL(null!==(e=this.params.websocketBaseUrl)&&void 0!==e?e:"");if("wss:"!==s.protocol)throw new Error("Invalid protocol, must be wss");const i=new URLSearchParams;this.token&&i.set("token",this.token),i.set("sample_rate",this.params.sampleRate.toString()),this.params.endOfTurnConfidenceThreshold&&i.set("end_of_turn_confidence_threshold",this.params.endOfTurnConfidenceThreshold.toString()),void 0!==this.params.minEndOfTurnSilenceWhenConfident&&(void 0!==this.params.minTurnSilence?console.warn("[Deprecation Warning] Both `minEndOfTurnSilenceWhenConfident` and `minTurnSilence` are set. Using `minTurnSilence`; `minEndOfTurnSilenceWhenConfident` is deprecated."):console.warn("[Deprecation Warning] `minEndOfTurnSilenceWhenConfident` is deprecated and will be removed in a future release. Please use `minTurnSilence` instead."));const n=null!==(t=this.params.minTurnSilence)&&void 0!==t?t:this.params.minEndOfTurnSilenceWhenConfident;return void 0!==n&&i.set("min_turn_silence",n.toString()),this.params.maxTurnSilence&&i.set("max_turn_silence",this.params.maxTurnSilence.toString()),void 0!==this.params.vadThreshold&&i.set("vad_threshold",this.params.vadThreshold.toString()),this.params.formatTurns&&i.set("format_turns",this.params.formatTurns.toString()),this.params.encoding&&i.set("encoding",this.params.encoding.toString()),this.params.keytermsPrompt?i.set("keyterms_prompt",JSON.stringify(this.params.keytermsPrompt)):this.params.keyterms&&(console.warn("[Deprecation Warning] `keyterms` is deprecated and will be removed in a future release. Please use `keytermsPrompt` instead."),i.set("keyterms_prompt",JSON.stringify(this.params.keyterms))),this.params.prompt&&i.set("prompt",this.params.prompt),this.params.filterProfanity&&i.set("filter_profanity",this.params.filterProfanity.toString()),"u3-pro"===this.params.speechModel&&console.warn("[Deprecation Warning] The speech model `u3-pro` is deprecated and will be removed in a future release. Please use `u3-rt-pro` instead."),i.set("speech_model",this.params.speechModel.toString()),void 0!==this.params.languageDetection&&i.set("language_detection",this.params.languageDetection.toString()),this.params.domain&&i.set("domain",this.params.domain),void 0!==this.params.inactivityTimeout&&i.set("inactivity_timeout",this.params.inactivityTimeout.toString()),void 0!==this.params.speakerLabels&&i.set("speaker_labels",this.params.speakerLabels.toString()),void 0!==this.params.maxSpeakers&&i.set("max_speakers",this.params.maxSpeakers.toString()),this.params.voiceFocus&&i.set("voice_focus",this.params.voiceFocus),void 0!==this.params.voiceFocusThreshold&&i.set("voice_focus_threshold",this.params.voiceFocusThreshold.toString()),void 0!==this.params.continuousPartials&&i.set("continuous_partials",this.params.continuousPartials.toString()),void 0!==this.params.interruptionDelay&&i.set("interruption_delay",this.params.interruptionDelay.toString()),this.params.customerSupportAudioCapture&&(console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support."),i.set("_customer_support_audio_capture",this.params.customerSupportAudioCapture.toString())),this.params.webhookUrl&&i.set("webhook_url",this.params.webhookUrl),this.params.webhookAuthHeaderName&&i.set("webhook_auth_header_name",this.params.webhookAuthHeaderName),this.params.webhookAuthHeaderValue&&i.set("webhook_auth_header_value",this.params.webhookAuthHeaderValue),void 0!==this.params.includePartialTurns&&i.set("include_partial_turns",this.params.includePartialTurns.toString()),void 0!==this.params.redactPii&&i.set("redact_pii",this.params.redactPii.toString()),void 0!==this.params.redactPiiPolicies&&i.set("redact_pii_policies",JSON.stringify(this.params.redactPiiPolicies)),void 0!==this.params.redactPiiSub&&i.set("redact_pii_sub",this.params.redactPiiSub),void 0!==this.params.llmGateway&&i.set("llm_gateway",JSON.stringify(this.params.llmGateway)),s.search=i.toString(),s}on(e,t){this.listeners[e]=t}connect(){return new Promise((e=>{if(this.socket)throw new Error("Already connected");const t=this.connectionUrl();this.token?this.socket=u(t.toString()):(console.warn("API key authentication is not supported for the StreamingTranscriber in browser environment. Use temporary token authentication instead.\nLearn more at https://github.com/AssemblyAI/assemblyai-node-sdk/blob/main/docs/compat.md#browser-compatibility."),this.socket=u(t.toString(),{headers:{Authorization:this.apiKey}})),this.socket.binaryType="arraybuffer",this.socket.onopen=()=>{},this.socket.onclose=({code:e,reason:t})=>{var s,i;t||e in f&&(t=f[e]),null===(i=(s=this.listeners).close)||void 0===i||i.call(s,e,t)},this.socket.onerror=e=>{var t,s,i,n;e.error?null===(s=(t=this.listeners).error)||void 0===s||s.call(t,e.error):null===(n=(i=this.listeners).error)||void 0===n||n.call(i,new Error(e.message))},this.socket.onmessage=({data:t})=>{var s,i,n,r,o,a,c,l,d,h,u,p,m;const f=JSON.parse(t.toString());if("error"in f){const e=new v(f.error);return"error_code"in f&&(e.code=f.error_code),void(null===(i=(s=this.listeners).error)||void 0===i||i.call(s,e))}switch(f.type){case"Begin":e(f),null===(r=(n=this.listeners).open)||void 0===r||r.call(n,f);break;case"Turn":null===(a=(o=this.listeners).turn)||void 0===a||a.call(o,f);break;case"SpeechStarted":null===(l=(c=this.listeners).speechStarted)||void 0===l||l.call(c,f);break;case"LLMGatewayResponse":null===(h=(d=this.listeners).llmGatewayResponse)||void 0===h||h.call(d,f);break;case"Warning":{const e=f;console.warn(`Streaming warning (code=${e.warning_code}): ${e.warning}`),null===(p=(u=this.listeners).warning)||void 0===p||p.call(u,e);break}case"Termination":null===(m=this.sessionTerminatedResolve)||void 0===m||m.call(this)}}}))}stream(){return new c({write:e=>{this.sendAudio(e)}})}sendAudio(e){this.send(e)}updateConfiguration(e){const{min_end_of_turn_silence_when_confident:s,min_turn_silence:i}=e,n=t(e,["min_end_of_turn_silence_when_confident","min_turn_silence"]);void 0!==s&&(void 0!==i?console.warn("[Deprecation Warning] Both `min_end_of_turn_silence_when_confident` and `min_turn_silence` are set. Using `min_turn_silence`; `min_end_of_turn_silence_when_confident` is deprecated."):console.warn("[Deprecation Warning] `min_end_of_turn_silence_when_confident` is deprecated and will be removed in a future release. Please use `min_turn_silence` instead."));const r=null!=i?i:s,o=Object.assign(Object.assign({type:"UpdateConfiguration"},n),void 0!==r?{min_turn_silence:r}:{});this.send(JSON.stringify(o))}forceEndpoint(){this.send(JSON.stringify({type:"ForceEndpoint"}))}send(e){if(!this.socket||this.socket.readyState!==this.socket.OPEN)throw new Error("Socket is not open for communication");this.socket.send(e)}close(){return s(this,arguments,void 0,(function*(e=!0){var t;if(this.socket){if(this.socket.readyState===this.socket.OPEN)if(e){const e=new Promise((e=>{this.sessionTerminatedResolve=e}));this.socket.send(_),yield e}else this.socket.send(_);(null===(t=this.socket)||void 0===t?void 0:t.removeAllListeners)&&this.socket.removeAllListeners(),this.socket.close()}this.listeners={},this.socket=void 0}))}}class O extends o{constructor(e){super(e),this.baseServiceParams=e}transcriber(e){const t=Object.assign({},e);return t.token||t.apiKey||(t.apiKey=this.baseServiceParams.apiKey),new T(t)}createTemporaryToken(e){return s(this,void 0,void 0,(function*(){const t=new URLSearchParams;Object.entries(e).forEach((([e,s])=>{null!=s&&t.append(e,String(s))}));const s=t.toString(),i=s?`/v3/token?${s}`:"/v3/token";return(yield this.fetchJson(i,{method:"GET"})).token}))}}e.AssemblyAI=class{constructor(e){e.baseUrl=e.baseUrl||"https://api.assemblyai.com",e.baseUrl&&e.baseUrl.endsWith("/")&&(e.baseUrl=e.baseUrl.slice(0,-1)),this.files=new k(e),this.transcripts=new S(e,this.files),this.lemur=new a(e),this.realtime=new b(e),this.streaming=new O(Object.assign(Object.assign({},e),{baseUrl:e.streamingBaseUrl||"https://streaming.assemblyai.com"}))}},e.FileService=k,e.LemurService=a,e.RealtimeService=class extends g{},e.RealtimeServiceFactory=class extends b{},e.RealtimeTranscriber=g,e.RealtimeTranscriberFactory=b,e.StreamingTranscriber=T,e.TranscriptService=S}));
package/dist/browser.mjs CHANGED
@@ -15,7 +15,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
15
15
  defaultUserAgentString += navigator.userAgent;
16
16
  }
17
17
  const defaultUserAgent = {
18
- sdk: { name: "JavaScript", version: "4.33.0" },
18
+ sdk: { name: "JavaScript", version: "4.33.1" },
19
19
  };
20
20
  if (typeof process !== "undefined") {
21
21
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -897,9 +897,17 @@ class StreamingTranscriber {
897
897
  if (this.params.continuousPartials !== undefined) {
898
898
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
899
899
  }
900
+ if (this.params.interruptionDelay !== undefined) {
901
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
902
+ }
900
903
  if (this.params.customerSupportAudioCapture) {
901
904
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
902
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
905
+ // The server's canonical wire name is `_customer_support_audio_capture`
906
+ // (leading underscore = "not officially supported / unstable"). The
907
+ // server also accepts `customer_support_audio_capture` via
908
+ // `populate_by_name=True`, but we send the underscore form to honor
909
+ // the server's stability marker.
910
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
903
911
  }
904
912
  if (this.params.webhookUrl) {
905
913
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/bun.mjs CHANGED
@@ -17,7 +17,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
17
17
  defaultUserAgentString += navigator.userAgent;
18
18
  }
19
19
  const defaultUserAgent = {
20
- sdk: { name: "JavaScript", version: "4.33.0" },
20
+ sdk: { name: "JavaScript", version: "4.33.1" },
21
21
  };
22
22
  if (typeof process !== "undefined") {
23
23
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -878,9 +878,17 @@ class StreamingTranscriber {
878
878
  if (this.params.continuousPartials !== undefined) {
879
879
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
880
880
  }
881
+ if (this.params.interruptionDelay !== undefined) {
882
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
883
+ }
881
884
  if (this.params.customerSupportAudioCapture) {
882
885
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
883
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
886
+ // The server's canonical wire name is `_customer_support_audio_capture`
887
+ // (leading underscore = "not officially supported / unstable"). The
888
+ // server also accepts `customer_support_audio_capture` via
889
+ // `populate_by_name=True`, but we send the underscore form to honor
890
+ // the server's stability marker.
891
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
884
892
  }
885
893
  if (this.params.webhookUrl) {
886
894
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/deno.mjs CHANGED
@@ -17,7 +17,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
17
17
  defaultUserAgentString += navigator.userAgent;
18
18
  }
19
19
  const defaultUserAgent = {
20
- sdk: { name: "JavaScript", version: "4.33.0" },
20
+ sdk: { name: "JavaScript", version: "4.33.1" },
21
21
  };
22
22
  if (typeof process !== "undefined") {
23
23
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -878,9 +878,17 @@ class StreamingTranscriber {
878
878
  if (this.params.continuousPartials !== undefined) {
879
879
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
880
880
  }
881
+ if (this.params.interruptionDelay !== undefined) {
882
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
883
+ }
881
884
  if (this.params.customerSupportAudioCapture) {
882
885
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
883
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
886
+ // The server's canonical wire name is `_customer_support_audio_capture`
887
+ // (leading underscore = "not officially supported / unstable"). The
888
+ // server also accepts `customer_support_audio_capture` via
889
+ // `populate_by_name=True`, but we send the underscore form to honor
890
+ // the server's stability marker.
891
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
884
892
  }
885
893
  if (this.params.webhookUrl) {
886
894
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/index.cjs CHANGED
@@ -63,7 +63,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
63
63
  defaultUserAgentString += navigator.userAgent;
64
64
  }
65
65
  const defaultUserAgent = {
66
- sdk: { name: "JavaScript", version: "4.33.0" },
66
+ sdk: { name: "JavaScript", version: "4.33.1" },
67
67
  };
68
68
  if (typeof process !== "undefined") {
69
69
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -968,9 +968,17 @@ class StreamingTranscriber {
968
968
  if (this.params.continuousPartials !== undefined) {
969
969
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
970
970
  }
971
+ if (this.params.interruptionDelay !== undefined) {
972
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
973
+ }
971
974
  if (this.params.customerSupportAudioCapture) {
972
975
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
973
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
976
+ // The server's canonical wire name is `_customer_support_audio_capture`
977
+ // (leading underscore = "not officially supported / unstable"). The
978
+ // server also accepts `customer_support_audio_capture` via
979
+ // `populate_by_name=True`, but we send the underscore form to honor
980
+ // the server's stability marker.
981
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
974
982
  }
975
983
  if (this.params.webhookUrl) {
976
984
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/index.mjs CHANGED
@@ -61,7 +61,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
61
61
  defaultUserAgentString += navigator.userAgent;
62
62
  }
63
63
  const defaultUserAgent = {
64
- sdk: { name: "JavaScript", version: "4.33.0" },
64
+ sdk: { name: "JavaScript", version: "4.33.1" },
65
65
  };
66
66
  if (typeof process !== "undefined") {
67
67
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -966,9 +966,17 @@ class StreamingTranscriber {
966
966
  if (this.params.continuousPartials !== undefined) {
967
967
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
968
968
  }
969
+ if (this.params.interruptionDelay !== undefined) {
970
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
971
+ }
969
972
  if (this.params.customerSupportAudioCapture) {
970
973
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
971
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
974
+ // The server's canonical wire name is `_customer_support_audio_capture`
975
+ // (leading underscore = "not officially supported / unstable"). The
976
+ // server also accepts `customer_support_audio_capture` via
977
+ // `populate_by_name=True`, but we send the underscore form to honor
978
+ // the server's stability marker.
979
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
972
980
  }
973
981
  if (this.params.webhookUrl) {
974
982
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/node.cjs CHANGED
@@ -22,7 +22,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
22
22
  defaultUserAgentString += navigator.userAgent;
23
23
  }
24
24
  const defaultUserAgent = {
25
- sdk: { name: "JavaScript", version: "4.33.0" },
25
+ sdk: { name: "JavaScript", version: "4.33.1" },
26
26
  };
27
27
  if (typeof process !== "undefined") {
28
28
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -877,9 +877,17 @@ class StreamingTranscriber {
877
877
  if (this.params.continuousPartials !== undefined) {
878
878
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
879
879
  }
880
+ if (this.params.interruptionDelay !== undefined) {
881
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
882
+ }
880
883
  if (this.params.customerSupportAudioCapture) {
881
884
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
882
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
885
+ // The server's canonical wire name is `_customer_support_audio_capture`
886
+ // (leading underscore = "not officially supported / unstable"). The
887
+ // server also accepts `customer_support_audio_capture` via
888
+ // `populate_by_name=True`, but we send the underscore form to honor
889
+ // the server's stability marker.
890
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
883
891
  }
884
892
  if (this.params.webhookUrl) {
885
893
  searchParams.set("webhook_url", this.params.webhookUrl);
package/dist/node.mjs CHANGED
@@ -20,7 +20,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
20
20
  defaultUserAgentString += navigator.userAgent;
21
21
  }
22
22
  const defaultUserAgent = {
23
- sdk: { name: "JavaScript", version: "4.33.0" },
23
+ sdk: { name: "JavaScript", version: "4.33.1" },
24
24
  };
25
25
  if (typeof process !== "undefined") {
26
26
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -875,9 +875,17 @@ class StreamingTranscriber {
875
875
  if (this.params.continuousPartials !== undefined) {
876
876
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
877
877
  }
878
+ if (this.params.interruptionDelay !== undefined) {
879
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
880
+ }
878
881
  if (this.params.customerSupportAudioCapture) {
879
882
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
880
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
883
+ // The server's canonical wire name is `_customer_support_audio_capture`
884
+ // (leading underscore = "not officially supported / unstable"). The
885
+ // server also accepts `customer_support_audio_capture` via
886
+ // `populate_by_name=True`, but we send the underscore form to honor
887
+ // the server's stability marker.
888
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
881
889
  }
882
890
  if (this.params.webhookUrl) {
883
891
  searchParams.set("webhook_url", this.params.webhookUrl);
@@ -36,6 +36,7 @@ export type StreamingTranscriberParams = {
36
36
  voiceFocus?: VoiceFocusModel;
37
37
  voiceFocusThreshold?: number;
38
38
  continuousPartials?: boolean;
39
+ interruptionDelay?: number;
39
40
  customerSupportAudioCapture?: boolean;
40
41
  includePartialTurns?: boolean;
41
42
  redactPii?: boolean;
@@ -60,7 +61,7 @@ export type StreamingSpeechModel = "universal-streaming-english" | "universal-st
60
61
  export type StreamingDomain = "medical-v1";
61
62
  export type VoiceFocusModel = "near-field" | "far-field";
62
63
  export type StreamingPiiSubstitution = "hash" | "entity_name";
63
- export type StreamingPiiPolicy = "account_number" | "banking_information" | "blood_type" | "credit_card_number" | "credit_card_expiration" | "credit_card_cvv" | "date" | "date_interval" | "date_of_birth" | "drivers_license" | "drug" | "duration" | "email_address" | "event" | "filename" | "gender_sexuality" | "gender" | "healthcare_number" | "injury" | "ip_address" | "language" | "location" | "marital_status" | "medical_condition" | "medical_process" | "money_amount" | "nationality" | "number_sequence" | "passport_number" | "password" | "person_age" | "person_name" | "phone_number" | "physical_attribute" | "political_affiliation" | "occupation" | "organization" | "organization_medical_facility" | "religion" | "sexuality" | "statistics" | "time" | "url" | "us_social_security_number" | "username" | "vehicle_id" | "zodiac_sign";
64
+ export type StreamingPiiPolicy = "account_number" | "banking_information" | "blood_type" | "corporate_action" | "credit_card_cvv" | "credit_card_expiration" | "credit_card_number" | "date" | "date_interval" | "date_of_birth" | "day" | "drivers_license" | "drug" | "duration" | "effect" | "email_address" | "event" | "filename" | "financial_metric" | "gender" | "gender_sexuality" | "healthcare_number" | "injury" | "ip_address" | "language" | "location" | "location_address" | "location_address_street" | "location_city" | "location_coordinate" | "location_country" | "location_state" | "location_zip" | "marital_status" | "medical_code" | "medical_condition" | "medical_process" | "money_amount" | "month" | "nationality" | "number_sequence" | "occupation" | "organization" | "organization_id" | "organization_medical_facility" | "passport_number" | "password" | "person_age" | "person_name" | "phone_number" | "physical_attribute" | "political_affiliation" | "product" | "project" | "religion" | "sexuality" | "statistics" | "time" | "trend" | "url" | "us_social_security_number" | "username" | "vehicle_id" | "year" | "zodiac_sign";
64
65
  export type StreamingTokenParams = {
65
66
  expires_in_seconds: number;
66
67
  max_session_duration_seconds?: number;
@@ -120,6 +121,7 @@ export type StreamingUpdateConfiguration = {
120
121
  keyterms_prompt?: string[];
121
122
  prompt?: string;
122
123
  filter_profanity?: boolean;
124
+ interruption_delay?: number;
123
125
  };
124
126
  export type StreamingForceEndpoint = {
125
127
  type: "ForceEndpoint";
package/dist/workerd.mjs CHANGED
@@ -15,7 +15,7 @@ if (typeof navigator !== "undefined" && navigator.userAgent) {
15
15
  defaultUserAgentString += navigator.userAgent;
16
16
  }
17
17
  const defaultUserAgent = {
18
- sdk: { name: "JavaScript", version: "4.33.0" },
18
+ sdk: { name: "JavaScript", version: "4.33.1" },
19
19
  };
20
20
  if (typeof process !== "undefined") {
21
21
  if (process.versions.node && defaultUserAgentString.indexOf("Node") === -1) {
@@ -880,9 +880,17 @@ class StreamingTranscriber {
880
880
  if (this.params.continuousPartials !== undefined) {
881
881
  searchParams.set("continuous_partials", this.params.continuousPartials.toString());
882
882
  }
883
+ if (this.params.interruptionDelay !== undefined) {
884
+ searchParams.set("interruption_delay", this.params.interruptionDelay.toString());
885
+ }
883
886
  if (this.params.customerSupportAudioCapture) {
884
887
  console.warn("`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.");
885
- searchParams.set("customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
888
+ // The server's canonical wire name is `_customer_support_audio_capture`
889
+ // (leading underscore = "not officially supported / unstable"). The
890
+ // server also accepts `customer_support_audio_capture` via
891
+ // `populate_by_name=True`, but we send the underscore form to honor
892
+ // the server's stability marker.
893
+ searchParams.set("_customer_support_audio_capture", this.params.customerSupportAudioCapture.toString());
886
894
  }
887
895
  if (this.params.webhookUrl) {
888
896
  searchParams.set("webhook_url", this.params.webhookUrl);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assemblyai",
3
- "version": "4.33.0",
3
+ "version": "4.33.1",
4
4
  "description": "The AssemblyAI JavaScript SDK provides an easy-to-use interface for interacting with the AssemblyAI API, which supports async and real-time transcription, as well as the latest LeMUR models.",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -198,12 +198,24 @@ export class StreamingTranscriber {
198
198
  );
199
199
  }
200
200
 
201
+ if (this.params.interruptionDelay !== undefined) {
202
+ searchParams.set(
203
+ "interruption_delay",
204
+ this.params.interruptionDelay.toString(),
205
+ );
206
+ }
207
+
201
208
  if (this.params.customerSupportAudioCapture) {
202
209
  console.warn(
203
210
  "`customerSupportAudioCapture=true` will record session audio. Only enable this when explicitly coordinating with AssemblyAI support.",
204
211
  );
212
+ // The server's canonical wire name is `_customer_support_audio_capture`
213
+ // (leading underscore = "not officially supported / unstable"). The
214
+ // server also accepts `customer_support_audio_capture` via
215
+ // `populate_by_name=True`, but we send the underscore form to honor
216
+ // the server's stability marker.
205
217
  searchParams.set(
206
- "customer_support_audio_capture",
218
+ "_customer_support_audio_capture",
207
219
  this.params.customerSupportAudioCapture.toString(),
208
220
  );
209
221
  }
@@ -39,6 +39,7 @@ export type StreamingTranscriberParams = {
39
39
  voiceFocus?: VoiceFocusModel;
40
40
  voiceFocusThreshold?: number;
41
41
  continuousPartials?: boolean;
42
+ interruptionDelay?: number;
42
43
  customerSupportAudioCapture?: boolean;
43
44
  includePartialTurns?: boolean;
44
45
  redactPii?: boolean;
@@ -82,35 +83,54 @@ export type VoiceFocusModel = "near-field" | "far-field";
82
83
 
83
84
  export type StreamingPiiSubstitution = "hash" | "entity_name";
84
85
 
86
+ // Source of truth: assemblyai/engineering/projects/pii/enums.py (`AAIEntities`).
87
+ // Keep this union in sync when entities are added or removed server-side.
85
88
  export type StreamingPiiPolicy =
86
89
  | "account_number"
87
90
  | "banking_information"
88
91
  | "blood_type"
89
- | "credit_card_number"
90
- | "credit_card_expiration"
92
+ | "corporate_action"
91
93
  | "credit_card_cvv"
94
+ | "credit_card_expiration"
95
+ | "credit_card_number"
92
96
  | "date"
93
97
  | "date_interval"
94
98
  | "date_of_birth"
99
+ | "day"
95
100
  | "drivers_license"
96
101
  | "drug"
97
102
  | "duration"
103
+ | "effect"
98
104
  | "email_address"
99
105
  | "event"
100
106
  | "filename"
101
- | "gender_sexuality"
107
+ | "financial_metric"
102
108
  | "gender"
109
+ | "gender_sexuality"
103
110
  | "healthcare_number"
104
111
  | "injury"
105
112
  | "ip_address"
106
113
  | "language"
107
114
  | "location"
115
+ | "location_address"
116
+ | "location_address_street"
117
+ | "location_city"
118
+ | "location_coordinate"
119
+ | "location_country"
120
+ | "location_state"
121
+ | "location_zip"
108
122
  | "marital_status"
123
+ | "medical_code"
109
124
  | "medical_condition"
110
125
  | "medical_process"
111
126
  | "money_amount"
127
+ | "month"
112
128
  | "nationality"
113
129
  | "number_sequence"
130
+ | "occupation"
131
+ | "organization"
132
+ | "organization_id"
133
+ | "organization_medical_facility"
114
134
  | "passport_number"
115
135
  | "password"
116
136
  | "person_age"
@@ -118,17 +138,18 @@ export type StreamingPiiPolicy =
118
138
  | "phone_number"
119
139
  | "physical_attribute"
120
140
  | "political_affiliation"
121
- | "occupation"
122
- | "organization"
123
- | "organization_medical_facility"
141
+ | "product"
142
+ | "project"
124
143
  | "religion"
125
144
  | "sexuality"
126
145
  | "statistics"
127
146
  | "time"
147
+ | "trend"
128
148
  | "url"
129
149
  | "us_social_security_number"
130
150
  | "username"
131
151
  | "vehicle_id"
152
+ | "year"
132
153
  | "zodiac_sign";
133
154
 
134
155
  export type StreamingTokenParams = {
@@ -199,6 +220,7 @@ export type StreamingUpdateConfiguration = {
199
220
  keyterms_prompt?: string[];
200
221
  prompt?: string;
201
222
  filter_profanity?: boolean;
223
+ interruption_delay?: number;
202
224
  };
203
225
 
204
226
  export type StreamingForceEndpoint = {