@graphen.ai/aiia-sdk 1.1.0-beta.17 → 1.1.0-beta.18

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.
@@ -84,7 +84,7 @@ interface NodeInitOptions extends CommonOptions {
84
84
  * [en]
85
85
  * Specific Env, default: production
86
86
  */
87
- env?: "developement" | "production";
87
+ env?: "development" | "production";
88
88
  /**
89
89
  * [zh]
90
90
  * 指定雲端位置(會覆蓋 `env` 設定)
@@ -21,6 +21,6 @@
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  *
24
- * UPDATA DATE: 2026/6/18
24
+ * UPDATA DATE: 2026/6/22
25
25
  */
26
26
  var A=Object.defineProperty;var y=(e,r,t)=>r in e?A(e,r,{enumerable:true,configurable:true,writable:true,value:t}):e[r]=t;var u=(e,r,t)=>y(e,typeof r!="symbol"?r+"":r,t);function h(e,r,t){if(r===t)return e;let n=t/r,a=e.length,o=Math.ceil(a*n),s=new Float32Array(o),c=1/n,i=0;for(let f=0;f<o;f++){let l=i|0,g=i-l,p=e[l],d=l+1<a?e[l+1]:p;s[f]=p+(d-p)*g,i+=c;}return s}function x(e){let r=e.reduce((a,o)=>a+o.length,0),t=new Float32Array(r),n=0;for(let a of e)t.set(a,n),n+=a.length;return t}function M(e,r,t=1){let n=r*t,a=e/r;return Math.ceil(n*a)}var m=class extends AudioWorkletProcessor{constructor(t){super();u(this,"inputBuffer");u(this,"inputBufferLength");u(this,"processChunkSize");u(this,"outputSampleRate");u(this,"originalSampleRate");this.inputBuffer=[],this.inputBufferLength=0;let{outputSampleRate:n,chunkTimeInSeconds:a}=Object.assign({outputSampleRate:16e3,chunkTimeInSeconds:1},t==null?void 0:t.processorOptions);this.originalSampleRate=sampleRate,this.outputSampleRate=n,this.processChunkSize=M(this.originalSampleRate,this.outputSampleRate,a);}process(t,n,a){let o=t[0][0];if(!o)return true;let s=new Float32Array(o);if(this.inputBuffer.push(s),this.inputBufferLength+=o.length,this.inputBufferLength>=this.processChunkSize){let c=x(this.inputBuffer);this.inputBuffer=[],this.inputBufferLength=0;let i=h(c,this.originalSampleRate,this.outputSampleRate);this.port.postMessage({float32:i,outputSampleRate:this.outputSampleRate},[i.buffer]);}return true}};registerProcessor("aiia-vad",m);})();
@@ -1,5 +1,5 @@
1
- import { L as LandmarkResult, A as AiiaConfig, M as MSG_TO_SERVER, a as MovementToUE, b as LAYOUT$1, c as AiiaProjectItemWithAvatar, B as BrowserInitOptions } from '../VERSION-8NGV8OB9.js';
2
- export { V as VERSION } from '../VERSION-8NGV8OB9.js';
1
+ import { L as LandmarkResult, A as AiiaConfig, M as MSG_TO_SERVER, a as MovementToUE, b as LAYOUT$1, c as AiiaProjectItemWithAvatar, B as BrowserInitOptions } from '../VERSION-CaEPYzjN.js';
2
+ export { V as VERSION } from '../VERSION-CaEPYzjN.js';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Detection } from '@mediapipe/tasks-vision';
5
5
  import 'http';
@@ -21,7 +21,7 @@
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  *
24
- * UPDATA DATE: 2026/6/18
24
+ * UPDATA DATE: 2026/6/22
25
25
  */
