@avaturn-live/web-sdk 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +1 -1
- package/dist/main.js +1 -1
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -76,4 +76,4 @@ void main() {
|
|
|
76
76
|
// the same data for our texcoords.
|
|
77
77
|
v_texCoord = a_position;
|
|
78
78
|
}
|
|
79
|
-
`;function js(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 cd(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 Qo=new WeakMap;function ld(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=js(n,od,n.FRAGMENT_SHADER),i=js(n,ad,n.VERTEX_SHADER),s=cd(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");Qo.set(n,n.getUniformLocation(s,"u_premultipliedAlpha")),ud(n);const p=n.createBuffer(),h=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);n.bindBuffer(n.ARRAY_BUFFER,p),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 f=n.createTexture();return n.bindTexture(n.TEXTURE_2D,f),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 ud(t,e){t.uniform1f(Qo.get(t),0)}function dd(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 fr;(function(t){t.Send="conversation_engine.message.send"})(fr||(fr={}));const Xo="https://api.avaturn.live";class Zo{constructor(e,n){H(this,"inited",!1);H(this,"mediaStream");H(this,"session_id","");H(this,"uiConfig",{background:{transparent:!0}});H(this,"config");H(this,"shadow",null);H(this,"frameHandle",0);H(this,"rootElement");H(this,"abortController");H(this,"timeout",0);H(this,"keepAlive",!1);H(this,"fetcher");H(this,"call");H(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=Xo,sessionToken:a,preloadBundle:c,preconnect:l,keepAlive:p,audioSource:h=!1}=this.config=r;this.rootElement=i,this.abortController=new AbortController,this.fetcher=$.create({baseURL:`${s}/_sdk/v0`,headers:{"X-Session-Token":a},signal:this.abortController.signal}),this.keepAlive=!!p,this.mediaStream=new MediaStream,this.call=Dl.createCallObject({videoSource:!1,audioSource:h,dailyConfig:{avoidEval:!0}}),c&&this.call.load(),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[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=ld(r),s=()=>{dd(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:fr.Send,data:{prompt_update:!0}})}toggleLocalAudio(){const e=this.call.localAudio();this.call.setLocalAudio(!e),this.dispatch("local_audio_change",!e)}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 f,_;if(!l.owner)return;this.dispatch("local_audio_change",this.call.localAudio());const{video:p,audio:h}=l.tracks;p.persistentTrack&&(this.mediaStream.getVideoTracks().forEach(k=>this.mediaStream.removeTrack(k)),(f=this.mediaStream)==null||f.addTrack(p.persistentTrack)),h.persistentTrack&&(this.mediaStream.getAudioTracks().forEach(k=>this.mediaStream.removeTrack(k)),(_=this.mediaStream)==null||_.addTrack(h.persistentTrack)),s&&clearTimeout(s),p.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 p;this.restartIdleTimeout(),l.type&&((p=this.handlers[l.type])==null||p.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.startIdleTimeout();const{data:n}=await this.fetcher.get("/sessions");return this.session_id=n.id,this.uiConfig.background.transparent=n.session_config.uses_stacked_alpha,this.abortController.signal.aborted||(await this.call.join({token:n.limited_access_token,url:n.room_url}),this.call.setLocalAudio(this.config.audioSource||!1)),this.applyEventHandlers(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 hd extends Zo{constructor(n){super(n);H(this,"assistantSessionToken","");H(this,"assistantFetcher");H(this,"sessionToken","");this.assistantSessionToken=n.assistantSessionToken,this.sessionToken=n.sessionToken,this.assistantFetcher=$.create({baseURL:`${n.apiHost||Xo}/`,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=hd;exports.AvaturnHead=Zo;
|
|
79
|
+
`;function js(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 cd(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 Qo=new WeakMap;function ld(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=js(n,od,n.FRAGMENT_SHADER),i=js(n,ad,n.VERTEX_SHADER),s=cd(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");Qo.set(n,n.getUniformLocation(s,"u_premultipliedAlpha")),ud(n);const p=n.createBuffer(),h=new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]);n.bindBuffer(n.ARRAY_BUFFER,p),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 f=n.createTexture();return n.bindTexture(n.TEXTURE_2D,f),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 ud(t,e){t.uniform1f(Qo.get(t),0)}function dd(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 fr;(function(t){t.Send="conversation_engine.external.message.send"})(fr||(fr={}));const Xo="https://api.avaturn.live";class Zo{constructor(e,n){H(this,"inited",!1);H(this,"mediaStream");H(this,"session_id","");H(this,"uiConfig",{background:{transparent:!0}});H(this,"config");H(this,"shadow",null);H(this,"frameHandle",0);H(this,"rootElement");H(this,"abortController");H(this,"timeout",0);H(this,"keepAlive",!1);H(this,"fetcher");H(this,"call");H(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=Xo,sessionToken:a,preloadBundle:c,preconnect:l,keepAlive:p,audioSource:h=!1}=this.config=r;this.rootElement=i,this.abortController=new AbortController,this.fetcher=$.create({baseURL:`${s}/_sdk/v0`,headers:{"X-Session-Token":a},signal:this.abortController.signal}),this.keepAlive=!!p,this.mediaStream=new MediaStream,this.call=Dl.createCallObject({videoSource:!1,audioSource:h,dailyConfig:{avoidEval:!0}}),c&&this.call.load(),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[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=ld(r),s=()=>{dd(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:fr.Send,data:{prompt_update:!0}})}toggleLocalAudio(){const e=this.call.localAudio();this.call.setLocalAudio(!e),this.dispatch("local_audio_change",!e)}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 f,_;if(!l.owner)return;this.dispatch("local_audio_change",this.call.localAudio());const{video:p,audio:h}=l.tracks;p.persistentTrack&&(this.mediaStream.getVideoTracks().forEach(k=>this.mediaStream.removeTrack(k)),(f=this.mediaStream)==null||f.addTrack(p.persistentTrack)),h.persistentTrack&&(this.mediaStream.getAudioTracks().forEach(k=>this.mediaStream.removeTrack(k)),(_=this.mediaStream)==null||_.addTrack(h.persistentTrack)),s&&clearTimeout(s),p.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 p;this.restartIdleTimeout(),l.type&&((p=this.handlers[l.type])==null||p.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.startIdleTimeout();const{data:n}=await this.fetcher.get("/sessions");return this.session_id=n.id,this.uiConfig.background.transparent=n.session_config.uses_stacked_alpha,this.abortController.signal.aborted||(await this.call.join({token:n.limited_access_token,url:n.room_url}),this.call.setLocalAudio(this.config.audioSource||!1)),this.applyEventHandlers(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 hd extends Zo{constructor(n){super(n);H(this,"assistantSessionToken","");H(this,"assistantFetcher");H(this,"sessionToken","");this.assistantSessionToken=n.assistantSessionToken,this.sessionToken=n.sessionToken,this.assistantFetcher=$.create({baseURL:`${n.apiHost||Xo}/`,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=hd;exports.AvaturnHead=Zo;
|
package/dist/main.js
CHANGED
|
@@ -7364,7 +7364,7 @@ function ud(t, e) {
|
|
|
7364
7364
|
}
|
|
7365
7365
|
var fr;
|
|
7366
7366
|
(function(t) {
|
|
7367
|
-
t.Send = "conversation_engine.message.send";
|
|
7367
|
+
t.Send = "conversation_engine.external.message.send";
|
|
7368
7368
|
})(fr || (fr = {}));
|
|
7369
7369
|
const Xo = "https://api.avaturn.live";
|
|
7370
7370
|
class dd {
|