@avaturn-live/web-sdk 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs CHANGED
@@ -75,4 +75,4 @@ void main() {
75
75
  // the same data for our texcoords.
76
76
  v_texCoord = a_position;
77
77
  }
78
- `;function yo(t,e,n){const r=t.createShader(n);if(!r)throw Error("Unable to create shader");if(t.shaderSource(r,e),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS)){const i=t.getShaderInfoLog(r);throw t.deleteShader(r),Error(i||"unknown error")}return r}function vf(t,e){const n=t.createProgram();if(!n)throw Error("Unable to create program");for(const r of e)t.attachShader(n,r);if(t.linkProgram(n),!t.getProgramParameter(n,t.LINK_STATUS)){const r=t.getProgramInfoLog(n);throw t.deleteProgram(n),Error(r||"unknown error")}return n}const Ia=new WeakMap;function yf(t){const e={antialias:!1,powerPreference:"low-power",depth:!1,premultipliedAlpha:!0},n=t.getContext("webgl2",e)??t.getContext("webgl",e);if(!n)throw Error("Couldn't create GL context");const r=yo(n,mf,n.FRAGMENT_SHADER),i=yo(n,gf,n.VERTEX_SHADER),s=vf(n,[r,i]);n.useProgram(s);const a=n.getAttribLocation(s,"a_position"),c=n.getUniformLocation(s,"u_frame");n.uniform1i(c,0);const l=n.getUniformLocation(s,"u_matrix");Ia.set(n,n.getUniformLocation(s,"u_premultipliedAlpha")),bf(n);const f=n.createBuffer(),h=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);n.bindBuffer(n.ARRAY_BUFFER,f),n.bufferData(n.ARRAY_BUFFER,h,n.STATIC_DRAW),n.enableVertexAttribArray(a),n.vertexAttribPointer(a,2,n.FLOAT,!1,0,0),n.uniformMatrix3fv(l,!1,[2,0,0,0,-2,0,-1,1,1]);const v=n.createTexture();return n.bindTexture(n.TEXTURE_2D,v),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n}function bf(t,e){t.uniform1f(Ia.get(t),0)}function _f(t,e){const n=t.canvas,r=e.videoWidth,i=Math.floor(e.videoHeight/2);(n.width!==r||n.height!==i)&&(n.width=r,n.height=i,t.viewport(0,0,r,i)),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),t.drawArrays(t.TRIANGLES,0,6)}var Lr;(function(t){t.Send="conversation_engine.external.message.send"})(Lr||(Lr={}));const La="https://api.avaturn.live";class Ra{constructor(e,n){Q(this,"inited",!1);Q(this,"mediaStream");Q(this,"session_id","");Q(this,"sessionData",null);Q(this,"uiConfig",{background:{transparent:!0}});Q(this,"config");Q(this,"shadow",null);Q(this,"frameHandle",0);Q(this,"rootElement");Q(this,"abortController");Q(this,"timeout",0);Q(this,"keepAlive",!1);Q(this,"fetcher");Q(this,"call");Q(this,"handlers",{});if(typeof window>"u")throw new Error("Unfortunately, SDK only works on the client side.");const[r,i]=this.parseConfig(e,n),{apiHost:s=La,sessionToken:a,preloadBundle:c,preconnect:l,keepAlive:f}=this.config=r;this.rootElement=i,this.abortController=new AbortController,this.fetcher=G.create({baseURL:`${s}/_sdk/v0`,headers:{"X-Session-Token":a},signal:this.abortController.signal}),this.keepAlive=!!f,this.mediaStream=new MediaStream,l&&this.fetcher.post("/sessions/start_stream")}parseConfig(e,n){try{let r,i;if(e instanceof HTMLElement){if(r=e,!n)throw new Error("Options are required when providing a DOM element.");i=n}else i=e;return typeof i.immediatelyJoin>"u"&&(i.immediatelyJoin=!0),typeof i.audioSource>"u"&&(i.audioSource=!1),[i,r]}catch{throw new Error("Filed to parse configuration object. Bad configuration!")}}dispatch(e,n){var r;(r=this.handlers[e])==null||r.forEach(i=>i(n))}drawUI(){if(!this.rootElement||!this.inited)return;if(!this.shadow){const a=document.createElement("div");a.style.width="100%",a.style.height="100%",a.style.position="relative",a.style.overflow="hidden",this.rootElement.appendChild(a),this.shadow=a.attachShadow({mode:"closed"})}const e=this.shadow;this.shadow.innerHTML="";const n=document.createElement("video");if(n.srcObject=this.mediaStream,n.autoplay=!0,n.style.position="absolute",n.style.opacity="0",n.style.objectFit="cover",n.style.pointerEvents="none",n.playsInline=!0,e.appendChild(n),!this.uiConfig.background.transparent){n.style.width="100%",n.style.height="100%",n.style.opacity="1",n.style.pointerEvents="all";return}const r=document.createElement("canvas");r.style.width="100%",r.style.height="100%",r.style.objectFit="cover",e.appendChild(r);const i=yf(r),s=()=>{_f(i,n),this.frameHandle=requestAnimationFrame(s)};s()}startIdleTimeout(){this.timeout=setTimeout(()=>{var e;(e=this.handlers.idle)==null||e.forEach(n=>n({data:null})),this.keepAlive||(console.info("[SDK_IDLE]: Stream was terminated due to inactivity"),this.dispose())},5*60*1e3)}restartIdleTimeout(){clearTimeout(this.timeout),this.startIdleTimeout()}updateConfig(){this.call.sendAppMessage({type:Lr.Send,data:{prompt_update:!0}})}toggleLocalAudio(e){const n=this.call.localAudio();this.call.setLocalAudio(e||!n)}setOutputDevice(e){if(!this.call)throw new Error("Session not initialized");return this.call.setOutputDeviceAsync(e)}setInputDevices(e){return this.call.setInputDevicesAsync(e)}requestMediaDevices(){return this.call.enumerateDevices()}async cancelAllTasks(){const{data:e}=await this.fetcher.post("/sessions/cancel_all_speech_tasks");return e}async patchConfig(e){await this.fetcher.patch("/sessions/config",e)}async changeVoice(e){await this.patchConfig({conversation_engine:{type:"text-echo",tts:e}})}applyEventHandlers(e){return new Promise((n,r)=>{var a,c;const i=e!=null&&e.timeout&&e.timeout>0?e==null?void 0:e.timeout:3e4,s=e!=null&&e.timeout?setTimeout(()=>r("Connection timeout"),i):null;(a=this.call)==null||a.on("participant-updated",({participant:l})=>{var v,E;if(l.local&&(this.dispatch("local_audio_change",this.call.localAudio()),this.dispatch("local_mic_state_change",l.tracks.audio.state)),!l.owner)return;const{video:f,audio:h}=l.tracks;f.persistentTrack&&(this.mediaStream.getVideoTracks().forEach(k=>this.mediaStream.removeTrack(k)),(v=this.mediaStream)==null||v.addTrack(f.persistentTrack)),h.persistentTrack&&(this.mediaStream.getAudioTracks().forEach(k=>this.mediaStream.removeTrack(k)),(E=this.mediaStream)==null||E.addTrack(h.persistentTrack)),s&&clearTimeout(s),f.persistentTrack&&(this.inited=!0,this.drawUI(),n())}),this.call.on("error",l=>{console.error("[SKD_ERROR]: ",l)}),(c=this.call)==null||c.on("app-message",({data:l})=>{var f;this.restartIdleTimeout(),l.type&&((f=this.handlers[l.type])==null||f.forEach(h=>h(l)))})})}attachDOMNode(e){cancelAnimationFrame(this.frameHandle),this.rootElement&&(this.rootElement.innerHTML=""),this.rootElement=e,this.shadow=null,this.drawUI()}async init(e){if(this.inited)return;this.call=Ru.createCallObject({subscribeToTracksAutomatically:!0,videoSource:!1,audioSource:this.config.audioSource,dailyConfig:{avoidEval:!0}}),this.config.preloadBundle&&this.call.load(),this.startIdleTimeout();const{data:n}=await this.fetcher.get("/sessions");this.session_id=n.id,this.sessionData=n,this.uiConfig.background.transparent=n.session_config.uses_stacked_alpha,!this.abortController.signal.aborted&&this.config.immediatelyJoin&&await this.join();const r=this.applyEventHandlers(e);if(this.config.immediatelyJoin)return r}async join(){if(!this.sessionData)throw new Error("Session not initialized");await this.call.join({token:this.sessionData.limited_access_token,url:this.sessionData.room_url}),this.call.setLocalAudio(this.config.audioSource||!1)}async task(e){if(!this.session_id)throw new Error("It seems that the session is not initialized.");this.restartIdleTimeout();const{data:n}=await this.fetcher.post("/sessions/tasks",{text:e});return n}on(e,n){this.handlers[e]||(this.handlers[e]=[]),this.handlers[e].push(n)}off(e,n){this.handlers[e]&&(this.handlers[e]=this.handlers[e].filter(r=>r!==n))}async dispose(){this.inited=!1,this.mediaStream=new MediaStream,this.timeout&&clearTimeout(this.timeout),this.frameHandle&&cancelAnimationFrame(this.frameHandle),await this.call.destroy(),this.abortController.abort(),this.abortController=new AbortController,this.fetcher.defaults.signal=this.abortController.signal}}class wf extends Ra{constructor(n){super(n);Q(this,"assistantSessionToken","");Q(this,"assistantFetcher");Q(this,"sessionToken","");this.assistantSessionToken=n.assistantSessionToken,this.sessionToken=n.sessionToken,this.assistantFetcher=G.create({baseURL:`${n.apiHost||La}/`,headers:{Authorization:`Bearer ${n.assistantSessionToken}`},signal:this.abortController.signal})}async task(n,r){if(!this.session_id)throw new Error("It seems that the session is not initialized.");this.restartIdleTimeout();const{data:i}=await this.assistantFetcher.post("/assistants/tasks",{text:n});return i}async dispose(){var n;this.inited=!1,this.mediaStream=new MediaStream,this.timeout&&clearTimeout(this.timeout),this.frameHandle&&cancelAnimationFrame(this.frameHandle),await((n=this.call)==null?void 0:n.destroy()),await this.assistantFetcher.delete("/assistants/sessions"),this.abortController.abort(),this.abortController=new AbortController,this.fetcher.defaults.signal=this.abortController.signal,this.assistantFetcher.defaults.signal=this.abortController.signal}}exports.AvaturnAssistantHead=wf;exports.AvaturnHead=Ra;
78
+ `;function yo(t,e,n){const r=t.createShader(n);if(!r)throw Error("Unable to create shader");if(t.shaderSource(r,e),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS)){const i=t.getShaderInfoLog(r);throw t.deleteShader(r),Error(i||"unknown error")}return r}function vf(t,e){const n=t.createProgram();if(!n)throw Error("Unable to create program");for(const r of e)t.attachShader(n,r);if(t.linkProgram(n),!t.getProgramParameter(n,t.LINK_STATUS)){const r=t.getProgramInfoLog(n);throw t.deleteProgram(n),Error(r||"unknown error")}return n}const Ia=new WeakMap;function yf(t){const e={antialias:!1,powerPreference:"low-power",depth:!1,premultipliedAlpha:!0},n=t.getContext("webgl2",e)??t.getContext("webgl",e);if(!n)throw Error("Couldn't create GL context");const r=yo(n,mf,n.FRAGMENT_SHADER),i=yo(n,gf,n.VERTEX_SHADER),s=vf(n,[r,i]);n.useProgram(s);const a=n.getAttribLocation(s,"a_position"),c=n.getUniformLocation(s,"u_frame");n.uniform1i(c,0);const l=n.getUniformLocation(s,"u_matrix");Ia.set(n,n.getUniformLocation(s,"u_premultipliedAlpha")),bf(n);const f=n.createBuffer(),h=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);n.bindBuffer(n.ARRAY_BUFFER,f),n.bufferData(n.ARRAY_BUFFER,h,n.STATIC_DRAW),n.enableVertexAttribArray(a),n.vertexAttribPointer(a,2,n.FLOAT,!1,0,0),n.uniformMatrix3fv(l,!1,[2,0,0,0,-2,0,-1,1,1]);const v=n.createTexture();return n.bindTexture(n.TEXTURE_2D,v),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST),n}function bf(t,e){t.uniform1f(Ia.get(t),0)}function _f(t,e){const n=t.canvas,r=e.videoWidth,i=Math.floor(e.videoHeight/2);(n.width!==r||n.height!==i)&&(n.width=r,n.height=i,t.viewport(0,0,r,i)),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),t.drawArrays(t.TRIANGLES,0,6)}var Lr;(function(t){t.Send="conversation_engine.external.message.send"})(Lr||(Lr={}));const La="https://api.avaturn.live";class Ra{constructor(e,n){Q(this,"inited",!1);Q(this,"mediaStream");Q(this,"session_id","");Q(this,"sessionData",null);Q(this,"uiConfig",{background:{transparent:!0}});Q(this,"config");Q(this,"shadow",null);Q(this,"frameHandle",0);Q(this,"rootElement");Q(this,"abortController");Q(this,"timeout",0);Q(this,"keepAlive",!1);Q(this,"fetcher");Q(this,"call");Q(this,"handlers",{});if(typeof window>"u")throw new Error("Unfortunately, SDK only works on the client side.");const[r,i]=this.parseConfig(e,n),{apiHost:s=La,sessionToken:a,preloadBundle:c,preconnect:l,keepAlive:f}=this.config=r;this.rootElement=i,this.abortController=new AbortController,this.fetcher=G.create({baseURL:`${s}/_sdk/v0`,headers:{"X-Session-Token":a},signal:this.abortController.signal}),this.keepAlive=!!f,this.mediaStream=new MediaStream,l&&this.fetcher.post("/sessions/start_stream")}parseConfig(e,n){try{let r,i;if(e instanceof HTMLElement){if(r=e,!n)throw new Error("Options are required when providing a DOM element.");i=n}else i=e;return typeof i.immediatelyJoin>"u"&&(i.immediatelyJoin=!0),typeof i.audioSource>"u"&&(i.audioSource=!1),[i,r]}catch{throw new Error("Filed to parse configuration object. Bad configuration!")}}dispatch(e,n){var r;(r=this.handlers[e])==null||r.forEach(i=>i(n))}drawUI(){if(!this.rootElement||!this.inited)return;if(!this.shadow){const a=document.createElement("div");a.style.width="100%",a.style.height="100%",a.style.position="relative",a.style.overflow="hidden",this.rootElement.appendChild(a),this.shadow=a.attachShadow({mode:"closed"})}const e=this.shadow;this.shadow.innerHTML="";const n=document.createElement("video");if(n.srcObject=this.mediaStream,n.autoplay=!0,n.style.position="absolute",n.style.opacity="0",n.style.objectFit="cover",n.style.pointerEvents="none",n.playsInline=!0,e.appendChild(n),!this.uiConfig.background.transparent){n.style.width="100%",n.style.height="100%",n.style.opacity="1",n.style.pointerEvents="all";return}const r=document.createElement("canvas");r.style.width="100%",r.style.height="100%",r.style.objectFit="cover",e.appendChild(r);const i=yf(r),s=()=>{_f(i,n),this.frameHandle=requestAnimationFrame(s)};s()}startIdleTimeout(){this.timeout=setTimeout(()=>{var e;(e=this.handlers.idle)==null||e.forEach(n=>n({data:null})),this.keepAlive||(console.info("[SDK_IDLE]: Stream was terminated due to inactivity"),this.dispose())},5*60*1e3)}restartIdleTimeout(){clearTimeout(this.timeout),this.startIdleTimeout()}updateConfig(){this.call.sendAppMessage({type:Lr.Send,data:{prompt_update:!0}})}toggleLocalAudio(e){const n=this.call.localAudio();this.call.setLocalAudio(e||!n)}setOutputDevice(e){if(!this.call)throw new Error("Session not initialized");return this.call.setOutputDeviceAsync(e)}setInputDevices(e){return this.call.setInputDevicesAsync(e)}requestMediaDevices(){return this.call.enumerateDevices()}async cancelAllTasks(){const{data:e}=await this.fetcher.post("/sessions/cancel_all_speech_tasks");return e}async patchConfig(e){await this.fetcher.patch("/sessions/config",e)}async changeVoice(e){await this.patchConfig({conversation_engine:{type:"text-echo",tts:e}})}applyEventHandlers(e){return new Promise((n,r)=>{var a,c;const i=e!=null&&e.timeout&&e.timeout>0?e==null?void 0:e.timeout:3e4,s=e!=null&&e.timeout?setTimeout(()=>r("Connection timeout"),i):null;(a=this.call)==null||a.on("participant-updated",({participant:l})=>{var v,E;if(l.local&&(this.dispatch("local_audio_change",this.call.localAudio()),this.dispatch("local_mic_state_change",l.tracks.audio.state)),!l.owner)return;this.config.immediatelyJoin||n();const{video:f,audio:h}=l.tracks;f.persistentTrack&&(this.mediaStream.getVideoTracks().forEach(k=>this.mediaStream.removeTrack(k)),(v=this.mediaStream)==null||v.addTrack(f.persistentTrack)),h.persistentTrack&&(this.mediaStream.getAudioTracks().forEach(k=>this.mediaStream.removeTrack(k)),(E=this.mediaStream)==null||E.addTrack(h.persistentTrack)),s&&clearTimeout(s),f.persistentTrack&&(this.inited=!0,this.drawUI(),n())}),this.call.on("error",l=>{console.error("[SKD_ERROR]: ",l)}),(c=this.call)==null||c.on("app-message",({data:l})=>{var f;this.restartIdleTimeout(),l.type&&((f=this.handlers[l.type])==null||f.forEach(h=>h(l)))})})}attachDOMNode(e){cancelAnimationFrame(this.frameHandle),this.rootElement&&(this.rootElement.innerHTML=""),this.rootElement=e,this.shadow=null,this.drawUI()}async init(e){if(this.inited)return;this.call=Ru.createCallObject({subscribeToTracksAutomatically:!0,videoSource:!1,audioSource:this.config.audioSource,dailyConfig:{avoidEval:!0}}),this.config.preloadBundle&&this.call.load(),this.startIdleTimeout();const{data:n}=await this.fetcher.get("/sessions");return this.session_id=n.id,this.sessionData=n,this.uiConfig.background.transparent=n.session_config.uses_stacked_alpha,!this.abortController.signal.aborted&&this.config.immediatelyJoin&&await this.join(),this.applyEventHandlers(e)}async join(e){if(!this.sessionData)throw new Error("Session not initialized");await this.call.join({token:this.sessionData.limited_access_token,url:this.sessionData.room_url,...e})}async task(e){if(!this.session_id)throw new Error("It seems that the session is not initialized.");this.restartIdleTimeout();const{data:n}=await this.fetcher.post("/sessions/tasks",{text:e});return n}on(e,n){this.handlers[e]||(this.handlers[e]=[]),this.handlers[e].push(n)}off(e,n){this.handlers[e]&&(this.handlers[e]=this.handlers[e].filter(r=>r!==n))}async dispose(){this.inited=!1,this.mediaStream=new MediaStream,this.timeout&&clearTimeout(this.timeout),this.frameHandle&&cancelAnimationFrame(this.frameHandle),await this.call.destroy(),this.abortController.abort(),this.abortController=new AbortController,this.fetcher.defaults.signal=this.abortController.signal}}class wf extends Ra{constructor(n){super(n);Q(this,"assistantSessionToken","");Q(this,"assistantFetcher");Q(this,"sessionToken","");this.assistantSessionToken=n.assistantSessionToken,this.sessionToken=n.sessionToken,this.assistantFetcher=G.create({baseURL:`${n.apiHost||La}/`,headers:{Authorization:`Bearer ${n.assistantSessionToken}`},signal:this.abortController.signal})}async task(n,r){if(!this.session_id)throw new Error("It seems that the session is not initialized.");this.restartIdleTimeout();const{data:i}=await this.assistantFetcher.post("/assistants/tasks",{text:n});return i}async dispose(){var n;this.inited=!1,this.mediaStream=new MediaStream,this.timeout&&clearTimeout(this.timeout),this.frameHandle&&cancelAnimationFrame(this.frameHandle),await((n=this.call)==null?void 0:n.destroy()),await this.assistantFetcher.delete("/assistants/sessions"),this.abortController.abort(),this.abortController=new AbortController,this.fetcher.defaults.signal=this.abortController.signal,this.assistantFetcher.defaults.signal=this.abortController.signal}}exports.AvaturnAssistantHead=wf;exports.AvaturnHead=Ra;
package/dist/main.d.ts CHANGED
@@ -75,7 +75,9 @@ export declare class AvaturnHead implements IAvaturnHead {
75
75
  init(config?: {
76
76
  timeout?: number;
77
77
  }): Promise<void>;
78
- join(): Promise<void>;
78
+ join(opts?: {
79
+ startAudioOff?: boolean;
80
+ }): Promise<void>;
79
81
  task(text: string): Promise<any>;
80
82
  on<T extends AvaturnHeadEvent>(eventName: T, cb: AvaturnEventCallback<T>): void;
81
83
  off<T extends AvaturnHeadEvent>(eventName: T, cb: AvaturnEventCallback<T>): void;
package/dist/main.js CHANGED
@@ -8004,6 +8004,7 @@ class _f {
8004
8004
  var v, E;
8005
8005
  if (l.local && (this.dispatch("local_audio_change", this.call.localAudio()), this.dispatch("local_mic_state_change", l.tracks.audio.state)), !l.owner)
8006
8006
  return;
8007
+ this.config.immediatelyJoin || n();
8007
8008
  const { video: f, audio: h } = l.tracks;
8008
8009
  f.persistentTrack && (this.mediaStream.getVideoTracks().forEach((k) => this.mediaStream.removeTrack(k)), (v = this.mediaStream) == null || v.addTrack(f.persistentTrack)), h.persistentTrack && (this.mediaStream.getAudioTracks().forEach((k) => this.mediaStream.removeTrack(k)), (E = this.mediaStream) == null || E.addTrack(h.persistentTrack)), s && clearTimeout(s), f.persistentTrack && (this.inited = !0, this.drawUI(), n());
8009
8010
  }), this.call.on("error", (l) => {
@@ -8029,18 +8030,16 @@ class _f {
8029
8030
  }
8030
8031
  }), this.config.preloadBundle && this.call.load(), this.startIdleTimeout();