26
26
  var P=typeof window<"u";typeof process<"u"&&process.versions!=null&&process.versions.node!=null;function j(c,e){let t=typeof e=="number"?e:NaN;if(c){let i=Number(c);return isNaN(i)?t:i}else return t}var k=class{constructor(e){this.config=e;}config;get webserver(){return this.safeRead("webserver")}get environment(){let e=this.safeRead("env");return typeof e=="string"?e:"production"}get license(){return this.safeRead("group_id")??""}get note(){return this.safeRead("note")}get deviceName(){return this.safeRead("device_name")}get port(){return j(process.env.PORT,this.safeRead("port")??3e3)}get ws_url(){let e=this.safeRead("ws_url");return typeof e=="string"?e:""}get worklet_url(){let e=this.safeRead("worklet_url");return typeof e=="string"?e:""}get project(){let e=this.safeRead("project");if(e===void 0)return {specific:false};if(typeof e=="string")return {name:e,id:e,specific:false};{let t=lodashEs.get(e,"id",void 0),i=lodashEs.get(e,"name",void 0);return {id:typeof t=="string"?t:void 0,name:typeof i=="string"?i:void 0,specific:true}}}get endPoint(){let e=this.safeRead("cloudEndPoint");if(e)return {api:e,socket:e.replace(/^http/,"ws")};{let t="dev";switch(this.environment){case "production":t="prod";break;case "qa":t="qa";break;case "test":t="test";break;}let i=`graphen-agentic-workflow-${t}-21193779403.asia-east1.run.app`;return {api:`https://${i}`,socket:`wss://${i}`}}}get debug(){return this.safeRead("debug")??true}get mediaStream(){return this.safeRead("mediaStream")}get chunkTimeInSeconds(){let t=this.safeRead("chunkTimeInSeconds");return typeof t=="number"&&t>0?t:.3}get llmSampleRate(){let t=this.safeRead("llmSampleRate");return typeof t=="number"&&t>0?t:16e3}get detection(){return lodashEs.assign({perSecond:3,confidence:80},this.safeRead("cameraDetection"))}get autoClearSubtitle(){let e=this.safeRead("autoClearUserSubtitle"),t=this.safeRead("autoClearAiiaSubtitle");return {userDelayTime:typeof e=="number"?e:5e3,aiiaDelayTime:typeof t=="number"?t:NaN}}get eyeTrackEnable(){return !!this.safeRead("eyeTrackEnable")}get eyeTrackCorrection(){return lodashEs.assign({x_axis_px:0,y_axis_px:0},this.safeRead("correction"))}get avatartService(){let e=this.safeRead("avatartService");return typeof e=="boolean"?e:true}safeRead(e){return lodashEs.get(this.config,e,void 0)}};var p={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},K=[];function Y(...c){return K.push(...c),Y}function z(c){function e(o){if(o===void 0||o==="all")return {code:true,error:true,warn:true,info:true,debug:true,fatal:true};if(o==="none")return {error:false,code:false,warn:false,info:false,debug:false,fatal:false};if(typeof o=="boolean")return {code:o,error:o,warn:o,info:o,debug:o,fatal:o};{let l=new Set(o);return {code:l.has("code"),debug:l.has("debug"),fatal:l.has("fatal"),error:l.has("error"),warn:l.has("warn"),info:l.has("info")}}}let{info:t,error:i,warn:a,debug:n,fatal:r,code:s}=e(c);return s||(p.code=()=>{}),n||(p.debug=()=>{}),t||(p.info=()=>{}),a||(p.warn=()=>{}),i||(p.error=()=>{}),r||(p.fatal=()=>{}),Y}function Q(c){return new Proxy(p,{get(e,t,i){if(typeof t=="string")switch(t){case "debug":case "info":case "error":case "warn":case "fatal":case "code":return (...a)=>{let n=ce__default.default().format("yyyy-MM-DD[T]HH:mm:ss:sss");lodashEs.forEach(K,r=>{(r.category===void 0||r.category.includes(c))&&r.next(t,n,c,...a);}),e[t](`[Aiia::${t}_${n}_](${c})`,...a);};default:return}else return},set(e,t,i,a){return true}})}var u=Q("default");function F(c){return function(e,t){let{width:i,height:a}=t,n=lodashEs.filter(e,s=>(s.categories[0]?.score??0)*100>=c),r=lodashEs.compact(lodashEs.map(n,s=>{if(s.boundingBox!==void 0){let o=s.boundingBox,l=o.width*o.height,h=s.categories[0]?.score??0;return {...o,area:l,score:h*100,clientWidth:i,clientHeight:a}}else return null}));return lodashEs.sortBy(r,["area","score"])[0]??null}}var E=class{socket;messageSub;versionSub;destorySub;get message(){return this.messageSub.asObservable()}get version(){return this.versionSub.asObservable()}constructor(e){this.destorySub=new rxjs.Subject,this.messageSub=new rxjs.Subject,this.versionSub=new rxjs.Subject;let{specific:t,id:i}=e.project;this.socket=socket_ioClient.io(e.ws_url,lodashEs.assign({autoConnect:false},t&&i!==void 0?{query:{uuid:i}}:{}));}start(){let e="list",t="cloud",i="channel",a="monitor",n="version";rxjs.fromEvent(this.socket,"connect").pipe(rxjs.takeUntil(this.destorySub)).subscribe(()=>{u.debug("Client ID: ",this.socket.id);}),rxjs.fromEvent(this.socket,e).pipe(rxjs.take(1),rxjs.takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:e,data:r});}),rxjs.fromEvent(this.socket,t).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:t,data:r});}),rxjs.fromEvent(this.socket,i).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:i,data:r});}),rxjs.fromEvent(this.socket,a).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:a,data:r});}),rxjs.fromEvent(this.socket,n).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{this.versionSub.next(r);}),this.socket.connect();}send(e,t){this.socket.emit(e,t);}sendToCloud(e){this.send("cloud",e);}onDestroy(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect();}};async function W(c){try{return await navigator.mediaDevices.getUserMedia(c)}catch{return null}}function A(c){let e=new Float32Array(c.length);for(let t=0;t<c.length;t++)e[t]=c[t]/32768;return e}function M(c,e,t){if(e===t)return c;let i=t/e,a=c.length,n=Math.ceil(a*i),r=new Float32Array(n),s=1/i,o=0;for(let l=0;l<n;l++){let h=o|0,S=o-h,m=c[h],R=h+1<a?c[h+1]:m;r[l]=m+(R-m)*S,o+=s;}return r}function U(c){let e=c.length,t=new Array(e);for(let i=0;i<e;i++){let a=c[i]*32768;t[i]=a<-32768?-32768:a>32767?32767:a;}return t}var T=class{constructor(e){this.audioContext=e;this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination);}audioContext;type="audio";currentNode;bufferQueue;gainNode;set volume(e){e<0&&(e=0),e>100&&(e=100),this.gainNode.gain.value=e/100;}get volume(){return Math.round(this.gainNode.gain.value*100)}addBuffer(e){this.bufferQueue.push(e);}addBufferByFloat32(e,t=1){let i=e.length,a=this.audioContext.sampleRate,n=this.audioContext.createBuffer(t,i,a),r=e.slice();for(let s=0;s<t;s++)n.copyToChannel(r,s);this.addBuffer(n);}addBufferByInt16(e,t=1){this.addBufferByFloat32(A(e),t);}startSpeech(){this.currentNode===null&&this.continue();}pauseSpeech(){this.audioContext.suspend().catch(e=>{u.error("pause speech fail",e);});}resumeSpeech(){this.audioContext.resume().catch(e=>{u.error("resume speech fail",e);});}nextSpeech(){this.bufferQueue.length>0&&(this.clearNode(),this.continue());}stopSpeech(){this.bufferQueue=[],this.clearNode();}clearNode(){this.currentNode&&(this.currentNode.onended=function(){},this.currentNode.stop(),this.currentNode.disconnect(),this.currentNode=null);}continue(){let e=this.bufferQueue.shift();if(e){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=e,this.currentNode.connect(this.gainNode);let t=this.continue.bind(this);this.currentNode.onended=t,this.currentNode.start();}else this.clearNode();}};var y=class extends HTMLElement{_shadow;_canvas;_ctx;_mode="waveform";_color="#00ffcc";_sampleRate=16e3;_isDebug=false;_ringBuffer;_bufferCapacity;_writePtr=0;_readPtr=0;_currentSize=0;_displayBuffer;_timeModifier=0;_smoothedVolume=0;_animationId=null;static get observedAttributes(){return ["mode","color","debug"]}constructor(){super(),this.id="AiiaVisualizer",this._shadow=this.attachShadow({mode:"open"}),this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d",{alpha:false}),this._settingStyle(),this._shadow.append(this._canvas),this._bufferCapacity=48e3,this._ringBuffer=new Float32Array(this._bufferCapacity),this._displayBuffer=new Float32Array(0);}attributeChangedCallback(e,t,i){switch(e){case "mode":(i==="waveform"||i==="siri")&&(this._mode=i,this._resetCanvas());break;case "color":i&&(this._color=i);break;case "debug":this._isDebug=i===null?false:i==="true"||i==="",this._isDebug?this.startRendering():this.stopRendering(),this.style.visibility=this._isDebug?"visible":"hidden";break}}connectedCallback(){this._setSize(),window.addEventListener("resize",()=>this._setSize());}disconnectedCallback(){this.stopRendering();}setSampleRate(e){this._sampleRate=e,this._bufferCapacity<e&&(this._bufferCapacity=e,this._ringBuffer=new Float32Array(this._bufferCapacity),this._writePtr=0,this._readPtr=0,this._currentSize=0);}addPcm(e){if(this._animationId===null)return;let t=e.length;for(let i=0;i<t;i++)this._ringBuffer[this._writePtr]=e[i],this._writePtr=(this._writePtr+1)%this._bufferCapacity;this._currentSize=Math.min(this._bufferCapacity,this._currentSize+t),this._currentSize===this._bufferCapacity&&t>0&&(this._readPtr=this._writePtr);}startRendering(){if(this._animationId!==null)return;let e=performance.now(),t=i=>{let a=(i-e)/1e3;e=i,this._update(a),this._draw(),this._animationId=requestAnimationFrame(t);};this._animationId=requestAnimationFrame(t);}stopRendering(){this._animationId!==null&&(cancelAnimationFrame(this._animationId),this._animationId=null),this._currentSize=0,this._writePtr=0,this._readPtr=0,this._smoothedVolume=0;}_settingStyle(){let e=document.createElement("style");e.textContent=`
27
27
  :host {
@@ -100,5 +100,5 @@ var P=typeof window<"u";typeof process<"u"&&process.versions!=null&&process.vers
100
100
  <div>ML: ${n.toFixed(1)}ms</div>
101
101
  <div>Draw: ${r.toFixed(1)}ms</div>
102
102
  <div>Budget: ${this._interval}ms</div>
103
- `,this._statsEl.style.color=s>this._interval?"#ff4444":"green",this._statsEl.style.borderColor=s>this._interval?"#ff4444":"green";}e.length>30&&(performance.clearMarks(),performance.clearMeasures());}_drawRect(e){let t=this._videoEl.offsetWidth;lodashEs.forEach(e,(i,a)=>{let{categories:n,boundingBox:r}=i;if(!r)return;let s=this._debugElements[a*2],o=this._debugElements[a*2+1];(!s||!o)&&(s=document.createElement("div"),s.classList.add("highlighter"),o=document.createElement("p"),o.classList.add("confidence"),this._containerEl.append(o,s),this._debugElements.push(s,o)),s.style.display="block",o.style.display="block";let{width:l,height:h,originX:S,originY:m}=r,R=t-l-S;s.style.width=`${l}px`,s.style.height=`${h}px`,s.style.transform=`translate3d(${-R}px, ${m}px, 0)`;let se=n[0].score*100;o.innerText=`Confidence: ${Math.round(se)}%`,o.style.width=`${l}px`,o.style.transform=`translate3d(${-R}px, ${m-25}px, 0)`;});for(let i=e.length*2;i<this._debugElements.length;i++)this._debugElements[i].style.display="none";}_drawRect2(e){this._canvasCtx&&this._drawingUtils&&(this._canvasCtx.save(),this._canvasCtx.clearRect(0,0,640,480),lodashEs.forEach(e,(t,i)=>{this._drawingUtils?.drawLandmarks(t,{radius:a=>tasksVision.DrawingUtils.lerp(a.from.z,-0.15,.1,5,1),color:this.landmarkColors[i]}),this._drawingUtils?.drawConnectors(t,tasksVision.PoseLandmarker.POSE_CONNECTIONS,{color:this.connectorColors[i],lineWidth:2});}),this._canvasCtx.restore());}destroy(){this._detectionsSub.complete(),this._landmarksSub.complete(),this.remove();}};customElements.define("aiia-camera",C);function O(){return f.visualizer}var f=class c{constructor(e,t,i){this.stream=e;this.audioContext=t;if(this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new rxjs.Subject,c.visualizer===null){let a=new y;document.body.append(a),c.visualizer=a;}this.visualizer=c.visualizer,this.visualizer.setSampleRate(this.outputSampleRate);}stream;audioContext;static visualizer=null;type="vad";workletNode;source;isRecording=false;outputSampleRate;chunkTimeInSeconds;pcmSub;visualizer;get pcm(){return this.pcmSub.asObservable()}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad",{processorOptions:{outputSampleRate:this.outputSampleRate,chunkTimeInSeconds:this.chunkTimeInSeconds}}),this.source.connect(this.workletNode),this.workletNode.port.onmessage=e=>{let{float32:t}=e.data;if(t){let i=new Float32Array(t);this.pcmSub.next(i),this.visualizer.addPcm(t);}},this.isRecording=true);}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=false);}};function D(){return b.camera}var b=class c{static MediaPipeTools=null;static camera=null;type="camera";aiiaCamera;get detections(){return this.aiiaCamera.detections}get landmarks(){return this.aiiaCamera.landmarks}get videoSize(){return this.aiiaCamera.videoSize}constructor(e){let{perSecond:t}=lodashEs.assign({perSecond:3},e);this.aiiaCamera=new C,document.body.append(this.aiiaCamera),this.aiiaCamera.setFrequency(t),c.camera=this.aiiaCamera,this.clearElement();}async init(e){try{if(c.MediaPipeTools===null){let a=await tasksVision.FilesetResolver.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");c.MediaPipeTools=await Promise.all([tasksVision.FaceDetector.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"}}),tasksVision.PoseLandmarker.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task",delegate:"GPU"},numPoses:5})]);}let[t,i]=c.MediaPipeTools;this.aiiaCamera.setFaceDetector(t),this.aiiaCamera.setPoseLandmarker(i),this.aiiaCamera.setStream(e);}catch(t){u.error("Camera init fail",t);}}clearElement(){lodashEs.forEach(document.querySelectorAll("aiia-camera#AiiaCamera"),e=>{this.aiiaCamera!==e&&e.destroy();});}startCapture(){this.aiiaCamera.startCapture();}stopCapture(){this.aiiaCamera.stopCapture();}onDestroy(){c.camera=null,this.aiiaCamera.destroy();}};function ke(c){let e=c.getAudioTracks(),i=e.length>0&&lodashEs.some(e,s=>s.enabled),a=c.getVideoTracks(),r=a.length>0&&lodashEs.some(a,s=>s.enabled);return {hasAudio:i,hasVideo:r}}var x=class{constructor(e){this.stream=e;this.stateSub=new rxjs.ReplaySubject(1),this.pcmSub=new rxjs.Subject,this.destroy=new rxjs.Subject,this.detectionsSub=new rxjs.Subject,this.landmarksSub=new rxjs.Subject,this.state=0;}stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destroy;pcmSub;detectionsSub;landmarksSub;volume=100;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get detections(){return this.detectionsSub.asObservable()}get landmarks(){return this.landmarksSub.asObservable()}get state(){return this._state}set state(e){e!==this._state&&(this._state=e,this.stateSub.next(e));}get stateObs(){return this.stateSub.asObservable()}async init(e,t){let i=this.stream===null?null:this.stream??await W({audio:{echoCancellation:true,noiseSuppression:true},video:true});if(i===null)throw this.state=1,new Error("ERROR CODE: 1003");this.stream=i,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(e);}catch(n){throw u.fatal(n),this.state=2,new Error("ERROR CODE: 1002")}this.state=3,this.audioManager=new T(this.audioCtx),this.audioManager.volume=this.volume,this.vadManager=new f(i,this.audioCtx,t),this.vadManager.pcm.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{this.pcmSub.next(n);});let a=new b(t?.detection);a.detections.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{let{width:r,height:s}=a.videoSize;this.detectionsSub.next({detections:n,clientWidth:r,clientHeight:s});}),a.landmarks.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{this.landmarksSub.next(n);}),a.init(i),this.camManager=a;}addAudioQueue(e){let t=lodashEs.get(e,"buffer",void 0),i=lodashEs.get(e,"float32",void 0),a=lodashEs.get(e,"int16",void 0),n=lodashEs.get(e,"numberOfChannels",void 0);t?this.audioManager?.addBuffer(t):i?this.audioManager?.addBufferByFloat32(i,n):a&&this.audioManager?.addBufferByInt16(a,n);}playAudio(){this.audioManager?.startSpeech();}stopAudio(){this.audioManager?.stopSpeech();}startRecord(){this.vadManager?.startRecord();}stopRecord(){this.vadManager?.stopRecord();}setVolume(e){this.volume=Math.max(0,Math.min(100,Math.round(e))),this.audioManager&&(this.audioManager.volume=this.volume);}getVolume(){return this.audioManager?this.audioManager.volume:this.volume}startCapture(){this.camManager?.startCapture();}stopCapture(){this.camManager?.stopCapture();}getInfo(){switch(this.state){case 0:return {mic:2,camera:2};case 1:return {mic:3,camera:3};case 2:return {mic:4,camera:4};case 3:if(this.stream){let{hasAudio:e,hasVideo:t}=ke(this.stream),i=e?5:6,a=t?5:6;return {mic:i,camera:a}}else return {mic:7,camera:7}}}onDestroy(){this.audioManager&&(this.volume=this.audioManager.volume,this.audioManager.stopSpeech(),this.audioManager=void 0),this.vadManager?.stopRecord(),this.vadManager=void 0,this.camManager?.onDestroy(),this.camManager=void 0,this.audioCtx?.close(),this.audioCtx=void 0,this.destroy.next(),this.destroy.complete();}};var H="v1.1.0-beta.17";var N=class{constructor(e,t){this.config=e;this.media=t;this.layoutSub=new rxjs.Subject,this.projectsSub=new rxjs.ReplaySubject(1),this.destroySub=new rxjs.Subject,this.aiiaSubtitleSub=new rxjs.Subject,this.userSubtitleSub=new rxjs.Subject,this.aiiaSubtitleClearSub=new rxjs.Subject,this.userSubtitleClearSub=new rxjs.Subject,this.stateSub=new rxjs.BehaviorSubject("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.isMuteAiia=false,this._lastProjects=[],this.guestSub=new rxjs.ReplaySubject(1),this._hasGuest=false,this.isStart=false,this.movementSub=new rxjs.Subject,this.chat=new E(e),u.code("CODE: 1011","chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this);let{userDelayTime:i,aiiaDelayTime:a}=e.autoClearSubtitle;isNaN(a)||this.aiiaSubtitleClearSub.pipe(rxjs.debounceTime(a),rxjs.takeUntil(this.destroySub)).subscribe(()=>{this.aiiaSubtitleSub.next("");}),isNaN(i)||this.userSubtitleClearSub.pipe(rxjs.debounceTime(i),rxjs.takeUntil(this.destroySub)).subscribe(()=>{this.userSubtitleSub.next("");}),this.stateSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._currentState=r;}),this.projectsSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._lastProjects=r;}),this.guestSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._hasGuest=r;}),rxjs.combineLatest([this.stateSub,this.media.stateObs]).pipe(rxjs.takeUntil(this.destroySub)).subscribe(([r,s])=>{if(s===3)switch(r){case "InServiceNoMedia":{this.media.startCapture(),this.media.startRecord(),this.stateSub.next("InService");break}case "InService":break;default:{this.media.stopCapture(),this.media.stopRecord();break}}});let n=F(this.config.detection.confidence);this.media.pcm.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("audio",U(r));}),this.media.detections.pipe(rxjs.takeUntil(this.destroySub)).subscribe(({detections:r,clientHeight:s,clientWidth:o})=>{this.chat.send("face",n(r,{width:o,height:s}));}),this.media.landmarks.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("pose",r);});}config;media;chat;destroySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;stateSub;_currentState;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;_lastProjects;guestSub;_hasGuest;isStart;movementSub;get state(){return this.stateSub.asObservable()}get currentState(){return this._currentState}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get lastProjects(){return lodashEs.cloneDeep(this._lastProjects)}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}get guest(){return this.guestSub.asObservable()}get hasGuest(){return this._hasGuest}set volume(e){this.media.setVolume(e);}get volume(){return this.media.getVolume()}get aiiaMovement(){return this.movementSub.asObservable()}start(){if(this.isStart){u.code("CODE: 1014");return}this.isStart=true,this.chat.message.pipe(rxjs.takeUntil(this.destroySub)).subscribe(({event:e,data:t})=>{switch(e){case "cloud":{lodashEs.map(t,this.behavior);break}case "list":{let{id:i,name:a,specific:n}=this.config.project,r=null;if(n&&i!==void 0)r=i;else {let s=lodashEs.find(t,o=>o.name===a||o.id===i);s&&(r=s.id);}r!==null?this.chooseProject(r):t===null?(this.stateSub.next("CloseService"),u.error("No project ready or lose network")):(this.projectsSub.next(t),this.stateSub.next("WaitingProjectID"),u.code("CODE: 1002"));break}case "channel":{switch(t){case "net_error":u.error("Please check network status");case "close":case "no_permissions":{this.stateSub.next("CloseService");break}case "reconnect":{this.stateSub.next("ReconnectingCloud");break}}break}case "monitor":{let i=this.media.getInfo();this.chat.send("monitor",i);break}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),u.code("CODE: 1012");}close;skip(){this.chat.sendToCloud({request:"skip"});}reset(){this.chat.sendToCloud({request:"reset"});}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud");}mute(){this.isMuteAiia=true,this.media.stopAudio(),this.media.stopRecord();}unmute(){this.isMuteAiia=false,this.media.startRecord();}switchMediaElement(e){let{camera:t,audio:i}=lodashEs.assign({},e);requestAnimationFrame(()=>{let n=D(),r=O();if(t!==void 0&&n&&n.setAttribute("debug",`${t}`),i!==void 0&&r)if(typeof i=="boolean")r.setAttribute("debug",`${i}`);else {let{mode:s,color:o,open:l=false}=i;r.setAttribute("debug",`${l}`),s&&r.setAttribute("mode",s),o&&r.setAttribute("color",o);}});}interactive(e,t){e==="button"&&this.chat.sendToCloud({request:e,content:t});}async getVersion(){let e=new Promise(i=>{let a=rxjs.timer(3e3).pipe(rxjs.map(()=>({aiiaCore:"Timeout",unreal:"Timeout",nodejs:"Timeout"})));rxjs.merge(a,this.chat.version).pipe(rxjs.take(1),rxjs.takeUntil(this.destroySub)).subscribe(i);});return this.chat.send("version",null),{...await e,initSdk:H}}behavior(e){switch(e.signal){case "layout":{this.layoutSub.next(e.content);break}case "audio":{if(e.command==="sampleRate")this.sampleRateOfWhisper.output=e.content;else switch(e.command){case "pcm":{if(!this.isMuteAiia){let t=M(A(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio(),this.movementSub.next({type:"lips",data:e.content});}break}case "interrupted":{this.media.stopAudio(),this.aiiaSubtitleSub.next(""),this.movementSub.next({type:"interrupted"});break}}break}case "status":{lodashEs.get(e,"content")==="Connected"&&this.proxyIsStable();break}case "agent":{if(!this.isMuteAiia){let t=lodashEs.get(e,"content.function_result.response");t!==void 0&&(this.aiiaSubtitleSub.next(t),this.aiiaSubtitleClearSub.next());}break}case "asr":{if(!this.isMuteAiia&&lodashEs.get(e,"content.function_type")==="ASR"){let t=lodashEs.get(e,"content.function_result.result");t!==void 0&&(this.userSubtitleSub.next(t),this.userSubtitleClearSub.next());}break}case "cv":{let t=lodashEs.get(e,"content.status");t==="user present"?this.guestSub.next(true):t==="user leave"?this.guestSub.next(false):u.warn("Unexpect value",lodashEs.get(e,"content"));break}case "osc":this.movementSub.next({type:"movement",data:e.content.message});default:{u.debug(e.signal);break}}}proxyIsStable(){this.chat.send("audio",this.sampleRateOfWhisper.input),this.media.state===3?(this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),u.code("CODE: 1000")):(this.stateSub.next("InServiceNoMedia"),u.code("CODE: 1001")),this.layoutSub.next({type:"resetLayout"});}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destroySub.next(),this.destroySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),u.code("CODE: 1013");}};function li(c){if(P){z(lodashEs.get(c,"debug",true)),u.code("CODE: 1010");let e=new k(lodashEs.assign({},c));u.code("CODE: 1011","config");let t=new x(e.mediaStream);u.code("CODE: 1011","media");let i=new N(e,t);return u.code("CODE: 1011","sdk"),e.worklet_url!==""&&t.init(e.worklet_url,e),i}else throw new Error("ERROR CODE: 1001")}
103
+ `,this._statsEl.style.color=s>this._interval?"#ff4444":"green",this._statsEl.style.borderColor=s>this._interval?"#ff4444":"green";}e.length>30&&(performance.clearMarks(),performance.clearMeasures());}_drawRect(e){let t=this._videoEl.offsetWidth;lodashEs.forEach(e,(i,a)=>{let{categories:n,boundingBox:r}=i;if(!r)return;let s=this._debugElements[a*2],o=this._debugElements[a*2+1];(!s||!o)&&(s=document.createElement("div"),s.classList.add("highlighter"),o=document.createElement("p"),o.classList.add("confidence"),this._containerEl.append(o,s),this._debugElements.push(s,o)),s.style.display="block",o.style.display="block";let{width:l,height:h,originX:S,originY:m}=r,R=t-l-S;s.style.width=`${l}px`,s.style.height=`${h}px`,s.style.transform=`translate3d(${-R}px, ${m}px, 0)`;let se=n[0].score*100;o.innerText=`Confidence: ${Math.round(se)}%`,o.style.width=`${l}px`,o.style.transform=`translate3d(${-R}px, ${m-25}px, 0)`;});for(let i=e.length*2;i<this._debugElements.length;i++)this._debugElements[i].style.display="none";}_drawRect2(e){this._canvasCtx&&this._drawingUtils&&(this._canvasCtx.save(),this._canvasCtx.clearRect(0,0,640,480),lodashEs.forEach(e,(t,i)=>{this._drawingUtils?.drawLandmarks(t,{radius:a=>tasksVision.DrawingUtils.lerp(a.from.z,-0.15,.1,5,1),color:this.landmarkColors[i]}),this._drawingUtils?.drawConnectors(t,tasksVision.PoseLandmarker.POSE_CONNECTIONS,{color:this.connectorColors[i],lineWidth:2});}),this._canvasCtx.restore());}destroy(){this._detectionsSub.complete(),this._landmarksSub.complete(),this.remove();}};customElements.define("aiia-camera",C);function O(){return f.visualizer}var f=class c{constructor(e,t,i){this.stream=e;this.audioContext=t;if(this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new rxjs.Subject,c.visualizer===null){let a=new y;document.body.append(a),c.visualizer=a;}this.visualizer=c.visualizer,this.visualizer.setSampleRate(this.outputSampleRate);}stream;audioContext;static visualizer=null;type="vad";workletNode;source;isRecording=false;outputSampleRate;chunkTimeInSeconds;pcmSub;visualizer;get pcm(){return this.pcmSub.asObservable()}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad",{processorOptions:{outputSampleRate:this.outputSampleRate,chunkTimeInSeconds:this.chunkTimeInSeconds}}),this.source.connect(this.workletNode),this.workletNode.port.onmessage=e=>{let{float32:t}=e.data;if(t){let i=new Float32Array(t);this.pcmSub.next(i),this.visualizer.addPcm(t);}},this.isRecording=true);}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=false);}};function D(){return b.camera}var b=class c{static MediaPipeTools=null;static camera=null;type="camera";aiiaCamera;get detections(){return this.aiiaCamera.detections}get landmarks(){return this.aiiaCamera.landmarks}get videoSize(){return this.aiiaCamera.videoSize}constructor(e){let{perSecond:t}=lodashEs.assign({perSecond:3},e);this.aiiaCamera=new C,document.body.append(this.aiiaCamera),this.aiiaCamera.setFrequency(t),c.camera=this.aiiaCamera,this.clearElement();}async init(e){try{if(c.MediaPipeTools===null){let a=await tasksVision.FilesetResolver.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");c.MediaPipeTools=await Promise.all([tasksVision.FaceDetector.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"}}),tasksVision.PoseLandmarker.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task",delegate:"GPU"},numPoses:5})]);}let[t,i]=c.MediaPipeTools;this.aiiaCamera.setFaceDetector(t),this.aiiaCamera.setPoseLandmarker(i),this.aiiaCamera.setStream(e);}catch(t){u.error("Camera init fail",t);}}clearElement(){lodashEs.forEach(document.querySelectorAll("aiia-camera#AiiaCamera"),e=>{this.aiiaCamera!==e&&e.destroy();});}startCapture(){this.aiiaCamera.startCapture();}stopCapture(){this.aiiaCamera.stopCapture();}onDestroy(){c.camera=null,this.aiiaCamera.destroy();}};function ke(c){let e=c.getAudioTracks(),i=e.length>0&&lodashEs.some(e,s=>s.enabled),a=c.getVideoTracks(),r=a.length>0&&lodashEs.some(a,s=>s.enabled);return {hasAudio:i,hasVideo:r}}var x=class{constructor(e){this.stream=e;this.stateSub=new rxjs.ReplaySubject(1),this.pcmSub=new rxjs.Subject,this.destroy=new rxjs.Subject,this.detectionsSub=new rxjs.Subject,this.landmarksSub=new rxjs.Subject,this.state=0;}stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destroy;pcmSub;detectionsSub;landmarksSub;volume=100;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get detections(){return this.detectionsSub.asObservable()}get landmarks(){return this.landmarksSub.asObservable()}get state(){return this._state}set state(e){e!==this._state&&(this._state=e,this.stateSub.next(e));}get stateObs(){return this.stateSub.asObservable()}async init(e,t){let i=this.stream===null?null:this.stream??await W({audio:{echoCancellation:true,noiseSuppression:true},video:true});if(i===null)throw this.state=1,new Error("ERROR CODE: 1003");this.stream=i,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(e);}catch(n){throw u.fatal(n),this.state=2,new Error("ERROR CODE: 1002")}this.state=3,this.audioManager=new T(this.audioCtx),this.audioManager.volume=this.volume,this.vadManager=new f(i,this.audioCtx,t),this.vadManager.pcm.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{this.pcmSub.next(n);});let a=new b(t?.detection);a.detections.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{let{width:r,height:s}=a.videoSize;this.detectionsSub.next({detections:n,clientWidth:r,clientHeight:s});}),a.landmarks.pipe(rxjs.takeUntil(this.destroy)).subscribe(n=>{this.landmarksSub.next(n);}),a.init(i),this.camManager=a;}addAudioQueue(e){let t=lodashEs.get(e,"buffer",void 0),i=lodashEs.get(e,"float32",void 0),a=lodashEs.get(e,"int16",void 0),n=lodashEs.get(e,"numberOfChannels",void 0);t?this.audioManager?.addBuffer(t):i?this.audioManager?.addBufferByFloat32(i,n):a&&this.audioManager?.addBufferByInt16(a,n);}playAudio(){this.audioManager?.startSpeech();}stopAudio(){this.audioManager?.stopSpeech();}startRecord(){this.vadManager?.startRecord();}stopRecord(){this.vadManager?.stopRecord();}setVolume(e){this.volume=Math.max(0,Math.min(100,Math.round(e))),this.audioManager&&(this.audioManager.volume=this.volume);}getVolume(){return this.audioManager?this.audioManager.volume:this.volume}startCapture(){this.camManager?.startCapture();}stopCapture(){this.camManager?.stopCapture();}getInfo(){switch(this.state){case 0:return {mic:2,camera:2};case 1:return {mic:3,camera:3};case 2:return {mic:4,camera:4};case 3:if(this.stream){let{hasAudio:e,hasVideo:t}=ke(this.stream),i=e?5:6,a=t?5:6;return {mic:i,camera:a}}else return {mic:7,camera:7}}}onDestroy(){this.audioManager&&(this.volume=this.audioManager.volume,this.audioManager.stopSpeech(),this.audioManager=void 0),this.vadManager?.stopRecord(),this.vadManager=void 0,this.camManager?.onDestroy(),this.camManager=void 0,this.audioCtx?.close(),this.audioCtx=void 0,this.destroy.next(),this.destroy.complete();}};var H="v1.1.0-beta.18";var N=class{constructor(e,t){this.config=e;this.media=t;this.layoutSub=new rxjs.Subject,this.projectsSub=new rxjs.ReplaySubject(1),this.destroySub=new rxjs.Subject,this.aiiaSubtitleSub=new rxjs.Subject,this.userSubtitleSub=new rxjs.Subject,this.aiiaSubtitleClearSub=new rxjs.Subject,this.userSubtitleClearSub=new rxjs.Subject,this.stateSub=new rxjs.BehaviorSubject("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.isMuteAiia=false,this._lastProjects=[],this.guestSub=new rxjs.ReplaySubject(1),this._hasGuest=false,this.isStart=false,this.movementSub=new rxjs.Subject,this.chat=new E(e),u.code("CODE: 1011","chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this);let{userDelayTime:i,aiiaDelayTime:a}=e.autoClearSubtitle;isNaN(a)||this.aiiaSubtitleClearSub.pipe(rxjs.debounceTime(a),rxjs.takeUntil(this.destroySub)).subscribe(()=>{this.aiiaSubtitleSub.next("");}),isNaN(i)||this.userSubtitleClearSub.pipe(rxjs.debounceTime(i),rxjs.takeUntil(this.destroySub)).subscribe(()=>{this.userSubtitleSub.next("");}),this.stateSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._currentState=r;}),this.projectsSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._lastProjects=r;}),this.guestSub.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this._hasGuest=r;}),rxjs.combineLatest([this.stateSub,this.media.stateObs]).pipe(rxjs.takeUntil(this.destroySub)).subscribe(([r,s])=>{if(s===3)switch(r){case "InServiceNoMedia":{this.media.startCapture(),this.media.startRecord(),this.stateSub.next("InService");break}case "InService":break;default:{this.media.stopCapture(),this.media.stopRecord();break}}});let n=F(this.config.detection.confidence);this.media.pcm.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("audio",U(r));}),this.media.detections.pipe(rxjs.takeUntil(this.destroySub)).subscribe(({detections:r,clientHeight:s,clientWidth:o})=>{this.chat.send("face",n(r,{width:o,height:s}));}),this.media.landmarks.pipe(rxjs.takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("pose",r);});}config;media;chat;destroySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;stateSub;_currentState;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;_lastProjects;guestSub;_hasGuest;isStart;movementSub;get state(){return this.stateSub.asObservable()}get currentState(){return this._currentState}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get lastProjects(){return lodashEs.cloneDeep(this._lastProjects)}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}get guest(){return this.guestSub.asObservable()}get hasGuest(){return this._hasGuest}set volume(e){this.media.setVolume(e);}get volume(){return this.media.getVolume()}get aiiaMovement(){return this.movementSub.asObservable()}start(){if(this.isStart){u.code("CODE: 1014");return}this.isStart=true,this.chat.message.pipe(rxjs.takeUntil(this.destroySub)).subscribe(({event:e,data:t})=>{switch(e){case "cloud":{lodashEs.map(t,this.behavior);break}case "list":{let{id:i,name:a,specific:n}=this.config.project,r=null;if(n&&i!==void 0)r=i;else {let s=lodashEs.find(t,o=>o.name===a||o.id===i);s&&(r=s.id);}r!==null?this.chooseProject(r):t===null?(this.stateSub.next("CloseService"),u.error("No project ready or lose network")):(this.projectsSub.next(t),this.stateSub.next("WaitingProjectID"),u.code("CODE: 1002"));break}case "channel":{switch(t){case "net_error":u.error("Please check network status");case "close":case "no_permissions":{this.stateSub.next("CloseService");break}case "reconnect":{this.stateSub.next("ReconnectingCloud");break}}break}case "monitor":{let i=this.media.getInfo();this.chat.send("monitor",i);break}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),u.code("CODE: 1012");}close;skip(){this.chat.sendToCloud({request:"skip"});}reset(){this.chat.sendToCloud({request:"reset"});}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud");}mute(){this.isMuteAiia=true,this.media.stopAudio(),this.media.stopRecord();}unmute(){this.isMuteAiia=false,this.media.startRecord();}switchMediaElement(e){let{camera:t,audio:i}=lodashEs.assign({},e);requestAnimationFrame(()=>{let n=D(),r=O();if(t!==void 0&&n&&n.setAttribute("debug",`${t}`),i!==void 0&&r)if(typeof i=="boolean")r.setAttribute("debug",`${i}`);else {let{mode:s,color:o,open:l=false}=i;r.setAttribute("debug",`${l}`),s&&r.setAttribute("mode",s),o&&r.setAttribute("color",o);}});}interactive(e,t){e==="button"&&this.chat.sendToCloud({request:e,content:t});}async getVersion(){let e=new Promise(i=>{let a=rxjs.timer(3e3).pipe(rxjs.map(()=>({aiiaCore:"Timeout",unreal:"Timeout",nodejs:"Timeout"})));rxjs.merge(a,this.chat.version).pipe(rxjs.take(1),rxjs.takeUntil(this.destroySub)).subscribe(i);});return this.chat.send("version",null),{...await e,initSdk:H}}behavior(e){switch(e.signal){case "layout":{this.layoutSub.next(e.content);break}case "audio":{if(e.command==="sampleRate")this.sampleRateOfWhisper.output=e.content;else switch(e.command){case "pcm":{if(!this.isMuteAiia){let t=M(A(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio(),this.movementSub.next({type:"lips",data:e.content});}break}case "interrupted":{this.media.stopAudio(),this.aiiaSubtitleSub.next(""),this.movementSub.next({type:"interrupted"});break}}break}case "status":{lodashEs.get(e,"content")==="Connected"&&this.proxyIsStable();break}case "agent":{if(!this.isMuteAiia){let t=lodashEs.get(e,"content.function_result.response");t!==void 0&&(this.aiiaSubtitleSub.next(t),this.aiiaSubtitleClearSub.next());}break}case "asr":{if(!this.isMuteAiia&&lodashEs.get(e,"content.function_type")==="ASR"){let t=lodashEs.get(e,"content.function_result.result");t!==void 0&&(this.userSubtitleSub.next(t),this.userSubtitleClearSub.next());}break}case "cv":{let t=lodashEs.get(e,"content.status");t==="user present"?this.guestSub.next(true):t==="user leave"?this.guestSub.next(false):u.warn("Unexpect value",lodashEs.get(e,"content"));break}case "osc":this.movementSub.next({type:"movement",data:e.content.message});default:{u.debug(e.signal);break}}}proxyIsStable(){this.chat.send("audio",this.sampleRateOfWhisper.input),this.media.state===3?(this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),u.code("CODE: 1000")):(this.stateSub.next("InServiceNoMedia"),u.code("CODE: 1001")),this.layoutSub.next({type:"resetLayout"});}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destroySub.next(),this.destroySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),u.code("CODE: 1013");}};function li(c){if(P){z(lodashEs.get(c,"debug",true)),u.code("CODE: 1010");let e=new k(lodashEs.assign({},c));u.code("CODE: 1011","config");let t=new x(e.mediaStream);u.code("CODE: 1011","media");let i=new N(e,t);return u.code("CODE: 1011","sdk"),e.worklet_url!==""&&t.init(e.worklet_url,e),i}else throw new Error("ERROR CODE: 1001")}
104
104
  exports.VERSION=H;exports.initSdk=li;
@@ -21,7 +21,7 @@ import {forEach,get,assign,cloneDeep,find,map,some,filter,compact,sortBy}from'lo
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  *
24
- * UPDATA DATE: 2026/6/18
24
+ * UPDATA DATE: 2026/6/22
25
25
  */
26
26
  var P=typeof window<"u";typeof process<"u"&&process.versions!=null&&process.versions.node!=null;function j(c,e){let t=typeof e=="number"?e:NaN;if(c){let i=Number(c);return isNaN(i)?t:i}else return t}var k=class{constructor(e){this.config=e;}config;get webserver(){return this.safeRead("webserver")}get environment(){let e=this.safeRead("env");return typeof e=="string"?e:"production"}get license(){return this.safeRead("group_id")??""}get note(){return this.safeRead("note")}get deviceName(){return this.safeRead("device_name")}get port(){return j(process.env.PORT,this.safeRead("port")??3e3)}get ws_url(){let e=this.safeRead("ws_url");return typeof e=="string"?e:""}get worklet_url(){let e=this.safeRead("worklet_url");return typeof e=="string"?e:""}get project(){let e=this.safeRead("project");if(e===void 0)return {specific:false};if(typeof e=="string")return {name:e,id:e,specific:false};{let t=get(e,"id",void 0),i=get(e,"name",void 0);return {id:typeof t=="string"?t:void 0,name:typeof i=="string"?i:void 0,specific:true}}}get endPoint(){let e=this.safeRead("cloudEndPoint");if(e)return {api:e,socket:e.replace(/^http/,"ws")};{let t="dev";switch(this.environment){case "production":t="prod";break;case "qa":t="qa";break;case "test":t="test";break;}let i=`graphen-agentic-workflow-${t}-21193779403.asia-east1.run.app`;return {api:`https://${i}`,socket:`wss://${i}`}}}get debug(){return this.safeRead("debug")??true}get mediaStream(){return this.safeRead("mediaStream")}get chunkTimeInSeconds(){let t=this.safeRead("chunkTimeInSeconds");return typeof t=="number"&&t>0?t:.3}get llmSampleRate(){let t=this.safeRead("llmSampleRate");return typeof t=="number"&&t>0?t:16e3}get detection(){return assign({perSecond:3,confidence:80},this.safeRead("cameraDetection"))}get autoClearSubtitle(){let e=this.safeRead("autoClearUserSubtitle"),t=this.safeRead("autoClearAiiaSubtitle");return {userDelayTime:typeof e=="number"?e:5e3,aiiaDelayTime:typeof t=="number"?t:NaN}}get eyeTrackEnable(){return !!this.safeRead("eyeTrackEnable")}get eyeTrackCorrection(){return assign({x_axis_px:0,y_axis_px:0},this.safeRead("correction"))}get avatartService(){let e=this.safeRead("avatartService");return typeof e=="boolean"?e:true}safeRead(e){return get(this.config,e,void 0)}};var p={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},K=[];function Y(...c){return K.push(...c),Y}function z(c){function e(o){if(o===void 0||o==="all")return {code:true,error:true,warn:true,info:true,debug:true,fatal:true};if(o==="none")return {error:false,code:false,warn:false,info:false,debug:false,fatal:false};if(typeof o=="boolean")return {code:o,error:o,warn:o,info:o,debug:o,fatal:o};{let l=new Set(o);return {code:l.has("code"),debug:l.has("debug"),fatal:l.has("fatal"),error:l.has("error"),warn:l.has("warn"),info:l.has("info")}}}let{info:t,error:i,warn:a,debug:n,fatal:r,code:s}=e(c);return s||(p.code=()=>{}),n||(p.debug=()=>{}),t||(p.info=()=>{}),a||(p.warn=()=>{}),i||(p.error=()=>{}),r||(p.fatal=()=>{}),Y}function Q(c){return new Proxy(p,{get(e,t,i){if(typeof t=="string")switch(t){case "debug":case "info":case "error":case "warn":case "fatal":case "code":return (...a)=>{let n=ce().format("yyyy-MM-DD[T]HH:mm:ss:sss");forEach(K,r=>{(r.category===void 0||r.category.includes(c))&&r.next(t,n,c,...a);}),e[t](`[Aiia::${t}_${n}_](${c})`,...a);};default:return}else return},set(e,t,i,a){return true}})}var u=Q("default");function F(c){return function(e,t){let{width:i,height:a}=t,n=filter(e,s=>(s.categories[0]?.score??0)*100>=c),r=compact(map(n,s=>{if(s.boundingBox!==void 0){let o=s.boundingBox,l=o.width*o.height,h=s.categories[0]?.score??0;return {...o,area:l,score:h*100,clientWidth:i,clientHeight:a}}else return null}));return sortBy(r,["area","score"])[0]??null}}var E=class{socket;messageSub;versionSub;destorySub;get message(){return this.messageSub.asObservable()}get version(){return this.versionSub.asObservable()}constructor(e){this.destorySub=new Subject,this.messageSub=new Subject,this.versionSub=new Subject;let{specific:t,id:i}=e.project;this.socket=io(e.ws_url,assign({autoConnect:false},t&&i!==void 0?{query:{uuid:i}}:{}));}start(){let e="list",t="cloud",i="channel",a="monitor",n="version";fromEvent(this.socket,"connect").pipe(takeUntil(this.destorySub)).subscribe(()=>{u.debug("Client ID: ",this.socket.id);}),fromEvent(this.socket,e).pipe(take(1),takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:e,data:r});}),fromEvent(this.socket,t).pipe(takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:t,data:r});}),fromEvent(this.socket,i).pipe(takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:i,data:r});}),fromEvent(this.socket,a).pipe(takeUntil(this.destorySub)).subscribe(r=>{this.messageSub.next({event:a,data:r});}),fromEvent(this.socket,n).pipe(takeUntil(this.destorySub)).subscribe(r=>{this.versionSub.next(r);}),this.socket.connect();}send(e,t){this.socket.emit(e,t);}sendToCloud(e){this.send("cloud",e);}onDestroy(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect();}};async function W(c){try{return await navigator.mediaDevices.getUserMedia(c)}catch{return null}}function A(c){let e=new Float32Array(c.length);for(let t=0;t<c.length;t++)e[t]=c[t]/32768;return e}function M(c,e,t){if(e===t)return c;let i=t/e,a=c.length,n=Math.ceil(a*i),r=new Float32Array(n),s=1/i,o=0;for(let l=0;l<n;l++){let h=o|0,S=o-h,m=c[h],R=h+1<a?c[h+1]:m;r[l]=m+(R-m)*S,o+=s;}return r}function U(c){let e=c.length,t=new Array(e);for(let i=0;i<e;i++){let a=c[i]*32768;t[i]=a<-32768?-32768:a>32767?32767:a;}return t}var T=class{constructor(e){this.audioContext=e;this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination);}audioContext;type="audio";currentNode;bufferQueue;gainNode;set volume(e){e<0&&(e=0),e>100&&(e=100),this.gainNode.gain.value=e/100;}get volume(){return Math.round(this.gainNode.gain.value*100)}addBuffer(e){this.bufferQueue.push(e);}addBufferByFloat32(e,t=1){let i=e.length,a=this.audioContext.sampleRate,n=this.audioContext.createBuffer(t,i,a),r=e.slice();for(let s=0;s<t;s++)n.copyToChannel(r,s);this.addBuffer(n);}addBufferByInt16(e,t=1){this.addBufferByFloat32(A(e),t);}startSpeech(){this.currentNode===null&&this.continue();}pauseSpeech(){this.audioContext.suspend().catch(e=>{u.error("pause speech fail",e);});}resumeSpeech(){this.audioContext.resume().catch(e=>{u.error("resume speech fail",e);});}nextSpeech(){this.bufferQueue.length>0&&(this.clearNode(),this.continue());}stopSpeech(){this.bufferQueue=[],this.clearNode();}clearNode(){this.currentNode&&(this.currentNode.onended=function(){},this.currentNode.stop(),this.currentNode.disconnect(),this.currentNode=null);}continue(){let e=this.bufferQueue.shift();if(e){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=e,this.currentNode.connect(this.gainNode);let t=this.continue.bind(this);this.currentNode.onended=t,this.currentNode.start();}else this.clearNode();}};var y=class extends HTMLElement{_shadow;_canvas;_ctx;_mode="waveform";_color="#00ffcc";_sampleRate=16e3;_isDebug=false;_ringBuffer;_bufferCapacity;_writePtr=0;_readPtr=0;_currentSize=0;_displayBuffer;_timeModifier=0;_smoothedVolume=0;_animationId=null;static get observedAttributes(){return ["mode","color","debug"]}constructor(){super(),this.id="AiiaVisualizer",this._shadow=this.attachShadow({mode:"open"}),this._canvas=document.createElement("canvas"),this._ctx=this._canvas.getContext("2d",{alpha:false}),this._settingStyle(),this._shadow.append(this._canvas),this._bufferCapacity=48e3,this._ringBuffer=new Float32Array(this._bufferCapacity),this._displayBuffer=new Float32Array(0);}attributeChangedCallback(e,t,i){switch(e){case "mode":(i==="waveform"||i==="siri")&&(this._mode=i,this._resetCanvas());break;case "color":i&&(this._color=i);break;case "debug":this._isDebug=i===null?false:i==="true"||i==="",this._isDebug?this.startRendering():this.stopRendering(),this.style.visibility=this._isDebug?"visible":"hidden";break}}connectedCallback(){this._setSize(),window.addEventListener("resize",()=>this._setSize());}disconnectedCallback(){this.stopRendering();}setSampleRate(e){this._sampleRate=e,this._bufferCapacity<e&&(this._bufferCapacity=e,this._ringBuffer=new Float32Array(this._bufferCapacity),this._writePtr=0,this._readPtr=0,this._currentSize=0);}addPcm(e){if(this._animationId===null)return;let t=e.length;for(let i=0;i<t;i++)this._ringBuffer[this._writePtr]=e[i],this._writePtr=(this._writePtr+1)%this._bufferCapacity;this._currentSize=Math.min(this._bufferCapacity,this._currentSize+t),this._currentSize===this._bufferCapacity&&t>0&&(this._readPtr=this._writePtr);}startRendering(){if(this._animationId!==null)return;let e=performance.now(),t=i=>{let a=(i-e)/1e3;e=i,this._update(a),this._draw(),this._animationId=requestAnimationFrame(t);};this._animationId=requestAnimationFrame(t);}stopRendering(){this._animationId!==null&&(cancelAnimationFrame(this._animationId),this._animationId=null),this._currentSize=0,this._writePtr=0,this._readPtr=0,this._smoothedVolume=0;}_settingStyle(){let e=document.createElement("style");e.textContent=`
27
27
  :host {
@@ -100,5 +100,5 @@ var P=typeof window<"u";typeof process<"u"&&process.versions!=null&&process.vers
100
100
  <div>ML: ${n.toFixed(1)}ms</div>
101
101
  <div>Draw: ${r.toFixed(1)}ms</div>
102
102
  <div>Budget: ${this._interval}ms</div>
103
- `,this._statsEl.style.color=s>this._interval?"#ff4444":"green",this._statsEl.style.borderColor=s>this._interval?"#ff4444":"green";}e.length>30&&(performance.clearMarks(),performance.clearMeasures());}_drawRect(e){let t=this._videoEl.offsetWidth;forEach(e,(i,a)=>{let{categories:n,boundingBox:r}=i;if(!r)return;let s=this._debugElements[a*2],o=this._debugElements[a*2+1];(!s||!o)&&(s=document.createElement("div"),s.classList.add("highlighter"),o=document.createElement("p"),o.classList.add("confidence"),this._containerEl.append(o,s),this._debugElements.push(s,o)),s.style.display="block",o.style.display="block";let{width:l,height:h,originX:S,originY:m}=r,R=t-l-S;s.style.width=`${l}px`,s.style.height=`${h}px`,s.style.transform=`translate3d(${-R}px, ${m}px, 0)`;let se=n[0].score*100;o.innerText=`Confidence: ${Math.round(se)}%`,o.style.width=`${l}px`,o.style.transform=`translate3d(${-R}px, ${m-25}px, 0)`;});for(let i=e.length*2;i<this._debugElements.length;i++)this._debugElements[i].style.display="none";}_drawRect2(e){this._canvasCtx&&this._drawingUtils&&(this._canvasCtx.save(),this._canvasCtx.clearRect(0,0,640,480),forEach(e,(t,i)=>{this._drawingUtils?.drawLandmarks(t,{radius:a=>DrawingUtils.lerp(a.from.z,-0.15,.1,5,1),color:this.landmarkColors[i]}),this._drawingUtils?.drawConnectors(t,PoseLandmarker.POSE_CONNECTIONS,{color:this.connectorColors[i],lineWidth:2});}),this._canvasCtx.restore());}destroy(){this._detectionsSub.complete(),this._landmarksSub.complete(),this.remove();}};customElements.define("aiia-camera",C);function O(){return f.visualizer}var f=class c{constructor(e,t,i){this.stream=e;this.audioContext=t;if(this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new Subject,c.visualizer===null){let a=new y;document.body.append(a),c.visualizer=a;}this.visualizer=c.visualizer,this.visualizer.setSampleRate(this.outputSampleRate);}stream;audioContext;static visualizer=null;type="vad";workletNode;source;isRecording=false;outputSampleRate;chunkTimeInSeconds;pcmSub;visualizer;get pcm(){return this.pcmSub.asObservable()}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad",{processorOptions:{outputSampleRate:this.outputSampleRate,chunkTimeInSeconds:this.chunkTimeInSeconds}}),this.source.connect(this.workletNode),this.workletNode.port.onmessage=e=>{let{float32:t}=e.data;if(t){let i=new Float32Array(t);this.pcmSub.next(i),this.visualizer.addPcm(t);}},this.isRecording=true);}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=false);}};function D(){return b.camera}var b=class c{static MediaPipeTools=null;static camera=null;type="camera";aiiaCamera;get detections(){return this.aiiaCamera.detections}get landmarks(){return this.aiiaCamera.landmarks}get videoSize(){return this.aiiaCamera.videoSize}constructor(e){let{perSecond:t}=assign({perSecond:3},e);this.aiiaCamera=new C,document.body.append(this.aiiaCamera),this.aiiaCamera.setFrequency(t),c.camera=this.aiiaCamera,this.clearElement();}async init(e){try{if(c.MediaPipeTools===null){let a=await FilesetResolver.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");c.MediaPipeTools=await Promise.all([FaceDetector.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"}}),PoseLandmarker.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task",delegate:"GPU"},numPoses:5})]);}let[t,i]=c.MediaPipeTools;this.aiiaCamera.setFaceDetector(t),this.aiiaCamera.setPoseLandmarker(i),this.aiiaCamera.setStream(e);}catch(t){u.error("Camera init fail",t);}}clearElement(){forEach(document.querySelectorAll("aiia-camera#AiiaCamera"),e=>{this.aiiaCamera!==e&&e.destroy();});}startCapture(){this.aiiaCamera.startCapture();}stopCapture(){this.aiiaCamera.stopCapture();}onDestroy(){c.camera=null,this.aiiaCamera.destroy();}};function ke(c){let e=c.getAudioTracks(),i=e.length>0&&some(e,s=>s.enabled),a=c.getVideoTracks(),r=a.length>0&&some(a,s=>s.enabled);return {hasAudio:i,hasVideo:r}}var x=class{constructor(e){this.stream=e;this.stateSub=new ReplaySubject(1),this.pcmSub=new Subject,this.destroy=new Subject,this.detectionsSub=new Subject,this.landmarksSub=new Subject,this.state=0;}stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destroy;pcmSub;detectionsSub;landmarksSub;volume=100;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get detections(){return this.detectionsSub.asObservable()}get landmarks(){return this.landmarksSub.asObservable()}get state(){return this._state}set state(e){e!==this._state&&(this._state=e,this.stateSub.next(e));}get stateObs(){return this.stateSub.asObservable()}async init(e,t){let i=this.stream===null?null:this.stream??await W({audio:{echoCancellation:true,noiseSuppression:true},video:true});if(i===null)throw this.state=1,new Error("ERROR CODE: 1003");this.stream=i,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(e);}catch(n){throw u.fatal(n),this.state=2,new Error("ERROR CODE: 1002")}this.state=3,this.audioManager=new T(this.audioCtx),this.audioManager.volume=this.volume,this.vadManager=new f(i,this.audioCtx,t),this.vadManager.pcm.pipe(takeUntil(this.destroy)).subscribe(n=>{this.pcmSub.next(n);});let a=new b(t?.detection);a.detections.pipe(takeUntil(this.destroy)).subscribe(n=>{let{width:r,height:s}=a.videoSize;this.detectionsSub.next({detections:n,clientWidth:r,clientHeight:s});}),a.landmarks.pipe(takeUntil(this.destroy)).subscribe(n=>{this.landmarksSub.next(n);}),a.init(i),this.camManager=a;}addAudioQueue(e){let t=get(e,"buffer",void 0),i=get(e,"float32",void 0),a=get(e,"int16",void 0),n=get(e,"numberOfChannels",void 0);t?this.audioManager?.addBuffer(t):i?this.audioManager?.addBufferByFloat32(i,n):a&&this.audioManager?.addBufferByInt16(a,n);}playAudio(){this.audioManager?.startSpeech();}stopAudio(){this.audioManager?.stopSpeech();}startRecord(){this.vadManager?.startRecord();}stopRecord(){this.vadManager?.stopRecord();}setVolume(e){this.volume=Math.max(0,Math.min(100,Math.round(e))),this.audioManager&&(this.audioManager.volume=this.volume);}getVolume(){return this.audioManager?this.audioManager.volume:this.volume}startCapture(){this.camManager?.startCapture();}stopCapture(){this.camManager?.stopCapture();}getInfo(){switch(this.state){case 0:return {mic:2,camera:2};case 1:return {mic:3,camera:3};case 2:return {mic:4,camera:4};case 3:if(this.stream){let{hasAudio:e,hasVideo:t}=ke(this.stream),i=e?5:6,a=t?5:6;return {mic:i,camera:a}}else return {mic:7,camera:7}}}onDestroy(){this.audioManager&&(this.volume=this.audioManager.volume,this.audioManager.stopSpeech(),this.audioManager=void 0),this.vadManager?.stopRecord(),this.vadManager=void 0,this.camManager?.onDestroy(),this.camManager=void 0,this.audioCtx?.close(),this.audioCtx=void 0,this.destroy.next(),this.destroy.complete();}};var H="v1.1.0-beta.17";var N=class{constructor(e,t){this.config=e;this.media=t;this.layoutSub=new Subject,this.projectsSub=new ReplaySubject(1),this.destroySub=new Subject,this.aiiaSubtitleSub=new Subject,this.userSubtitleSub=new Subject,this.aiiaSubtitleClearSub=new Subject,this.userSubtitleClearSub=new Subject,this.stateSub=new BehaviorSubject("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.isMuteAiia=false,this._lastProjects=[],this.guestSub=new ReplaySubject(1),this._hasGuest=false,this.isStart=false,this.movementSub=new Subject,this.chat=new E(e),u.code("CODE: 1011","chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this);let{userDelayTime:i,aiiaDelayTime:a}=e.autoClearSubtitle;isNaN(a)||this.aiiaSubtitleClearSub.pipe(debounceTime(a),takeUntil(this.destroySub)).subscribe(()=>{this.aiiaSubtitleSub.next("");}),isNaN(i)||this.userSubtitleClearSub.pipe(debounceTime(i),takeUntil(this.destroySub)).subscribe(()=>{this.userSubtitleSub.next("");}),this.stateSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._currentState=r;}),this.projectsSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._lastProjects=r;}),this.guestSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._hasGuest=r;}),combineLatest([this.stateSub,this.media.stateObs]).pipe(takeUntil(this.destroySub)).subscribe(([r,s])=>{if(s===3)switch(r){case "InServiceNoMedia":{this.media.startCapture(),this.media.startRecord(),this.stateSub.next("InService");break}case "InService":break;default:{this.media.stopCapture(),this.media.stopRecord();break}}});let n=F(this.config.detection.confidence);this.media.pcm.pipe(takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("audio",U(r));}),this.media.detections.pipe(takeUntil(this.destroySub)).subscribe(({detections:r,clientHeight:s,clientWidth:o})=>{this.chat.send("face",n(r,{width:o,height:s}));}),this.media.landmarks.pipe(takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("pose",r);});}config;media;chat;destroySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;stateSub;_currentState;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;_lastProjects;guestSub;_hasGuest;isStart;movementSub;get state(){return this.stateSub.asObservable()}get currentState(){return this._currentState}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get lastProjects(){return cloneDeep(this._lastProjects)}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}get guest(){return this.guestSub.asObservable()}get hasGuest(){return this._hasGuest}set volume(e){this.media.setVolume(e);}get volume(){return this.media.getVolume()}get aiiaMovement(){return this.movementSub.asObservable()}start(){if(this.isStart){u.code("CODE: 1014");return}this.isStart=true,this.chat.message.pipe(takeUntil(this.destroySub)).subscribe(({event:e,data:t})=>{switch(e){case "cloud":{map(t,this.behavior);break}case "list":{let{id:i,name:a,specific:n}=this.config.project,r=null;if(n&&i!==void 0)r=i;else {let s=find(t,o=>o.name===a||o.id===i);s&&(r=s.id);}r!==null?this.chooseProject(r):t===null?(this.stateSub.next("CloseService"),u.error("No project ready or lose network")):(this.projectsSub.next(t),this.stateSub.next("WaitingProjectID"),u.code("CODE: 1002"));break}case "channel":{switch(t){case "net_error":u.error("Please check network status");case "close":case "no_permissions":{this.stateSub.next("CloseService");break}case "reconnect":{this.stateSub.next("ReconnectingCloud");break}}break}case "monitor":{let i=this.media.getInfo();this.chat.send("monitor",i);break}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),u.code("CODE: 1012");}close;skip(){this.chat.sendToCloud({request:"skip"});}reset(){this.chat.sendToCloud({request:"reset"});}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud");}mute(){this.isMuteAiia=true,this.media.stopAudio(),this.media.stopRecord();}unmute(){this.isMuteAiia=false,this.media.startRecord();}switchMediaElement(e){let{camera:t,audio:i}=assign({},e);requestAnimationFrame(()=>{let n=D(),r=O();if(t!==void 0&&n&&n.setAttribute("debug",`${t}`),i!==void 0&&r)if(typeof i=="boolean")r.setAttribute("debug",`${i}`);else {let{mode:s,color:o,open:l=false}=i;r.setAttribute("debug",`${l}`),s&&r.setAttribute("mode",s),o&&r.setAttribute("color",o);}});}interactive(e,t){e==="button"&&this.chat.sendToCloud({request:e,content:t});}async getVersion(){let e=new Promise(i=>{let a=timer(3e3).pipe(map$1(()=>({aiiaCore:"Timeout",unreal:"Timeout",nodejs:"Timeout"})));merge(a,this.chat.version).pipe(take(1),takeUntil(this.destroySub)).subscribe(i);});return this.chat.send("version",null),{...await e,initSdk:H}}behavior(e){switch(e.signal){case "layout":{this.layoutSub.next(e.content);break}case "audio":{if(e.command==="sampleRate")this.sampleRateOfWhisper.output=e.content;else switch(e.command){case "pcm":{if(!this.isMuteAiia){let t=M(A(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio(),this.movementSub.next({type:"lips",data:e.content});}break}case "interrupted":{this.media.stopAudio(),this.aiiaSubtitleSub.next(""),this.movementSub.next({type:"interrupted"});break}}break}case "status":{get(e,"content")==="Connected"&&this.proxyIsStable();break}case "agent":{if(!this.isMuteAiia){let t=get(e,"content.function_result.response");t!==void 0&&(this.aiiaSubtitleSub.next(t),this.aiiaSubtitleClearSub.next());}break}case "asr":{if(!this.isMuteAiia&&get(e,"content.function_type")==="ASR"){let t=get(e,"content.function_result.result");t!==void 0&&(this.userSubtitleSub.next(t),this.userSubtitleClearSub.next());}break}case "cv":{let t=get(e,"content.status");t==="user present"?this.guestSub.next(true):t==="user leave"?this.guestSub.next(false):u.warn("Unexpect value",get(e,"content"));break}case "osc":this.movementSub.next({type:"movement",data:e.content.message});default:{u.debug(e.signal);break}}}proxyIsStable(){this.chat.send("audio",this.sampleRateOfWhisper.input),this.media.state===3?(this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),u.code("CODE: 1000")):(this.stateSub.next("InServiceNoMedia"),u.code("CODE: 1001")),this.layoutSub.next({type:"resetLayout"});}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destroySub.next(),this.destroySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),u.code("CODE: 1013");}};function li(c){if(P){z(get(c,"debug",true)),u.code("CODE: 1010");let e=new k(assign({},c));u.code("CODE: 1011","config");let t=new x(e.mediaStream);u.code("CODE: 1011","media");let i=new N(e,t);return u.code("CODE: 1011","sdk"),e.worklet_url!==""&&t.init(e.worklet_url,e),i}else throw new Error("ERROR CODE: 1001")}
103
+ `,this._statsEl.style.color=s>this._interval?"#ff4444":"green",this._statsEl.style.borderColor=s>this._interval?"#ff4444":"green";}e.length>30&&(performance.clearMarks(),performance.clearMeasures());}_drawRect(e){let t=this._videoEl.offsetWidth;forEach(e,(i,a)=>{let{categories:n,boundingBox:r}=i;if(!r)return;let s=this._debugElements[a*2],o=this._debugElements[a*2+1];(!s||!o)&&(s=document.createElement("div"),s.classList.add("highlighter"),o=document.createElement("p"),o.classList.add("confidence"),this._containerEl.append(o,s),this._debugElements.push(s,o)),s.style.display="block",o.style.display="block";let{width:l,height:h,originX:S,originY:m}=r,R=t-l-S;s.style.width=`${l}px`,s.style.height=`${h}px`,s.style.transform=`translate3d(${-R}px, ${m}px, 0)`;let se=n[0].score*100;o.innerText=`Confidence: ${Math.round(se)}%`,o.style.width=`${l}px`,o.style.transform=`translate3d(${-R}px, ${m-25}px, 0)`;});for(let i=e.length*2;i<this._debugElements.length;i++)this._debugElements[i].style.display="none";}_drawRect2(e){this._canvasCtx&&this._drawingUtils&&(this._canvasCtx.save(),this._canvasCtx.clearRect(0,0,640,480),forEach(e,(t,i)=>{this._drawingUtils?.drawLandmarks(t,{radius:a=>DrawingUtils.lerp(a.from.z,-0.15,.1,5,1),color:this.landmarkColors[i]}),this._drawingUtils?.drawConnectors(t,PoseLandmarker.POSE_CONNECTIONS,{color:this.connectorColors[i],lineWidth:2});}),this._canvasCtx.restore());}destroy(){this._detectionsSub.complete(),this._landmarksSub.complete(),this.remove();}};customElements.define("aiia-camera",C);function O(){return f.visualizer}var f=class c{constructor(e,t,i){this.stream=e;this.audioContext=t;if(this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new Subject,c.visualizer===null){let a=new y;document.body.append(a),c.visualizer=a;}this.visualizer=c.visualizer,this.visualizer.setSampleRate(this.outputSampleRate);}stream;audioContext;static visualizer=null;type="vad";workletNode;source;isRecording=false;outputSampleRate;chunkTimeInSeconds;pcmSub;visualizer;get pcm(){return this.pcmSub.asObservable()}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad",{processorOptions:{outputSampleRate:this.outputSampleRate,chunkTimeInSeconds:this.chunkTimeInSeconds}}),this.source.connect(this.workletNode),this.workletNode.port.onmessage=e=>{let{float32:t}=e.data;if(t){let i=new Float32Array(t);this.pcmSub.next(i),this.visualizer.addPcm(t);}},this.isRecording=true);}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=false);}};function D(){return b.camera}var b=class c{static MediaPipeTools=null;static camera=null;type="camera";aiiaCamera;get detections(){return this.aiiaCamera.detections}get landmarks(){return this.aiiaCamera.landmarks}get videoSize(){return this.aiiaCamera.videoSize}constructor(e){let{perSecond:t}=assign({perSecond:3},e);this.aiiaCamera=new C,document.body.append(this.aiiaCamera),this.aiiaCamera.setFrequency(t),c.camera=this.aiiaCamera,this.clearElement();}async init(e){try{if(c.MediaPipeTools===null){let a=await FilesetResolver.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");c.MediaPipeTools=await Promise.all([FaceDetector.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"}}),PoseLandmarker.createFromOptions(a,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task",delegate:"GPU"},numPoses:5})]);}let[t,i]=c.MediaPipeTools;this.aiiaCamera.setFaceDetector(t),this.aiiaCamera.setPoseLandmarker(i),this.aiiaCamera.setStream(e);}catch(t){u.error("Camera init fail",t);}}clearElement(){forEach(document.querySelectorAll("aiia-camera#AiiaCamera"),e=>{this.aiiaCamera!==e&&e.destroy();});}startCapture(){this.aiiaCamera.startCapture();}stopCapture(){this.aiiaCamera.stopCapture();}onDestroy(){c.camera=null,this.aiiaCamera.destroy();}};function ke(c){let e=c.getAudioTracks(),i=e.length>0&&some(e,s=>s.enabled),a=c.getVideoTracks(),r=a.length>0&&some(a,s=>s.enabled);return {hasAudio:i,hasVideo:r}}var x=class{constructor(e){this.stream=e;this.stateSub=new ReplaySubject(1),this.pcmSub=new Subject,this.destroy=new Subject,this.detectionsSub=new Subject,this.landmarksSub=new Subject,this.state=0;}stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destroy;pcmSub;detectionsSub;landmarksSub;volume=100;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get detections(){return this.detectionsSub.asObservable()}get landmarks(){return this.landmarksSub.asObservable()}get state(){return this._state}set state(e){e!==this._state&&(this._state=e,this.stateSub.next(e));}get stateObs(){return this.stateSub.asObservable()}async init(e,t){let i=this.stream===null?null:this.stream??await W({audio:{echoCancellation:true,noiseSuppression:true},video:true});if(i===null)throw this.state=1,new Error("ERROR CODE: 1003");this.stream=i,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(e);}catch(n){throw u.fatal(n),this.state=2,new Error("ERROR CODE: 1002")}this.state=3,this.audioManager=new T(this.audioCtx),this.audioManager.volume=this.volume,this.vadManager=new f(i,this.audioCtx,t),this.vadManager.pcm.pipe(takeUntil(this.destroy)).subscribe(n=>{this.pcmSub.next(n);});let a=new b(t?.detection);a.detections.pipe(takeUntil(this.destroy)).subscribe(n=>{let{width:r,height:s}=a.videoSize;this.detectionsSub.next({detections:n,clientWidth:r,clientHeight:s});}),a.landmarks.pipe(takeUntil(this.destroy)).subscribe(n=>{this.landmarksSub.next(n);}),a.init(i),this.camManager=a;}addAudioQueue(e){let t=get(e,"buffer",void 0),i=get(e,"float32",void 0),a=get(e,"int16",void 0),n=get(e,"numberOfChannels",void 0);t?this.audioManager?.addBuffer(t):i?this.audioManager?.addBufferByFloat32(i,n):a&&this.audioManager?.addBufferByInt16(a,n);}playAudio(){this.audioManager?.startSpeech();}stopAudio(){this.audioManager?.stopSpeech();}startRecord(){this.vadManager?.startRecord();}stopRecord(){this.vadManager?.stopRecord();}setVolume(e){this.volume=Math.max(0,Math.min(100,Math.round(e))),this.audioManager&&(this.audioManager.volume=this.volume);}getVolume(){return this.audioManager?this.audioManager.volume:this.volume}startCapture(){this.camManager?.startCapture();}stopCapture(){this.camManager?.stopCapture();}getInfo(){switch(this.state){case 0:return {mic:2,camera:2};case 1:return {mic:3,camera:3};case 2:return {mic:4,camera:4};case 3:if(this.stream){let{hasAudio:e,hasVideo:t}=ke(this.stream),i=e?5:6,a=t?5:6;return {mic:i,camera:a}}else return {mic:7,camera:7}}}onDestroy(){this.audioManager&&(this.volume=this.audioManager.volume,this.audioManager.stopSpeech(),this.audioManager=void 0),this.vadManager?.stopRecord(),this.vadManager=void 0,this.camManager?.onDestroy(),this.camManager=void 0,this.audioCtx?.close(),this.audioCtx=void 0,this.destroy.next(),this.destroy.complete();}};var H="v1.1.0-beta.18";var N=class{constructor(e,t){this.config=e;this.media=t;this.layoutSub=new Subject,this.projectsSub=new ReplaySubject(1),this.destroySub=new Subject,this.aiiaSubtitleSub=new Subject,this.userSubtitleSub=new Subject,this.aiiaSubtitleClearSub=new Subject,this.userSubtitleClearSub=new Subject,this.stateSub=new BehaviorSubject("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.isMuteAiia=false,this._lastProjects=[],this.guestSub=new ReplaySubject(1),this._hasGuest=false,this.isStart=false,this.movementSub=new Subject,this.chat=new E(e),u.code("CODE: 1011","chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this);let{userDelayTime:i,aiiaDelayTime:a}=e.autoClearSubtitle;isNaN(a)||this.aiiaSubtitleClearSub.pipe(debounceTime(a),takeUntil(this.destroySub)).subscribe(()=>{this.aiiaSubtitleSub.next("");}),isNaN(i)||this.userSubtitleClearSub.pipe(debounceTime(i),takeUntil(this.destroySub)).subscribe(()=>{this.userSubtitleSub.next("");}),this.stateSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._currentState=r;}),this.projectsSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._lastProjects=r;}),this.guestSub.pipe(takeUntil(this.destroySub)).subscribe(r=>{this._hasGuest=r;}),combineLatest([this.stateSub,this.media.stateObs]).pipe(takeUntil(this.destroySub)).subscribe(([r,s])=>{if(s===3)switch(r){case "InServiceNoMedia":{this.media.startCapture(),this.media.startRecord(),this.stateSub.next("InService");break}case "InService":break;default:{this.media.stopCapture(),this.media.stopRecord();break}}});let n=F(this.config.detection.confidence);this.media.pcm.pipe(takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("audio",U(r));}),this.media.detections.pipe(takeUntil(this.destroySub)).subscribe(({detections:r,clientHeight:s,clientWidth:o})=>{this.chat.send("face",n(r,{width:o,height:s}));}),this.media.landmarks.pipe(takeUntil(this.destroySub)).subscribe(r=>{this.chat.send("pose",r);});}config;media;chat;destroySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;stateSub;_currentState;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;_lastProjects;guestSub;_hasGuest;isStart;movementSub;get state(){return this.stateSub.asObservable()}get currentState(){return this._currentState}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get lastProjects(){return cloneDeep(this._lastProjects)}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}get guest(){return this.guestSub.asObservable()}get hasGuest(){return this._hasGuest}set volume(e){this.media.setVolume(e);}get volume(){return this.media.getVolume()}get aiiaMovement(){return this.movementSub.asObservable()}start(){if(this.isStart){u.code("CODE: 1014");return}this.isStart=true,this.chat.message.pipe(takeUntil(this.destroySub)).subscribe(({event:e,data:t})=>{switch(e){case "cloud":{map(t,this.behavior);break}case "list":{let{id:i,name:a,specific:n}=this.config.project,r=null;if(n&&i!==void 0)r=i;else {let s=find(t,o=>o.name===a||o.id===i);s&&(r=s.id);}r!==null?this.chooseProject(r):t===null?(this.stateSub.next("CloseService"),u.error("No project ready or lose network")):(this.projectsSub.next(t),this.stateSub.next("WaitingProjectID"),u.code("CODE: 1002"));break}case "channel":{switch(t){case "net_error":u.error("Please check network status");case "close":case "no_permissions":{this.stateSub.next("CloseService");break}case "reconnect":{this.stateSub.next("ReconnectingCloud");break}}break}case "monitor":{let i=this.media.getInfo();this.chat.send("monitor",i);break}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),u.code("CODE: 1012");}close;skip(){this.chat.sendToCloud({request:"skip"});}reset(){this.chat.sendToCloud({request:"reset"});}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud");}mute(){this.isMuteAiia=true,this.media.stopAudio(),this.media.stopRecord();}unmute(){this.isMuteAiia=false,this.media.startRecord();}switchMediaElement(e){let{camera:t,audio:i}=assign({},e);requestAnimationFrame(()=>{let n=D(),r=O();if(t!==void 0&&n&&n.setAttribute("debug",`${t}`),i!==void 0&&r)if(typeof i=="boolean")r.setAttribute("debug",`${i}`);else {let{mode:s,color:o,open:l=false}=i;r.setAttribute("debug",`${l}`),s&&r.setAttribute("mode",s),o&&r.setAttribute("color",o);}});}interactive(e,t){e==="button"&&this.chat.sendToCloud({request:e,content:t});}async getVersion(){let e=new Promise(i=>{let a=timer(3e3).pipe(map$1(()=>({aiiaCore:"Timeout",unreal:"Timeout",nodejs:"Timeout"})));merge(a,this.chat.version).pipe(take(1),takeUntil(this.destroySub)).subscribe(i);});return this.chat.send("version",null),{...await e,initSdk:H}}behavior(e){switch(e.signal){case "layout":{this.layoutSub.next(e.content);break}case "audio":{if(e.command==="sampleRate")this.sampleRateOfWhisper.output=e.content;else switch(e.command){case "pcm":{if(!this.isMuteAiia){let t=M(A(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio(),this.movementSub.next({type:"lips",data:e.content});}break}case "interrupted":{this.media.stopAudio(),this.aiiaSubtitleSub.next(""),this.movementSub.next({type:"interrupted"});break}}break}case "status":{get(e,"content")==="Connected"&&this.proxyIsStable();break}case "agent":{if(!this.isMuteAiia){let t=get(e,"content.function_result.response");t!==void 0&&(this.aiiaSubtitleSub.next(t),this.aiiaSubtitleClearSub.next());}break}case "asr":{if(!this.isMuteAiia&&get(e,"content.function_type")==="ASR"){let t=get(e,"content.function_result.result");t!==void 0&&(this.userSubtitleSub.next(t),this.userSubtitleClearSub.next());}break}case "cv":{let t=get(e,"content.status");t==="user present"?this.guestSub.next(true):t==="user leave"?this.guestSub.next(false):u.warn("Unexpect value",get(e,"content"));break}case "osc":this.movementSub.next({type:"movement",data:e.content.message});default:{u.debug(e.signal);break}}}proxyIsStable(){this.chat.send("audio",this.sampleRateOfWhisper.input),this.media.state===3?(this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),u.code("CODE: 1000")):(this.stateSub.next("InServiceNoMedia"),u.code("CODE: 1001")),this.layoutSub.next({type:"resetLayout"});}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destroySub.next(),this.destroySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),u.code("CODE: 1013");}};function li(c){if(P){z(get(c,"debug",true)),u.code("CODE: 1010");let e=new k(assign({},c));u.code("CODE: 1011","config");let t=new x(e.mediaStream);u.code("CODE: 1011","media");let i=new N(e,t);return u.code("CODE: 1011","sdk"),e.worklet_url!==""&&t.init(e.worklet_url,e),i}else throw new Error("ERROR CODE: 1001")}
104
104
  export{H as VERSION,li as initSdk};
@@ -1,5 +1,5 @@
1
- import { A as AiiaConfig, c as AiiaProjectItemWithAvatar, C as CLOUD_SOCKET_MSG, S as SendMessage, d as Vec2, a as MovementToUE, b as LAYOUT, U as UnrealState, e as MonitorDeviceState, N as NodeInitOptions } from '../VERSION-8NGV8OB9.js';
2
- export { f as AiiaProjectItem, V as VERSION } from '../VERSION-8NGV8OB9.js';
1
+ import { A as AiiaConfig, c as AiiaProjectItemWithAvatar, C as CLOUD_SOCKET_MSG, S as SendMessage, d as Vec2, a as MovementToUE, b as LAYOUT, U as UnrealState, e as MonitorDeviceState, N as NodeInitOptions } from '../VERSION-CaEPYzjN.js';
2
+ export { f as AiiaProjectItem, V as VERSION } from '../VERSION-CaEPYzjN.js';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable } from 'rxjs';
5
5
  import * as node_http2 from 'node:http2';
@@ -386,24 +386,14 @@ declare class SdkCore {
386
386
  private inspectClientSocket;
387
387
  onChannelDestroy(id: string): void;
388
388
  getStatusInfo(): Promise<{
389
- ver: string;
389
+ ver: "v1";
390
390
  time: string;
391
391
  core: {
392
392
  state: CoreState;
393
393
  msg: string;
394
394
  };
395
- channel: {
396
- proxy_id: string;
397
- latency: number;
398
- averageLatency: number;
399
- proxy_state: 0 | 1 | 2 | 3 | -1;
400
- msg: string;
401
- mic: MonitorDeviceState;
402
- camera: MonitorDeviceState;
403
- browser_id: string;
404
- access: string | null;
405
- }[];
406
395
  unreal: UnrealState;
396
+ channel: Awaited<ReturnType<Channel["getStatusInfo"]>>[];
407
397
  }>;
408
398
  getVersion(): Promise<Record<string, string>>;
409
399
  onDestroy(): void;
@@ -21,7 +21,7 @@
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  *
24
- * UPDATA DATE: 2026/6/18
24
+ * UPDATA DATE: 2026/6/22
25
25
  */
26
26
  var P=(a=>(a[a.\u672A\u97FF\u61C9=1]="\u672A\u97FF\u61C9",a[a.\u7B49\u5F85\u6388\u6B0A=2]="\u7B49\u5F85\u6388\u6B0A",a[a.\u5DF2\u88AB\u62D2\u7D55=3]="\u5DF2\u88AB\u62D2\u7D55",a[a.VAD\u6A21\u7D44\u8F09\u5165\u5931\u6557=4]="VAD\u6A21\u7D44\u8F09\u5165\u5931\u6557",a[a.\u53EF\u6B63\u5E38\u4F7F\u7528=5]="\u53EF\u6B63\u5E38\u4F7F\u7528",a[a.\u7F3A\u5931\u8A72\u88DD\u7F6E=6]="\u7F3A\u5931\u8A72\u88DD\u7F6E",a[a.\u6C92\u6709\u670D\u52D9=7]="\u6C92\u6709\u670D\u52D9",a))(P||{}),w=(s=>(s[s.\u975E\u9810\u671F\u7684\u72C0\u614B=1]="\u975E\u9810\u671F\u7684\u72C0\u614B",s[s.\u672A\u6388\u6B0A\u63A7\u5236=2]="\u672A\u6388\u6B0A\u63A7\u5236",s[s.\u672A\u555F\u52D5=3]="\u672A\u555F\u52D5",s[s.\u7121\u670D\u52D9=4]="\u7121\u670D\u52D9",s[s.\u53EF\u4F7F\u7528=5]="\u53EF\u4F7F\u7528",s))(w||{});var Q="access_token";var be=typeof process<"u"&&process.versions!=null&&process.versions.node!=null;function ye(n,e){let t=typeof e=="number"?e:NaN;if(n){let r=Number(n);return isNaN(r)?t:r}else return t}function T(n){return new Promise(e=>{setTimeout(e,n);})}var W=class{constructor(e){this.config=e;}config;get webserver(){return this.safeRead("webserver")}get environment(){let e=this.safeRead("env");return typeof e=="string"?e:"production"}get license(){return this.safeRead("group_id")??""}get note(){return this.safeRead("note")}get deviceName(){return this.safeRead("device_name")}get port(){return ye(process.env.PORT,this.safeRead("port")??3e3)}get ws_url(){let e=this.safeRead("ws_url");return typeof e=="string"?e:""}get worklet_url(){let e=this.safeRead("worklet_url");return typeof e=="string"?e:""}get project(){let e=this.safeRead("project");if(e===void 0)return {specific:false};if(typeof e=="string")return {name:e,id:e,specific:false};{let t=lodashEs.get(e,"id",void 0),r=lodashEs.get(e,"name",void 0);return {id:typeof t=="string"?t:void 0,name:typeof r=="string"?r:void 0,specific:true}}}get endPoint(){let e=this.safeRead("cloudEndPoint");if(e)return {api:e,socket:e.replace(/^http/,"ws")};{let t="dev";switch(this.environment){case "production":t="prod";break;case "qa":t="qa";break;case "test":t="test";break;}let r=`graphen-agentic-workflow-${t}-21193779403.asia-east1.run.app`;return {api:`https://${r}`,socket:`wss://${r}`}}}get debug(){return this.safeRead("debug")??true}get mediaStream(){return this.safeRead("mediaStream")}get chunkTimeInSeconds(){let t=this.safeRead("chunkTimeInSeconds");return typeof t=="number"&&t>0?t:.3}get llmSampleRate(){let t=this.safeRead("llmSampleRate");return typeof t=="number"&&t>0?t:16e3}get detection(){return lodashEs.assign({perSecond:3,confidence:80},this.safeRead("cameraDetection"))}get autoClearSubtitle(){let e=this.safeRead("autoClearUserSubtitle"),t=this.safeRead("autoClearAiiaSubtitle");return {userDelayTime:typeof e=="number"?e:5e3,aiiaDelayTime:typeof t=="number"?t:NaN}}get eyeTrackEnable(){return !!this.safeRead("eyeTrackEnable")}get eyeTrackCorrection(){return lodashEs.assign({x_axis_px:0,y_axis_px:0},this.safeRead("correction"))}get avatartService(){let e=this.safeRead("avatartService");return typeof e=="boolean"?e:true}safeRead(e){return lodashEs.get(this.config,e,void 0)}};var R={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},He=[];function Xe(...n){return He.push(...n),Xe}function _e(n){function e(c){if(c===void 0||c==="all")return {code:true,error:true,warn:true,info:true,debug:true,fatal:true};if(c==="none")return {error:false,code:false,warn:false,info:false,debug:false,fatal:false};if(typeof c=="boolean")return {code:c,error:c,warn:c,info:c,debug:c,fatal:c};{let l=new Set(c);return {code:l.has("code"),debug:l.has("debug"),fatal:l.has("fatal"),error:l.has("error"),warn:l.has("warn"),info:l.has("info")}}}let{info:t,error:r,warn:o,debug:s,fatal:i,code:a}=e(n);return a||(R.code=()=>{}),s||(R.debug=()=>{}),t||(R.info=()=>{}),o||(R.warn=()=>{}),r||(R.error=()=>{}),i||(R.fatal=()=>{}),Xe}function m(n){return new Proxy(R,{get(e,t,r){if(typeof t=="string")switch(t){case "debug":case "info":case "error":case "warn":case "fatal":case "code":return (...o)=>{let s=Ce__default.default().format("yyyy-MM-DD[T]HH:mm:ss:sss");lodashEs.forEach(He,i=>{(i.category===void 0||i.category.includes(n))&&i.next(t,s,n,...o);}),e[t](`[Aiia::${t}_${s}_](${n})`,...o);};default:return}else return},set(e,t,r,o){return true}})}var p=m("default");function ve(n,e){let{maxX:t,maxY:r,minX:o,minY:s}=lodashEs.assign({maxX:25,minX:-25,maxY:50,minY:-50},e),i=mathjs.abs(t)+mathjs.abs(o),a=mathjs.abs(r)+mathjs.abs(s),{clientHeight:c,clientWidth:l,originX:f,originY:h,width:d,height:k}=n,C=mathjs.matrix([[i/l,0,o],[0,a/c,s],[0,0,1]]),M=f+d/2,U=c-(h+k/2),E=mathjs.matrix([[M],[U],[1]]),Ge=mathjs.multiply(C,E),yt=Ge.get([0,0]),St=Ge.get([1,0]);return {x:yt,y:St}}var ee=m("ChatModule"),$=class{constructor(e){this.config=e;this.memberSub=new rxjs.Subject;}config;server;memberSub;get port(){return this.config.port}get webserver(){return this.config.webserver}get memberChange(){return this.memberSub.asObservable()}start(){if(this.server=new socket_io.Server(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",e=>{ee.debug("client on",e.id),this.memberSub.next({type:"in",socket:e}),e.on("disconnect",t=>{ee.debug("client off",e.id,"reason",t),this.memberSub.next({type:"out",socket:e});});}),this.webserver===void 0){let e=this.port;this.server.listen(e),ee.info("Websocket server run on",e);}else ee.info("Websocket server rely your webserver.");}onDestroy(){this.server&&this.server.close();}};var Re=class{constructor(e){this.AppName=e;switch(this.platform=process.platform,this.homedir=ke__default.default.homedir(),this.userName=ke__default.default.userInfo().username,this.EOL=ke__default.default.EOL,this.platform){case "darwin":this.isMAC=true,this.isWIN=false,this.isLINUX=false,this.saveFolder=j__default.default.join(this.homedir,"Library","Application Support");break;case "win32":this.isMAC=false,this.isWIN=true,this.isLINUX=false,this.saveFolder=process.env.APPDATA||j__default.default.join(this.homedir,"AppData","Roaming");break;case "linux":this.isMAC=false,this.isWIN=false,this.isLINUX=true,this.saveFolder=process.env.XDG_CONFIG_HOME||j__default.default.join(this.homedir,".config");break;default:console.log(`\u7576\u524D\u7CFB\u7D71\u662F\u672A\u77E5\u7684\u5E73\u53F0: ${this.platform}`),this.isMAC=false,this.isWIN=false,this.isLINUX=false,this.saveFolder=this.homedir;break}this.appFolder=j__default.default.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder);}AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;userName;EOL;addPath(...e){return j__default.default.join(...e)}folderCheck(e){re__default.default.mkdirSync(e,{recursive:true});}createFolder(e){let t=this.addPath(this.appFolder,e);return this.folderCheck(t),t}fileCheck(e,t=""){re__default.default.existsSync(e)||re__default.default.writeFileSync(e,t,{encoding:"utf8"});}},u=new Re("aiia-sdk");var F=m("ApiProxyModule"),G=class{instance;controller;constructor(e){this.controller=new AbortController,this.instance=At__default.default.create({baseURL:e,signal:this.controller.signal});}async getAccessToken(e,t){let r=performance.now(),{token_value:o,note:s,device_name:i}=lodashEs.assign({},t),a={group_key:e,token_value:o??"",device_name:i??u.userName};s&&(a.note=s);let c=await this.instance.post("/api/v2/license/agent_token",a).then(l=>lodashEs.get(l.data,"token_value","")).catch(l=>(F.error(l),null));if(F.debug("Complete certification",`Took ${performance.now()-r} milliseconds.`),c===null)throw new Error("ERROR CODE: 500");if(c==="")throw new Error("ERROR CODE: 2003");return c}async getProjectList(e){let t=performance.now(),r=await this.instance.post("/api/v2/license/projects",{group_key:e}).then(o=>lodashEs.map(lodashEs.get(o,"data.projects",[]),({id:s,sub_project_name:i,avatar:a})=>{let{name:c,url:l}=a;return {avatar:{name:c,url:l},id:s,name:i}})).catch(o=>(F.error(o),null));if(F.debug("Got Project List",`Took ${performance.now()-t} milliseconds.`),r===null)throw new Error("ERROR CODE: 500");if(r.length===0)throw new Error("ERROR CODE: 2004");return r}async uploadDeviceState(e,t,r,o){let{device_name:s,note:i}=Object.assign({device_name:u.userName},o),a={group_key:e,monitor_type:t,monitor_status:r,device_name:s};i&&(a.note=i);let c=await this.instance.post("/api/v2/monitor/status",a).catch(l=>(F.error(l),null));return lodashEs.get(c,"data.status")==="success"}onDestroy(){this.controller.abort();}};function ze(n){if(typeof n!="string")return {type:0};try{let e=[],t=JSON.parse(n);return lodashEs.get(t,"signal")?e=[t]:lodashEs.isArray(t)?e=t:e=lodashEs.values(t),lodashEs.some(e,({signal:o})=>o==="pong")?{type:1}:{type:2,data:e}}catch{return {type:0}}}var Ae=2e4,Ze=12e4/Ae,Lt={request:"ping",content:"2"},Qe=JSON.stringify(Lt);var g=m("SocketProxtModule");var B=class{constructor(e){this.id=e;this.messageSub=new rxjs.Subject,this.pingSub=new rxjs.Subject,this.linkStartSub=new rxjs.Subject,this.closeSub=new rxjs.Subject,this.destorySub=new rxjs.Subject,this.uuid=crypto.randomUUID(),this.pingSub.pipe(rxjs.delay(Ae),rxjs.takeUntil(this.destorySub)).subscribe(()=>{this.isConnected&&(this.setPing(),this.socket.send(Qe));}),g.debug(`create proxy for browser(${this.id})`);}id;uuid;socket;messageSub;pingSub;linkStartSub;destorySub;closeSub;lastCloseLog;_latency=[];pingTime=NaN;get url(){return this.socket?.url}get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}get isConnected(){return this.socket?.readyState===S__default.default.OPEN}get latency(){let e=this._latency.length;return e>=1?this._latency[e-1]:NaN}get averageLatency(){let e=this._latency.length;return e>=1?this._latency.reduce((r,o)=>r+o,0)/e:NaN}start(e){this.socket=new S__default.default(e,{autoPong:true}),rxjs.fromEvent(this.socket,"open").pipe(rxjs.takeUntil(this.destorySub)).subscribe(()=>{g.code("CODE: 2012","proxy"),this.linkStartSub.next(),this.pingSub.next();}),rxjs.fromEvent(this.socket,"message").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{data:r}=t,o=ze(r);switch(o.type){case 1:{this.setPong(),this.pingSub.next();break}case 2:{this.messageSub.next(o.data);break}case 0:default:{g.warn("Got a message, but failed",r);break}}}),rxjs.fromEvent(this.socket,"error").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{error:r}=t;g.error("Proxy has some problem",r);}),rxjs.fromEvent(this.socket,"close").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{code:r,reason:o,type:s,wasClean:i}=t;switch(this.lastCloseLog=`\u6700\u8FD1\u4E00\u6B21\u95DC\u9589\u539F\u56E0: ${o}, \u932F\u8AA4\u78BC: ${r}, Type: ${s}`,r){case 4001:{g.code("CODE: 2001");break}case 1e3:case 1001:{this.closeSub.next("close"),g.code("CODE: 2000");break}case 1005:case 1006:{this.closeSub.next("close"),g.code("CODE: 2002",{code:r,reason:o,type:s,wasClean:i});break}case 4100:case 4103:case 4104:case 4105:{this.closeSub.next("reconnect"),g.code("CODE: 2004",`socket code: ${r}`);break}case 4101:case 4102:{this.closeSub.next("no_permissions"),g.code("CODE: 2003",`socket code: ${r}`);break}default:{this.closeSub.next("close"),g.code("CODE: 2005",{code:r,reason:o,type:s,wasClean:i});break}}this.onDestroy();});}setPing(){lodashEs.isNaN(this.pingTime)&&(this.pingTime=Date.now());}setPong(){if(!lodashEs.isNaN(this.pingTime)){let e=Date.now()-this.pingTime;this._latency.push(e/2),this.pingTime=NaN,this._latency.length>Ze&&this._latency.shift();}}send(e){let t=`currentTime: ${Ce__default.default().format("yyyy-MM-DD[T]HH:mm:ss:sss")}`;this.isConnected?this.socket.send(e,r=>{r&&g.error("send message fail",t,e.slice(0,100),r);}):g.warn("The socket is not connected",t,e.slice(0,100));}sendToCloud(e){this.send(JSON.stringify(e));}getStatusInfo(){let e=(()=>{if(this.socket){let r=this.socket.readyState;switch(r){case S__default.default.CONNECTING:return "\u6B63\u5728\u9023\u7DDA\u96F2\u7AEF\u670D\u52D9\u4E2D";case S__default.default.OPEN:return "\u96F2\u7AEF\u670D\u52D9\u6B63\u5E38\u904B\u4F5C";case S__default.default.CLOSING:return "\u6B63\u5728\u95DC\u9589\u96F2\u7AEF\u670D\u52D9";case S__default.default.CLOSED:return "\u96F2\u7AEF\u670D\u52D9\u5DF2\u95DC\u9589";default:return `\u672A\u77E5\u7684 Websocket \u72C0\u614B: ${r}`}}else return "\u96F2\u7AEF\u670D\u52D9\u5C1A\u672A\u555F\u52D5"})(),t=this.lastCloseLog?`${e}, ${this.lastCloseLog}`:e;return {proxy_id:this.uuid,latency:this.latency,averageLatency:this.averageLatency,proxy_state:this.socket?.readyState??-1,msg:`\u700F\u89BD\u5668(${this.id}) - \u96F2\u7AEF\u4EE3\u7406(${this.uuid}), ${t}`}}onDestroy(){this.linkStartSub.complete(),this.messageSub.complete(),this.closeSub.complete(),this.destorySub.next(),this.destorySub.complete(),g.debug(`Destroy cloud channel(${this.uuid})`);}onBrowserLeave(){switch(this.socket?.readyState){case S__default.default.CONNECTING:this.linkStartSub.pipe(rxjs.take(1),rxjs.takeUntil(this.destorySub)).subscribe(()=>{this.socket?.close(4001);});break;case S__default.default.OPEN:this.socket?.close(4001);break;case S__default.default.CLOSING:case S__default.default.CLOSED:}}};var H=class{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=u.addPath(u.appFolder,this.fileName),u.fileCheck(this.filePath);}getFileDataSync(){let e=re__default.default.readFileSync(this.filePath,"utf8");try{return JSON.parse(e)}catch{return {}}}setFileDataSync(e){try{let t=JSON.stringify(e);re__default.default.writeFileSync(this.filePath,t,"utf8");}catch{}}async getFileData(){return new Promise(e=>{re__default.default.readFile(this.filePath,"utf8",(t,r)=>{if(t)e({});else try{e(JSON.parse(r));}catch{e({});}});})}async setFileData(e){return new Promise(t=>{try{let r=JSON.stringify(e);re__default.default.writeFile(this.filePath,r,"utf8",o=>{t();});}catch{}})}async getItem(e){return (await this.getFileData())[e]??null}async setItem(e,t){let r=await this.getFileData();r[e]=t,await this.setFileData(r);}async removeItem(e){let t=await this.getFileData(),r=lodashEs.omit(t,e);await this.setFileData(r);}async clear(){await this.setFileData({});}getItemSync(e){return this.getFileDataSync()[e]??null}setItemSync(e,t){let r=this.getFileDataSync();r[e]=t,this.setFileDataSync(r);}setItemSyncByRecoord(e){let t=this.getFileDataSync();lodashEs.forEach(lodashEs.keys(e),r=>{t[r]=e[r];}),this.setFileDataSync(t);}removeItemSync(e){let t=lodashEs.omit(this.getFileDataSync(),e);this.setFileDataSync(t);}clearSync(){this.setFileDataSync({});}};var Bt={["CODE: 1000"]:"\u901A\u9053\u3001\u96F2\u7AEF\u670D\u52D9\u3001\u9EA5\u514B\u98A8\u90FD\u5DF2\u5C31\u7DD2",["CODE: 1001"]:"\u672A\u53D6\u5F97\u5A92\u9AD4\u88DD\u7F6E\u6B0A\u9650\uFF0C\u8ACB\u91CD\u65B0\u8A2D\u5B9A\u6216\u5FFD\u7565\u6B64\u8A0A\u606F","CODE: 1002":"\u8ACB\u8A02\u95B1\u5C08\u6848\u5217\u8868","CODE: 1010":"\u521D\u59CB\u5316\u5FC5\u8981\u4F9D\u8CF4","CODE: 1011":"\u6307\u5B9A\u4F9D\u8CF4\u5DF2\u5B8C\u6210","CODE: 1012":"\u555F\u52D5SDK","CODE: 1013":"\u7D50\u675FSDK","CODE: 1014":"\u5DF2\u555F\u52D5SDK","CODE: 2000":"\u5B89\u5168\u7684\u95DC\u9589\u9023\u7DDA","CODE: 2001":"\u7121\u526F\u4F5C\u7528\u7684\u95DC\u9589\u9023\u7DDA","CODE: 2002":"\u8207\u96F2\u7AEF\u7684\u670D\u52D9\u4E2D\u65B7",["CODE: 2003"]:"\u6C92\u6709\u6388\u6B0A\uFF0C\u8ACB\u806F\u7E6BGraphen","CODE: 2004":"\u81EA\u52D5\u91CD\u65B0\u9023\u7DDA\u96F2\u7AEF\u670D\u52D9",["CODE: 2005"]:"\u672A\u9810\u671F\u7684\u65B7\u7DDA\uFF0C\u8ACB\u806F\u7E6BGraphen","CODE: 2010":"\u958B\u59CB\u521D\u59CB\u5316\u5FC5\u8981\u6A21\u7D44","CODE: 2011":"\u6307\u5B9A\u6A21\u7D44\u521D\u59CB\u5316\u5B8C\u6210","CODE: 2012":"\u555F\u52D5\u670D\u52D9","CODE: 2013":"\u670D\u52D9\u7D50\u675F","ERROR CODE: 500":"\u7DB2\u7D61\u932F\u8AA4",["ERROR CODE: 1001"]:"\u74B0\u5883\u932F\u8AA4","ERROR CODE: 1002":"Worklet\u6A21\u7D44\u8F09\u5165\u5931\u6557","ERROR CODE: 1003":"\u672A\u7372\u5F97\u5A92\u9AD4\u88DD\u7F6E\u6B0A\u9650","ERROR CODE: 1004":"\u5BE6\u4F8B\u5DF2\u6467\u6BC0",["ERROR CODE: 2001"]:"nodejs","ERROR CODE: 2002":"\u672A\u63D0\u4F9B\u6191\u8B49","ERROR CODE: 2003":"\u7372\u53D6\u6B0A\u6756\u5931\u6557","ERROR CODE: 2004":"\u6C92\u6709\u53EF\u7528\u5C08\u6848","ERROR CODE: 2005":"\u91CD\u8907\u521D\u59CB\u5316"},X=class{path;buffer=[];destroy;constructor(e){this.path=e?u.createFolder(e):u.appFolder,this.destroy=new rxjs.Subject,rxjs.interval(3e3).pipe(rxjs.takeUntil(this.destroy)).subscribe(this.flush.bind(this)),this.destroy.subscribe(this.flush.bind(this));}next(e,t,r,...o){let s=e==="code"?i=>i.startsWith("CODE")||i.startsWith("ERROR CODE")?`${i}(${Bt[i]})`:i:i=>i;try{let i=o.reduce((a,c)=>{if(c instanceof Error){let l=`Error[${c.message??"No Message"}]${u.EOL}`;return l+=c.stack??"unknow stack",typeof c.cause=="string"&&(l+=`${u.EOL}cause: ${c.cause}`),`${a}${u.EOL}${l}${u.EOL}`}else switch(typeof c){case "string":return `${a} ${s(c)}`;case "number":case "bigint":return `${a} ${c.toString()}`;case "boolean":return `${a} ${c?"true":"false"}`;case "object":try{return `${a} ${JSON.stringify(c)}`}catch{return a}case "symbol":case "undefined":case "function":return `${a} [${typeof c}]`}},"");this.buffer.push(`LOG(${e})__${t}__${r}__::${i}${u.EOL}`);}catch{}}flush(){if(this.buffer.length===0)return;let t=`log_${Ce__default.default().format("yyyy-MM-DD")}.txt`,r=u.addPath(this.path,t);try{re__default.default.appendFileSync(r,this.buffer.join(""),{encoding:"utf8"}),this.buffer=[];}catch{}}onDestroy(){this.destroy.next(),this.destroy.complete();}};var I="127.0.0.1",Pe={AvatarPort:9876,ActionPort:6969,LocationPort:4060,LookPort:6745,BackGroundPort:2400},Ht={StreamAudioPort:8080,CleanAudioPort:8081,UnrealEngineVersion:8086,AvatarInformation:8085};function y(){return {...Pe,...Ht}}function O(n){return Object.keys(n).reduce((e,t)=>({...e,[t]:n[t].toString()}),{})}function se(n){return Object.keys(n).reduce((e,t)=>({...e,[t]:Number(n[t])}),{})}var zt=m("UnrealUdpModule"),oe=class{udpClient;eyeBallUdp;x_axis_px;y_axis_px;mapping;constructor(){this.udpClient=new Map,this.x_axis_px=0,this.y_axis_px=0,this.mapping={};let e=lodashEs.pick(Pe,"AvatarPort","ActionPort","LocationPort","BackGroundPort");lodashEs.forEach(lodashEs.keys(e),t=>{let r=t,o=e[r].toString();this.mapping[o]=r;});}enableUDPClient(e){lodashEs.forEach(lodashEs.keys(e),t=>{let r=new nodeOsc.Client(I,e[t]);this.udpClient.set(t,r);});}enableEyeTrack(e){this.eyeBallUdp=new nodeOsc.Client(I,e.port),this.x_axis_px=e.x_axis_px,this.y_axis_px=e.y_axis_px;}eyeTrack(e){if(this.eyeBallUdp!==void 0){e?e.object_index??1:-1;let {x:r,y:o}=e??{x:7,y:20};this.eyeBallUdp.send(["/",this.toFloat(r+this.x_axis_px),this.toFloat(o+this.y_axis_px)]);}}movement(e){lodashEs.map(e,({content:t})=>{let r=lodashEs.get(t,"port","").toString(),o=this.mapping[r];if(this.udpClient.has(o)){let s=lodashEs.get(t,"message");this.udpClient.get(o).send(s);}});}toFloat(e){return lodashEs.isInteger(e)?e+1e-5:e}onDestroy(){lodashEs.forEach(Array.from(this.udpClient),([e,t])=>{t.close();}),zt.debug("Close all UnrealEngine's UDP");}};var D=m("UnrealSocketModule");function Vt(n){let e=Buffer.allocUnsafe(n.length*2);for(let t=0;t<n.length;t++)e.writeInt16LE(n[t],t*2);return e}var ne=class{destroy;retrySub;speechWS;interruptWS;avatartInfoWS;avatartInfoSub;get speechIsConnected(){return this.speechWS?.readyState===S__default.default.OPEN}get intrIsConnected(){return this.interruptWS?.readyState===S__default.default.OPEN}getAvatarInfo(){return this.avatartInfoSub.asObservable()}constructor(){this.destroy=new rxjs.Subject,this.avatartInfoSub=new rxjs.Subject,this.retrySub=new rxjs.Subject;}connectSocket(e){this.speechWS=this.getSocket(e.speech,"speech"),this.interruptWS=this.getSocket(e.interrupt,"interrupt"),this.avatartInfoWS=this.getSocket(e.interrupt,"avatar_info",t=>{this.avatartInfoSub.next(t.data);}),this.retrySub.pipe(rxjs.delay(1e3),rxjs.takeUntil(this.destroy)).subscribe(t=>{switch(t){case "speech":this.speechWS=this.getSocket(e.speech,"speech");break;case "interrupt":this.interruptWS=this.getSocket(e.interrupt,"interrupt");break;case "avatar_info":this.avatartInfoWS=this.getSocket(e.interrupt,"avatar_info",r=>{this.avatartInfoSub.next(r.data);});break}});}getSocket(e,t,r){let o=new S__default.default(`ws://${I}:${e}`);return o.onopen=()=>{D.debug("Unreal tools connection successful",`type ${t}`);},r&&(o.onmessage=r),o.onerror=s=>{let{message:i,error:a,type:c}=s;D.error(`UE Tool(${t}) fail: ${i}`,a,{port:e,type:c});},o.onclose=s=>{let{code:i,reason:a,type:c}=s;D.debug(`UE Tool(${t}) close, try reconnecting after a delay`,{code:i,reason:a,type:c,port:e}),this.retrySub.next(t);},o}interrupted(){this.intrIsConnected?this.interruptWS.send("interrupted"):D.error("Send to Unreal fail, type interrupt");}speech(e){this.speechIsConnected?this.speechWS.send(Vt(e)):D.error("Send to Unreal fail, type speech");}async getVersion(e){let t=new S__default.default(`ws://${I}:${e}`),o=await new Promise(s=>{let i=setTimeout(()=>{s("");},1e3);t.onmessage=a=>{clearTimeout(i),s(a.data);},t.onerror=()=>{clearTimeout(i),s("");};});return t.close(),o}onDestroy(){this.speechWS?.close(),this.interruptWS?.close(),this.avatartInfoWS?.close(),this.destroy.next(),this.destroy.complete(),D.info("Close all UnrealEngine's WebSocket");}};var st=m("UnrealModule"),J=class{constructor(e){this.config=e;this.udpManager=new oe,this.socketManager=new ne,this.movement=()=>{},this.eyeTrack=()=>{},this.interrupted=()=>{},this.speech=()=>{},this.getAvatarInfo=this.socketManager.getAvatarInfo.bind(this.socketManager);}config;udpManager;socketManager;movement;eyeTrack;interrupted;speech;getAvatarInfo;SETTING_PORT=y();onStart(e){this.SETTING_PORT=lodashEs.assign(y(),e),st.debug("\u6307\u5B9A\u7684 ue port",this.SETTING_PORT);let{StreamAudioPort:t,CleanAudioPort:r,AvatarInformation:o,LookPort:s,...i}=this.SETTING_PORT;this.udpManager.enableUDPClient(i),this.socketManager.connectSocket({speech:t,interrupt:r,avatar_info:o}),this.movement=this.udpManager.movement.bind(this.udpManager),this.eyeTrack=this.udpManager.eyeTrack.bind(this.udpManager),this.interrupted=this.socketManager.interrupted.bind(this.socketManager),this.speech=this.socketManager.speech.bind(this.socketManager),this.config.eyeTrackEnable&&this.udpManager.enableEyeTrack({...this.config.eyeTrackCorrection,port:s});}getVersion(){return this.socketManager.getVersion(this.SETTING_PORT.UnrealEngineVersion)}onDestroy(){this.udpManager.onDestroy(),this.socketManager.onDestroy(),st.debug("UE tools destroy");}};var x=m("RobotSocketProxy");function it(){return Ce__default.default().format("yyyy-MM-DD[T]HH:mm:ss:sss")}var L=class n{static process;static onopen;uuid;socket;messageSub;linkStartSub;destorySub;closeSub;get url(){return this.socket?.url}get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}get isConnected(){return this.socket?.readyState===S__default.default.OPEN}constructor(){this.messageSub=new rxjs.Subject,this.linkStartSub=new rxjs.Subject,this.closeSub=new rxjs.Subject,this.destorySub=new rxjs.Subject,this.uuid=crypto.randomUUID();}start(){let e=process.env.ROBOT_WS_URL??"ws://localhost:9090";this.socket=new S__default.default(e,{autoPong:true}),rxjs.fromEvent(this.socket,"open").pipe(rxjs.takeUntil(this.destorySub)).subscribe(()=>{if(x.code("CODE: 2012","proxy"),n.onopen){let t=n.onopen();t!==null&&this.send(t);}else this.socket?.send(`Hello from nodejs, ${it()}`);this.linkStartSub.next();}),rxjs.fromEvent(this.socket,"message").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{data:r}=t;x.debug("Robot Message",r);}),rxjs.fromEvent(this.socket,"error").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{error:r}=t;x.error("Proxy has some problem",r);}),rxjs.fromEvent(this.socket,"close").pipe(rxjs.takeUntil(this.destorySub)).subscribe(t=>{let{code:r,reason:o,type:s,wasClean:i}=t;x.debug("Close robot proxy",{code:r,reason:o,type:s,wasClean:i}),this.onDestroy();});}send(e){let t=`currentTime: ${it()}`;this.isConnected?this.socket.send(e,r=>{r&&x.error("send message fail",t,e.slice(0,100),r);}):x.warn("The socket is not connected",t,e.slice(0,100));}sendToRobot(e){if(n.process){let t=n.process(e);t!==null&&this.send(t);}else this.send(JSON.stringify(e));}onDestroy(){this.linkStartSub.complete(),this.messageSub.complete(),this.closeSub.complete(),this.destorySub.next(),this.destorySub.complete(),x.debug(`Destroy robot proxy(${this.uuid})`);}};async function lr(...n){let e=n.length>0?n.join(", "):"*";return await ut__default.default.processLoad(e).catch(()=>[])}async function le(n){return new Promise(e=>{re__default.default.stat(n,t=>{e(t?[false,t]:[true]);});})}async function pr(n,...e){return u.isWIN?new Promise(t=>{let r=child_process.spawn(n,e,{detached:true,stdio:"ignore"});r.once("error",o=>{t([false,o]);}),r.once("spawn",()=>{r.unref(),t([true]);});}):Promise.resolve([false,new Error("The function isn't implement in this system")])}async function at(n,e,...t){return u.isWIN?new Promise(r=>{let o=[`cd ${n} && ${e} `,...t].join(" "),s=child_process.exec(o);s.once("error",i=>{r([false,i]);}),s.once("spawn",()=>{s.unref(),r([true]);});}):Promise.resolve([false,new Error("The function isn't implement in this system")])}async function Le(){try{return await ut__default.default.networkConnections()}catch(n){return console.error("\u6AA2\u67E5 Port \u6642\u767C\u751F\u932F\u8AA4\uFF1A",n),[]}}async function dr(n){let e=n.toString(),t=await Le();return lodashEs.some(t,r=>r.localPort===e)}async function mr(n,e){let t=e??await Le(),r={};return lodashEs.forEach(lodashEs.keys(n),o=>{let s=lodashEs.some(t,({localPort:i})=>i===n[o].toString());r[o]=s;}),r}async function ct(n){let e=null;try{e=(await import('@nut-tree-fork/nut-js')).getWindows;let r=await e(),o=null,s=new RegExp(n.toLocaleLowerCase());for(let i of r){let a=await i.title;if(s.test(a.toLocaleLowerCase())){o=i;break}}return o}catch{return null}}function hr(n){return [2e3,2e3,2e3,1e3,1e3,2e3,3e3,5e3][n]??[6e3,4e3][n%2]}function pe(){if(u.isWIN){let n="UEProject_5_6";return {proc:n,name:`${n}.exe`}}else return null}function gr(){return u.isWIN?{edge:["C:/Program Files (x86)/Microsoft/Edge/Application","msedge.exe"],chrome:["C:/Program Files/Google/Chrome/Application","chrome.exe"],chrome2:[`${u.homedir}/AppData/Local/Google/Chrome/Application`,"chrome.exe"]}:null}var q=class{config;ueConfig;destroySub;constructor(e){this.destroySub=new rxjs.Subject;let t={isKiosk:false,browserKeeping:false},{unrealFolder:r,openUrl:o,mode:s,foreground:i,remoteDebug:a}=lodashEs.assign({},e);if(typeof r=="string"&&r.trim()!==""){t.path=r;let c=pe();c&&(this.ueConfig=new Oe(r,c.proc));}typeof o=="string"&&o.trim()!==""&&(t.url=o),typeof s=="string"&&s.trim()!==""&&(t.isKiosk=s==="kiosk"),typeof i=="string"&&i.trim()!==""&&(t.browserKeeping=i==="always"),typeof a=="number"&&(t.remoteDebug=a),this.config=t;}async exec(e){let{blockPorts:t=[]}=lodashEs.assign({},e),r=false,o=await this.isUnrealRunning();return o||(this.ueConfig&&await this.ueConfig.settingSafePort(...t),o=await this.openUnreal()),o&&(r=await this.isUnrealInService()),r&&await this.openBrowser(),this.ueConfig?await this.ueConfig.getPortTable().then(se):y()}async isUnrealRunning(){let e=pe();if(e===null)return false;let{proc:t}=e,r=await lr(t);if(r.length<=0)return false;let o=t.toLocaleLowerCase(),s=lodashEs.find(r,i=>i.proc.toLocaleLowerCase()===o);return !!(s&&typeof s.pid=="number"&&s.pids.length>=2)}async isUnrealInService(e=12){let t=false,r=0,{StreamAudioPort:o}=this.ueConfig?await this.ueConfig.getPortTable():y();for(;!t&&r<e;)t=await dr(o),await T(hr(r)),r++;return t}async openUnreal(){let e=pe();if(e===null)return false;let{path:t}=this.config;if(t===void 0)return false;let r=u.addPath(t,e.name),[o,s]=await le(r);if(!o)return p.error(s),false;let[i,a]=await pr(r);return a&&p.error(a),i}async openBrowser(){let{url:e,isKiosk:t,remoteDebug:r}=this.config;if(e===void 0)return false;let o=gr();if(o===null)return false;let{proc:s}=pe(),{chrome:i,chrome2:a,edge:c}=o,[[l],[f],[h]]=await Promise.all([le(u.addPath(...i)),le(u.addPath(...c)),le(u.addPath(...a))]);if(l||h){let d=[];if(t&&(d.push("--kiosk"),d.push(`--auto-select-desktop-capture-source="${s}"`)),r!==void 0){d.push(`--remote-debugging-port=${r}`);let E=u.createFolder("google");d.push(`--user-data-dir=${E}`);}d.push(e);let[k,C]=l?i:a,[M,U]=await at(k,C,...d);return M?(this.setAppInForeground("chrome"),true):(p.error(U),false)}else if(f){let d=[];if(t&&(d.push("--kiosk"),d.push(`--auto-select-desktop-capture-source="${s}"`)),r!==void 0){d.push(`--remote-debugging-port=${r}`);let E=u.createFolder("edge");d.push(`--user-data-dir=${E}`);}d.push(e);let[k,C]=c,[M,U]=await at(k,C,...d);return M?(this.setAppInForeground("edge"),true):(p.error(U),false)}else return p.debug("Can't find browser"),false}async setAppInForeground(e){await T(3e3),(await ct(e))?.focus(),this.config.browserKeeping&&rxjs.interval(1e4).pipe(rxjs.takeUntil(this.destroySub)).subscribe(()=>{ct(e).then(r=>{r?.focus();});});}async getStateInfo(){let e=await this.isUnrealRunning();switch(+`0b${(e?await this.isUnrealInService(1):false)?1:0}${e?1:0}`){case 0:return 3;case 1:return 4;case 3:return 5;default:return 1}}onDestroy(){this.destroySub.next(),this.destroySub.complete();}},Oe=class{folder;file;constructor(e,t){this.folder=u.addPath(e,t,"config"),this.file=u.addPath(this.folder,"config.json"),u.folderCheck(this.folder),u.fileCheck(this.file,JSON.stringify(y()));}async settingSafePort(...e){let t=y(),r=await Le(),o=await mr(t,r);if(lodashEs.some(lodashEs.values(o),s=>s)){let s=[...e,...lodashEs.filter(lodashEs.map(r,a=>Number(a.localPort)),a=>!isNaN(a))],i=new Set(s);lodashEs.forEach(lodashEs.keys(o),a=>{let c=a;if(o[c]){let l=t[c],f=1,h=NaN;for(;isNaN(h)&&f<=200;){let d=l+f;i.has(d)?f++:(i.add(d),h=d);}isNaN(h)||(t[c]=h);}});}await this.setPortTable(O(t));}getPortTable(){return new Promise(e=>{re__default.default.readFile(this.file,"utf8",(t,r)=>{if(t)e(O(y()));else try{e(JSON.parse(r));}catch{e(O(y()));}});})}async setPortTable(e){try{let t=JSON.stringify(e);await new Promise(r=>{re__default.default.writeFile(this.file,t,"utf8",o=>{r();});});}catch{}}};function yr(...n){switch(n[0]){case "--status":return `\u670D\u52D9\u72C0\u614B\u78BA\u8A8D
27
27
  \u7528\u6CD5: status [\u984D\u5916\u53C3\u6578]
@@ -71,5 +71,5 @@ var P=(a=>(a[a.\u672A\u97FF\u61C9=1]="\u672A\u97FF\u61C9",a[a.\u7B49\u5F85\u6388
71
71
  `),i.end();else {let d=lodashEs.get(r,h,null);if(d){let k=await d(...f);i.write(`
72
72
  `+k+`
73
73
  `);}else i.write(`"${l}"\u662F\u7121\u6548\u7684\u6307\u4EE4.
74
- `);a.prompt();}}),i.on("end",()=>{console.log(`\u2699\uFE0F \u5207\u65B7\u9023\u7DDA: ${i.remoteAddress}`);});}),this.server.listen(o,s,()=>{console.log(`\u9023\u7DDA\u6307\u4EE4: telnet 127.0.0.1 ${o}`);});}onDestroy(){this.server.close();}};function Tr(n){return lodashEs.isArray(n)?lodashEs.get(n,"[0]",void 0):n??void 0}function Nr(n){try{return n?n.split("/").reverse()[1]??null:null}catch{return null}}var A=m("ChannelService");var de=class{constructor(e,t){this.sdk=e;this.browser=t;this.destroy=new rxjs.Subject,this.project_id=Tr(t.handshake.query.uuid),this.cloud=this.getCloudProxy(),this._currentState="JOIN",this.transitionMap=new Map;let r=new rxjs.Subject,o=new rxjs.Subject;this.audioSource=r,this.cameraSource=o,this.registerTransition(),rxjs.fromEvent(t,"disconnect").pipe(rxjs.take(1)).subscribe(s=>{this.transition("TO_DESTROY",s);}),rxjs.fromEvent(this.browser,"cloud").pipe(rxjs.takeUntil(this.destroy)).subscribe(s=>{this.cloud.sendToCloud(s);}),rxjs.fromEvent(this.browser,"version").pipe(rxjs.takeUntil(this.destroy)).subscribe(async()=>{let s=await this.sdk.getVersion();t.emit("version",s);}),r.pipe(rxjs.takeUntil(this.destroy),rxjs.switchMap(s=>{if(s==="node"&&this.sdk.source.mic){let i=rxjs.fromEvent(this.sdk.source.mic,"sampleRate").pipe(rxjs.map(c=>c)),a=rxjs.fromEvent(this.sdk.source.mic,"pcm").pipe(rxjs.map(c=>c));return i.pipe(rxjs.switchMap(c=>rxjs.concat(rxjs.of(c),a)))}else return rxjs.fromEvent(this.browser,"audio").pipe(rxjs.map(i=>i))})).subscribe(s=>{lodashEs.isArray(s)?this.cloud.sendToCloud({request:"audio",command:"pcm",content:s}):this.cloud.sendToCloud({request:"audio",command:"sampleRate",content:s});}),o.pipe(rxjs.takeUntil(this.destroy),rxjs.switchMap(s=>{if(s==="node"&&this.sdk.source.cam){let i=rxjs.fromEvent(this.sdk.source.cam,"gaze").pipe(rxjs.map(c=>({type:1,data:c}))),a=rxjs.fromEvent(this.sdk.source.cam,"resource").pipe(rxjs.map(c=>({type:2,data:c})));return rxjs.merge(i,a)}else {let i=rxjs.fromEvent(this.browser,"face").pipe(rxjs.map(c=>({type:3,data:c}))),a=rxjs.fromEvent(this.browser,"pose").pipe(rxjs.map(c=>({type:4,data:c})));return rxjs.merge(i,a)}})).subscribe(s=>{switch(s.type){case 2:let i=JSON.stringify({request:"depth_detect",content:s.data});this.cloud.send(i);break;case 1:this.sdk.ueTools.eyeTrack(s.data);break;case 4:this.cloud.sendToCloud({request:"pose_detect",content:s.data});break;case 3:let a=s.data!==null;this.sdk.ueTools.eyeTrack(a?ve(s.data):null),this.cloud.sendToCloud({request:"face_detect",content:a});break}}),this.project_id===void 0?(this.sdk.getProjectList().then(s=>{t.emit("list",s);}).catch(s=>{t.emit("list",null),A.error(s);}),rxjs.fromEvent(t,"uuid").pipe(rxjs.take(1),rxjs.takeUntil(this.destroy)).subscribe(s=>{this.project_id=s,this.sdk.getProxySocketURL(this.project_id,"new").then(i=>{this.transition("TO_CONNECTING",i);});})):this.sdk.getProxySocketURL(this.project_id,"new").then(s=>{this.transition("TO_CONNECTING",s);});}sdk;browser;_currentState;transitionMap;destroy;cloud;project_id;audioSource;cameraSource;get state(){return this._currentState}getCloudProxy(){let e=new B(this.browser.id);return e.linkStart.pipe(rxjs.takeUntil(this.destroy)).subscribe(()=>{this.transition("TO_READY","open");}),e.close.pipe(rxjs.takeUntil(this.destroy)).subscribe(async t=>{switch(t){case "close":case "no_permissions":{this.transition("TO_CLOSED",t);break}case "reconnect":{try{this.transition("TO_CLOSED",t),await this.sdk.replaceAccessToken();let r=await this.sdk.getProxySocketURL(this.project_id,"reconnect");this.transition("TO_RECONNECTING",r);}catch{this.transition("TO_CLOSED","net_error");}break}}}),e.message.pipe(rxjs.takeUntil(this.destroy)).subscribe(t=>{let r=[],o=[],s=[];lodashEs.forEach(t,i=>{switch(i.signal){case "osc":{s.push(i),r.push(i);break}case "audio":{i.command==="pcm"?this.sdk.ueTools.speech(i.content):i.command==="interrupted"&&this.sdk.ueTools.interrupted(),r.push(i);break}case "layout":o.push(i);default:{r.push(i);break}}}),r.length>0&&this.browser.emit("cloud",r),s.length>0&&this.sdk.ueTools.movement(s),o.length>0&&o.forEach(i=>{this.sdk.robotProxy.sendToRobot(i);});}),e}registerTransition(){this.transitionMap.set("TO_DESTROY",e=>{this.onDestroy(),A.debug(e);}),this.transitionMap.set("TO_CLOSED",e=>{switch(e){case "close":case "no_permissions":case "reconnect":case "net_error":this.browser.emit("channel",e);break;default:A.fatal("\u975E\u9810\u671F\u7684\u4E8B\u4EF6\u8F49\u63DB\u53C3\u6578");break}}),this.transitionMap.set("TO_READY",e=>{this.browser.emit("channel",e),this.setMediaSource("cam",this.sdk.source.hasNodeCam?"node":"browser"),this.setMediaSource("mic",this.sdk.source.hasNodeMic?"node":"browser");}),this.transitionMap.set("TO_CONNECTING",e=>{this.cloud.start(e);}),this.transitionMap.set("TO_RECONNECTING",e=>{let t=this.getCloudProxy();t.start(e),A.debug(`\u8B8A\u66F4\u4EE3\u7406, old cloud: ${this.cloud.uuid} --> new cloud: ${t.uuid}`),this.cloud=t;});}setMediaSource(e,t){e==="cam"?this.cameraSource.next(t):e==="mic"&&this.audioSource.next(t);}transition(e,t){if(this._currentState==="DESTROY")return A.warn(`\u{1F6AB} \u901A\u9053\u5DF2\u92B7\u6BC0\u4E0D\u5141\u8A31\u57F7\u884C\u4E8B\u4EF6\uFF0C\u88AB\u62D2\u7D55\u7684\u4E8B\u4EF6 ${e}`),false;let r=this._currentState;switch(e){case "TO_CONNECTING":case "TO_RECONNECTING":this._currentState="CONNECTING";break;case "TO_READY":this._currentState="READY";break;case "TO_CLOSED":this._currentState="CLOSED";break;case "TO_DESTROY":this._currentState="DESTROY";break;default:return A.warn(`\u274C \u8F49\u63DB\u5931\u6557\uFF1A\u672A\u5B9A\u7FA9\u7684\u4E8B\u4EF6 ${e}`),false}let o=this.transitionMap.get(e);return o&&o(t),A.debug(`\u2705 \u8F49\u63DB\u6210\u529F\uFF1A ${r} --(${e})--> ${this._currentState}`),true}async getStatusInfo(){let e=new Promise(s=>{let i=rxjs.timer(3e3).pipe(rxjs.map(()=>({mic:1,camera:1}))),a=rxjs.fromEvent(this.browser,"monitor").pipe(rxjs.map(c=>c));rxjs.merge(i,a).pipe(rxjs.take(1),rxjs.takeUntil(this.destroy)).subscribe(s),this.browser.emit("monitor",null);}),t=this.cloud.getStatusInfo(),r=this.browser.id,o=await e;return {browser_id:r,access:Nr(this.cloud.url),...o,...t}}onDestroy(){this.cloud.onBrowserLeave(),this.transitionMap.clear(),this.destroy.next(),this.destroy.complete(),this.sdk.onChannelDestroy(this.browser.id);}};var me=Symbol("AiiaCustomProvider");var $e="v1.1.0-beta.17";var bt=(r=>(r[r.\u672A\u555F\u52D5=0]="\u672A\u555F\u52D5",r[r.\u670D\u52D9\u4E2D=1]="\u670D\u52D9\u4E2D",r[r.\u5DF2\u7D50\u675F=2]="\u5DF2\u7D50\u675F",r))(bt||{}),ge=class{constructor(e,t,r,o,s=[]){this.config=e;this.stroage=t;this.source=r;this.expiment=o;this.state=0,this.destorySub=new rxjs.Subject,this.channelMap=new Map,this.timestamp=0,this.access_token=t.getItemSync(Q)??"";let{api:i,socket:a}=e.endPoint;this.socketAddr=a,this.apiProxy=new G(i),p.code("CODE: 2011","api"),this.chat=new $(e),p.code("CODE: 2011","chat"),this.ueTools=new J(e),p.code("CODE: 2011","udp tools"),this.robotProxy=new L,this.addProviders(s),this.initService();}config;stroage;source;expiment;apiProxy;chat;ueTools;automaion;state;channelMap;destorySub;access_token;timestamp;socketAddr;robotProxy;get accessToken(){return this.access_token}async start(){if(this.state!==0)throw new Error("ERROR CODE: 2005");this.state=1,await this.replaceAccessToken(),this.chat.memberChange.pipe(rxjs.takeUntil(this.destorySub)).subscribe(({type:t,socket:r})=>{t==="in"&&this.channelMap.set(r.id,new de(this,r));}),this.chat.start(),this.robotProxy.start(),p.code("CODE: 2012","chat");let{interaction:e}=lodashEs.assign({},this.expiment);if(e!==void 0&&typeof e.port=="number"){let{port:t,host:r}=e,o=new z({port:t,host:r},this);this.destorySub.subscribe(()=>{o.onDestroy();});}this.source.cam&&this.ueTools.getAvatarInfo().pipe(rxjs.takeUntil(this.destorySub)).subscribe(this.source.cam.feedback);}addProviders(e=[]){e.forEach(t=>{rxjs.fromEvent(process,t.event).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{let[o,s]=r;if(me===o){p.debug("[CustomSource]: Receive a object",s);let i=JSON.stringify({request:"custom",content:s});this.channelMap.forEach(({cloud:a})=>{a.send(i);});}});});}initService(){let{automation:e}=lodashEs.assign({},this.expiment);if(e!==void 0){let t=new q(e);t.exec({blockPorts:[this.config.port]}).then(r=>{this.ueTools.onStart(r);}),this.destorySub.subscribe(()=>{t.onDestroy();}),this.automaion=t;}else this.config.avatartService&&this.ueTools.onStart();rxjs.interval(1e3*60*3).pipe(rxjs.takeUntil(this.destorySub)).subscribe(()=>{this.inspectClientSocket(),this.getStatusInfo().then(t=>{this.apiProxy.uploadDeviceState(this.config.license,"bySdk",t,{note:this.config.note,device_name:this.config.deviceName});let{channel:r,core:o,unreal:s}=t;p.info("core",o),p.info("Unreal state",w[s],s),p.info("channels",lodashEs.map(r,i=>{let{camera:a,mic:c,...l}=i,f=`${P[a]}, ${a}`,h=`${P[c]}, ${c}`;return {cameraState:f,micState:h,...l}}));});});}async replaceAccessToken(){try{let e=await this.apiProxy.getAccessToken(this.config.license,{token_value:this.access_token,note:this.config.note,device_name:this.config.deviceName});this.access_token=e,this.timestamp=0,this.stroage.setItemSync(Q,e);}catch(e){throw p.error(e),e}}async getProjectList(){try{return await this.apiProxy.getProjectList(this.config.license)}catch(e){throw p.error(e),e}}async getProxySocketURL(e,t){let r=Date.now()-this.timestamp;return r<5e3&&await T(5100-r),this.timestamp=Date.now(),`${this.socketAddr}/v2/chat/project/${this.accessToken}/${e}/${t}`}inspectClientSocket(){let e=Array.from(this.channelMap);lodashEs.forEach(e,([t,r])=>{r.state==="DESTROY"?this.channelMap.delete(t):r.browser.disconnected&&(r.onDestroy(),p.info(`The browser(${t}) should be closed. Auto clean service.`));});}onChannelDestroy(e){this.channelMap.delete(e);}async getStatusInfo(){let e=lodashEs.map(Array.from(this.channelMap),([s,i])=>i.getStatusInfo()),t=new Promise(s=>{this.automaion?this.automaion.getStateInfo().then(s):s(2);}),[r,...o]=await Promise.all([t,...e]);return {ver:"v1",time:new Date().toISOString(),core:{state:this.state,msg:bt[this.state]},channel:o,unreal:r}}async getVersion(){let[e,t]=await Promise.all([this.ueTools.getVersion(),Cr(this.config.environment)]),r=process.version;return {aiiaCore:$e,unreal:e,nodejs:r,...t}}onDestroy(){this.source.onDestroy(),this.apiProxy.onDestroy(),this.chat.onDestroy(),this.ueTools.onDestroy(),this.robotProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.state=2,p.code("CODE: 2013");}};async function Cr(n){let e="dev";switch(n){case "production":e="prod";break;case "test":e="test";case "qa":e="qa";break;}let t=await fetch("https://oms-version-center-21193779403.asia-east1.run.app/",{method:"post",headers:{"X-Aiia-Sdk":`${e}`}}).then(o=>o.json()).catch(()=>({data:{frontend:{version:"Fetch failed"},api:{version:"Fetch failed"},agent:{version:"Fetch failed"}}})),r={};return Object.keys(t.data).forEach(o=>{let{version:s}=t.data[o];r[o]=s;}),r}var fe=class{hasNodeCam;hasNodeMic;cam;mic;constructor(e){let{cam:t,mic:r}=Object.assign({},e);this.hasNodeCam=!!t,this.hasNodeMic=!!r,this.cam=t,this.mic=r;}async init(){let e=[];this.cam?.onInit&&e.push(this.cam.onInit()),this.mic?.onInit&&e.push(this.mic.onInit()),await Promise.all(e).catch(t=>{});}onDestroy(){this.cam?.onDestroy&&this.cam.onDestroy(),this.mic?.onDestroy&&this.mic.onDestroy();}},je=class{};var Fe=class{constructor(e){this.event=e;}event;emit(e){process.emit(this.event,me,{request:"custom",content:e});}};function ci(n){if(be){if(typeof lodashEs.get(n,"group_id",void 0)!="string")throw new Error("ERROR CODE: 2002");let e=new X;_e(lodashEs.get(n,"debug",true))(e),p.code("CODE: 2010");let t=new W(lodashEs.assign({},n));p.code("CODE: 2011","config");let r=new H;p.code("CODE: 2011","storage");let o=new fe(lodashEs.get(n,"extension")),s=new ge(t,r,o,lodashEs.get(n,"experiment"),lodashEs.get(n,"provider",[]));return p.code("CODE: 2011","core"),o.init(),s.start(),p.code("CODE: 2012","main core"),()=>{s.onDestroy(),e.onDestroy();}}else throw new Error("ERROR CODE: 2001")}
74
+ `);a.prompt();}}),i.on("end",()=>{console.log(`\u2699\uFE0F \u5207\u65B7\u9023\u7DDA: ${i.remoteAddress}`);});}),this.server.listen(o,s,()=>{console.log(`\u9023\u7DDA\u6307\u4EE4: telnet 127.0.0.1 ${o}`);});}onDestroy(){this.server.close();}};function Tr(n){return lodashEs.isArray(n)?lodashEs.get(n,"[0]",void 0):n??void 0}function Nr(n){try{return n?n.split("/").reverse()[1]??null:null}catch{return null}}var A=m("ChannelService");var de=class{constructor(e,t){this.sdk=e;this.browser=t;this.destroy=new rxjs.Subject,this.project_id=Tr(t.handshake.query.uuid),this.cloud=this.getCloudProxy(),this._currentState="JOIN",this.transitionMap=new Map;let r=new rxjs.Subject,o=new rxjs.Subject;this.audioSource=r,this.cameraSource=o,this.registerTransition(),rxjs.fromEvent(t,"disconnect").pipe(rxjs.take(1)).subscribe(s=>{this.transition("TO_DESTROY",s);}),rxjs.fromEvent(this.browser,"cloud").pipe(rxjs.takeUntil(this.destroy)).subscribe(s=>{this.cloud.sendToCloud(s);}),rxjs.fromEvent(this.browser,"version").pipe(rxjs.takeUntil(this.destroy)).subscribe(async()=>{let s=await this.sdk.getVersion();t.emit("version",s);}),r.pipe(rxjs.takeUntil(this.destroy),rxjs.switchMap(s=>{if(s==="node"&&this.sdk.source.mic){let i=rxjs.fromEvent(this.sdk.source.mic,"sampleRate").pipe(rxjs.map(c=>c)),a=rxjs.fromEvent(this.sdk.source.mic,"pcm").pipe(rxjs.map(c=>c));return i.pipe(rxjs.switchMap(c=>rxjs.concat(rxjs.of(c),a)))}else return rxjs.fromEvent(this.browser,"audio").pipe(rxjs.map(i=>i))})).subscribe(s=>{lodashEs.isArray(s)?this.cloud.sendToCloud({request:"audio",command:"pcm",content:s}):this.cloud.sendToCloud({request:"audio",command:"sampleRate",content:s});}),o.pipe(rxjs.takeUntil(this.destroy),rxjs.switchMap(s=>{if(s==="node"&&this.sdk.source.cam){let i=rxjs.fromEvent(this.sdk.source.cam,"gaze").pipe(rxjs.map(c=>({type:1,data:c}))),a=rxjs.fromEvent(this.sdk.source.cam,"resource").pipe(rxjs.map(c=>({type:2,data:c})));return rxjs.merge(i,a)}else {let i=rxjs.fromEvent(this.browser,"face").pipe(rxjs.map(c=>({type:3,data:c}))),a=rxjs.fromEvent(this.browser,"pose").pipe(rxjs.map(c=>({type:4,data:c})));return rxjs.merge(i,a)}})).subscribe(s=>{switch(s.type){case 2:let i=JSON.stringify({request:"depth_detect",content:s.data});this.cloud.send(i);break;case 1:this.sdk.ueTools.eyeTrack(s.data);break;case 4:this.cloud.sendToCloud({request:"pose_detect",content:s.data});break;case 3:let a=s.data!==null;this.sdk.ueTools.eyeTrack(a?ve(s.data):null),this.cloud.sendToCloud({request:"face_detect",content:a});break}}),this.project_id===void 0?(this.sdk.getProjectList().then(s=>{t.emit("list",s);}).catch(s=>{t.emit("list",null),A.error(s);}),rxjs.fromEvent(t,"uuid").pipe(rxjs.take(1),rxjs.takeUntil(this.destroy)).subscribe(s=>{this.project_id=s,this.sdk.getProxySocketURL(this.project_id,"new").then(i=>{this.transition("TO_CONNECTING",i);});})):this.sdk.getProxySocketURL(this.project_id,"new").then(s=>{this.transition("TO_CONNECTING",s);});}sdk;browser;_currentState;transitionMap;destroy;cloud;project_id;audioSource;cameraSource;get state(){return this._currentState}getCloudProxy(){let e=new B(this.browser.id);return e.linkStart.pipe(rxjs.takeUntil(this.destroy)).subscribe(()=>{this.transition("TO_READY","open");}),e.close.pipe(rxjs.takeUntil(this.destroy)).subscribe(async t=>{switch(t){case "close":case "no_permissions":{this.transition("TO_CLOSED",t);break}case "reconnect":{try{this.transition("TO_CLOSED",t),await this.sdk.replaceAccessToken();let r=await this.sdk.getProxySocketURL(this.project_id,"reconnect");this.transition("TO_RECONNECTING",r);}catch{this.transition("TO_CLOSED","net_error");}break}}}),e.message.pipe(rxjs.takeUntil(this.destroy)).subscribe(t=>{let r=[],o=[],s=[];lodashEs.forEach(t,i=>{switch(i.signal){case "osc":{s.push(i),r.push(i);break}case "audio":{i.command==="pcm"?this.sdk.ueTools.speech(i.content):i.command==="interrupted"&&this.sdk.ueTools.interrupted(),r.push(i);break}case "layout":o.push(i);default:{r.push(i);break}}}),r.length>0&&this.browser.emit("cloud",r),s.length>0&&this.sdk.ueTools.movement(s),o.length>0&&o.forEach(i=>{this.sdk.robotProxy.sendToRobot(i);});}),e}registerTransition(){this.transitionMap.set("TO_DESTROY",e=>{this.onDestroy(),A.debug(e);}),this.transitionMap.set("TO_CLOSED",e=>{switch(e){case "close":case "no_permissions":case "reconnect":case "net_error":this.browser.emit("channel",e);break;default:A.fatal("\u975E\u9810\u671F\u7684\u4E8B\u4EF6\u8F49\u63DB\u53C3\u6578");break}}),this.transitionMap.set("TO_READY",e=>{this.browser.emit("channel",e),this.setMediaSource("cam",this.sdk.source.hasNodeCam?"node":"browser"),this.setMediaSource("mic",this.sdk.source.hasNodeMic?"node":"browser");}),this.transitionMap.set("TO_CONNECTING",e=>{this.cloud.start(e);}),this.transitionMap.set("TO_RECONNECTING",e=>{let t=this.getCloudProxy();t.start(e),A.debug(`\u8B8A\u66F4\u4EE3\u7406, old cloud: ${this.cloud.uuid} --> new cloud: ${t.uuid}`),this.cloud=t;});}setMediaSource(e,t){e==="cam"?this.cameraSource.next(t):e==="mic"&&this.audioSource.next(t);}transition(e,t){if(this._currentState==="DESTROY")return A.warn(`\u{1F6AB} \u901A\u9053\u5DF2\u92B7\u6BC0\u4E0D\u5141\u8A31\u57F7\u884C\u4E8B\u4EF6\uFF0C\u88AB\u62D2\u7D55\u7684\u4E8B\u4EF6 ${e}`),false;let r=this._currentState;switch(e){case "TO_CONNECTING":case "TO_RECONNECTING":this._currentState="CONNECTING";break;case "TO_READY":this._currentState="READY";break;case "TO_CLOSED":this._currentState="CLOSED";break;case "TO_DESTROY":this._currentState="DESTROY";break;default:return A.warn(`\u274C \u8F49\u63DB\u5931\u6557\uFF1A\u672A\u5B9A\u7FA9\u7684\u4E8B\u4EF6 ${e}`),false}let o=this.transitionMap.get(e);return o&&o(t),A.debug(`\u2705 \u8F49\u63DB\u6210\u529F\uFF1A ${r} --(${e})--> ${this._currentState}`),true}async getStatusInfo(){let e=new Promise(s=>{let i=rxjs.timer(3e3).pipe(rxjs.map(()=>({mic:1,camera:1}))),a=rxjs.fromEvent(this.browser,"monitor").pipe(rxjs.map(c=>c));rxjs.merge(i,a).pipe(rxjs.take(1),rxjs.takeUntil(this.destroy)).subscribe(s),this.browser.emit("monitor",null);}),t=this.cloud.getStatusInfo(),r=this.browser.id,o=await e;return {browser_id:r,access:Nr(this.cloud.url),...o,...t}}onDestroy(){this.cloud.onBrowserLeave(),this.transitionMap.clear(),this.destroy.next(),this.destroy.complete(),this.sdk.onChannelDestroy(this.browser.id);}};var me=Symbol("AiiaCustomProvider");var $e="v1.1.0-beta.18";var bt=(r=>(r[r.\u672A\u555F\u52D5=0]="\u672A\u555F\u52D5",r[r.\u670D\u52D9\u4E2D=1]="\u670D\u52D9\u4E2D",r[r.\u5DF2\u7D50\u675F=2]="\u5DF2\u7D50\u675F",r))(bt||{}),ge=class{constructor(e,t,r,o,s=[]){this.config=e;this.stroage=t;this.source=r;this.expiment=o;this.state=0,this.destorySub=new rxjs.Subject,this.channelMap=new Map,this.timestamp=0,this.access_token=t.getItemSync(Q)??"";let{api:i,socket:a}=e.endPoint;this.socketAddr=a,this.apiProxy=new G(i),p.code("CODE: 2011","api"),this.chat=new $(e),p.code("CODE: 2011","chat"),this.ueTools=new J(e),p.code("CODE: 2011","udp tools"),this.robotProxy=new L,this.addProviders(s),this.initService();}config;stroage;source;expiment;apiProxy;chat;ueTools;automaion;state;channelMap;destorySub;access_token;timestamp;socketAddr;robotProxy;get accessToken(){return this.access_token}async start(){if(this.state!==0)throw new Error("ERROR CODE: 2005");this.state=1,await this.replaceAccessToken(),this.chat.memberChange.pipe(rxjs.takeUntil(this.destorySub)).subscribe(({type:t,socket:r})=>{t==="in"&&this.channelMap.set(r.id,new de(this,r));}),this.chat.start(),this.robotProxy.start(),p.code("CODE: 2012","chat");let{interaction:e}=lodashEs.assign({},this.expiment);if(e!==void 0&&typeof e.port=="number"){let{port:t,host:r}=e,o=new z({port:t,host:r},this);this.destorySub.subscribe(()=>{o.onDestroy();});}this.source.cam&&this.ueTools.getAvatarInfo().pipe(rxjs.takeUntil(this.destorySub)).subscribe(this.source.cam.feedback);}addProviders(e=[]){e.forEach(t=>{rxjs.fromEvent(process,t.event).pipe(rxjs.takeUntil(this.destorySub)).subscribe(r=>{let[o,s]=r;if(me===o){p.debug("[CustomSource]: Receive a object",s);let i=JSON.stringify({request:"custom",content:s});this.channelMap.forEach(({cloud:a})=>{a.send(i);});}});});}initService(){let{automation:e}=lodashEs.assign({},this.expiment);if(e!==void 0){let t=new q(e);t.exec({blockPorts:[this.config.port]}).then(r=>{this.ueTools.onStart(r);}),this.destorySub.subscribe(()=>{t.onDestroy();}),this.automaion=t;}else this.config.avatartService&&this.ueTools.onStart();rxjs.interval(1e3*60*3).pipe(rxjs.takeUntil(this.destorySub)).subscribe(()=>{this.inspectClientSocket(),this.getStatusInfo().then(t=>{this.apiProxy.uploadDeviceState(this.config.license,"bySdk",t,{note:this.config.note,device_name:this.config.deviceName});let{channel:r,core:o,unreal:s}=t;p.info("core",o),p.info("Unreal state",w[s],s),p.info("channels",lodashEs.map(r,i=>{let{camera:a,mic:c,...l}=i,f=`${P[a]}, ${a}`,h=`${P[c]}, ${c}`;return {cameraState:f,micState:h,...l}}));});});}async replaceAccessToken(){try{let e=await this.apiProxy.getAccessToken(this.config.license,{token_value:this.access_token,note:this.config.note,device_name:this.config.deviceName});this.access_token=e,this.timestamp=0,this.stroage.setItemSync(Q,e);}catch(e){throw p.error(e),e}}async getProjectList(){try{return await this.apiProxy.getProjectList(this.config.license)}catch(e){throw p.error(e),e}}async getProxySocketURL(e,t){let r=Date.now()-this.timestamp;return r<5e3&&await T(5100-r),this.timestamp=Date.now(),`${this.socketAddr}/v2/chat/project/${this.accessToken}/${e}/${t}`}inspectClientSocket(){let e=Array.from(this.channelMap);lodashEs.forEach(e,([t,r])=>{r.state==="DESTROY"?this.channelMap.delete(t):r.browser.disconnected&&(r.onDestroy(),p.info(`The browser(${t}) should be closed. Auto clean service.`));});}onChannelDestroy(e){this.channelMap.delete(e);}async getStatusInfo(){let e=lodashEs.map(Array.from(this.channelMap),([i,a])=>a.getStatusInfo()),t=new Promise(i=>{this.automaion?this.automaion.getStateInfo().then(i):i(2);}),[r,...o]=await Promise.all([t,...e]);return {ver:"v1",time:new Date().toISOString(),core:{state:this.state,msg:bt[this.state]},channel:o,unreal:r}}async getVersion(){let[e,t]=await Promise.all([this.ueTools.getVersion(),Cr(this.config.environment)]),r=process.version;return {aiiaCore:$e,unreal:e,nodejs:r,...t}}onDestroy(){this.source.onDestroy(),this.apiProxy.onDestroy(),this.chat.onDestroy(),this.ueTools.onDestroy(),this.robotProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.state=2,p.code("CODE: 2013");}};async function Cr(n){let e="dev";switch(n){case "production":e="prod";break;case "test":e="test";case "qa":e="qa";break;}let t=await fetch("https://oms-version-center-21193779403.asia-east1.run.app/",{method:"post",headers:{"X-Aiia-Sdk":`${e}`}}).then(o=>o.json()).catch(()=>({data:{frontend:{version:"Fetch failed"},api:{version:"Fetch failed"},agent:{version:"Fetch failed"}}})),r={};return Object.keys(t.data).forEach(o=>{let{version:s}=t.data[o];r[o]=s;}),r}var fe=class{hasNodeCam;hasNodeMic;cam;mic;constructor(e){let{cam:t,mic:r}=Object.assign({},e);this.hasNodeCam=!!t,this.hasNodeMic=!!r,this.cam=t,this.mic=r;}async init(){let e=[];this.cam?.onInit&&e.push(this.cam.onInit()),this.mic?.onInit&&e.push(this.mic.onInit()),await Promise.all(e).catch(t=>{});}onDestroy(){this.cam?.onDestroy&&this.cam.onDestroy(),this.mic?.onDestroy&&this.mic.onDestroy();}},je=class{};var Fe=class{constructor(e){this.event=e;}event;emit(e){process.emit(this.event,me,{request:"custom",content:e});}};function ci(n){if(be){if(typeof lodashEs.get(n,"group_id",void 0)!="string")throw new Error("ERROR CODE: 2002");let e=new X;_e(lodashEs.get(n,"debug",true))(e),p.code("CODE: 2010");let t=new W(lodashEs.assign({},n));p.code("CODE: 2011","config");let r=new H;p.code("CODE: 2011","storage");let o=new fe(lodashEs.get(n,"extension")),s=new ge(t,r,o,lodashEs.get(n,"experiment"),lodashEs.get(n,"provider",[]));return p.code("CODE: 2011","core"),o.init(),s.start(),p.code("CODE: 2012","main core"),()=>{s.onDestroy(),e.onDestroy();}}else throw new Error("ERROR CODE: 2001")}
75
75
  exports.AiiaExtension=je;exports.CustomProvider=Fe;exports.RobotSocketProxy=L;exports.VERSION=$e;exports.aiiaCore=ci;
@@ -21,7 +21,7 @@ import {forEach,get,assign,omit,keys,map,isArray,find,pick,isInteger,isNaN as is
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  *
24
- * UPDATA DATE: 2026/6/18
24
+ * UPDATA DATE: 2026/6/22
25
25
  */
26
26
  var P=(a=>(a[a.\u672A\u97FF\u61C9=1]="\u672A\u97FF\u61C9",a[a.\u7B49\u5F85\u6388\u6B0A=2]="\u7B49\u5F85\u6388\u6B0A",a[a.\u5DF2\u88AB\u62D2\u7D55=3]="\u5DF2\u88AB\u62D2\u7D55",a[a.VAD\u6A21\u7D44\u8F09\u5165\u5931\u6557=4]="VAD\u6A21\u7D44\u8F09\u5165\u5931\u6557",a[a.\u53EF\u6B63\u5E38\u4F7F\u7528=5]="\u53EF\u6B63\u5E38\u4F7F\u7528",a[a.\u7F3A\u5931\u8A72\u88DD\u7F6E=6]="\u7F3A\u5931\u8A72\u88DD\u7F6E",a[a.\u6C92\u6709\u670D\u52D9=7]="\u6C92\u6709\u670D\u52D9",a))(P||{}),w=(s=>(s[s.\u975E\u9810\u671F\u7684\u72C0\u614B=1]="\u975E\u9810\u671F\u7684\u72C0\u614B",s[s.\u672A\u6388\u6B0A\u63A7\u5236=2]="\u672A\u6388\u6B0A\u63A7\u5236",s[s.\u672A\u555F\u52D5=3]="\u672A\u555F\u52D5",s[s.\u7121\u670D\u52D9=4]="\u7121\u670D\u52D9",s[s.\u53EF\u4F7F\u7528=5]="\u53EF\u4F7F\u7528",s))(w||{});var Q="access_token";var be=typeof process<"u"&&process.versions!=null&&process.versions.node!=null;function ye(n,e){let t=typeof e=="number"?e:NaN;if(n){let r=Number(n);return isNaN(r)?t:r}else return t}function T(n){return new Promise(e=>{setTimeout(e,n);})}var W=class{constructor(e){this.config=e;}config;get webserver(){return this.safeRead("webserver")}get environment(){let e=this.safeRead("env");return typeof e=="string"?e:"production"}get license(){return this.safeRead("group_id")??""}get note(){return this.safeRead("note")}get deviceName(){return this.safeRead("device_name")}get port(){return ye(process.env.PORT,this.safeRead("port")??3e3)}get ws_url(){let e=this.safeRead("ws_url");return typeof e=="string"?e:""}get worklet_url(){let e=this.safeRead("worklet_url");return typeof e=="string"?e:""}get project(){let e=this.safeRead("project");if(e===void 0)return {specific:false};if(typeof e=="string")return {name:e,id:e,specific:false};{let t=get(e,"id",void 0),r=get(e,"name",void 0);return {id:typeof t=="string"?t:void 0,name:typeof r=="string"?r:void 0,specific:true}}}get endPoint(){let e=this.safeRead("cloudEndPoint");if(e)return {api:e,socket:e.replace(/^http/,"ws")};{let t="dev";switch(this.environment){case "production":t="prod";break;case "qa":t="qa";break;case "test":t="test";break;}let r=`graphen-agentic-workflow-${t}-21193779403.asia-east1.run.app`;return {api:`https://${r}`,socket:`wss://${r}`}}}get debug(){return this.safeRead("debug")??true}get mediaStream(){return this.safeRead("mediaStream")}get chunkTimeInSeconds(){let t=this.safeRead("chunkTimeInSeconds");return typeof t=="number"&&t>0?t:.3}get llmSampleRate(){let t=this.safeRead("llmSampleRate");return typeof t=="number"&&t>0?t:16e3}get detection(){return assign({perSecond:3,confidence:80},this.safeRead("cameraDetection"))}get autoClearSubtitle(){let e=this.safeRead("autoClearUserSubtitle"),t=this.safeRead("autoClearAiiaSubtitle");return {userDelayTime:typeof e=="number"?e:5e3,aiiaDelayTime:typeof t=="number"?t:NaN}}get eyeTrackEnable(){return !!this.safeRead("eyeTrackEnable")}get eyeTrackCorrection(){return assign({x_axis_px:0,y_axis_px:0},this.safeRead("correction"))}get avatartService(){let e=this.safeRead("avatartService");return typeof e=="boolean"?e:true}safeRead(e){return get(this.config,e,void 0)}};var R={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},He=[];function Xe(...n){return He.push(...n),Xe}function _e(n){function e(c){if(c===void 0||c==="all")return {code:true,error:true,warn:true,info:true,debug:true,fatal:true};if(c==="none")return {error:false,code:false,warn:false,info:false,debug:false,fatal:false};if(typeof c=="boolean")return {code:c,error:c,warn:c,info:c,debug:c,fatal:c};{let l=new Set(c);return {code:l.has("code"),debug:l.has("debug"),fatal:l.has("fatal"),error:l.has("error"),warn:l.has("warn"),info:l.has("info")}}}let{info:t,error:r,warn:o,debug:s,fatal:i,code:a}=e(n);return a||(R.code=()=>{}),s||(R.debug=()=>{}),t||(R.info=()=>{}),o||(R.warn=()=>{}),r||(R.error=()=>{}),i||(R.fatal=()=>{}),Xe}function m(n){return new Proxy(R,{get(e,t,r){if(typeof t=="string")switch(t){case "debug":case "info":case "error":case "warn":case "fatal":case "code":return (...o)=>{let s=Ce().format("yyyy-MM-DD[T]HH:mm:ss:sss");forEach(He,i=>{(i.category===void 0||i.category.includes(n))&&i.next(t,s,n,...o);}),e[t](`[Aiia::${t}_${s}_](${n})`,...o);};default:return}else return},set(e,t,r,o){return true}})}var p=m("default");function ve(n,e){let{maxX:t,maxY:r,minX:o,minY:s}=assign({maxX:25,minX:-25,maxY:50,minY:-50},e),i=abs(t)+abs(o),a=abs(r)+abs(s),{clientHeight:c,clientWidth:l,originX:f,originY:h,width:d,height:k}=n,C=matrix([[i/l,0,o],[0,a/c,s],[0,0,1]]),M=f+d/2,U=c-(h+k/2),E=matrix([[M],[U],[1]]),Ge=multiply(C,E),yt=Ge.get([0,0]),St=Ge.get([1,0]);return {x:yt,y:St}}var ee=m("ChatModule"),$=class{constructor(e){this.config=e;this.memberSub=new Subject;}config;server;memberSub;get port(){return this.config.port}get webserver(){return this.config.webserver}get memberChange(){return this.memberSub.asObservable()}start(){if(this.server=new Server(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",e=>{ee.debug("client on",e.id),this.memberSub.next({type:"in",socket:e}),e.on("disconnect",t=>{ee.debug("client off",e.id,"reason",t),this.memberSub.next({type:"out",socket:e});});}),this.webserver===void 0){let e=this.port;this.server.listen(e),ee.info("Websocket server run on",e);}else ee.info("Websocket server rely your webserver.");}onDestroy(){this.server&&this.server.close();}};var Re=class{constructor(e){this.AppName=e;switch(this.platform=process.platform,this.homedir=ke.homedir(),this.userName=ke.userInfo().username,this.EOL=ke.EOL,this.platform){case "darwin":this.isMAC=true,this.isWIN=false,this.isLINUX=false,this.saveFolder=j.join(this.homedir,"Library","Application Support");break;case "win32":this.isMAC=false,this.isWIN=true,this.isLINUX=false,this.saveFolder=process.env.APPDATA||j.join(this.homedir,"AppData","Roaming");break;case "linux":this.isMAC=false,this.isWIN=false,this.isLINUX=true,this.saveFolder=process.env.XDG_CONFIG_HOME||j.join(this.homedir,".config");break;default:console.log(`\u7576\u524D\u7CFB\u7D71\u662F\u672A\u77E5\u7684\u5E73\u53F0: ${this.platform}`),this.isMAC=false,this.isWIN=false,this.isLINUX=false,this.saveFolder=this.homedir;break}this.appFolder=j.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder);}AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;userName;EOL;addPath(...e){return j.join(...e)}folderCheck(e){re.mkdirSync(e,{recursive:true});}createFolder(e){let t=this.addPath(this.appFolder,e);return this.folderCheck(t),t}fileCheck(e,t=""){re.existsSync(e)||re.writeFileSync(e,t,{encoding:"utf8"});}},u=new Re("aiia-sdk");var F=m("ApiProxyModule"),G=class{instance;controller;constructor(e){this.controller=new AbortController,this.instance=At.create({baseURL:e,signal:this.controller.signal});}async getAccessToken(e,t){let r=performance.now(),{token_value:o,note:s,device_name:i}=assign({},t),a={group_key:e,token_value:o??"",device_name:i??u.userName};s&&(a.note=s);let c=await this.instance.post("/api/v2/license/agent_token",a).then(l=>get(l.data,"token_value","")).catch(l=>(F.error(l),null));if(F.debug("Complete certification",`Took ${performance.now()-r} milliseconds.`),c===null)throw new Error("ERROR CODE: 500");if(c==="")throw new Error("ERROR CODE: 2003");return c}async getProjectList(e){let t=performance.now(),r=await this.instance.post("/api/v2/license/projects",{group_key:e}).then(o=>map(get(o,"data.projects",[]),({id:s,sub_project_name:i,avatar:a})=>{let{name:c,url:l}=a;return {avatar:{name:c,url:l},id:s,name:i}})).catch(o=>(F.error(o),null));if(F.debug("Got Project List",`Took ${performance.now()-t} milliseconds.`),r===null)throw new Error("ERROR CODE: 500");if(r.length===0)throw new Error("ERROR CODE: 2004");return r}async uploadDeviceState(e,t,r,o){let{device_name:s,note:i}=Object.assign({device_name:u.userName},o),a={group_key:e,monitor_type:t,monitor_status:r,device_name:s};i&&(a.note=i);let c=await this.instance.post("/api/v2/monitor/status",a).catch(l=>(F.error(l),null));return get(c,"data.status")==="success"}onDestroy(){this.controller.abort();}};function ze(n){if(typeof n!="string")return {type:0};try{let e=[],t=JSON.parse(n);return get(t,"signal")?e=[t]:isArray(t)?e=t:e=values(t),some(e,({signal:o})=>o==="pong")?{type:1}:{type:2,data:e}}catch{return {type:0}}}var Ae=2e4,Ze=12e4/Ae,Lt={request:"ping",content:"2"},Qe=JSON.stringify(Lt);var g=m("SocketProxtModule");var B=class{constructor(e){this.id=e;this.messageSub=new Subject,this.pingSub=new Subject,this.linkStartSub=new Subject,this.closeSub=new Subject,this.destorySub=new Subject,this.uuid=crypto.randomUUID(),this.pingSub.pipe(delay(Ae),takeUntil(this.destorySub)).subscribe(()=>{this.isConnected&&(this.setPing(),this.socket.send(Qe));}),g.debug(`create proxy for browser(${this.id})`);}id;uuid;socket;messageSub;pingSub;linkStartSub;destorySub;closeSub;lastCloseLog;_latency=[];pingTime=NaN;get url(){return this.socket?.url}get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}get isConnected(){return this.socket?.readyState===S.OPEN}get latency(){let e=this._latency.length;return e>=1?this._latency[e-1]:NaN}get averageLatency(){let e=this._latency.length;return e>=1?this._latency.reduce((r,o)=>r+o,0)/e:NaN}start(e){this.socket=new S(e,{autoPong:true}),fromEvent(this.socket,"open").pipe(takeUntil(this.destorySub)).subscribe(()=>{g.code("CODE: 2012","proxy"),this.linkStartSub.next(),this.pingSub.next();}),fromEvent(this.socket,"message").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{data:r}=t,o=ze(r);switch(o.type){case 1:{this.setPong(),this.pingSub.next();break}case 2:{this.messageSub.next(o.data);break}case 0:default:{g.warn("Got a message, but failed",r);break}}}),fromEvent(this.socket,"error").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{error:r}=t;g.error("Proxy has some problem",r);}),fromEvent(this.socket,"close").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{code:r,reason:o,type:s,wasClean:i}=t;switch(this.lastCloseLog=`\u6700\u8FD1\u4E00\u6B21\u95DC\u9589\u539F\u56E0: ${o}, \u932F\u8AA4\u78BC: ${r}, Type: ${s}`,r){case 4001:{g.code("CODE: 2001");break}case 1e3:case 1001:{this.closeSub.next("close"),g.code("CODE: 2000");break}case 1005:case 1006:{this.closeSub.next("close"),g.code("CODE: 2002",{code:r,reason:o,type:s,wasClean:i});break}case 4100:case 4103:case 4104:case 4105:{this.closeSub.next("reconnect"),g.code("CODE: 2004",`socket code: ${r}`);break}case 4101:case 4102:{this.closeSub.next("no_permissions"),g.code("CODE: 2003",`socket code: ${r}`);break}default:{this.closeSub.next("close"),g.code("CODE: 2005",{code:r,reason:o,type:s,wasClean:i});break}}this.onDestroy();});}setPing(){isNaN$1(this.pingTime)&&(this.pingTime=Date.now());}setPong(){if(!isNaN$1(this.pingTime)){let e=Date.now()-this.pingTime;this._latency.push(e/2),this.pingTime=NaN,this._latency.length>Ze&&this._latency.shift();}}send(e){let t=`currentTime: ${Ce().format("yyyy-MM-DD[T]HH:mm:ss:sss")}`;this.isConnected?this.socket.send(e,r=>{r&&g.error("send message fail",t,e.slice(0,100),r);}):g.warn("The socket is not connected",t,e.slice(0,100));}sendToCloud(e){this.send(JSON.stringify(e));}getStatusInfo(){let e=(()=>{if(this.socket){let r=this.socket.readyState;switch(r){case S.CONNECTING:return "\u6B63\u5728\u9023\u7DDA\u96F2\u7AEF\u670D\u52D9\u4E2D";case S.OPEN:return "\u96F2\u7AEF\u670D\u52D9\u6B63\u5E38\u904B\u4F5C";case S.CLOSING:return "\u6B63\u5728\u95DC\u9589\u96F2\u7AEF\u670D\u52D9";case S.CLOSED:return "\u96F2\u7AEF\u670D\u52D9\u5DF2\u95DC\u9589";default:return `\u672A\u77E5\u7684 Websocket \u72C0\u614B: ${r}`}}else return "\u96F2\u7AEF\u670D\u52D9\u5C1A\u672A\u555F\u52D5"})(),t=this.lastCloseLog?`${e}, ${this.lastCloseLog}`:e;return {proxy_id:this.uuid,latency:this.latency,averageLatency:this.averageLatency,proxy_state:this.socket?.readyState??-1,msg:`\u700F\u89BD\u5668(${this.id}) - \u96F2\u7AEF\u4EE3\u7406(${this.uuid}), ${t}`}}onDestroy(){this.linkStartSub.complete(),this.messageSub.complete(),this.closeSub.complete(),this.destorySub.next(),this.destorySub.complete(),g.debug(`Destroy cloud channel(${this.uuid})`);}onBrowserLeave(){switch(this.socket?.readyState){case S.CONNECTING:this.linkStartSub.pipe(take(1),takeUntil(this.destorySub)).subscribe(()=>{this.socket?.close(4001);});break;case S.OPEN:this.socket?.close(4001);break;case S.CLOSING:case S.CLOSED:}}};var H=class{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=u.addPath(u.appFolder,this.fileName),u.fileCheck(this.filePath);}getFileDataSync(){let e=re.readFileSync(this.filePath,"utf8");try{return JSON.parse(e)}catch{return {}}}setFileDataSync(e){try{let t=JSON.stringify(e);re.writeFileSync(this.filePath,t,"utf8");}catch{}}async getFileData(){return new Promise(e=>{re.readFile(this.filePath,"utf8",(t,r)=>{if(t)e({});else try{e(JSON.parse(r));}catch{e({});}});})}async setFileData(e){return new Promise(t=>{try{let r=JSON.stringify(e);re.writeFile(this.filePath,r,"utf8",o=>{t();});}catch{}})}async getItem(e){return (await this.getFileData())[e]??null}async setItem(e,t){let r=await this.getFileData();r[e]=t,await this.setFileData(r);}async removeItem(e){let t=await this.getFileData(),r=omit(t,e);await this.setFileData(r);}async clear(){await this.setFileData({});}getItemSync(e){return this.getFileDataSync()[e]??null}setItemSync(e,t){let r=this.getFileDataSync();r[e]=t,this.setFileDataSync(r);}setItemSyncByRecoord(e){let t=this.getFileDataSync();forEach(keys(e),r=>{t[r]=e[r];}),this.setFileDataSync(t);}removeItemSync(e){let t=omit(this.getFileDataSync(),e);this.setFileDataSync(t);}clearSync(){this.setFileDataSync({});}};var Bt={["CODE: 1000"]:"\u901A\u9053\u3001\u96F2\u7AEF\u670D\u52D9\u3001\u9EA5\u514B\u98A8\u90FD\u5DF2\u5C31\u7DD2",["CODE: 1001"]:"\u672A\u53D6\u5F97\u5A92\u9AD4\u88DD\u7F6E\u6B0A\u9650\uFF0C\u8ACB\u91CD\u65B0\u8A2D\u5B9A\u6216\u5FFD\u7565\u6B64\u8A0A\u606F","CODE: 1002":"\u8ACB\u8A02\u95B1\u5C08\u6848\u5217\u8868","CODE: 1010":"\u521D\u59CB\u5316\u5FC5\u8981\u4F9D\u8CF4","CODE: 1011":"\u6307\u5B9A\u4F9D\u8CF4\u5DF2\u5B8C\u6210","CODE: 1012":"\u555F\u52D5SDK","CODE: 1013":"\u7D50\u675FSDK","CODE: 1014":"\u5DF2\u555F\u52D5SDK","CODE: 2000":"\u5B89\u5168\u7684\u95DC\u9589\u9023\u7DDA","CODE: 2001":"\u7121\u526F\u4F5C\u7528\u7684\u95DC\u9589\u9023\u7DDA","CODE: 2002":"\u8207\u96F2\u7AEF\u7684\u670D\u52D9\u4E2D\u65B7",["CODE: 2003"]:"\u6C92\u6709\u6388\u6B0A\uFF0C\u8ACB\u806F\u7E6BGraphen","CODE: 2004":"\u81EA\u52D5\u91CD\u65B0\u9023\u7DDA\u96F2\u7AEF\u670D\u52D9",["CODE: 2005"]:"\u672A\u9810\u671F\u7684\u65B7\u7DDA\uFF0C\u8ACB\u806F\u7E6BGraphen","CODE: 2010":"\u958B\u59CB\u521D\u59CB\u5316\u5FC5\u8981\u6A21\u7D44","CODE: 2011":"\u6307\u5B9A\u6A21\u7D44\u521D\u59CB\u5316\u5B8C\u6210","CODE: 2012":"\u555F\u52D5\u670D\u52D9","CODE: 2013":"\u670D\u52D9\u7D50\u675F","ERROR CODE: 500":"\u7DB2\u7D61\u932F\u8AA4",["ERROR CODE: 1001"]:"\u74B0\u5883\u932F\u8AA4","ERROR CODE: 1002":"Worklet\u6A21\u7D44\u8F09\u5165\u5931\u6557","ERROR CODE: 1003":"\u672A\u7372\u5F97\u5A92\u9AD4\u88DD\u7F6E\u6B0A\u9650","ERROR CODE: 1004":"\u5BE6\u4F8B\u5DF2\u6467\u6BC0",["ERROR CODE: 2001"]:"nodejs","ERROR CODE: 2002":"\u672A\u63D0\u4F9B\u6191\u8B49","ERROR CODE: 2003":"\u7372\u53D6\u6B0A\u6756\u5931\u6557","ERROR CODE: 2004":"\u6C92\u6709\u53EF\u7528\u5C08\u6848","ERROR CODE: 2005":"\u91CD\u8907\u521D\u59CB\u5316"},X=class{path;buffer=[];destroy;constructor(e){this.path=e?u.createFolder(e):u.appFolder,this.destroy=new Subject,interval(3e3).pipe(takeUntil(this.destroy)).subscribe(this.flush.bind(this)),this.destroy.subscribe(this.flush.bind(this));}next(e,t,r,...o){let s=e==="code"?i=>i.startsWith("CODE")||i.startsWith("ERROR CODE")?`${i}(${Bt[i]})`:i:i=>i;try{let i=o.reduce((a,c)=>{if(c instanceof Error){let l=`Error[${c.message??"No Message"}]${u.EOL}`;return l+=c.stack??"unknow stack",typeof c.cause=="string"&&(l+=`${u.EOL}cause: ${c.cause}`),`${a}${u.EOL}${l}${u.EOL}`}else switch(typeof c){case "string":return `${a} ${s(c)}`;case "number":case "bigint":return `${a} ${c.toString()}`;case "boolean":return `${a} ${c?"true":"false"}`;case "object":try{return `${a} ${JSON.stringify(c)}`}catch{return a}case "symbol":case "undefined":case "function":return `${a} [${typeof c}]`}},"");this.buffer.push(`LOG(${e})__${t}__${r}__::${i}${u.EOL}`);}catch{}}flush(){if(this.buffer.length===0)return;let t=`log_${Ce().format("yyyy-MM-DD")}.txt`,r=u.addPath(this.path,t);try{re.appendFileSync(r,this.buffer.join(""),{encoding:"utf8"}),this.buffer=[];}catch{}}onDestroy(){this.destroy.next(),this.destroy.complete();}};var I="127.0.0.1",Pe={AvatarPort:9876,ActionPort:6969,LocationPort:4060,LookPort:6745,BackGroundPort:2400},Ht={StreamAudioPort:8080,CleanAudioPort:8081,UnrealEngineVersion:8086,AvatarInformation:8085};function y(){return {...Pe,...Ht}}function O(n){return Object.keys(n).reduce((e,t)=>({...e,[t]:n[t].toString()}),{})}function se(n){return Object.keys(n).reduce((e,t)=>({...e,[t]:Number(n[t])}),{})}var zt=m("UnrealUdpModule"),oe=class{udpClient;eyeBallUdp;x_axis_px;y_axis_px;mapping;constructor(){this.udpClient=new Map,this.x_axis_px=0,this.y_axis_px=0,this.mapping={};let e=pick(Pe,"AvatarPort","ActionPort","LocationPort","BackGroundPort");forEach(keys(e),t=>{let r=t,o=e[r].toString();this.mapping[o]=r;});}enableUDPClient(e){forEach(keys(e),t=>{let r=new Client(I,e[t]);this.udpClient.set(t,r);});}enableEyeTrack(e){this.eyeBallUdp=new Client(I,e.port),this.x_axis_px=e.x_axis_px,this.y_axis_px=e.y_axis_px;}eyeTrack(e){if(this.eyeBallUdp!==void 0){e?e.object_index??1:-1;let {x:r,y:o}=e??{x:7,y:20};this.eyeBallUdp.send(["/",this.toFloat(r+this.x_axis_px),this.toFloat(o+this.y_axis_px)]);}}movement(e){map(e,({content:t})=>{let r=get(t,"port","").toString(),o=this.mapping[r];if(this.udpClient.has(o)){let s=get(t,"message");this.udpClient.get(o).send(s);}});}toFloat(e){return isInteger(e)?e+1e-5:e}onDestroy(){forEach(Array.from(this.udpClient),([e,t])=>{t.close();}),zt.debug("Close all UnrealEngine's UDP");}};var D=m("UnrealSocketModule");function Vt(n){let e=Buffer.allocUnsafe(n.length*2);for(let t=0;t<n.length;t++)e.writeInt16LE(n[t],t*2);return e}var ne=class{destroy;retrySub;speechWS;interruptWS;avatartInfoWS;avatartInfoSub;get speechIsConnected(){return this.speechWS?.readyState===S.OPEN}get intrIsConnected(){return this.interruptWS?.readyState===S.OPEN}getAvatarInfo(){return this.avatartInfoSub.asObservable()}constructor(){this.destroy=new Subject,this.avatartInfoSub=new Subject,this.retrySub=new Subject;}connectSocket(e){this.speechWS=this.getSocket(e.speech,"speech"),this.interruptWS=this.getSocket(e.interrupt,"interrupt"),this.avatartInfoWS=this.getSocket(e.interrupt,"avatar_info",t=>{this.avatartInfoSub.next(t.data);}),this.retrySub.pipe(delay(1e3),takeUntil(this.destroy)).subscribe(t=>{switch(t){case "speech":this.speechWS=this.getSocket(e.speech,"speech");break;case "interrupt":this.interruptWS=this.getSocket(e.interrupt,"interrupt");break;case "avatar_info":this.avatartInfoWS=this.getSocket(e.interrupt,"avatar_info",r=>{this.avatartInfoSub.next(r.data);});break}});}getSocket(e,t,r){let o=new S(`ws://${I}:${e}`);return o.onopen=()=>{D.debug("Unreal tools connection successful",`type ${t}`);},r&&(o.onmessage=r),o.onerror=s=>{let{message:i,error:a,type:c}=s;D.error(`UE Tool(${t}) fail: ${i}`,a,{port:e,type:c});},o.onclose=s=>{let{code:i,reason:a,type:c}=s;D.debug(`UE Tool(${t}) close, try reconnecting after a delay`,{code:i,reason:a,type:c,port:e}),this.retrySub.next(t);},o}interrupted(){this.intrIsConnected?this.interruptWS.send("interrupted"):D.error("Send to Unreal fail, type interrupt");}speech(e){this.speechIsConnected?this.speechWS.send(Vt(e)):D.error("Send to Unreal fail, type speech");}async getVersion(e){let t=new S(`ws://${I}:${e}`),o=await new Promise(s=>{let i=setTimeout(()=>{s("");},1e3);t.onmessage=a=>{clearTimeout(i),s(a.data);},t.onerror=()=>{clearTimeout(i),s("");};});return t.close(),o}onDestroy(){this.speechWS?.close(),this.interruptWS?.close(),this.avatartInfoWS?.close(),this.destroy.next(),this.destroy.complete(),D.info("Close all UnrealEngine's WebSocket");}};var st=m("UnrealModule"),J=class{constructor(e){this.config=e;this.udpManager=new oe,this.socketManager=new ne,this.movement=()=>{},this.eyeTrack=()=>{},this.interrupted=()=>{},this.speech=()=>{},this.getAvatarInfo=this.socketManager.getAvatarInfo.bind(this.socketManager);}config;udpManager;socketManager;movement;eyeTrack;interrupted;speech;getAvatarInfo;SETTING_PORT=y();onStart(e){this.SETTING_PORT=assign(y(),e),st.debug("\u6307\u5B9A\u7684 ue port",this.SETTING_PORT);let{StreamAudioPort:t,CleanAudioPort:r,AvatarInformation:o,LookPort:s,...i}=this.SETTING_PORT;this.udpManager.enableUDPClient(i),this.socketManager.connectSocket({speech:t,interrupt:r,avatar_info:o}),this.movement=this.udpManager.movement.bind(this.udpManager),this.eyeTrack=this.udpManager.eyeTrack.bind(this.udpManager),this.interrupted=this.socketManager.interrupted.bind(this.socketManager),this.speech=this.socketManager.speech.bind(this.socketManager),this.config.eyeTrackEnable&&this.udpManager.enableEyeTrack({...this.config.eyeTrackCorrection,port:s});}getVersion(){return this.socketManager.getVersion(this.SETTING_PORT.UnrealEngineVersion)}onDestroy(){this.udpManager.onDestroy(),this.socketManager.onDestroy(),st.debug("UE tools destroy");}};var x=m("RobotSocketProxy");function it(){return Ce().format("yyyy-MM-DD[T]HH:mm:ss:sss")}var L=class n{static process;static onopen;uuid;socket;messageSub;linkStartSub;destorySub;closeSub;get url(){return this.socket?.url}get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}get isConnected(){return this.socket?.readyState===S.OPEN}constructor(){this.messageSub=new Subject,this.linkStartSub=new Subject,this.closeSub=new Subject,this.destorySub=new Subject,this.uuid=crypto.randomUUID();}start(){let e=process.env.ROBOT_WS_URL??"ws://localhost:9090";this.socket=new S(e,{autoPong:true}),fromEvent(this.socket,"open").pipe(takeUntil(this.destorySub)).subscribe(()=>{if(x.code("CODE: 2012","proxy"),n.onopen){let t=n.onopen();t!==null&&this.send(t);}else this.socket?.send(`Hello from nodejs, ${it()}`);this.linkStartSub.next();}),fromEvent(this.socket,"message").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{data:r}=t;x.debug("Robot Message",r);}),fromEvent(this.socket,"error").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{error:r}=t;x.error("Proxy has some problem",r);}),fromEvent(this.socket,"close").pipe(takeUntil(this.destorySub)).subscribe(t=>{let{code:r,reason:o,type:s,wasClean:i}=t;x.debug("Close robot proxy",{code:r,reason:o,type:s,wasClean:i}),this.onDestroy();});}send(e){let t=`currentTime: ${it()}`;this.isConnected?this.socket.send(e,r=>{r&&x.error("send message fail",t,e.slice(0,100),r);}):x.warn("The socket is not connected",t,e.slice(0,100));}sendToRobot(e){if(n.process){let t=n.process(e);t!==null&&this.send(t);}else this.send(JSON.stringify(e));}onDestroy(){this.linkStartSub.complete(),this.messageSub.complete(),this.closeSub.complete(),this.destorySub.next(),this.destorySub.complete(),x.debug(`Destroy robot proxy(${this.uuid})`);}};async function lr(...n){let e=n.length>0?n.join(", "):"*";return await ut.processLoad(e).catch(()=>[])}async function le(n){return new Promise(e=>{re.stat(n,t=>{e(t?[false,t]:[true]);});})}async function pr(n,...e){return u.isWIN?new Promise(t=>{let r=spawn(n,e,{detached:true,stdio:"ignore"});r.once("error",o=>{t([false,o]);}),r.once("spawn",()=>{r.unref(),t([true]);});}):Promise.resolve([false,new Error("The function isn't implement in this system")])}async function at(n,e,...t){return u.isWIN?new Promise(r=>{let o=[`cd ${n} && ${e} `,...t].join(" "),s=exec(o);s.once("error",i=>{r([false,i]);}),s.once("spawn",()=>{s.unref(),r([true]);});}):Promise.resolve([false,new Error("The function isn't implement in this system")])}async function Le(){try{return await ut.networkConnections()}catch(n){return console.error("\u6AA2\u67E5 Port \u6642\u767C\u751F\u932F\u8AA4\uFF1A",n),[]}}async function dr(n){let e=n.toString(),t=await Le();return some(t,r=>r.localPort===e)}async function mr(n,e){let t=e??await Le(),r={};return forEach(keys(n),o=>{let s=some(t,({localPort:i})=>i===n[o].toString());r[o]=s;}),r}async function ct(n){let e=null;try{e=(await import('@nut-tree-fork/nut-js')).getWindows;let r=await e(),o=null,s=new RegExp(n.toLocaleLowerCase());for(let i of r){let a=await i.title;if(s.test(a.toLocaleLowerCase())){o=i;break}}return o}catch{return null}}function hr(n){return [2e3,2e3,2e3,1e3,1e3,2e3,3e3,5e3][n]??[6e3,4e3][n%2]}function pe(){if(u.isWIN){let n="UEProject_5_6";return {proc:n,name:`${n}.exe`}}else return null}function gr(){return u.isWIN?{edge:["C:/Program Files (x86)/Microsoft/Edge/Application","msedge.exe"],chrome:["C:/Program Files/Google/Chrome/Application","chrome.exe"],chrome2:[`${u.homedir}/AppData/Local/Google/Chrome/Application`,"chrome.exe"]}:null}var q=class{config;ueConfig;destroySub;constructor(e){this.destroySub=new Subject;let t={isKiosk:false,browserKeeping:false},{unrealFolder:r,openUrl:o,mode:s,foreground:i,remoteDebug:a}=assign({},e);if(typeof r=="string"&&r.trim()!==""){t.path=r;let c=pe();c&&(this.ueConfig=new Oe(r,c.proc));}typeof o=="string"&&o.trim()!==""&&(t.url=o),typeof s=="string"&&s.trim()!==""&&(t.isKiosk=s==="kiosk"),typeof i=="string"&&i.trim()!==""&&(t.browserKeeping=i==="always"),typeof a=="number"&&(t.remoteDebug=a),this.config=t;}async exec(e){let{blockPorts:t=[]}=assign({},e),r=false,o=await this.isUnrealRunning();return o||(this.ueConfig&&await this.ueConfig.settingSafePort(...t),o=await this.openUnreal()),o&&(r=await this.isUnrealInService()),r&&await this.openBrowser(),this.ueConfig?await this.ueConfig.getPortTable().then(se):y()}async isUnrealRunning(){let e=pe();if(e===null)return false;let{proc:t}=e,r=await lr(t);if(r.length<=0)return false;let o=t.toLocaleLowerCase(),s=find(r,i=>i.proc.toLocaleLowerCase()===o);return !!(s&&typeof s.pid=="number"&&s.pids.length>=2)}async isUnrealInService(e=12){let t=false,r=0,{StreamAudioPort:o}=this.ueConfig?await this.ueConfig.getPortTable():y();for(;!t&&r<e;)t=await dr(o),await T(hr(r)),r++;return t}async openUnreal(){let e=pe();if(e===null)return false;let{path:t}=this.config;if(t===void 0)return false;let r=u.addPath(t,e.name),[o,s]=await le(r);if(!o)return p.error(s),false;let[i,a]=await pr(r);return a&&p.error(a),i}async openBrowser(){let{url:e,isKiosk:t,remoteDebug:r}=this.config;if(e===void 0)return false;let o=gr();if(o===null)return false;let{proc:s}=pe(),{chrome:i,chrome2:a,edge:c}=o,[[l],[f],[h]]=await Promise.all([le(u.addPath(...i)),le(u.addPath(...c)),le(u.addPath(...a))]);if(l||h){let d=[];if(t&&(d.push("--kiosk"),d.push(`--auto-select-desktop-capture-source="${s}"`)),r!==void 0){d.push(`--remote-debugging-port=${r}`);let E=u.createFolder("google");d.push(`--user-data-dir=${E}`);}d.push(e);let[k,C]=l?i:a,[M,U]=await at(k,C,...d);return M?(this.setAppInForeground("chrome"),true):(p.error(U),false)}else if(f){let d=[];if(t&&(d.push("--kiosk"),d.push(`--auto-select-desktop-capture-source="${s}"`)),r!==void 0){d.push(`--remote-debugging-port=${r}`);let E=u.createFolder("edge");d.push(`--user-data-dir=${E}`);}d.push(e);let[k,C]=c,[M,U]=await at(k,C,...d);return M?(this.setAppInForeground("edge"),true):(p.error(U),false)}else return p.debug("Can't find browser"),false}async setAppInForeground(e){await T(3e3),(await ct(e))?.focus(),this.config.browserKeeping&&interval(1e4).pipe(takeUntil(this.destroySub)).subscribe(()=>{ct(e).then(r=>{r?.focus();});});}async getStateInfo(){let e=await this.isUnrealRunning();switch(+`0b${(e?await this.isUnrealInService(1):false)?1:0}${e?1:0}`){case 0:return 3;case 1:return 4;case 3:return 5;default:return 1}}onDestroy(){this.destroySub.next(),this.destroySub.complete();}},Oe=class{folder;file;constructor(e,t){this.folder=u.addPath(e,t,"config"),this.file=u.addPath(this.folder,"config.json"),u.folderCheck(this.folder),u.fileCheck(this.file,JSON.stringify(y()));}async settingSafePort(...e){let t=y(),r=await Le(),o=await mr(t,r);if(some(values(o),s=>s)){let s=[...e,...filter(map(r,a=>Number(a.localPort)),a=>!isNaN(a))],i=new Set(s);forEach(keys(o),a=>{let c=a;if(o[c]){let l=t[c],f=1,h=NaN;for(;isNaN(h)&&f<=200;){let d=l+f;i.has(d)?f++:(i.add(d),h=d);}isNaN(h)||(t[c]=h);}});}await this.setPortTable(O(t));}getPortTable(){return new Promise(e=>{re.readFile(this.file,"utf8",(t,r)=>{if(t)e(O(y()));else try{e(JSON.parse(r));}catch{e(O(y()));}});})}async setPortTable(e){try{let t=JSON.stringify(e);await new Promise(r=>{re.writeFile(this.file,t,"utf8",o=>{r();});});}catch{}}};function yr(...n){switch(n[0]){case "--status":return `\u670D\u52D9\u72C0\u614B\u78BA\u8A8D
27
27
  \u7528\u6CD5: status [\u984D\u5916\u53C3\u6578]
@@ -71,5 +71,5 @@ var P=(a=>(a[a.\u672A\u97FF\u61C9=1]="\u672A\u97FF\u61C9",a[a.\u7B49\u5F85\u6388
71
71
  `),i.end();else {let d=get(r,h,null);if(d){let k=await d(...f);i.write(`
72
72
  `+k+`
73
73
  `);}else i.write(`"${l}"\u662F\u7121\u6548\u7684\u6307\u4EE4.
74
- `);a.prompt();}}),i.on("end",()=>{console.log(`\u2699\uFE0F \u5207\u65B7\u9023\u7DDA: ${i.remoteAddress}`);});}),this.server.listen(o,s,()=>{console.log(`\u9023\u7DDA\u6307\u4EE4: telnet 127.0.0.1 ${o}`);});}onDestroy(){this.server.close();}};function Tr(n){return isArray(n)?get(n,"[0]",void 0):n??void 0}function Nr(n){try{return n?n.split("/").reverse()[1]??null:null}catch{return null}}var A=m("ChannelService");var de=class{constructor(e,t){this.sdk=e;this.browser=t;this.destroy=new Subject,this.project_id=Tr(t.handshake.query.uuid),this.cloud=this.getCloudProxy(),this._currentState="JOIN",this.transitionMap=new Map;let r=new Subject,o=new Subject;this.audioSource=r,this.cameraSource=o,this.registerTransition(),fromEvent(t,"disconnect").pipe(take(1)).subscribe(s=>{this.transition("TO_DESTROY",s);}),fromEvent(this.browser,"cloud").pipe(takeUntil(this.destroy)).subscribe(s=>{this.cloud.sendToCloud(s);}),fromEvent(this.browser,"version").pipe(takeUntil(this.destroy)).subscribe(async()=>{let s=await this.sdk.getVersion();t.emit("version",s);}),r.pipe(takeUntil(this.destroy),switchMap(s=>{if(s==="node"&&this.sdk.source.mic){let i=fromEvent(this.sdk.source.mic,"sampleRate").pipe(map$1(c=>c)),a=fromEvent(this.sdk.source.mic,"pcm").pipe(map$1(c=>c));return i.pipe(switchMap(c=>concat(of(c),a)))}else return fromEvent(this.browser,"audio").pipe(map$1(i=>i))})).subscribe(s=>{isArray(s)?this.cloud.sendToCloud({request:"audio",command:"pcm",content:s}):this.cloud.sendToCloud({request:"audio",command:"sampleRate",content:s});}),o.pipe(takeUntil(this.destroy),switchMap(s=>{if(s==="node"&&this.sdk.source.cam){let i=fromEvent(this.sdk.source.cam,"gaze").pipe(map$1(c=>({type:1,data:c}))),a=fromEvent(this.sdk.source.cam,"resource").pipe(map$1(c=>({type:2,data:c})));return merge(i,a)}else {let i=fromEvent(this.browser,"face").pipe(map$1(c=>({type:3,data:c}))),a=fromEvent(this.browser,"pose").pipe(map$1(c=>({type:4,data:c})));return merge(i,a)}})).subscribe(s=>{switch(s.type){case 2:let i=JSON.stringify({request:"depth_detect",content:s.data});this.cloud.send(i);break;case 1:this.sdk.ueTools.eyeTrack(s.data);break;case 4:this.cloud.sendToCloud({request:"pose_detect",content:s.data});break;case 3:let a=s.data!==null;this.sdk.ueTools.eyeTrack(a?ve(s.data):null),this.cloud.sendToCloud({request:"face_detect",content:a});break}}),this.project_id===void 0?(this.sdk.getProjectList().then(s=>{t.emit("list",s);}).catch(s=>{t.emit("list",null),A.error(s);}),fromEvent(t,"uuid").pipe(take(1),takeUntil(this.destroy)).subscribe(s=>{this.project_id=s,this.sdk.getProxySocketURL(this.project_id,"new").then(i=>{this.transition("TO_CONNECTING",i);});})):this.sdk.getProxySocketURL(this.project_id,"new").then(s=>{this.transition("TO_CONNECTING",s);});}sdk;browser;_currentState;transitionMap;destroy;cloud;project_id;audioSource;cameraSource;get state(){return this._currentState}getCloudProxy(){let e=new B(this.browser.id);return e.linkStart.pipe(takeUntil(this.destroy)).subscribe(()=>{this.transition("TO_READY","open");}),e.close.pipe(takeUntil(this.destroy)).subscribe(async t=>{switch(t){case "close":case "no_permissions":{this.transition("TO_CLOSED",t);break}case "reconnect":{try{this.transition("TO_CLOSED",t),await this.sdk.replaceAccessToken();let r=await this.sdk.getProxySocketURL(this.project_id,"reconnect");this.transition("TO_RECONNECTING",r);}catch{this.transition("TO_CLOSED","net_error");}break}}}),e.message.pipe(takeUntil(this.destroy)).subscribe(t=>{let r=[],o=[],s=[];forEach(t,i=>{switch(i.signal){case "osc":{s.push(i),r.push(i);break}case "audio":{i.command==="pcm"?this.sdk.ueTools.speech(i.content):i.command==="interrupted"&&this.sdk.ueTools.interrupted(),r.push(i);break}case "layout":o.push(i);default:{r.push(i);break}}}),r.length>0&&this.browser.emit("cloud",r),s.length>0&&this.sdk.ueTools.movement(s),o.length>0&&o.forEach(i=>{this.sdk.robotProxy.sendToRobot(i);});}),e}registerTransition(){this.transitionMap.set("TO_DESTROY",e=>{this.onDestroy(),A.debug(e);}),this.transitionMap.set("TO_CLOSED",e=>{switch(e){case "close":case "no_permissions":case "reconnect":case "net_error":this.browser.emit("channel",e);break;default:A.fatal("\u975E\u9810\u671F\u7684\u4E8B\u4EF6\u8F49\u63DB\u53C3\u6578");break}}),this.transitionMap.set("TO_READY",e=>{this.browser.emit("channel",e),this.setMediaSource("cam",this.sdk.source.hasNodeCam?"node":"browser"),this.setMediaSource("mic",this.sdk.source.hasNodeMic?"node":"browser");}),this.transitionMap.set("TO_CONNECTING",e=>{this.cloud.start(e);}),this.transitionMap.set("TO_RECONNECTING",e=>{let t=this.getCloudProxy();t.start(e),A.debug(`\u8B8A\u66F4\u4EE3\u7406, old cloud: ${this.cloud.uuid} --> new cloud: ${t.uuid}`),this.cloud=t;});}setMediaSource(e,t){e==="cam"?this.cameraSource.next(t):e==="mic"&&this.audioSource.next(t);}transition(e,t){if(this._currentState==="DESTROY")return A.warn(`\u{1F6AB} \u901A\u9053\u5DF2\u92B7\u6BC0\u4E0D\u5141\u8A31\u57F7\u884C\u4E8B\u4EF6\uFF0C\u88AB\u62D2\u7D55\u7684\u4E8B\u4EF6 ${e}`),false;let r=this._currentState;switch(e){case "TO_CONNECTING":case "TO_RECONNECTING":this._currentState="CONNECTING";break;case "TO_READY":this._currentState="READY";break;case "TO_CLOSED":this._currentState="CLOSED";break;case "TO_DESTROY":this._currentState="DESTROY";break;default:return A.warn(`\u274C \u8F49\u63DB\u5931\u6557\uFF1A\u672A\u5B9A\u7FA9\u7684\u4E8B\u4EF6 ${e}`),false}let o=this.transitionMap.get(e);return o&&o(t),A.debug(`\u2705 \u8F49\u63DB\u6210\u529F\uFF1A ${r} --(${e})--> ${this._currentState}`),true}async getStatusInfo(){let e=new Promise(s=>{let i=timer(3e3).pipe(map$1(()=>({mic:1,camera:1}))),a=fromEvent(this.browser,"monitor").pipe(map$1(c=>c));merge(i,a).pipe(take(1),takeUntil(this.destroy)).subscribe(s),this.browser.emit("monitor",null);}),t=this.cloud.getStatusInfo(),r=this.browser.id,o=await e;return {browser_id:r,access:Nr(this.cloud.url),...o,...t}}onDestroy(){this.cloud.onBrowserLeave(),this.transitionMap.clear(),this.destroy.next(),this.destroy.complete(),this.sdk.onChannelDestroy(this.browser.id);}};var me=Symbol("AiiaCustomProvider");var $e="v1.1.0-beta.17";var bt=(r=>(r[r.\u672A\u555F\u52D5=0]="\u672A\u555F\u52D5",r[r.\u670D\u52D9\u4E2D=1]="\u670D\u52D9\u4E2D",r[r.\u5DF2\u7D50\u675F=2]="\u5DF2\u7D50\u675F",r))(bt||{}),ge=class{constructor(e,t,r,o,s=[]){this.config=e;this.stroage=t;this.source=r;this.expiment=o;this.state=0,this.destorySub=new Subject,this.channelMap=new Map,this.timestamp=0,this.access_token=t.getItemSync(Q)??"";let{api:i,socket:a}=e.endPoint;this.socketAddr=a,this.apiProxy=new G(i),p.code("CODE: 2011","api"),this.chat=new $(e),p.code("CODE: 2011","chat"),this.ueTools=new J(e),p.code("CODE: 2011","udp tools"),this.robotProxy=new L,this.addProviders(s),this.initService();}config;stroage;source;expiment;apiProxy;chat;ueTools;automaion;state;channelMap;destorySub;access_token;timestamp;socketAddr;robotProxy;get accessToken(){return this.access_token}async start(){if(this.state!==0)throw new Error("ERROR CODE: 2005");this.state=1,await this.replaceAccessToken(),this.chat.memberChange.pipe(takeUntil(this.destorySub)).subscribe(({type:t,socket:r})=>{t==="in"&&this.channelMap.set(r.id,new de(this,r));}),this.chat.start(),this.robotProxy.start(),p.code("CODE: 2012","chat");let{interaction:e}=assign({},this.expiment);if(e!==void 0&&typeof e.port=="number"){let{port:t,host:r}=e,o=new z({port:t,host:r},this);this.destorySub.subscribe(()=>{o.onDestroy();});}this.source.cam&&this.ueTools.getAvatarInfo().pipe(takeUntil(this.destorySub)).subscribe(this.source.cam.feedback);}addProviders(e=[]){e.forEach(t=>{fromEvent(process,t.event).pipe(takeUntil(this.destorySub)).subscribe(r=>{let[o,s]=r;if(me===o){p.debug("[CustomSource]: Receive a object",s);let i=JSON.stringify({request:"custom",content:s});this.channelMap.forEach(({cloud:a})=>{a.send(i);});}});});}initService(){let{automation:e}=assign({},this.expiment);if(e!==void 0){let t=new q(e);t.exec({blockPorts:[this.config.port]}).then(r=>{this.ueTools.onStart(r);}),this.destorySub.subscribe(()=>{t.onDestroy();}),this.automaion=t;}else this.config.avatartService&&this.ueTools.onStart();interval(1e3*60*3).pipe(takeUntil(this.destorySub)).subscribe(()=>{this.inspectClientSocket(),this.getStatusInfo().then(t=>{this.apiProxy.uploadDeviceState(this.config.license,"bySdk",t,{note:this.config.note,device_name:this.config.deviceName});let{channel:r,core:o,unreal:s}=t;p.info("core",o),p.info("Unreal state",w[s],s),p.info("channels",map(r,i=>{let{camera:a,mic:c,...l}=i,f=`${P[a]}, ${a}`,h=`${P[c]}, ${c}`;return {cameraState:f,micState:h,...l}}));});});}async replaceAccessToken(){try{let e=await this.apiProxy.getAccessToken(this.config.license,{token_value:this.access_token,note:this.config.note,device_name:this.config.deviceName});this.access_token=e,this.timestamp=0,this.stroage.setItemSync(Q,e);}catch(e){throw p.error(e),e}}async getProjectList(){try{return await this.apiProxy.getProjectList(this.config.license)}catch(e){throw p.error(e),e}}async getProxySocketURL(e,t){let r=Date.now()-this.timestamp;return r<5e3&&await T(5100-r),this.timestamp=Date.now(),`${this.socketAddr}/v2/chat/project/${this.accessToken}/${e}/${t}`}inspectClientSocket(){let e=Array.from(this.channelMap);forEach(e,([t,r])=>{r.state==="DESTROY"?this.channelMap.delete(t):r.browser.disconnected&&(r.onDestroy(),p.info(`The browser(${t}) should be closed. Auto clean service.`));});}onChannelDestroy(e){this.channelMap.delete(e);}async getStatusInfo(){let e=map(Array.from(this.channelMap),([s,i])=>i.getStatusInfo()),t=new Promise(s=>{this.automaion?this.automaion.getStateInfo().then(s):s(2);}),[r,...o]=await Promise.all([t,...e]);return {ver:"v1",time:new Date().toISOString(),core:{state:this.state,msg:bt[this.state]},channel:o,unreal:r}}async getVersion(){let[e,t]=await Promise.all([this.ueTools.getVersion(),Cr(this.config.environment)]),r=process.version;return {aiiaCore:$e,unreal:e,nodejs:r,...t}}onDestroy(){this.source.onDestroy(),this.apiProxy.onDestroy(),this.chat.onDestroy(),this.ueTools.onDestroy(),this.robotProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.state=2,p.code("CODE: 2013");}};async function Cr(n){let e="dev";switch(n){case "production":e="prod";break;case "test":e="test";case "qa":e="qa";break;}let t=await fetch("https://oms-version-center-21193779403.asia-east1.run.app/",{method:"post",headers:{"X-Aiia-Sdk":`${e}`}}).then(o=>o.json()).catch(()=>({data:{frontend:{version:"Fetch failed"},api:{version:"Fetch failed"},agent:{version:"Fetch failed"}}})),r={};return Object.keys(t.data).forEach(o=>{let{version:s}=t.data[o];r[o]=s;}),r}var fe=class{hasNodeCam;hasNodeMic;cam;mic;constructor(e){let{cam:t,mic:r}=Object.assign({},e);this.hasNodeCam=!!t,this.hasNodeMic=!!r,this.cam=t,this.mic=r;}async init(){let e=[];this.cam?.onInit&&e.push(this.cam.onInit()),this.mic?.onInit&&e.push(this.mic.onInit()),await Promise.all(e).catch(t=>{});}onDestroy(){this.cam?.onDestroy&&this.cam.onDestroy(),this.mic?.onDestroy&&this.mic.onDestroy();}},je=class{};var Fe=class{constructor(e){this.event=e;}event;emit(e){process.emit(this.event,me,{request:"custom",content:e});}};function ci(n){if(be){if(typeof get(n,"group_id",void 0)!="string")throw new Error("ERROR CODE: 2002");let e=new X;_e(get(n,"debug",true))(e),p.code("CODE: 2010");let t=new W(assign({},n));p.code("CODE: 2011","config");let r=new H;p.code("CODE: 2011","storage");let o=new fe(get(n,"extension")),s=new ge(t,r,o,get(n,"experiment"),get(n,"provider",[]));return p.code("CODE: 2011","core"),o.init(),s.start(),p.code("CODE: 2012","main core"),()=>{s.onDestroy(),e.onDestroy();}}else throw new Error("ERROR CODE: 2001")}
74
+ `);a.prompt();}}),i.on("end",()=>{console.log(`\u2699\uFE0F \u5207\u65B7\u9023\u7DDA: ${i.remoteAddress}`);});}),this.server.listen(o,s,()=>{console.log(`\u9023\u7DDA\u6307\u4EE4: telnet 127.0.0.1 ${o}`);});}onDestroy(){this.server.close();}};function Tr(n){return isArray(n)?get(n,"[0]",void 0):n??void 0}function Nr(n){try{return n?n.split("/").reverse()[1]??null:null}catch{return null}}var A=m("ChannelService");var de=class{constructor(e,t){this.sdk=e;this.browser=t;this.destroy=new Subject,this.project_id=Tr(t.handshake.query.uuid),this.cloud=this.getCloudProxy(),this._currentState="JOIN",this.transitionMap=new Map;let r=new Subject,o=new Subject;this.audioSource=r,this.cameraSource=o,this.registerTransition(),fromEvent(t,"disconnect").pipe(take(1)).subscribe(s=>{this.transition("TO_DESTROY",s);}),fromEvent(this.browser,"cloud").pipe(takeUntil(this.destroy)).subscribe(s=>{this.cloud.sendToCloud(s);}),fromEvent(this.browser,"version").pipe(takeUntil(this.destroy)).subscribe(async()=>{let s=await this.sdk.getVersion();t.emit("version",s);}),r.pipe(takeUntil(this.destroy),switchMap(s=>{if(s==="node"&&this.sdk.source.mic){let i=fromEvent(this.sdk.source.mic,"sampleRate").pipe(map$1(c=>c)),a=fromEvent(this.sdk.source.mic,"pcm").pipe(map$1(c=>c));return i.pipe(switchMap(c=>concat(of(c),a)))}else return fromEvent(this.browser,"audio").pipe(map$1(i=>i))})).subscribe(s=>{isArray(s)?this.cloud.sendToCloud({request:"audio",command:"pcm",content:s}):this.cloud.sendToCloud({request:"audio",command:"sampleRate",content:s});}),o.pipe(takeUntil(this.destroy),switchMap(s=>{if(s==="node"&&this.sdk.source.cam){let i=fromEvent(this.sdk.source.cam,"gaze").pipe(map$1(c=>({type:1,data:c}))),a=fromEvent(this.sdk.source.cam,"resource").pipe(map$1(c=>({type:2,data:c})));return merge(i,a)}else {let i=fromEvent(this.browser,"face").pipe(map$1(c=>({type:3,data:c}))),a=fromEvent(this.browser,"pose").pipe(map$1(c=>({type:4,data:c})));return merge(i,a)}})).subscribe(s=>{switch(s.type){case 2:let i=JSON.stringify({request:"depth_detect",content:s.data});this.cloud.send(i);break;case 1:this.sdk.ueTools.eyeTrack(s.data);break;case 4:this.cloud.sendToCloud({request:"pose_detect",content:s.data});break;case 3:let a=s.data!==null;this.sdk.ueTools.eyeTrack(a?ve(s.data):null),this.cloud.sendToCloud({request:"face_detect",content:a});break}}),this.project_id===void 0?(this.sdk.getProjectList().then(s=>{t.emit("list",s);}).catch(s=>{t.emit("list",null),A.error(s);}),fromEvent(t,"uuid").pipe(take(1),takeUntil(this.destroy)).subscribe(s=>{this.project_id=s,this.sdk.getProxySocketURL(this.project_id,"new").then(i=>{this.transition("TO_CONNECTING",i);});})):this.sdk.getProxySocketURL(this.project_id,"new").then(s=>{this.transition("TO_CONNECTING",s);});}sdk;browser;_currentState;transitionMap;destroy;cloud;project_id;audioSource;cameraSource;get state(){return this._currentState}getCloudProxy(){let e=new B(this.browser.id);return e.linkStart.pipe(takeUntil(this.destroy)).subscribe(()=>{this.transition("TO_READY","open");}),e.close.pipe(takeUntil(this.destroy)).subscribe(async t=>{switch(t){case "close":case "no_permissions":{this.transition("TO_CLOSED",t);break}case "reconnect":{try{this.transition("TO_CLOSED",t),await this.sdk.replaceAccessToken();let r=await this.sdk.getProxySocketURL(this.project_id,"reconnect");this.transition("TO_RECONNECTING",r);}catch{this.transition("TO_CLOSED","net_error");}break}}}),e.message.pipe(takeUntil(this.destroy)).subscribe(t=>{let r=[],o=[],s=[];forEach(t,i=>{switch(i.signal){case "osc":{s.push(i),r.push(i);break}case "audio":{i.command==="pcm"?this.sdk.ueTools.speech(i.content):i.command==="interrupted"&&this.sdk.ueTools.interrupted(),r.push(i);break}case "layout":o.push(i);default:{r.push(i);break}}}),r.length>0&&this.browser.emit("cloud",r),s.length>0&&this.sdk.ueTools.movement(s),o.length>0&&o.forEach(i=>{this.sdk.robotProxy.sendToRobot(i);});}),e}registerTransition(){this.transitionMap.set("TO_DESTROY",e=>{this.onDestroy(),A.debug(e);}),this.transitionMap.set("TO_CLOSED",e=>{switch(e){case "close":case "no_permissions":case "reconnect":case "net_error":this.browser.emit("channel",e);break;default:A.fatal("\u975E\u9810\u671F\u7684\u4E8B\u4EF6\u8F49\u63DB\u53C3\u6578");break}}),this.transitionMap.set("TO_READY",e=>{this.browser.emit("channel",e),this.setMediaSource("cam",this.sdk.source.hasNodeCam?"node":"browser"),this.setMediaSource("mic",this.sdk.source.hasNodeMic?"node":"browser");}),this.transitionMap.set("TO_CONNECTING",e=>{this.cloud.start(e);}),this.transitionMap.set("TO_RECONNECTING",e=>{let t=this.getCloudProxy();t.start(e),A.debug(`\u8B8A\u66F4\u4EE3\u7406, old cloud: ${this.cloud.uuid} --> new cloud: ${t.uuid}`),this.cloud=t;});}setMediaSource(e,t){e==="cam"?this.cameraSource.next(t):e==="mic"&&this.audioSource.next(t);}transition(e,t){if(this._currentState==="DESTROY")return A.warn(`\u{1F6AB} \u901A\u9053\u5DF2\u92B7\u6BC0\u4E0D\u5141\u8A31\u57F7\u884C\u4E8B\u4EF6\uFF0C\u88AB\u62D2\u7D55\u7684\u4E8B\u4EF6 ${e}`),false;let r=this._currentState;switch(e){case "TO_CONNECTING":case "TO_RECONNECTING":this._currentState="CONNECTING";break;case "TO_READY":this._currentState="READY";break;case "TO_CLOSED":this._currentState="CLOSED";break;case "TO_DESTROY":this._currentState="DESTROY";break;default:return A.warn(`\u274C \u8F49\u63DB\u5931\u6557\uFF1A\u672A\u5B9A\u7FA9\u7684\u4E8B\u4EF6 ${e}`),false}let o=this.transitionMap.get(e);return o&&o(t),A.debug(`\u2705 \u8F49\u63DB\u6210\u529F\uFF1A ${r} --(${e})--> ${this._currentState}`),true}async getStatusInfo(){let e=new Promise(s=>{let i=timer(3e3).pipe(map$1(()=>({mic:1,camera:1}))),a=fromEvent(this.browser,"monitor").pipe(map$1(c=>c));merge(i,a).pipe(take(1),takeUntil(this.destroy)).subscribe(s),this.browser.emit("monitor",null);}),t=this.cloud.getStatusInfo(),r=this.browser.id,o=await e;return {browser_id:r,access:Nr(this.cloud.url),...o,...t}}onDestroy(){this.cloud.onBrowserLeave(),this.transitionMap.clear(),this.destroy.next(),this.destroy.complete(),this.sdk.onChannelDestroy(this.browser.id);}};var me=Symbol("AiiaCustomProvider");var $e="v1.1.0-beta.18";var bt=(r=>(r[r.\u672A\u555F\u52D5=0]="\u672A\u555F\u52D5",r[r.\u670D\u52D9\u4E2D=1]="\u670D\u52D9\u4E2D",r[r.\u5DF2\u7D50\u675F=2]="\u5DF2\u7D50\u675F",r))(bt||{}),ge=class{constructor(e,t,r,o,s=[]){this.config=e;this.stroage=t;this.source=r;this.expiment=o;this.state=0,this.destorySub=new Subject,this.channelMap=new Map,this.timestamp=0,this.access_token=t.getItemSync(Q)??"";let{api:i,socket:a}=e.endPoint;this.socketAddr=a,this.apiProxy=new G(i),p.code("CODE: 2011","api"),this.chat=new $(e),p.code("CODE: 2011","chat"),this.ueTools=new J(e),p.code("CODE: 2011","udp tools"),this.robotProxy=new L,this.addProviders(s),this.initService();}config;stroage;source;expiment;apiProxy;chat;ueTools;automaion;state;channelMap;destorySub;access_token;timestamp;socketAddr;robotProxy;get accessToken(){return this.access_token}async start(){if(this.state!==0)throw new Error("ERROR CODE: 2005");this.state=1,await this.replaceAccessToken(),this.chat.memberChange.pipe(takeUntil(this.destorySub)).subscribe(({type:t,socket:r})=>{t==="in"&&this.channelMap.set(r.id,new de(this,r));}),this.chat.start(),this.robotProxy.start(),p.code("CODE: 2012","chat");let{interaction:e}=assign({},this.expiment);if(e!==void 0&&typeof e.port=="number"){let{port:t,host:r}=e,o=new z({port:t,host:r},this);this.destorySub.subscribe(()=>{o.onDestroy();});}this.source.cam&&this.ueTools.getAvatarInfo().pipe(takeUntil(this.destorySub)).subscribe(this.source.cam.feedback);}addProviders(e=[]){e.forEach(t=>{fromEvent(process,t.event).pipe(takeUntil(this.destorySub)).subscribe(r=>{let[o,s]=r;if(me===o){p.debug("[CustomSource]: Receive a object",s);let i=JSON.stringify({request:"custom",content:s});this.channelMap.forEach(({cloud:a})=>{a.send(i);});}});});}initService(){let{automation:e}=assign({},this.expiment);if(e!==void 0){let t=new q(e);t.exec({blockPorts:[this.config.port]}).then(r=>{this.ueTools.onStart(r);}),this.destorySub.subscribe(()=>{t.onDestroy();}),this.automaion=t;}else this.config.avatartService&&this.ueTools.onStart();interval(1e3*60*3).pipe(takeUntil(this.destorySub)).subscribe(()=>{this.inspectClientSocket(),this.getStatusInfo().then(t=>{this.apiProxy.uploadDeviceState(this.config.license,"bySdk",t,{note:this.config.note,device_name:this.config.deviceName});let{channel:r,core:o,unreal:s}=t;p.info("core",o),p.info("Unreal state",w[s],s),p.info("channels",map(r,i=>{let{camera:a,mic:c,...l}=i,f=`${P[a]}, ${a}`,h=`${P[c]}, ${c}`;return {cameraState:f,micState:h,...l}}));});});}async replaceAccessToken(){try{let e=await this.apiProxy.getAccessToken(this.config.license,{token_value:this.access_token,note:this.config.note,device_name:this.config.deviceName});this.access_token=e,this.timestamp=0,this.stroage.setItemSync(Q,e);}catch(e){throw p.error(e),e}}async getProjectList(){try{return await this.apiProxy.getProjectList(this.config.license)}catch(e){throw p.error(e),e}}async getProxySocketURL(e,t){let r=Date.now()-this.timestamp;return r<5e3&&await T(5100-r),this.timestamp=Date.now(),`${this.socketAddr}/v2/chat/project/${this.accessToken}/${e}/${t}`}inspectClientSocket(){let e=Array.from(this.channelMap);forEach(e,([t,r])=>{r.state==="DESTROY"?this.channelMap.delete(t):r.browser.disconnected&&(r.onDestroy(),p.info(`The browser(${t}) should be closed. Auto clean service.`));});}onChannelDestroy(e){this.channelMap.delete(e);}async getStatusInfo(){let e=map(Array.from(this.channelMap),([i,a])=>a.getStatusInfo()),t=new Promise(i=>{this.automaion?this.automaion.getStateInfo().then(i):i(2);}),[r,...o]=await Promise.all([t,...e]);return {ver:"v1",time:new Date().toISOString(),core:{state:this.state,msg:bt[this.state]},channel:o,unreal:r}}async getVersion(){let[e,t]=await Promise.all([this.ueTools.getVersion(),Cr(this.config.environment)]),r=process.version;return {aiiaCore:$e,unreal:e,nodejs:r,...t}}onDestroy(){this.source.onDestroy(),this.apiProxy.onDestroy(),this.chat.onDestroy(),this.ueTools.onDestroy(),this.robotProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.state=2,p.code("CODE: 2013");}};async function Cr(n){let e="dev";switch(n){case "production":e="prod";break;case "test":e="test";case "qa":e="qa";break;}let t=await fetch("https://oms-version-center-21193779403.asia-east1.run.app/",{method:"post",headers:{"X-Aiia-Sdk":`${e}`}}).then(o=>o.json()).catch(()=>({data:{frontend:{version:"Fetch failed"},api:{version:"Fetch failed"},agent:{version:"Fetch failed"}}})),r={};return Object.keys(t.data).forEach(o=>{let{version:s}=t.data[o];r[o]=s;}),r}var fe=class{hasNodeCam;hasNodeMic;cam;mic;constructor(e){let{cam:t,mic:r}=Object.assign({},e);this.hasNodeCam=!!t,this.hasNodeMic=!!r,this.cam=t,this.mic=r;}async init(){let e=[];this.cam?.onInit&&e.push(this.cam.onInit()),this.mic?.onInit&&e.push(this.mic.onInit()),await Promise.all(e).catch(t=>{});}onDestroy(){this.cam?.onDestroy&&this.cam.onDestroy(),this.mic?.onDestroy&&this.mic.onDestroy();}},je=class{};var Fe=class{constructor(e){this.event=e;}event;emit(e){process.emit(this.event,me,{request:"custom",content:e});}};function ci(n){if(be){if(typeof get(n,"group_id",void 0)!="string")throw new Error("ERROR CODE: 2002");let e=new X;_e(get(n,"debug",true))(e),p.code("CODE: 2010");let t=new W(assign({},n));p.code("CODE: 2011","config");let r=new H;p.code("CODE: 2011","storage");let o=new fe(get(n,"extension")),s=new ge(t,r,o,get(n,"experiment"),get(n,"provider",[]));return p.code("CODE: 2011","core"),o.init(),s.start(),p.code("CODE: 2012","main core"),()=>{s.onDestroy(),e.onDestroy();}}else throw new Error("ERROR CODE: 2001")}
75
75
  export{je as AiiaExtension,Fe as CustomProvider,L as RobotSocketProxy,$e as VERSION,ci as aiiaCore};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphen.ai/aiia-sdk",
3
- "version": "1.1.0-beta.17",
3
+ "version": "1.1.0-beta.18",
4
4
  "description": "AIIA SDK powered by Graphen",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./distindex.d.ts",