8031
8032
  const { data: n } = await this.fetcher.get("/sessions");
8032
- this.session_id = n.id, this.sessionData = n, this.uiConfig.background.transparent = n.session_config.uses_stacked_alpha, !this.abortController.signal.aborted && this.config.immediatelyJoin && await this.join();
8033
- const r = this.applyEventHandlers(e);
8034
- if (this.config.immediatelyJoin)
8035
- return r;
8033
+ return this.session_id = n.id, this.sessionData = n, this.uiConfig.background.transparent = n.session_config.uses_stacked_alpha, !this.abortController.signal.aborted && this.config.immediatelyJoin && await this.join(), this.applyEventHandlers(e);
8036
8034
  }
8037
- async join() {
8035
+ async join(e) {
8038
8036
  if (!this.sessionData)
8039
8037
  throw new Error("Session not initialized");
8040
8038
  await this.call.join({
8041
8039
  token: this.sessionData.limited_access_token,
8042
- url: this.sessionData.room_url
8043
- }), this.call.setLocalAudio(this.config.audioSource || !1);
8040
+ url: this.sessionData.room_url,
8041
+ ...e
8042
+ });
8044
8043
  }
8045
8044
  async task(e) {
8046
8045
  if (!this.session_id)
package/dist/type.d.ts CHANGED
@@ -70,6 +70,9 @@ export interface IAvaturnHead {
70
70
  * @returns {Promise<unknown>} A promise that resolves after initialization is complete and avatar is ready to use.
71
71
  */
72
72
  init(): Promise<unknown>;
73
+ join(opts?: {
74
+ startAudioOff?: boolean;
75
+ }): Promise<void>;
73
76
  setOutputDevice(device: {
74
77
  outputDeviceId?: string;
75
78
  }): Promise<DailyDeviceInfos>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@avaturn-live/web-sdk",
3
3
  "private": false,
4
- "version": "0.4.0",
4
+ "version": "0.4.2",
5
5
  "type": "module",
6
6
  "repository": {
7
7
  "type": "git",