@graphen.ai/aiia-sdk 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -25,7 +25,6 @@ SOFTWARE.
25
25
  This project uses the following third-party packages and complies with their respective licenses:
26
26
 
27
27
  - axios (MIT License)
28
- - cors (MIT License)
29
28
  - lodash (MIT License)
30
29
  - rxjs (Apache License 2.0)
31
30
  - socket.io (MIT License)
package/README.md CHANGED
@@ -37,8 +37,45 @@ import { aiiaCore } from '@graphen.ai/aiia-sdk/node';
37
37
  const core = aiiaCore({ license: "<Your Token>" });
38
38
  ```
39
39
 
40
+ ## 錯誤碼(Error Codes)
41
+
42
+ | 錯誤碼(Error Codes) | 描述 | desc |
43
+ |---|---|---|
44
+ | ERROR CODE: 500 | 網絡錯誤 | Network Error |
45
+ | ERROR CODE: 1001 | 環境錯誤(browser) | Environment Error - Browser |
46
+ | ERROR CODE: 1002 | Worklet模組載入失敗 | Worklet Module Loading Failed |
47
+ | ERROR CODE: 1003 | 未獲得媒體裝置權限 | Media Device Permission Not Granted |
48
+ | ERROR CODE: 1004 | 實例已摧毀 | Instance Destroyed |
49
+ | ERROR CODE: 2001 | 環境錯誤(nodejs) | Environment Error - Node.js |
50
+ | ERROR CODE: 2002 | 未提供憑證 | Credentials Not Provided |
51
+ | ERROR CODE: 2003 | 獲取權杖失敗 | Failed to Obtain Token |
52
+ | ERROR CODE: 2004 | 沒有可用專案 | No Available Project |
53
+ | ERROR CODE: 2005 | 重複初始化 | Duplicate Initialization |
54
+
55
+ ## 訊息碼(Message Codes)
56
+
57
+ | 訊息碼(Message Codes) | 描述 | desc |
58
+ |---|---|---|
59
+ | CODE: 1000 | 通道、雲端服務、麥克風都已就緒 | Channel, Cloud Service, Microphone Ready |
60
+ | CODE: 1001 | 未取得媒體裝置權限,請重新設定或忽略此訊息 | Media Device Permission Not Granted, Please Reconfigure or Ignore This Message |
61
+ | CODE: 1002 | 請訂閱專案列表 | Please Subscribe to Project List |
62
+ | CODE: 1010 | 初始化必要依賴 | Initializing Required Dependencies |
63
+ | CODE: 1011 | 指定依賴已完成 | Specified Dependencies Completed |
64
+ | CODE: 1012 | 啟動SDK | Starting SDK |
65
+ | CODE: 1013 | 結束SDK | Ending SDK |
66
+ | CODE: 2000 | 安全的關閉連線 | Safely Closing Connection |
67
+ | CODE: 2001 | 無副作用的關閉連線 | Closing Connection Without Side Effects |
68
+ | CODE: 2002 | 與雲端的服務中斷 | Disconnected from Cloud Service |
69
+ | CODE: 2003 | 沒有授權,請聯繫Graphen | No Authorization, Please Contact Graphen |
70
+ | CODE: 2004 | 自動重新連線連端服務 | Automatically Reconnecting to Cloud Service |
71
+ | CODE: 2005 | 未預期的斷線,請聯繫Graphen | Unexpected Disconnection, Please Contact Graphen |
72
+ | CODE: 2010 | 開始初始化必要模組 | Starting Initialization of Required Modules |
73
+ | CODE: 2011 | 指定模組初始化完成 | Specified Module Initialization Completed |
74
+ | CODE: 2012 | 啟動服務 | Starting Service |
75
+ | CODE: 2013 | 服務結束 | Service Ended |
76
+
40
77
  ## 授權條款(LICENSE)
41
78
 
42
79
  本專案採用 MIT 授權。詳見 [LICENSE](./LICENSE) 檔案。
43
80
 
44
- This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
81
+ This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
@@ -1 +1 @@
1
- !function(){"use strict";class e extends AudioWorkletProcessor{energyThreshold;constructor(){super(),this.energyThreshold=.01}process(e,r,s){const t=e[0][0];if(!t)return!0;let o=0;for(let e=0;e<t.length;e++)o+=Math.abs(t[e]);return o/=t.length,this.port.postMessage({float32:t.buffer,energy:o},[t.buffer]),!0}}registerProcessor("aiia-vad",e)}();
1
+ !function(){"use strict";var t;!function(t){t[t.unknow=0]="unknow",t[t.allowed=1]="allowed",t[t.rejected=2]="rejected"}(t||(t={}));class e extends AudioWorkletProcessor{inputBuffer;inputBufferLength;processChunkSize;outputSampleRate;originalSampleRate;constructor(t){super(),this.inputBuffer=[],this.inputBufferLength=0;const{outputSampleRate:e,chunkTimeInSeconds:n}=Object.assign({outputSampleRate:16e3,chunkTimeInSeconds:1},t?.processorOptions);this.originalSampleRate=sampleRate,this.outputSampleRate=e,this.processChunkSize=function(t,e,n=1){const s=e*n,u=t/e;return Math.ceil(s*u)}(this.originalSampleRate,this.outputSampleRate,n)}process(t,e,n){const s=t[0][0];if(!s)return!0;const u=new Float32Array(s);if(this.inputBuffer.push(u),this.inputBufferLength+=s.length,this.inputBufferLength>=this.processChunkSize){const t=function(t){const e=t.reduce((t,e)=>t+e.length,0),n=new Float32Array(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n}(this.inputBuffer);this.inputBuffer=[],this.inputBufferLength=0;const e=function(t,e,n){if(e===n)return t;const s=n/e,u=Math.ceil(t.length*s),i=new Float32Array(u);for(let e=0;e<u;e++){const n=e/s,u=Math.floor(n),o=n-u,r=t[u],a=t[Math.min(u+1,t.length-1)];i[e]=r+(a-r)*o}return i}(t,this.originalSampleRate,this.outputSampleRate);this.port.postMessage({float32:e,outputSampleRate:this.outputSampleRate},[e.buffer])}return!0}}registerProcessor("aiia-vad",e)}();
package/dist/browser.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var t=require("moment"),e=require("rxjs"),r=require("socket.io-client"),n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function o(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var a="object"==typeof n&&n&&n.Object===Object&&n,i=a,u="object"==typeof self&&self&&self.Object===Object&&self,s=i||u||Function("return this")(),c=s.Symbol,l=c,f=Object.prototype,h=f.hasOwnProperty,d=f.toString,v=l?l.toStringTag:void 0;var p=function(t){var e=h.call(t,v),r=t[v];try{t[v]=void 0;var n=!0}catch(t){}var o=d.call(t);return n&&(e?t[v]=r:delete t[v]),o},b=Object.prototype.toString;var g=p,y=function(t){return b.call(t)},_=c?c.toStringTag:void 0;var m=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":_&&_ in Object(t)?g(t):y(t)};var w=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},j=m,S=w;var O,x=function(t){if(!S(t))return!1;var e=j(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},R=s["__core-js_shared__"],k=(O=/[^.]+$/.exec(R&&R.keys&&R.keys.IE_PROTO||""))?"Symbol(src)_1."+O:"";var C=function(t){return!!k&&k in t},A=Function.prototype.toString;var N=function(t){if(null!=t){try{return A.call(t)}catch(t){}try{return t+""}catch(t){}}return""},M=x,E=C,D=w,P=N,z=/^\[object .+?Constructor\]$/,B=Function.prototype,T=Object.prototype,$=B.toString,F=T.hasOwnProperty,U=RegExp("^"+$.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var I=function(t){return!(!D(t)||E(t))&&(M(t)?U:z).test(P(t))},V=function(t,e){return null==t?void 0:t[e]};var q=function(t,e){var r=V(t,e);return I(r)?r:void 0},Q=q,W=function(){try{var t=Q(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),L=W;var G=function(t,e,r){"__proto__"==e&&L?L(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var H=function(t,e){return t===e||t!=t&&e!=e},J=G,K=H,X=Object.prototype.hasOwnProperty;var Y=function(t,e,r){var n=t[e];X.call(t,e)&&K(n,r)&&(void 0!==r||e in t)||J(t,e,r)},Z=Y,tt=G;var et=function(t,e,r,n){var o=!r;r||(r={});for(var a=-1,i=e.length;++a<i;){var u=e[a],s=n?n(r[u],t[u],u,r,t):void 0;void 0===s&&(s=t[u]),o?tt(r,u,s):Z(r,u,s)}return r};var rt=function(t){return t};var nt=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)},ot=Math.max;var at=function(t,e,r){return e=ot(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=ot(n.length-e,0),i=Array(a);++o<a;)i[o]=n[e+o];o=-1;for(var u=Array(e+1);++o<e;)u[o]=n[o];return u[e]=r(i),nt(t,this,u)}};var it=function(t){return function(){return t}},ut=W,st=ut?function(t,e){return ut(t,"toString",{configurable:!0,enumerable:!1,value:it(e),writable:!0})}:rt,ct=Date.now;var lt=function(t){var e=0,r=0;return function(){var n=ct(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(st),ft=rt,ht=at,dt=lt;var vt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},pt=x,bt=vt;var gt=function(t){return null!=t&&bt(t.length)&&!pt(t)},yt=/^(?:0|[1-9]\d*)$/;var _t=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&yt.test(t))&&t>-1&&t%1==0&&t<e},mt=H,wt=gt,jt=_t,St=w;var Ot=function(t,e){return dt(ht(t,e,ft),t+"")},xt=function(t,e,r){if(!St(r))return!1;var n=typeof e;return!!("number"==n?wt(r)&&jt(e,r.length):"string"==n&&e in r)&&mt(r[e],t)};var Rt=function(t){return Ot(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,i=o>2?r[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,i&&xt(r[0],r[1],i)&&(a=o<3?void 0:a,o=1),e=Object(e);++n<o;){var u=r[n];u&&t(e,u,n,a)}return e})},kt=Object.prototype;var Ct=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||kt)};var At=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};var Nt=function(t){return null!=t&&"object"==typeof t},Mt=m,Et=Nt;var Dt=function(t){return Et(t)&&"[object Arguments]"==Mt(t)},Pt=Nt,zt=Object.prototype,Bt=zt.hasOwnProperty,Tt=zt.propertyIsEnumerable,$t=Dt(function(){return arguments}())?Dt:function(t){return Pt(t)&&Bt.call(t,"callee")&&!Tt.call(t,"callee")},Ft=Array.isArray,Ut=o(Ft),It={exports:{}};var Vt=function(){return!1};!function(t,e){var r=s,n=Vt,o=e&&!e.nodeType&&e,a=o&&t&&!t.nodeType&&t,i=a&&a.exports===o?r.Buffer:void 0,u=(i?i.isBuffer:void 0)||n;t.exports=u}(It,It.exports);var qt=It.exports,Qt=m,Wt=vt,Lt=Nt,Gt={};Gt["[object Float32Array]"]=Gt["[object Float64Array]"]=Gt["[object Int8Array]"]=Gt["[object Int16Array]"]=Gt["[object Int32Array]"]=Gt["[object Uint8Array]"]=Gt["[object Uint8ClampedArray]"]=Gt["[object Uint16Array]"]=Gt["[object Uint32Array]"]=!0,Gt["[object Arguments]"]=Gt["[object Array]"]=Gt["[object ArrayBuffer]"]=Gt["[object Boolean]"]=Gt["[object DataView]"]=Gt["[object Date]"]=Gt["[object Error]"]=Gt["[object Function]"]=Gt["[object Map]"]=Gt["[object Number]"]=Gt["[object Object]"]=Gt["[object RegExp]"]=Gt["[object Set]"]=Gt["[object String]"]=Gt["[object WeakMap]"]=!1;var Ht=function(t){return Lt(t)&&Wt(t.length)&&!!Gt[Qt(t)]};var Jt=function(t){return function(e){return t(e)}},Kt={exports:{}};!function(t,e){var r=a,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,i=o&&o.exports===n&&r.process,u=function(){try{var t=o&&o.require&&o.require("util").types;return t||i&&i.binding&&i.binding("util")}catch(t){}}();t.exports=u}(Kt,Kt.exports);var Xt=Kt.exports,Yt=Ht,Zt=Jt,te=Xt&&Xt.isTypedArray,ee=te?Zt(te):Yt,re=At,ne=$t,oe=Ft,ae=qt,ie=_t,ue=ee,se=Object.prototype.hasOwnProperty;var ce=function(t,e){var r=oe(t),n=!r&&ne(t),o=!r&&!n&&ae(t),a=!r&&!n&&!o&&ue(t),i=r||n||o||a,u=i?re(t.length,String):[],s=u.length;for(var c in t)!e&&!se.call(t,c)||i&&("length"==c||o&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||ie(c,s))||u.push(c);return u};var le=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),fe=Ct,he=le,de=Object.prototype.hasOwnProperty;var ve=ce,pe=function(t){if(!fe(t))return he(t);var e=[];for(var r in Object(t))de.call(t,r)&&"constructor"!=r&&e.push(r);return e},be=gt;var ge,ye=function(t){return be(t)?ve(t):pe(t)},_e=Y,me=et,we=Rt,je=gt,Se=Ct,Oe=ye,xe=Object.prototype.hasOwnProperty,Re=o(we(function(t,e){if(Se(e)||je(e))me(e,Oe(e),t);else for(var r in e)xe.call(e,r)&&_e(t,r,e[r])}));!function(t){t["網絡錯誤"]="ERROR CODE: 500",t["環境錯誤(browser)"]="ERROR CODE: 1001",t["Worklet模組載入失敗"]="ERROR CODE: 1002",t["未獲得媒體裝置權限"]="ERROR CODE: 1003",t["實例已摧毀"]="ERROR CODE: 1004",t["環境錯誤(nodejs)"]="ERROR CODE: 2001",t["未提供憑證"]="ERROR CODE: 2002",t["獲取權杖失敗"]="ERROR CODE: 2003",t["沒有可用專案"]="ERROR CODE: 2004",t["重複初始化"]="ERROR CODE: 205"}(ge||(ge={}));const ke="undefined"!=typeof window;"undefined"!=typeof process&&null!=process.versions&&process.versions.node;class Ce{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(t,e){const r=e??NaN;if(t){const e=parseInt(t);return isNaN(e)?r:e}return r}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=Re({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:Re({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}constructor(t){this.config=t}}var Ae=function(t,e,r,n){for(var o=t.length,a=r+(n?1:-1);n?a--:++a<o;)if(e(t[a],a,t))return a;return-1};var Ne=Ae,Me=function(t){return t!=t},Ee=function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1};var De=function(t,e,r){return e==e?Ee(t,e,r):Ne(t,Me,r)},Pe=m,ze=Ft,Be=Nt;var Te=function(t){return"string"==typeof t||!ze(t)&&Be(t)&&"[object String]"==Pe(t)},$e=/\s/;var Fe=function(t){for(var e=t.length;e--&&$e.test(t.charAt(e)););return e},Ue=/^\s+/;var Ie=m,Ve=Nt;var qe=function(t){return"symbol"==typeof t||Ve(t)&&"[object Symbol]"==Ie(t)},Qe=function(t){return t?t.slice(0,Fe(t)+1).replace(Ue,""):t},We=w,Le=qe,Ge=/^[-+]0x[0-9a-f]+$/i,He=/^0b[01]+$/i,Je=/^0o[0-7]+$/i,Ke=parseInt;var Xe=function(t){if("number"==typeof t)return t;if(Le(t))return NaN;if(We(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=We(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Qe(t);var r=He.test(t);return r||Je.test(t)?Ke(t.slice(2),r?2:8):Ge.test(t)?NaN:+t},Ye=1/0;var Ze=function(t){return t?(t=Xe(t))===Ye||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0};var tr=function(t){var e=Ze(t),r=e%1;return e==e?r?e-r:e:0};var er=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o},rr=er;var nr=function(t,e){return rr(e,function(e){return t[e]})},or=ye;var ar=function(t){return null==t?[]:nr(t,or(t))},ir=o(ar),ur=De,sr=gt,cr=Te,lr=tr,fr=ar,hr=Math.max;var dr=o(function(t,e,r,n){t=sr(t)?t:fr(t),r=r&&!n?lr(r):0;var o=t.length;return r<0&&(r=hr(o+r,0)),cr(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&ur(t,e,r)>-1});const vr={debug:()=>{},info:()=>{},error:()=>{},warn:()=>{},fatal:()=>{}};function pr(){return t().format("yyyy-MM-DD[T]HH:mm:ss")}function br(t){const{info:e,error:r,warn:n,debug:o,fatal:a}=function(t){return void 0===t||"all"===t?{error:!0,warn:!0,info:!0,debug:!0,fatal:!0}:"none"===t?{error:!1,warn:!1,info:!1,debug:!1,fatal:!1}:"boolean"==typeof t?{error:t,warn:t,info:t,debug:t,fatal:t}:{debug:dr(t,"debug"),fatal:dr(t,"fatal"),error:dr(t,"error"),warn:dr(t,"warn"),info:dr(t,"info")}}(t);o&&(vr.debug=(...t)=>{const e=pr();console.log(`[Aiia::debug_${e}_]`,...t)}),e&&(vr.info=(...t)=>{const e=pr();console.log(`[Aiia::info_${e}_]`,...t)}),n&&(vr.warn=(...t)=>{const e=pr();console.warn(`[Aiia::warn_${e}_]`,...t)}),r&&(vr.error=(...t)=>{const e=pr();console.error(`[Aiia::error_${e}_]`,...t)}),a&&(vr.fatal=(...t)=>{const e=pr();console.error(`[Aiia::fatal_${e}_]`,...t)})}var gr=Ft,yr=qe,_r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,mr=/^\w*$/;var wr=function(t,e){if(gr(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!yr(t))||(mr.test(t)||!_r.test(t)||null!=e&&t in Object(e))},jr=q(Object,"create"),Sr=jr;var Or=function(){this.__data__=Sr?Sr(null):{},this.size=0};var xr=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Rr=jr,kr=Object.prototype.hasOwnProperty;var Cr=function(t){var e=this.__data__;if(Rr){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return kr.call(e,t)?e[t]:void 0},Ar=jr,Nr=Object.prototype.hasOwnProperty;var Mr=jr;var Er=Or,Dr=xr,Pr=Cr,zr=function(t){var e=this.__data__;return Ar?void 0!==e[t]:Nr.call(e,t)},Br=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Mr&&void 0===e?"__lodash_hash_undefined__":e,this};function Tr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Tr.prototype.clear=Er,Tr.prototype.delete=Dr,Tr.prototype.get=Pr,Tr.prototype.has=zr,Tr.prototype.set=Br;var $r=Tr;var Fr=function(){this.__data__=[],this.size=0},Ur=H;var Ir=function(t,e){for(var r=t.length;r--;)if(Ur(t[r][0],e))return r;return-1},Vr=Ir,qr=Array.prototype.splice;var Qr=Ir;var Wr=Ir;var Lr=Ir;var Gr=Fr,Hr=function(t){var e=this.__data__,r=Vr(e,t);return!(r<0)&&(r==e.length-1?e.pop():qr.call(e,r,1),--this.size,!0)},Jr=function(t){var e=this.__data__,r=Qr(e,t);return r<0?void 0:e[r][1]},Kr=function(t){return Wr(this.__data__,t)>-1},Xr=function(t,e){var r=this.__data__,n=Lr(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function Yr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Yr.prototype.clear=Gr,Yr.prototype.delete=Hr,Yr.prototype.get=Jr,Yr.prototype.has=Kr,Yr.prototype.set=Xr;var Zr=Yr,tn=q(s,"Map"),en=$r,rn=Zr,nn=tn;var on=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var an=function(t,e){var r=t.__data__;return on(e)?r["string"==typeof e?"string":"hash"]:r.map},un=an;var sn=an;var cn=an;var ln=an;var fn=function(){this.size=0,this.__data__={hash:new en,map:new(nn||rn),string:new en}},hn=function(t){var e=un(this,t).delete(t);return this.size-=e?1:0,e},dn=function(t){return sn(this,t).get(t)},vn=function(t){return cn(this,t).has(t)},pn=function(t,e){var r=ln(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function bn(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}bn.prototype.clear=fn,bn.prototype.delete=hn,bn.prototype.get=dn,bn.prototype.has=vn,bn.prototype.set=pn;var gn=bn,yn=gn;function _n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],a=r.cache;if(a.has(o))return a.get(o);var i=t.apply(this,n);return r.cache=a.set(o,i)||a,i};return r.cache=new(_n.Cache||yn),r}_n.Cache=yn;var mn=_n;var wn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jn=/\\(\\)?/g,Sn=function(t){var e=mn(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(wn,function(t,r,n,o){e.push(n?o.replace(jn,"$1"):r||t)}),e}),On=er,xn=Ft,Rn=qe,kn=c?c.prototype:void 0,Cn=kn?kn.toString:void 0;var An=function t(e){if("string"==typeof e)return e;if(xn(e))return On(e,t)+"";if(Rn(e))return Cn?Cn.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r},Nn=An;var Mn=Ft,En=wr,Dn=Sn,Pn=function(t){return null==t?"":Nn(t)};var zn=function(t,e){return Mn(t)?t:En(t,e)?[t]:Dn(Pn(t))},Bn=qe;var Tn=function(t){if("string"==typeof t||Bn(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e},$n=zn,Fn=Tn;var Un=function(t,e){for(var r=0,n=(e=$n(e,t)).length;null!=t&&r<n;)t=t[Fn(e[r++])];return r&&r==n?t:void 0},In=Un;var Vn,qn,Qn=function(t,e,r){var n=null==t?void 0:In(t,e);return void 0===n?r:n},Wn=o(Qn);function Ln(t,e,r){return Math.max(r,Math.min(t,e))}function Gn(t){const e=new DataView(t.buffer),r=[];for(let n=0;n<t.length;n++){const t=e.getInt16(2*n,!0)/32768;r.push(t)}return new Float32Array(r)}function Hn(t){const e=new DataView(t.buffer),r=[];for(let n=0;n<t.length;n++){const t=Ln(32768*e.getFloat32(4*n,!0),32767,-32768);r.push(t)}return r}!function(t){t[t.unknow=0]="unknow",t[t.allowed=1]="allowed",t[t.rejected=2]="rejected"}(Vn||(Vn={}));class Jn{audioContext;type="audio";currentNode;bufferQueue;gainNode;set volume(t){t<0&&(t=0),t>100&&(t=100),this.gainNode.gain.value=t/100}get volume(){return Math.round(100*this.gainNode.gain.value)}constructor(t){this.audioContext=t,this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination)}addBuffer(t){this.bufferQueue.push(t)}addBufferByFloat32(t,e=1){const r=t.length,n=this.audioContext.sampleRate,o=this.audioContext.createBuffer(e,r,n),a=t.slice();for(let t=0;t<e;t++)o.copyToChannel(a,t);this.addBuffer(o)}addBufferByInt16(t,e=1){this.addBufferByFloat32(Gn(t),e)}startSpeech(){null===this.currentNode&&this.continue()}pauseSpeech(){this.audioContext.suspend().catch(t=>{vr.error("pause speech fail",t)})}resumeSpeech(){this.audioContext.resume().catch(t=>{vr.error("resume speech fail",t)})}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(){const t=this.bufferQueue.shift();if(t){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=t,this.currentNode.connect(this.gainNode);const e=this.continue.bind(this);this.currentNode.onended=e,this.currentNode.start()}else this.clearNode()}}class Kn{stream;audioContext;pcmSub;type="vad";workletNode;source;isRecording=!1;constructor(t,e,r){this.stream=t,this.audioContext=e,this.pcmSub=r}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad"),this.source.connect(this.workletNode),this.workletNode.port.onmessage=t=>{const{float32:e,energy:r}=t.data;e&&this.pcmSub.next(new Float32Array(e))},this.isRecording=!0)}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=!1)}}!function(t){t[t.padding=0]="padding",t[t.rejected=1]="rejected",t[t.loadfail=2]="loadfail",t[t.allowed=3]="allowed"}(qn||(qn={}));class Xn{_state;stateSub;audioCtx;audioManager;vadManager;destory;pcmSub;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get state(){return this._state}set state(t){t!==this._state&&(this._state=t,this.stateSub.next(t))}get stateObs(){return this.stateSub.asObservable()}constructor(){this.stateSub=new e.Subject,this.pcmSub=new e.Subject,this.destory=new e.Subject,this.state=qn.padding}async init(t){if(this.destory.closed)throw new Error(ge["實例已摧毀"]);const e=await async function(t){try{return await navigator.mediaDevices.getUserMedia(t)}catch(t){return null}}({audio:{echoCancellation:!0,noiseSuppression:!0}});if(null===e)throw this.state=qn.rejected,new Error(ge["未獲得媒體裝置權限"]);this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(t)}catch(t){throw vr.fatal(t),this.state=qn.loadfail,new Error(ge["Worklet模組載入失敗"])}this.state=qn.allowed,this.audioManager=new Jn(this.audioCtx),this.vadManager=new Kn(e,this.audioCtx,this.pcmSub)}addAudioQueue(t){const e=Wn(t,"buffer",void 0),r=Wn(t,"float32",void 0),n=Wn(t,"int16",void 0),o=Wn(t,"numberOfChannels",void 0);e?this.audioManager?.addBuffer(e):r?this.audioManager?.addBufferByFloat32(r,o):n&&this.audioManager?.addBufferByInt16(n,o)}playAudio(){this.audioManager?.startSpeech()}stopAudio(){this.audioManager?.stopSpeech()}startRecord(){this.vadManager?.startRecord()}stopRecord(){this.vadManager?.stopRecord()}setVolume(t){this.audioManager&&(this.audioManager.volume=t)}getVolume(){return this.audioManager?this.audioManager.volume:0}onDestory(){this.audioCtx?.close(),this.destory.next(),this.destory.complete()}}var Yn=Zr;var Zn=Zr,to=tn,eo=gn;var ro=Zr,no=function(){this.__data__=new Yn,this.size=0},oo=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},ao=function(t){return this.__data__.get(t)},io=function(t){return this.__data__.has(t)},uo=function(t,e){var r=this.__data__;if(r instanceof Zn){var n=r.__data__;if(!to||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new eo(n)}return r.set(t,e),this.size=r.size,this};function so(t){var e=this.__data__=new ro(t);this.size=e.size}so.prototype.clear=no,so.prototype.delete=oo,so.prototype.get=ao,so.prototype.has=io,so.prototype.set=uo;var co=so;var lo=gn,fo=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},ho=function(t){return this.__data__.has(t)};function vo(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new lo;++e<r;)this.add(t[e])}vo.prototype.add=vo.prototype.push=fo,vo.prototype.has=ho;var po=vo,bo=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1},go=function(t,e){return t.has(e)};var yo=function(t,e,r,n,o,a){var i=1&r,u=t.length,s=e.length;if(u!=s&&!(i&&s>u))return!1;var c=a.get(t),l=a.get(e);if(c&&l)return c==e&&l==t;var f=-1,h=!0,d=2&r?new po:void 0;for(a.set(t,e),a.set(e,t);++f<u;){var v=t[f],p=e[f];if(n)var b=i?n(p,v,f,e,t,a):n(v,p,f,t,e,a);if(void 0!==b){if(b)continue;h=!1;break}if(d){if(!bo(e,function(t,e){if(!go(d,e)&&(v===t||o(v,t,r,n,a)))return d.push(e)})){h=!1;break}}else if(v!==p&&!o(v,p,r,n,a)){h=!1;break}}return a.delete(t),a.delete(e),h};var _o=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r};var mo=s.Uint8Array,wo=H,jo=yo,So=_o,Oo=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},xo=c?c.prototype:void 0,Ro=xo?xo.valueOf:void 0;var ko=function(t,e,r,n,o,a,i){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new mo(t),new mo(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return wo(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var u=So;case"[object Set]":var s=1&n;if(u||(u=Oo),t.size!=e.size&&!s)return!1;var c=i.get(t);if(c)return c==e;n|=2,i.set(t,e);var l=jo(u(t),u(e),n,o,a,i);return i.delete(t),l;case"[object Symbol]":if(Ro)return Ro.call(t)==Ro.call(e)}return!1};var Co=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t},Ao=Co,No=Ft;var Mo=function(t,e,r){var n=e(t);return No(t)?n:Ao(n,r(t))};var Eo=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,a=[];++r<n;){var i=t[r];e(i,r,t)&&(a[o++]=i)}return a},Do=function(){return[]},Po=Object.prototype.propertyIsEnumerable,zo=Object.getOwnPropertySymbols,Bo=Mo,To=zo?function(t){return null==t?[]:(t=Object(t),Eo(zo(t),function(e){return Po.call(t,e)}))}:Do,$o=ye;var Fo=function(t){return Bo(t,$o,To)},Uo=Object.prototype.hasOwnProperty;var Io=function(t,e,r,n,o,a){var i=1&r,u=Fo(t),s=u.length;if(s!=Fo(e).length&&!i)return!1;for(var c=s;c--;){var l=u[c];if(!(i?l in e:Uo.call(e,l)))return!1}var f=a.get(t),h=a.get(e);if(f&&h)return f==e&&h==t;var d=!0;a.set(t,e),a.set(e,t);for(var v=i;++c<s;){var p=t[l=u[c]],b=e[l];if(n)var g=i?n(b,p,l,e,t,a):n(p,b,l,t,e,a);if(!(void 0===g?p===b||o(p,b,r,n,a):g)){d=!1;break}v||(v="constructor"==l)}if(d&&!v){var y=t.constructor,_=e.constructor;y==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof y&&y instanceof y&&"function"==typeof _&&_ instanceof _||(d=!1)}return a.delete(t),a.delete(e),d},Vo=q(s,"DataView"),qo=tn,Qo=q(s,"Promise"),Wo=q(s,"Set"),Lo=q(s,"WeakMap"),Go=m,Ho=N,Jo="[object Map]",Ko="[object Promise]",Xo="[object Set]",Yo="[object WeakMap]",Zo="[object DataView]",ta=Ho(Vo),ea=Ho(qo),ra=Ho(Qo),na=Ho(Wo),oa=Ho(Lo),aa=Go;(Vo&&aa(new Vo(new ArrayBuffer(1)))!=Zo||qo&&aa(new qo)!=Jo||Qo&&aa(Qo.resolve())!=Ko||Wo&&aa(new Wo)!=Xo||Lo&&aa(new Lo)!=Yo)&&(aa=function(t){var e=Go(t),r="[object Object]"==e?t.constructor:void 0,n=r?Ho(r):"";if(n)switch(n){case ta:return Zo;case ea:return Jo;case ra:return Ko;case na:return Xo;case oa:return Yo}return e});var ia=co,ua=yo,sa=ko,ca=Io,la=aa,fa=Ft,ha=qt,da=ee,va="[object Arguments]",pa="[object Array]",ba="[object Object]",ga=Object.prototype.hasOwnProperty;var ya=function(t,e,r,n,o,a){var i=fa(t),u=fa(e),s=i?pa:la(t),c=u?pa:la(e),l=(s=s==va?ba:s)==ba,f=(c=c==va?ba:c)==ba,h=s==c;if(h&&ha(t)){if(!ha(e))return!1;i=!0,l=!1}if(h&&!l)return a||(a=new ia),i||da(t)?ua(t,e,r,n,o,a):sa(t,e,s,r,n,o,a);if(!(1&r)){var d=l&&ga.call(t,"__wrapped__"),v=f&&ga.call(e,"__wrapped__");if(d||v){var p=d?t.value():t,b=v?e.value():e;return a||(a=new ia),o(p,b,r,n,a)}}return!!h&&(a||(a=new ia),ca(t,e,r,n,o,a))},_a=Nt;var ma=function t(e,r,n,o,a){return e===r||(null==e||null==r||!_a(e)&&!_a(r)?e!=e&&r!=r:ya(e,r,n,o,t,a))},wa=co,ja=ma;var Sa=w;var Oa=function(t){return t==t&&!Sa(t)},xa=Oa,Ra=ye;var ka=function(t,e){return function(r){return null!=r&&(r[t]===e&&(void 0!==e||t in Object(r)))}},Ca=function(t,e,r,n){var o=r.length,a=o,i=!n;if(null==t)return!a;for(t=Object(t);o--;){var u=r[o];if(i&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<a;){var s=(u=r[o])[0],c=t[s],l=u[1];if(i&&u[2]){if(void 0===c&&!(s in t))return!1}else{var f=new wa;if(n)var h=n(c,l,s,t,e,f);if(!(void 0===h?ja(l,c,3,n,f):h))return!1}}return!0},Aa=function(t){for(var e=Ra(t),r=e.length;r--;){var n=e[r],o=t[n];e[r]=[n,o,xa(o)]}return e},Na=ka;var Ma=zn,Ea=$t,Da=Ft,Pa=_t,za=vt,Ba=Tn;var Ta=function(t,e){return null!=t&&e in Object(t)},$a=function(t,e,r){for(var n=-1,o=(e=Ma(e,t)).length,a=!1;++n<o;){var i=Ba(e[n]);if(!(a=null!=t&&r(t,i)))break;t=t[i]}return a||++n!=o?a:!!(o=null==t?0:t.length)&&za(o)&&Pa(i,o)&&(Da(t)||Ea(t))};var Fa=ma,Ua=Qn,Ia=function(t,e){return null!=t&&$a(t,e,Ta)},Va=wr,qa=Oa,Qa=ka,Wa=Tn;var La=Un;var Ga=function(t){return function(e){return null==e?void 0:e[t]}},Ha=function(t){return function(e){return La(e,t)}},Ja=wr,Ka=Tn;var Xa=function(t){var e=Aa(t);return 1==e.length&&e[0][2]?Na(e[0][0],e[0][1]):function(r){return r===t||Ca(r,t,e)}},Ya=function(t,e){return Va(t)&&qa(e)?Qa(Wa(t),e):function(r){var n=Ua(r,t);return void 0===n&&n===e?Ia(r,t):Fa(e,n,3)}},Za=rt,ti=Ft,ei=function(t){return Ja(t)?Ga(Ka(t)):Ha(t)};var ri=function(t){return"function"==typeof t?t:null==t?Za:"object"==typeof t?ti(t)?Ya(t[0],t[1]):Xa(t):ei(t)};var ni=function(t){return function(e,r,n){for(var o=-1,a=Object(e),i=n(e),u=i.length;u--;){var s=i[t?u:++o];if(!1===r(a[s],s,a))break}return e}}(),oi=ye;var ai=gt;var ii=function(t,e){return function(r,n){if(null==r)return r;if(!ai(r))return t(r,n);for(var o=r.length,a=e?o:-1,i=Object(r);(e?a--:++a<o)&&!1!==n(i[a],a,i););return r}}(function(t,e){return t&&ni(t,e,oi)}),ui=gt;var si=er,ci=ri,li=function(t,e){var r=-1,n=ui(t)?Array(t.length):[];return ii(t,function(t,o,a){n[++r]=e(t,o,a)}),n},fi=Ft;var hi=o(function(t,e){return(fi(t)?si:li)(t,ci(e))}),di=ri,vi=gt,pi=ye;var bi=function(t){return function(e,r,n){var o=Object(e);if(!vi(e)){var a=di(r);e=pi(e),r=function(t){return a(o[t],t,o)}}var i=t(e,r,n);return i>-1?o[a?e[i]:i]:void 0}},gi=Ae,yi=ri,_i=tr,mi=Math.max;var wi,ji=o(bi(function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=null==r?0:_i(r);return o<0&&(o=mi(n+o,0)),gi(t,yi(e),o)}));class Si{socket;messageSub;destorySub;get message(){return this.messageSub.asObservable()}constructor(t){this.destorySub=new e.Subject,this.messageSub=new e.Subject;const{specific:n,id:o}=t.project;this.socket=r.io(t.ws_url,Re({autoConnect:!1},n&&void 0!==o?{query:{uuid:o}}:{}))}start(){const t="list",r="cloud",n="channel";e.fromEvent(this.socket,t).pipe(e.take(1),e.takeUntil(this.destorySub)).subscribe(e=>{this.messageSub.next({event:t,data:e})}),e.fromEvent(this.socket,r).pipe(e.takeUntil(this.destorySub)).subscribe(t=>{this.messageSub.next({event:r,data:t})}),e.fromEvent(this.socket,n).pipe(e.takeUntil(this.destorySub)).subscribe(t=>{this.messageSub.next({event:n,data:t})}),this.socket.connect()}send(t,e){this.socket.emit(t,e)}sendToCloud(t){this.send("cloud",JSON.stringify(t))}onDestory(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect()}}!function(t){t[t.interrupted=0]="interrupted",t[t.pcm=1]="pcm",t[t.cloudSampleRate=2]="cloudSampleRate"}(wi||(wi={}));class Oi{config;media;chat;destorySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;cloudSampleRate;channelState;get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}set volume(t){this.media.setVolume(t)}get volume(){return this.media.getVolume()}constructor(t,r){this.config=t,this.media=r,this.layoutSub=new e.Subject,this.projectsSub=new e.Subject,this.destorySub=new e.Subject,this.aiiaSubtitleSub=new e.Subject,this.userSubtitleSub=new e.Subject,this.cloudSampleRate=16e3,this.channelState={proxy:!1,cloud:!1},this.chat=new Si(t)}start(){this.media.stateObs.pipe(e.takeUntil(this.destorySub)).subscribe(()=>{this.channelCheck()}),this.chat.message.pipe(e.takeUntil(this.destorySub)).subscribe(({event:t,data:e})=>{switch(t){case"cloud":this.cloudToObj(e);break;case"list":{const{id:t,name:r,specific:n}=this.config.project;let o=null;if(n&&void 0!==t)o=t;else{const n=ji(e,e=>e.name===r||e.id===t);n&&(o=n.id)}null!==o?this.chooseProject(o):(this.projectsSub.next(e),vr.info("Please subscribe `projects` and call `chooseProject` method"));break}case"channel":"open"===e&&(this.channelState.proxy=!0,this.channelCheck())}}),this.chat.start()}chooseProject(t){this.chat.send("uuid",t)}cloudToObj(t){try{const e=JSON.parse(t);void 0!==Wn(e,"signal")?this.behavior(e):Ut(e)?hi(e,this.behavior):hi(ir(e),this.behavior)}catch(t){vr.error("message transfer fail",t)}}behavior(t){switch(t.signal){case"layout":this.layoutSub.next(t.content);break;case"audio":if("sampleRate"===t.command)this.cloudSampleRate=t.content;else switch(t.command){case"pcm":{const e=function(t,e,r){if(e===r)return t;const n=r/e,o=Math.ceil(t.length*n),a=new Float32Array(o);for(let e=0;e<o;e++){const r=e/n,o=Math.floor(r),i=r-o,u=t[o],s=t[Math.min(o+1,t.length-1)];a[e]=u+(s-u)*i}return a}(Gn(new Int16Array(t.content)),this.cloudSampleRate,this.media.sampleRate);this.media.addAudioQueue({float32:e}),this.media.playAudio();break}case"interrupted":this.media.stopAudio()}break;case"status":"Connected"===Wn(t,"content")&&(this.channelState.cloud=!0,this.channelCheck());break;case"agent":{const e=Wn(t,"content.function_result.response");e&&this.aiiaSubtitleSub.next(e);break}case"asr":if("ASR"===Wn(t,"content.function_type")){const e=Wn(t,"content.function_result.result");e&&this.userSubtitleSub.next(e)}break;default:vr.debug(t.signal)}}channelCheck(){const{proxy:t,cloud:r}=this.channelState;t&&r&&this.media.state===qn.allowed?(this.chat.sendToCloud({request:"audio",command:"sampleRate",content:this.media.sampleRate}),this.media.pcm.pipe(e.takeUntil(this.destorySub)).subscribe(t=>{this.chat.sendToCloud({request:"audio",command:"pcm",content:Hn(t)})}),this.media.startRecord(),vr.debug("Channel, Cloud and Media are ready.")):t&&r&&this.media.state!==qn.allowed&&vr.warn("Media permission didn't get. Please reload page after reset permission or ignore this message.")}onDestory(){this.chat.onDestory(),this.destorySub.next(),this.destorySub.complete()}}exports.MediaManager=Xn,exports.initSdk=function(t){if(ke){const e=new Ce(Re({},t));br(e.debug);const r=new Xn,n=new Oi(e,r);return""!==e.worklet_url&&r.init(e.worklet_url),n}throw new Error(ge["環境錯誤(browser)"])};
1
+ "use strict";var e,t=require("lodash"),i=require("moment"),s=require("rxjs"),a=require("@mediapipe/tasks-vision"),n=require("socket.io-client");!function(e){e["網絡錯誤"]="ERROR CODE: 500",e["環境錯誤(browser)"]="ERROR CODE: 1001",e["Worklet模組載入失敗"]="ERROR CODE: 1002",e["未獲得媒體裝置權限"]="ERROR CODE: 1003",e["實例已摧毀"]="ERROR CODE: 1004",e["環境錯誤(nodejs)"]="ERROR CODE: 2001",e["未提供憑證"]="ERROR CODE: 2002",e["獲取權杖失敗"]="ERROR CODE: 2003",e["沒有可用專案"]="ERROR CODE: 2004",e["重複初始化"]="ERROR CODE: 2005"}(e||(e={}));const o="undefined"!=typeof window;"undefined"!=typeof process&&null!=process.versions&&process.versions.node;class r{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(e,t){const i=t??NaN;if(e){const t=parseInt(e);return isNaN(t)?i:t}return i}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:e}=t.assign({},this.config);return void 0===e?{specific:!1}:"string"==typeof e?{name:e,id:e,specific:!1}:t.assign({},e,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}get mediaStream(){return this.config.mediaStream}get chunkTimeInSeconds(){return"number"==typeof this.config.chunkTimeInSeconds&&this.config.chunkTimeInSeconds>0?this.config.chunkTimeInSeconds:1}get llmSampleRate(){return"number"==typeof this.config.llmSampleRate&&this.config.llmSampleRate>0?this.config.llmSampleRate:16e3}get faceDetection(){return t.assign({frame:3,confidence:80},this.config.faceDetection)}get autoClearSubtitle(){const{user:e,aiia:i}=t.assign({},this.config.autoClearSubtitle);let s=3e3,a=3e3;return"number"==typeof e?s=e>=0?e:s:!1===e&&(s=NaN),"number"==typeof i?a=i>=0?i:a:!1===i&&(a=NaN),{userDelayTime:s,aiiaDelayTime:a}}constructor(e){this.config=e}}var c;!function(e){e["通道、雲端服務、麥克風都已就緒"]="CODE: 1000",e["未取得媒體裝置權限,請重新設定或忽略此訊息"]="CODE: 1001",e["請訂閱專案列表"]="CODE: 1002",e["初始化必要依賴"]="CODE: 1010",e["指定依賴已完成"]="CODE: 1011",e["啟動SDK"]="CODE: 1012",e["結束SDK"]="CODE: 1013",e["安全的關閉連線"]="CODE: 2000",e["無副作用的關閉連線"]="CODE: 2001",e["與雲端的服務中斷"]="CODE: 2002",e["沒有授權,請聯繫Graphen"]="CODE: 2003",e["自動重新連線連端服務"]="CODE: 2004",e["未預期的斷線,請聯繫Graphen"]="CODE: 2005",e["開始初始化必要模組"]="CODE: 2010",e["指定模組初始化完成"]="CODE: 2011",e["啟動服務"]="CODE: 2012",e["服務結束"]="CODE: 2013"}(c||(c={}));const u={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},h=[];const d=new Proxy(u,{get(e,s,a){if("string"==typeof s)switch(s){case"debug":case"info":case"error":case"warn":case"fatal":case"code":return(...a)=>{const n=i().format("yyyy-MM-DD[T]HH:mm:ss");t.forEach(h,e=>{e.next(s,n,...a)}),e[s](`[Aiia::${s}_${n}_]`,...a)};default:return}},set:(e,t,i,s)=>!0});var l,b;function p(e,t,i){return Math.max(i,Math.min(e,t))}function m(e){const t=new DataView(e.buffer),i=[];for(let s=0;s<e.length;s++){const e=t.getInt16(2*s,!0)/32768;i.push(e)}return new Float32Array(i)}function f(e){const t=new DataView(e.buffer),i=[];for(let s=0;s<e.length;s++){const e=p(32768*t.getFloat32(4*s,!0),32767,-32768);i.push(e)}return i}!function(e){e[e.unknow=0]="unknow",e[e.allowed=1]="allowed",e[e.rejected=2]="rejected"}(l||(l={}));class g{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(100*this.gainNode.gain.value)}constructor(e){this.audioContext=e,this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination)}addBuffer(e){this.bufferQueue.push(e)}addBufferByFloat32(e,t=1){const i=e.length,s=this.audioContext.sampleRate,a=this.audioContext.createBuffer(t,i,s),n=e.slice();for(let e=0;e<t;e++)a.copyToChannel(n,e);this.addBuffer(a)}addBufferByInt16(e,t=1){this.addBufferByFloat32(m(e),t)}startSpeech(){null===this.currentNode&&this.continue()}pauseSpeech(){this.audioContext.suspend().catch(e=>{d.error("pause speech fail",e)})}resumeSpeech(){this.audioContext.resume().catch(e=>{d.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(){const e=this.bufferQueue.shift();if(e){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=e,this.currentNode.connect(this.gainNode);const t=this.continue.bind(this);this.currentNode.onended=t,this.currentNode.start()}else this.clearNode()}}class S{stream;audioContext;type="vad";workletNode;source;isRecording=!1;outputSampleRate;chunkTimeInSeconds;pcmSub;get pcm(){return this.pcmSub.asObservable()}constructor(e,t,i){this.stream=e,this.audioContext=t,this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new s.Subject}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=>{const{float32:t}=e.data;t&&this.pcmSub.next(new Float32Array(t))},this.isRecording=!0)}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=!1)}}class y{type="camera";confidenceScore;aiiaCamera;get detections(){return this.aiiaCamera.detections}get faceResult(){const e=this.confidenceScore;return this.aiiaCamera.detections.pipe(s.map(i=>function(e,i){const s=t.filter(e,e=>{const s=e.categories[0]?.score??0,a=e.keypoints,n=100*s>=i,o=t.some(a,e=>"leftEye"===e.label||"rightEye"===e.label);return n&&o});if(0===s.length)return null;const a=t.compact(t.map(s,e=>{if(void 0!==e.boundingBox){const t=e.boundingBox,i=t.width*t.height,s=e.categories[0]?.score??0;return{...t,area:i,confidenceScore:100*s}}return null}));return t.sortBy(a,["area","confidenceScore"])[0]??null}(i,e)))}constructor(e,i,s){const{frame:a,confidence:n}=t.assign({frame:3,confidence:80},s);this.confidenceScore=n,this.aiiaCamera=new C,this.aiiaCamera.setAttribute("frequency",`${a}`),this.aiiaCamera.setStream(e),this.aiiaCamera.setFaceDetector(i),document.body.append(this.aiiaCamera)}startCapture(){this.aiiaCamera.startCapture()}stopCapture(){this.aiiaCamera.stopCapture()}onDestroy(){this.aiiaCamera.remove()}}class C extends HTMLElement{static get observedAttributes(){return["debug","frequency"]}_shadow;_containerEl;_styleEl;_videoEl;_isDebug;_debugElements;_analyzeInterval;_frameCount;_loopFrameID;_faceDetector;_detectionsSub;_isReady;get detections(){return this._detectionsSub.asObservable()}constructor(){super(),this._isDebug=!1,this._isReady=!1,this._shadow=this.attachShadow({mode:"open"}),this._containerEl=document.createElement("div"),this._videoEl=document.createElement("video"),this._styleEl=document.createElement("style"),this._debugElements=[],this._loopFrameID=null,this._analyzeInterval=3,this._frameCount=this._analyzeInterval,this._detectionsSub=new s.Subject,this.predictWebcam=this.predictWebcam.bind(this),this._settingContainer(),this._settingStyle(),this._settingVideo(),this._containerEl.appendChild(this._videoEl),this._shadow.appendChild(this._styleEl),this._shadow.appendChild(this._containerEl)}connectedCallback(){this.startCapture()}disconnectedCallback(){this.stopCapture()}attributeChangedCallback(e,t,i){switch(e){case"debug":this._isDebug=null!==i&&("true"===i||""===i),this._containerEl.style.visibility=this._isDebug?"visible":"hidden";break;case"frequency":{const e=Number(i);!isNaN(e)&&e>0&&(this._analyzeInterval=e,this._frameCount=this._analyzeInterval)}}}setStream(e){this._videoEl.srcObject=e,this._videoEl.onloadedmetadata=()=>{this._isReady=!0}}setFaceDetector(e){this._faceDetector=e}_settingStyle(){this._styleEl.textContent="\n .aiia_container {\n visibility: hidden;\n position: fixed;\n top: 0;\n left: 0;\n }\n .aiia_container .highlighter {\n background: rgba(0, 255, 0, 0.25);\n border: 1px dashed #fff;\n z-index: 1;\n position: absolute;\n }\n .aiia_container .confidence {\n position: absolute;\n padding-bottom: 5px;\n padding-top: 5px;\n background-color: #007f8b;\n color: #fff;\n border: 1px dashed rgba(255, 255, 255, 0.7);\n z-index: 2;\n font-size: 12px;\n margin: 0;\n }\n "}_settingContainer(){this._containerEl.classList.add("aiia_container")}_settingVideo(){this._videoEl.autoplay=!0,this._videoEl.playsInline=!0,this._videoEl.muted=!0}getVideo(){return this._videoEl}startCapture(){this._videoEl.play(),this._loopFrameID=window.requestAnimationFrame(this.predictWebcam)}stopCapture(){null!==this._loopFrameID&&(window.cancelAnimationFrame(this._loopFrameID),this._loopFrameID=null),this._videoEl.pause()}async predictWebcam(){if(this._loopFrameID=window.requestAnimationFrame(this.predictWebcam),void 0!==this._faceDetector&&this._isReady){if(this._frameCount===this._analyzeInterval){const e=this._faceDetector.detectForVideo(this._videoEl,performance.now()).detections;this._isDebug&&this._drawRect(e),this._detectionsSub.next(e),this._frameCount=0}this._frameCount++}}_drawRect(e){t.forEach(this._debugElements,e=>{e.style.display="none"}),t.forEach(e,(e,t)=>{const{categories:i,boundingBox:s}=e;if(s){let e=this._debugElements[2*t],a=this._debugElements[2*t+1];e&&a||(e=document.createElement("div"),e.classList.add("highlighter"),a=document.createElement("p"),a.classList.add("confidence"),this._containerEl.append(a,e),this._debugElements.push(e,a)),e.style.display="block",a.style.display="block";const n=100*i[0].score;a.innerText="Confidence: "+Math.round(n)+"% .",a.style.right=this._videoEl.offsetWidth-s.width-s.originX+"px",a.style.top=s.originY-30+"px",a.style.width=s.width-10+"px",e.style.right=this._videoEl.offsetWidth-s.width-s.originX+"px",e.style.top=`${s.originY}px`,e.style.width=s.width-10+"px",e.style.height=`${s.height}px`}});for(let t=2*e.length;t<this._debugElements.length;t++)this._debugElements[t].style.display="none"}destroy(){this._detectionsSub.complete(),this.remove()}}customElements.define("aiia-camera",C),function(e){e[e.padding=0]="padding",e[e.rejected=1]="rejected",e[e.loadfail=2]="loadfail",e[e.allowed=3]="allowed"}(b||(b={}));class w{stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destory;pcmSub;faceResultSub;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get faceResult(){return this.faceResultSub.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()}constructor(e){this.stream=e,this.stateSub=new s.Subject,this.pcmSub=new s.Subject,this.destory=new s.Subject,this.faceResultSub=new s.Subject,this.state=b.padding}async init(t,i){const n=this.stream??await async function(e){try{return await navigator.mediaDevices.getUserMedia(e)}catch(e){return null}}({audio:{echoCancellation:!0,noiseSuppression:!0},video:!0});if(null===n)throw this.state=b.rejected,new Error(e["未獲得媒體裝置權限"]);this.stream=n,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(t)}catch(t){throw d.fatal(t),this.state=b.loadfail,new Error(e["Worklet模組載入失敗"])}this.state=b.allowed;const o=await async function(){const e=await a.FilesetResolver.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");return await a.FaceDetector.createFromOptions(e,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"},runningMode:"VIDEO"})}();this.audioManager=new g(this.audioCtx),this.vadManager=new S(n,this.audioCtx,i),this.vadManager.pcm.pipe(s.takeUntil(this.destory)).subscribe(e=>{this.pcmSub.next(e)}),this.camManager=new y(n,o,i?.faceDetection),this.camManager.faceResult.pipe(s.takeUntil(this.destory)).subscribe(e=>{this.faceResultSub.next(e)})}addAudioQueue(e){const i=t.get(e,"buffer",void 0),s=t.get(e,"float32",void 0),a=t.get(e,"int16",void 0),n=t.get(e,"numberOfChannels",void 0);i?this.audioManager?.addBuffer(i):s?this.audioManager?.addBufferByFloat32(s,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.audioManager&&(this.audioManager.volume=e)}getVolume(){return this.audioManager?this.audioManager.volume:0}startCapture(){this.camManager?.startCapture()}stopCapture(){this.camManager?.stopCapture()}onDestroy(){this.camManager?.onDestroy(),this.audioCtx?.close(),this.destory.next(),this.destory.complete()}}class _{socket;messageSub;destorySub;get message(){return this.messageSub.asObservable()}constructor(e){this.destorySub=new s.Subject,this.messageSub=new s.Subject;const{specific:i,id:a}=e.project;this.socket=n.io(e.ws_url,t.assign({autoConnect:!1},i&&void 0!==a?{query:{uuid:a}}:{}))}start(){const e="list",t="cloud",i="channel";s.fromEvent(this.socket,e).pipe(s.take(1),s.takeUntil(this.destorySub)).subscribe(t=>{this.messageSub.next({event:e,data:t})}),s.fromEvent(this.socket,t).pipe(s.takeUntil(this.destorySub)).subscribe(e=>{this.messageSub.next({event:t,data:e})}),s.fromEvent(this.socket,i).pipe(s.takeUntil(this.destorySub)).subscribe(e=>{this.messageSub.next({event:i,data:e})}),this.socket.connect()}send(e,t){this.socket.emit(e,t)}sendToCloud(e){this.send("cloud",JSON.stringify(e))}onDestroy(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect()}}class v{config;media;chat;destorySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;channelState;stateSub;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;get state(){return this.stateSub.asObservable()}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}set volume(e){this.media.setVolume(e)}get volume(){return this.media.getVolume()}constructor(e,t){this.config=e,this.media=t,this.layoutSub=new s.Subject,this.projectsSub=new s.ReplaySubject(1),this.destorySub=new s.Subject,this.aiiaSubtitleSub=new s.Subject,this.userSubtitleSub=new s.Subject,this.aiiaSubtitleClearSub=new s.Subject,this.userSubtitleClearSub=new s.Subject,this.stateSub=new s.BehaviorSubject("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.channelState={proxy:!1,cloud:!1},this.isMuteAiia=!1,this.chat=new _(e),d.code(c["指定依賴已完成"],"chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this),this.cloudToObj=this.cloudToObj.bind(this);const{userDelayTime:i,aiiaDelayTime:a}=e.autoClearSubtitle;isNaN(a)||this.aiiaSubtitleClearSub.pipe(s.debounceTime(a),s.takeUntil(this.destorySub)).subscribe(()=>{this.aiiaSubtitleSub.next("")}),isNaN(i)||this.userSubtitleClearSub.pipe(s.debounceTime(i),s.takeUntil(this.destorySub)).subscribe(()=>{this.userSubtitleSub.next("")})}start(){this.media.stateObs.pipe(s.takeUntil(this.destorySub)).subscribe(()=>{this.channelCheck()}),this.chat.message.pipe(s.takeUntil(this.destorySub)).subscribe(({event:e,data:i})=>{switch(e){case"cloud":this.cloudToObj(i);break;case"list":{const{id:e,name:s,specific:a}=this.config.project;let n=null;if(a&&void 0!==e)n=e;else{const a=t.find(i,t=>t.name===s||t.id===e);a&&(n=a.id)}null!==n?this.chooseProject(n):(this.projectsSub.next(i),this.stateSub.next("WattingProjectID"),d.code(c["請訂閱專案列表"]));break}case"channel":switch(i){case"open":this.channelState.proxy=!0,this.channelCheck();break;case"close":this.channelState.proxy=!1,this.media.stopRecord(),this.stateSub.next("CloseService");break;case"no_permissions":this.channelState.proxy=!1,this.stateSub.next("NoPermissions");break;case"reconnect":this.channelState.proxy=!1,this.stateSub.next("ReconnectingCloud")}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),d.code(c["啟動SDK"])}close;resetSession(){this.chat.sendToCloud({request:"reset"}),this.aiiaSubtitleSub.next(""),this.userSubtitleSub.next(""),this.media.stopAudio(),this.layoutSub.next({type:"resetLayout"})}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud")}mute(){this.isMuteAiia=!0,this.media.stopAudio(),this.media.stopRecord()}unmute(){this.isMuteAiia=!1,this.media.startRecord()}cloudToObj(e){try{const i=JSON.parse(e);void 0!==t.get(i,"signal")?this.behavior(i):t.isArray(i)?t.map(i,this.behavior):t.map(t.values(i),this.behavior)}catch(e){d.error("message transfer fail",e)}}behavior(e){switch(e.signal){case"layout":this.layoutSub.next(e.content);break;case"audio":if("sampleRate"===e.command)this.sampleRateOfWhisper.output=e.content;else switch(e.command){case"pcm":if(!this.isMuteAiia){const t=function(e,t,i){if(t===i)return e;const s=i/t,a=Math.ceil(e.length*s),n=new Float32Array(a);for(let t=0;t<a;t++){const i=t/s,a=Math.floor(i),o=i-a,r=e[a],c=e[Math.min(a+1,e.length-1)];n[t]=r+(c-r)*o}return n}(m(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio()}break;case"interrupted":this.media.stopAudio(),this.aiiaSubtitleSub.next("")}break;case"status":"Connected"===t.get(e,"content")&&(this.channelState.cloud=!0,this.channelCheck(),this.layoutSub.next({type:"resetLayout"}));break;case"agent":if(!this.isMuteAiia){const i=t.get(e,"content.function_result.response");void 0!==i&&(this.aiiaSubtitleSub.next(i),this.aiiaSubtitleClearSub.next())}break;case"asr":if(!this.isMuteAiia&&"ASR"===t.get(e,"content.function_type")){const i=t.get(e,"content.function_result.result");void 0!==i&&(this.userSubtitleSub.next(i),this.userSubtitleClearSub.next())}break;default:d.debug(e.signal)}}channelCheck(){const{proxy:e,cloud:t}=this.channelState;e&&t&&this.media.state===b.allowed?(this.chat.sendToCloud({request:"audio",command:"sampleRate",content:this.sampleRateOfWhisper.input}),this.media.pcm.pipe(s.takeUntil(this.destorySub)).subscribe(e=>{this.chat.sendToCloud({request:"audio",command:"pcm",content:f(e)})}),this.media.faceResult.pipe(s.takeUntil(this.destorySub)).subscribe(e=>{this.chat.send("face",e)}),this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),d.code(c["通道、雲端服務、麥克風都已就緒"])):e&&t&&this.media.state!==b.allowed&&(this.stateSub.next("InServiceNoMedia"),d.code(c["未取得媒體裝置權限,請重新設定或忽略此訊息"]))}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),d.code(c["結束SDK"])}}exports.initSdk=function(i){if(o){!function(e){const{info:t,error:i,warn:s,debug:a,fatal:n,code:o}=function(e){if(void 0===e||"all"===e)return{code:!0,error:!0,warn:!0,info:!0,debug:!0,fatal:!0};if("none"===e)return{error:!1,code:!1,warn:!1,info:!1,debug:!1,fatal:!1};if("boolean"==typeof e)return{code:e,error:e,warn:e,info:e,debug:e,fatal:e};{const t=new Set(e);return{code:t.has("code"),debug:t.has("debug"),fatal:t.has("fatal"),error:t.has("error"),warn:t.has("warn"),info:t.has("info")}}}(e);o||(u.code=()=>{}),a||(u.debug=()=>{}),t||(u.info=()=>{}),s||(u.warn=()=>{}),i||(u.error=()=>{}),n||(u.fatal=()=>{})}(t.get(i,"debug",!0)),d.code(c["初始化必要依賴"]);const e=new r(t.assign({},i));d.code(c["指定依賴已完成"],"config");const s=new w(e.mediaStream);d.code(c["指定依賴已完成"],"config");const a=new v(e,s);return d.code(c["指定依賴已完成"],"sdk"),""!==e.worklet_url&&s.init(e.worklet_url,e),a}throw new Error(e["環境錯誤(browser)"])};
package/dist/browser.d.ts CHANGED
@@ -1,16 +1,13 @@
1
+ import type { BoundingBox } from '@mediapipe/tasks-vision';
1
2
  import { Http2SecureServer } from 'http2';
2
3
  import { Http2Server } from 'http2';
3
- import { Http2ServerRequest } from 'http2';
4
- import { Http2ServerResponse } from 'http2';
5
- import { IncomingMessage } from 'http';
6
4
  import { Observable } from 'rxjs';
7
5
  import { Server } from 'http';
8
6
  import { Server as Server_2 } from 'https';
9
- import { ServerResponse } from 'http';
10
7
 
11
8
  declare class AiiaConfig {
12
9
  private config;
13
- get webserver(): Server<IncomingMessage, ServerResponse> | Server_2<IncomingMessage, ServerResponse> | Http2SecureServer<IncomingMessage, ServerResponse, Http2ServerRequest, Http2ServerResponse> | Http2Server<IncomingMessage, ServerResponse, Http2ServerRequest, Http2ServerResponse> | undefined;
10
+ get webserver(): (Server<any, any> | Server_2<any, any> | Http2SecureServer<any, any, any, any> | Http2Server<any, any, any, any>) | undefined;
14
11
  get environment(): "developement" | "production" | undefined;
15
12
  get license(): string;
16
13
  get port(): number;
@@ -23,7 +20,18 @@ declare class AiiaConfig {
23
20
  api: string;
24
21
  socket: string;
25
22
  };
26
- get debug(): boolean | "all" | "none" | ("info" | "error" | "warn" | "debug" | "fatal")[];
23
+ get debug(): boolean | "all" | "none" | LoggerLevel[];
24
+ get mediaStream(): MediaStream | undefined;
25
+ get chunkTimeInSeconds(): number;
26
+ get llmSampleRate(): number;
27
+ get faceDetection(): {
28
+ frame: number;
29
+ confidence: number;
30
+ };
31
+ get autoClearSubtitle(): {
32
+ userDelayTime: number;
33
+ aiiaDelayTime: number;
34
+ };
27
35
  constructor(config: InitOptions);
28
36
  }
29
37
 
@@ -33,7 +41,7 @@ export declare interface AiiaProjectItem {
33
41
  }
34
42
 
35
43
  declare class AiiaSdk {
36
- config: AiiaConfig;
44
+ private config;
37
45
  private media;
38
46
  private chat;
39
47
  private destorySub;
@@ -41,11 +49,23 @@ declare class AiiaSdk {
41
49
  private layoutSub;
42
50
  private aiiaSubtitleSub;
43
51
  private userSubtitleSub;
44
- private cloudSampleRate;
52
+ private sampleRateOfWhisper;
45
53
  private channelState;
54
+ private stateSub;
55
+ private isMuteAiia;
56
+ private aiiaSubtitleClearSub;
57
+ private userSubtitleClearSub;
58
+ /**
59
+ * [zh]
60
+ * 服務的狀態
61
+ *
62
+ * [en]
63
+ * state of service
64
+ */
65
+ get state(): Observable<AiiaState>;
46
66
  /**
47
67
  * [zh]
48
- * 控制畫面 Layout
68
+ * 控制組件
49
69
  *
50
70
  * [en]
51
71
  * Control Layout
@@ -64,6 +84,8 @@ declare class AiiaSdk {
64
84
  } | {
65
85
  type: "unmount";
66
86
  id: LayoutID;
87
+ } | {
88
+ type: "resetLayout";
67
89
  }>;
68
90
  /**
69
91
  * [zh]
@@ -105,23 +127,82 @@ declare class AiiaSdk {
105
127
  set volume(val: number);
106
128
  get volume(): number;
107
129
  constructor(config: AiiaConfig, media: MediaManager);
130
+ /**
131
+ * [zh]
132
+ * 啟動完整服務
133
+ *
134
+ * [en]
135
+ * Start the full service
136
+ */
108
137
  start(): void;
138
+ /**
139
+ * Alias for `onDestroy`.
140
+ *
141
+ * [zh]
142
+ * 停止所有服務,釋放資源
143
+ *
144
+ * [en]
145
+ * Stop all services to release resources
146
+ */
147
+ close: () => void;
148
+ /**
149
+ * [zh]
150
+ * 重置當前對話,清除播放中的語音
151
+ *
152
+ * [en]
153
+ * Reset the current conversation and clear the playing voice.
154
+ */
155
+ resetSession(): void;
109
156
  /**
110
157
  * [zh]
111
158
  * 若沒有明確指定 Project 時,請呼叫此方法
112
159
  *
113
160
  * [en]
114
- * If no Project is explicitly specified, please execute this method
161
+ * If no Project is explicitly specified, please execute this method.
115
162
  * @param project_id
116
163
  */
117
- chooseProject(project_id: string): void;
164
+ chooseProject(project_id: AiiaProjectItem["id"]): void;
165
+ /**
166
+ * [zh]
167
+ * 不同於`this.volume = 0`的調整輸出音量
168
+ *
169
+ * 此方法會暫停麥克風輸入及清除所有音訊資料
170
+ *
171
+ * [en]
172
+ * Unlike `this.volume = 0` which adjusts the output volume,
173
+ *
174
+ * This method will pause mic record and clear all audio data
175
+ */
176
+ mute(): void;
177
+ /**
178
+ * [zh]
179
+ * 恢復聲音訊號資料
180
+ *
181
+ * [en]
182
+ * Restore audio signal data
183
+ */
184
+ unmute(): void;
118
185
  private cloudToObj;
119
186
  private behavior;
120
187
  private channelCheck;
121
- onDestory(): void;
188
+ /**
189
+ * [zh]
190
+ * 停止所有服務,釋放資源
191
+ *
192
+ * [en]
193
+ * Stop all services to release resources
194
+ */
195
+ onDestroy(): void;
122
196
  }
123
197
 
124
- export declare type BrowserInitOptions = Omit<InitOptions, "webserver" | "port">;
198
+ export declare type AiiaState = "NotStart" | "WattingProjectID" | "ConnectingCloud" | "ReconnectingCloud" | "InService" | "InServiceNoMedia" | "NoPermissions" | "CloseService" | "Destroy";
199
+
200
+ export declare type BrowserInitOptions = Omit<InitOptions, "webserver" | "port" | "license">;
201
+
202
+ declare type FaceDetectorResult = ({
203
+ area: number;
204
+ confidenceScore: number;
205
+ } & BoundingBox) | null;
125
206
 
126
207
  declare interface InitOptions {
127
208
  /**
@@ -155,7 +236,7 @@ declare interface InitOptions {
155
236
  * [en]
156
237
  * Extending "socket.io" to your web server
157
238
  */
158
- webserver?: Server | Server_2 | Http2SecureServer | Http2Server;
239
+ webserver?: Webserver;
159
240
  /**
160
241
  * [zh]
161
242
  * 伺服器 port
@@ -189,28 +270,94 @@ declare interface InitOptions {
189
270
  * [en]
190
271
  * Switch message(info, error, warn) dispaly, default: true
191
272
  */
192
- debug?: boolean | "all" | "none" | ("info" | "error" | "warn" | "debug" | "fatal")[];
273
+ debug?: boolean | "all" | "none" | LoggerLevel[];
274
+ /**
275
+ * [zh]
276
+ * 授權的媒體裝置,請包含麥克風及鏡頭/攝影機權限
277
+ *
278
+ * [en]
279
+ * Authorized media devices, please include microphone and lens/camera permissions.
280
+ *
281
+ * https://developer.mozilla.org/en-US/docs/Web/API/MediaStream
282
+ */
283
+ mediaStream?: MediaStream;
284
+ /**
285
+ * [zh]
286
+ * 檢測聲音的區塊大小(秒),預設 1 秒
287
+ *
288
+ * [en]
289
+ * Detecting the chunk size of the sound(unit is second), default 1 second.
290
+ */
291
+ chunkTimeInSeconds?: number;
292
+ /**
293
+ * [zh]
294
+ * 指定音訊輸出的採樣率(提供給LLM分析)。不推薦更動
295
+ *
296
+ * [en]
297
+ * Specify the sampling rate of audio output (provided for LLM analysis). Changing is not recommended.
298
+ */
299
+ llmSampleRate?: number;
300
+ /**
301
+ * [zh]
302
+ * 人臉辨識
303
+ *
304
+ * frame: 每幾幀更新一次, 預設: 3
305
+ *
306
+ * confidence: 分數(0 ~ 100), 預設: 80
307
+ *
308
+ * [en]
309
+ * facial recognition
310
+ *
311
+ * frame: Update every few frames, default: 3
312
+ *
313
+ * confidence: score(0 ~ 100), default: 80
314
+ */
315
+ faceDetection?: {
316
+ frame?: number;
317
+ confidence?: number;
318
+ };
319
+ /**
320
+ * [zh]
321
+ * 清除字幕,可指定時間(毫秒),預設 3000 毫秒後清除
322
+ *
323
+ * [en]
324
+ * Clear subtitles, you can specify the time (milliseconds), the default is to clear after 3000 milliseconds.
325
+ */
326
+ autoClearSubtitle?: {
327
+ user?: boolean | number;
328
+ aiia?: boolean | number;
329
+ };
193
330
  }
194
331
 
195
332
  export declare function initSdk(options?: BrowserInitOptions): AiiaSdk;
196
333
 
197
334
  declare type LayoutID = string | number;
198
335
 
199
- export declare class MediaManager {
336
+ declare type LoggerLevel = "info" | "error" | "warn" | "debug" | "fatal" | "code";
337
+
338
+ declare class MediaManager {
339
+ stream?: MediaStream | undefined;
200
340
  private _state;
201
341
  private stateSub;
202
342
  private audioCtx?;
203
343
  private audioManager?;
204
344
  private vadManager?;
345
+ private camManager?;
205
346
  private destory;
206
347
  private pcmSub;
348
+ private faceResultSub;
207
349
  get sampleRate(): number;
208
350
  get pcm(): Observable<Float32Array<ArrayBufferLike>>;
351
+ get faceResult(): Observable<FaceDetectorResult>;
209
352
  get state(): MediaStateEnum;
210
353
  set state(v: MediaStateEnum);
211
354
  get stateObs(): Observable<MediaStateEnum>;
212
- constructor();
213
- init(workletUrl: string): Promise<void>;
355
+ constructor(stream?: MediaStream | undefined);
356
+ init(workletUrl: string, config?: {
357
+ llmSampleRate?: AiiaConfig["llmSampleRate"];
358
+ chunkTimeInSeconds?: AiiaConfig["chunkTimeInSeconds"];
359
+ faceDetection?: AiiaConfig["faceDetection"];
360
+ }): Promise<void>;
214
361
  addAudioQueue(input: {
215
362
  buffer: AudioBuffer;
216
363
  } | {
@@ -226,7 +373,9 @@ export declare class MediaManager {
226
373
  stopRecord(): void;
227
374
  setVolume(val: number): void;
228
375
  getVolume(): number;
229
- onDestory(): void;
376
+ startCapture(): void;
377
+ stopCapture(): void;
378
+ onDestroy(): void;
230
379
  }
231
380
 
232
381
  declare enum MediaStateEnum {
@@ -236,4 +385,6 @@ declare enum MediaStateEnum {
236
385
  allowed = 3
237
386
  }
238
387
 
388
+ declare type Webserver = Server<any, any> | Server_2<any, any> | Http2SecureServer<any, any, any, any> | Http2Server<any, any, any, any>;
389
+
239
390
  export { }
package/dist/browser.mjs CHANGED
@@ -1 +1 @@
1
- import t from"moment";import{Subject as e,fromEvent as r,take as n,takeUntil as o}from"rxjs";import{io as a}from"socket.io-client";var i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function u(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var s="object"==typeof i&&i&&i.Object===Object&&i,c=s,l="object"==typeof self&&self&&self.Object===Object&&self,f=c||l||Function("return this")(),h=f.Symbol,d=h,v=Object.prototype,p=v.hasOwnProperty,b=v.toString,g=d?d.toStringTag:void 0;var y=function(t){var e=p.call(t,g),r=t[g];try{t[g]=void 0;var n=!0}catch(t){}var o=b.call(t);return n&&(e?t[g]=r:delete t[g]),o},_=Object.prototype.toString;var m=y,w=function(t){return _.call(t)},j=h?h.toStringTag:void 0;var S=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":j&&j in Object(t)?m(t):w(t)};var O=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},x=S,R=O;var k,C=function(t){if(!R(t))return!1;var e=x(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},A=f["__core-js_shared__"],N=(k=/[^.]+$/.exec(A&&A.keys&&A.keys.IE_PROTO||""))?"Symbol(src)_1."+k:"";var M=function(t){return!!N&&N in t},E=Function.prototype.toString;var D=function(t){if(null!=t){try{return E.call(t)}catch(t){}try{return t+""}catch(t){}}return""},P=C,z=M,B=O,T=D,$=/^\[object .+?Constructor\]$/,F=Function.prototype,I=Object.prototype,V=F.toString,Q=I.hasOwnProperty,U=RegExp("^"+V.call(Q).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var W=function(t){return!(!B(t)||z(t))&&(P(t)?U:$).test(T(t))},q=function(t,e){return null==t?void 0:t[e]};var L=function(t,e){var r=q(t,e);return W(r)?r:void 0},G=L,H=function(){try{var t=G(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),J=H;var K=function(t,e,r){"__proto__"==e&&J?J(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var X=function(t,e){return t===e||t!=t&&e!=e},Y=K,Z=X,tt=Object.prototype.hasOwnProperty;var et=function(t,e,r){var n=t[e];tt.call(t,e)&&Z(n,r)&&(void 0!==r||e in t)||Y(t,e,r)},rt=et,nt=K;var ot=function(t,e,r,n){var o=!r;r||(r={});for(var a=-1,i=e.length;++a<i;){var u=e[a],s=n?n(r[u],t[u],u,r,t):void 0;void 0===s&&(s=t[u]),o?nt(r,u,s):rt(r,u,s)}return r};var at=function(t){return t};var it=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)},ut=Math.max;var st=function(t,e,r){return e=ut(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,a=ut(n.length-e,0),i=Array(a);++o<a;)i[o]=n[e+o];o=-1;for(var u=Array(e+1);++o<e;)u[o]=n[o];return u[e]=r(i),it(t,this,u)}};var ct=function(t){return function(){return t}},lt=H,ft=lt?function(t,e){return lt(t,"toString",{configurable:!0,enumerable:!1,value:ct(e),writable:!0})}:at,ht=Date.now;var dt=function(t){var e=0,r=0;return function(){var n=ht(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(ft),vt=at,pt=st,bt=dt;var gt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},yt=C,_t=gt;var mt=function(t){return null!=t&&_t(t.length)&&!yt(t)},wt=/^(?:0|[1-9]\d*)$/;var jt=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&wt.test(t))&&t>-1&&t%1==0&&t<e},St=X,Ot=mt,xt=jt,Rt=O;var kt=function(t,e){return bt(pt(t,e,vt),t+"")},Ct=function(t,e,r){if(!Rt(r))return!1;var n=typeof e;return!!("number"==n?Ot(r)&&xt(e,r.length):"string"==n&&e in r)&&St(r[e],t)};var At=function(t){return kt(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,i=o>2?r[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,i&&Ct(r[0],r[1],i)&&(a=o<3?void 0:a,o=1),e=Object(e);++n<o;){var u=r[n];u&&t(e,u,n,a)}return e})},Nt=Object.prototype;var Mt=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||Nt)};var Et=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};var Dt=function(t){return null!=t&&"object"==typeof t},Pt=S,zt=Dt;var Bt=function(t){return zt(t)&&"[object Arguments]"==Pt(t)},Tt=Dt,$t=Object.prototype,Ft=$t.hasOwnProperty,It=$t.propertyIsEnumerable,Vt=Bt(function(){return arguments}())?Bt:function(t){return Tt(t)&&Ft.call(t,"callee")&&!It.call(t,"callee")},Qt=Array.isArray,Ut=u(Qt),Wt={exports:{}};var qt=function(){return!1};!function(t,e){var r=f,n=qt,o=e&&!e.nodeType&&e,a=o&&t&&!t.nodeType&&t,i=a&&a.exports===o?r.Buffer:void 0,u=(i?i.isBuffer:void 0)||n;t.exports=u}(Wt,Wt.exports);var Lt=Wt.exports,Gt=S,Ht=gt,Jt=Dt,Kt={};Kt["[object Float32Array]"]=Kt["[object Float64Array]"]=Kt["[object Int8Array]"]=Kt["[object Int16Array]"]=Kt["[object Int32Array]"]=Kt["[object Uint8Array]"]=Kt["[object Uint8ClampedArray]"]=Kt["[object Uint16Array]"]=Kt["[object Uint32Array]"]=!0,Kt["[object Arguments]"]=Kt["[object Array]"]=Kt["[object ArrayBuffer]"]=Kt["[object Boolean]"]=Kt["[object DataView]"]=Kt["[object Date]"]=Kt["[object Error]"]=Kt["[object Function]"]=Kt["[object Map]"]=Kt["[object Number]"]=Kt["[object Object]"]=Kt["[object RegExp]"]=Kt["[object Set]"]=Kt["[object String]"]=Kt["[object WeakMap]"]=!1;var Xt=function(t){return Jt(t)&&Ht(t.length)&&!!Kt[Gt(t)]};var Yt=function(t){return function(e){return t(e)}},Zt={exports:{}};!function(t,e){var r=s,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,a=o&&o.exports===n&&r.process,i=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=i}(Zt,Zt.exports);var te=Zt.exports,ee=Xt,re=Yt,ne=te&&te.isTypedArray,oe=ne?re(ne):ee,ae=Et,ie=Vt,ue=Qt,se=Lt,ce=jt,le=oe,fe=Object.prototype.hasOwnProperty;var he=function(t,e){var r=ue(t),n=!r&&ie(t),o=!r&&!n&&se(t),a=!r&&!n&&!o&&le(t),i=r||n||o||a,u=i?ae(t.length,String):[],s=u.length;for(var c in t)!e&&!fe.call(t,c)||i&&("length"==c||o&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||ce(c,s))||u.push(c);return u};var de=function(t,e){return function(r){return t(e(r))}}(Object.keys,Object),ve=Mt,pe=de,be=Object.prototype.hasOwnProperty;var ge=he,ye=function(t){if(!ve(t))return pe(t);var e=[];for(var r in Object(t))be.call(t,r)&&"constructor"!=r&&e.push(r);return e},_e=mt;var me,we=function(t){return _e(t)?ge(t):ye(t)},je=et,Se=ot,Oe=At,xe=mt,Re=Mt,ke=we,Ce=Object.prototype.hasOwnProperty,Ae=u(Oe(function(t,e){if(Re(e)||xe(e))Se(e,ke(e),t);else for(var r in e)Ce.call(e,r)&&je(t,r,e[r])}));!function(t){t["網絡錯誤"]="ERROR CODE: 500",t["環境錯誤(browser)"]="ERROR CODE: 1001",t["Worklet模組載入失敗"]="ERROR CODE: 1002",t["未獲得媒體裝置權限"]="ERROR CODE: 1003",t["實例已摧毀"]="ERROR CODE: 1004",t["環境錯誤(nodejs)"]="ERROR CODE: 2001",t["未提供憑證"]="ERROR CODE: 2002",t["獲取權杖失敗"]="ERROR CODE: 2003",t["沒有可用專案"]="ERROR CODE: 2004",t["重複初始化"]="ERROR CODE: 205"}(me||(me={}));const Ne="undefined"!=typeof window;"undefined"!=typeof process&&null!=process.versions&&process.versions.node;class Me{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(t,e){const r=e??NaN;if(t){const e=parseInt(t);return isNaN(e)?r:e}return r}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=Ae({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:Ae({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}constructor(t){this.config=t}}var Ee=function(t,e,r,n){for(var o=t.length,a=r+(n?1:-1);n?a--:++a<o;)if(e(t[a],a,t))return a;return-1};var De=Ee,Pe=function(t){return t!=t},ze=function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1};var Be=function(t,e,r){return e==e?ze(t,e,r):De(t,Pe,r)},Te=S,$e=Qt,Fe=Dt;var Ie=function(t){return"string"==typeof t||!$e(t)&&Fe(t)&&"[object String]"==Te(t)},Ve=/\s/;var Qe=function(t){for(var e=t.length;e--&&Ve.test(t.charAt(e)););return e},Ue=/^\s+/;var We=S,qe=Dt;var Le=function(t){return"symbol"==typeof t||qe(t)&&"[object Symbol]"==We(t)},Ge=function(t){return t?t.slice(0,Qe(t)+1).replace(Ue,""):t},He=O,Je=Le,Ke=/^[-+]0x[0-9a-f]+$/i,Xe=/^0b[01]+$/i,Ye=/^0o[0-7]+$/i,Ze=parseInt;var tr=function(t){if("number"==typeof t)return t;if(Je(t))return NaN;if(He(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=He(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ge(t);var r=Xe.test(t);return r||Ye.test(t)?Ze(t.slice(2),r?2:8):Ke.test(t)?NaN:+t},er=1/0;var rr=function(t){return t?(t=tr(t))===er||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0};var nr=function(t){var e=rr(t),r=e%1;return e==e?r?e-r:e:0};var or=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o},ar=or;var ir=function(t,e){return ar(e,function(e){return t[e]})},ur=we;var sr=function(t){return null==t?[]:ir(t,ur(t))},cr=u(sr),lr=Be,fr=mt,hr=Ie,dr=nr,vr=sr,pr=Math.max;var br=u(function(t,e,r,n){t=fr(t)?t:vr(t),r=r&&!n?dr(r):0;var o=t.length;return r<0&&(r=pr(o+r,0)),hr(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&lr(t,e,r)>-1});const gr={debug:()=>{},info:()=>{},error:()=>{},warn:()=>{},fatal:()=>{}};function yr(){return t().format("yyyy-MM-DD[T]HH:mm:ss")}function _r(t){const{info:e,error:r,warn:n,debug:o,fatal:a}=function(t){return void 0===t||"all"===t?{error:!0,warn:!0,info:!0,debug:!0,fatal:!0}:"none"===t?{error:!1,warn:!1,info:!1,debug:!1,fatal:!1}:"boolean"==typeof t?{error:t,warn:t,info:t,debug:t,fatal:t}:{debug:br(t,"debug"),fatal:br(t,"fatal"),error:br(t,"error"),warn:br(t,"warn"),info:br(t,"info")}}(t);o&&(gr.debug=(...t)=>{const e=yr();console.log(`[Aiia::debug_${e}_]`,...t)}),e&&(gr.info=(...t)=>{const e=yr();console.log(`[Aiia::info_${e}_]`,...t)}),n&&(gr.warn=(...t)=>{const e=yr();console.warn(`[Aiia::warn_${e}_]`,...t)}),r&&(gr.error=(...t)=>{const e=yr();console.error(`[Aiia::error_${e}_]`,...t)}),a&&(gr.fatal=(...t)=>{const e=yr();console.error(`[Aiia::fatal_${e}_]`,...t)})}var mr=Qt,wr=Le,jr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Sr=/^\w*$/;var Or=function(t,e){if(mr(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!wr(t))||(Sr.test(t)||!jr.test(t)||null!=e&&t in Object(e))},xr=L(Object,"create"),Rr=xr;var kr=function(){this.__data__=Rr?Rr(null):{},this.size=0};var Cr=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ar=xr,Nr=Object.prototype.hasOwnProperty;var Mr=function(t){var e=this.__data__;if(Ar){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return Nr.call(e,t)?e[t]:void 0},Er=xr,Dr=Object.prototype.hasOwnProperty;var Pr=xr;var zr=kr,Br=Cr,Tr=Mr,$r=function(t){var e=this.__data__;return Er?void 0!==e[t]:Dr.call(e,t)},Fr=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Pr&&void 0===e?"__lodash_hash_undefined__":e,this};function Ir(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Ir.prototype.clear=zr,Ir.prototype.delete=Br,Ir.prototype.get=Tr,Ir.prototype.has=$r,Ir.prototype.set=Fr;var Vr=Ir;var Qr=function(){this.__data__=[],this.size=0},Ur=X;var Wr=function(t,e){for(var r=t.length;r--;)if(Ur(t[r][0],e))return r;return-1},qr=Wr,Lr=Array.prototype.splice;var Gr=Wr;var Hr=Wr;var Jr=Wr;var Kr=Qr,Xr=function(t){var e=this.__data__,r=qr(e,t);return!(r<0)&&(r==e.length-1?e.pop():Lr.call(e,r,1),--this.size,!0)},Yr=function(t){var e=this.__data__,r=Gr(e,t);return r<0?void 0:e[r][1]},Zr=function(t){return Hr(this.__data__,t)>-1},tn=function(t,e){var r=this.__data__,n=Jr(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function en(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}en.prototype.clear=Kr,en.prototype.delete=Xr,en.prototype.get=Yr,en.prototype.has=Zr,en.prototype.set=tn;var rn=en,nn=L(f,"Map"),on=Vr,an=rn,un=nn;var sn=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var cn=function(t,e){var r=t.__data__;return sn(e)?r["string"==typeof e?"string":"hash"]:r.map},ln=cn;var fn=cn;var hn=cn;var dn=cn;var vn=function(){this.size=0,this.__data__={hash:new on,map:new(un||an),string:new on}},pn=function(t){var e=ln(this,t).delete(t);return this.size-=e?1:0,e},bn=function(t){return fn(this,t).get(t)},gn=function(t){return hn(this,t).has(t)},yn=function(t,e){var r=dn(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function _n(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}_n.prototype.clear=vn,_n.prototype.delete=pn,_n.prototype.get=bn,_n.prototype.has=gn,_n.prototype.set=yn;var mn=_n,wn=mn;function jn(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],a=r.cache;if(a.has(o))return a.get(o);var i=t.apply(this,n);return r.cache=a.set(o,i)||a,i};return r.cache=new(jn.Cache||wn),r}jn.Cache=wn;var Sn=jn;var On=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xn=/\\(\\)?/g,Rn=function(t){var e=Sn(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(On,function(t,r,n,o){e.push(n?o.replace(xn,"$1"):r||t)}),e}),kn=or,Cn=Qt,An=Le,Nn=h?h.prototype:void 0,Mn=Nn?Nn.toString:void 0;var En=function t(e){if("string"==typeof e)return e;if(Cn(e))return kn(e,t)+"";if(An(e))return Mn?Mn.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r},Dn=En;var Pn=Qt,zn=Or,Bn=Rn,Tn=function(t){return null==t?"":Dn(t)};var $n=function(t,e){return Pn(t)?t:zn(t,e)?[t]:Bn(Tn(t))},Fn=Le;var In=function(t){if("string"==typeof t||Fn(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e},Vn=$n,Qn=In;var Un=function(t,e){for(var r=0,n=(e=Vn(e,t)).length;null!=t&&r<n;)t=t[Qn(e[r++])];return r&&r==n?t:void 0},Wn=Un;var qn,Ln,Gn=function(t,e,r){var n=null==t?void 0:Wn(t,e);return void 0===n?r:n},Hn=u(Gn);function Jn(t,e,r){return Math.max(r,Math.min(t,e))}function Kn(t){const e=new DataView(t.buffer),r=[];for(let n=0;n<t.length;n++){const t=e.getInt16(2*n,!0)/32768;r.push(t)}return new Float32Array(r)}function Xn(t){const e=new DataView(t.buffer),r=[];for(let n=0;n<t.length;n++){const t=Jn(32768*e.getFloat32(4*n,!0),32767,-32768);r.push(t)}return r}!function(t){t[t.unknow=0]="unknow",t[t.allowed=1]="allowed",t[t.rejected=2]="rejected"}(qn||(qn={}));class Yn{audioContext;type="audio";currentNode;bufferQueue;gainNode;set volume(t){t<0&&(t=0),t>100&&(t=100),this.gainNode.gain.value=t/100}get volume(){return Math.round(100*this.gainNode.gain.value)}constructor(t){this.audioContext=t,this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination)}addBuffer(t){this.bufferQueue.push(t)}addBufferByFloat32(t,e=1){const r=t.length,n=this.audioContext.sampleRate,o=this.audioContext.createBuffer(e,r,n),a=t.slice();for(let t=0;t<e;t++)o.copyToChannel(a,t);this.addBuffer(o)}addBufferByInt16(t,e=1){this.addBufferByFloat32(Kn(t),e)}startSpeech(){null===this.currentNode&&this.continue()}pauseSpeech(){this.audioContext.suspend().catch(t=>{gr.error("pause speech fail",t)})}resumeSpeech(){this.audioContext.resume().catch(t=>{gr.error("resume speech fail",t)})}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(){const t=this.bufferQueue.shift();if(t){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=t,this.currentNode.connect(this.gainNode);const e=this.continue.bind(this);this.currentNode.onended=e,this.currentNode.start()}else this.clearNode()}}class Zn{stream;audioContext;pcmSub;type="vad";workletNode;source;isRecording=!1;constructor(t,e,r){this.stream=t,this.audioContext=e,this.pcmSub=r}async startRecord(){this.isRecording||(this.source=this.audioContext.createMediaStreamSource(this.stream),this.workletNode=new AudioWorkletNode(this.audioContext,"aiia-vad"),this.source.connect(this.workletNode),this.workletNode.port.onmessage=t=>{const{float32:e,energy:r}=t.data;e&&this.pcmSub.next(new Float32Array(e))},this.isRecording=!0)}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=!1)}}!function(t){t[t.padding=0]="padding",t[t.rejected=1]="rejected",t[t.loadfail=2]="loadfail",t[t.allowed=3]="allowed"}(Ln||(Ln={}));class to{_state;stateSub;audioCtx;audioManager;vadManager;destory;pcmSub;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get state(){return this._state}set state(t){t!==this._state&&(this._state=t,this.stateSub.next(t))}get stateObs(){return this.stateSub.asObservable()}constructor(){this.stateSub=new e,this.pcmSub=new e,this.destory=new e,this.state=Ln.padding}async init(t){if(this.destory.closed)throw new Error(me["實例已摧毀"]);const e=await async function(t){try{return await navigator.mediaDevices.getUserMedia(t)}catch(t){return null}}({audio:{echoCancellation:!0,noiseSuppression:!0}});if(null===e)throw this.state=Ln.rejected,new Error(me["未獲得媒體裝置權限"]);this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(t)}catch(t){throw gr.fatal(t),this.state=Ln.loadfail,new Error(me["Worklet模組載入失敗"])}this.state=Ln.allowed,this.audioManager=new Yn(this.audioCtx),this.vadManager=new Zn(e,this.audioCtx,this.pcmSub)}addAudioQueue(t){const e=Hn(t,"buffer",void 0),r=Hn(t,"float32",void 0),n=Hn(t,"int16",void 0),o=Hn(t,"numberOfChannels",void 0);e?this.audioManager?.addBuffer(e):r?this.audioManager?.addBufferByFloat32(r,o):n&&this.audioManager?.addBufferByInt16(n,o)}playAudio(){this.audioManager?.startSpeech()}stopAudio(){this.audioManager?.stopSpeech()}startRecord(){this.vadManager?.startRecord()}stopRecord(){this.vadManager?.stopRecord()}setVolume(t){this.audioManager&&(this.audioManager.volume=t)}getVolume(){return this.audioManager?this.audioManager.volume:0}onDestory(){this.audioCtx?.close(),this.destory.next(),this.destory.complete()}}var eo=rn;var ro=rn,no=nn,oo=mn;var ao=rn,io=function(){this.__data__=new eo,this.size=0},uo=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},so=function(t){return this.__data__.get(t)},co=function(t){return this.__data__.has(t)},lo=function(t,e){var r=this.__data__;if(r instanceof ro){var n=r.__data__;if(!no||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new oo(n)}return r.set(t,e),this.size=r.size,this};function fo(t){var e=this.__data__=new ao(t);this.size=e.size}fo.prototype.clear=io,fo.prototype.delete=uo,fo.prototype.get=so,fo.prototype.has=co,fo.prototype.set=lo;var ho=fo;var vo=mn,po=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},bo=function(t){return this.__data__.has(t)};function go(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new vo;++e<r;)this.add(t[e])}go.prototype.add=go.prototype.push=po,go.prototype.has=bo;var yo=go,_o=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1},mo=function(t,e){return t.has(e)};var wo=function(t,e,r,n,o,a){var i=1&r,u=t.length,s=e.length;if(u!=s&&!(i&&s>u))return!1;var c=a.get(t),l=a.get(e);if(c&&l)return c==e&&l==t;var f=-1,h=!0,d=2&r?new yo:void 0;for(a.set(t,e),a.set(e,t);++f<u;){var v=t[f],p=e[f];if(n)var b=i?n(p,v,f,e,t,a):n(v,p,f,t,e,a);if(void 0!==b){if(b)continue;h=!1;break}if(d){if(!_o(e,function(t,e){if(!mo(d,e)&&(v===t||o(v,t,r,n,a)))return d.push(e)})){h=!1;break}}else if(v!==p&&!o(v,p,r,n,a)){h=!1;break}}return a.delete(t),a.delete(e),h};var jo=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r};var So=f.Uint8Array,Oo=X,xo=wo,Ro=jo,ko=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},Co=h?h.prototype:void 0,Ao=Co?Co.valueOf:void 0;var No=function(t,e,r,n,o,a,i){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!a(new So(t),new So(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Oo(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var u=Ro;case"[object Set]":var s=1&n;if(u||(u=ko),t.size!=e.size&&!s)return!1;var c=i.get(t);if(c)return c==e;n|=2,i.set(t,e);var l=xo(u(t),u(e),n,o,a,i);return i.delete(t),l;case"[object Symbol]":if(Ao)return Ao.call(t)==Ao.call(e)}return!1};var Mo=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t},Eo=Mo,Do=Qt;var Po=function(t,e,r){var n=e(t);return Do(t)?n:Eo(n,r(t))};var zo=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,a=[];++r<n;){var i=t[r];e(i,r,t)&&(a[o++]=i)}return a},Bo=function(){return[]},To=Object.prototype.propertyIsEnumerable,$o=Object.getOwnPropertySymbols,Fo=Po,Io=$o?function(t){return null==t?[]:(t=Object(t),zo($o(t),function(e){return To.call(t,e)}))}:Bo,Vo=we;var Qo=function(t){return Fo(t,Vo,Io)},Uo=Object.prototype.hasOwnProperty;var Wo=function(t,e,r,n,o,a){var i=1&r,u=Qo(t),s=u.length;if(s!=Qo(e).length&&!i)return!1;for(var c=s;c--;){var l=u[c];if(!(i?l in e:Uo.call(e,l)))return!1}var f=a.get(t),h=a.get(e);if(f&&h)return f==e&&h==t;var d=!0;a.set(t,e),a.set(e,t);for(var v=i;++c<s;){var p=t[l=u[c]],b=e[l];if(n)var g=i?n(b,p,l,e,t,a):n(p,b,l,t,e,a);if(!(void 0===g?p===b||o(p,b,r,n,a):g)){d=!1;break}v||(v="constructor"==l)}if(d&&!v){var y=t.constructor,_=e.constructor;y==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof y&&y instanceof y&&"function"==typeof _&&_ instanceof _||(d=!1)}return a.delete(t),a.delete(e),d},qo=L(f,"DataView"),Lo=nn,Go=L(f,"Promise"),Ho=L(f,"Set"),Jo=L(f,"WeakMap"),Ko=S,Xo=D,Yo="[object Map]",Zo="[object Promise]",ta="[object Set]",ea="[object WeakMap]",ra="[object DataView]",na=Xo(qo),oa=Xo(Lo),aa=Xo(Go),ia=Xo(Ho),ua=Xo(Jo),sa=Ko;(qo&&sa(new qo(new ArrayBuffer(1)))!=ra||Lo&&sa(new Lo)!=Yo||Go&&sa(Go.resolve())!=Zo||Ho&&sa(new Ho)!=ta||Jo&&sa(new Jo)!=ea)&&(sa=function(t){var e=Ko(t),r="[object Object]"==e?t.constructor:void 0,n=r?Xo(r):"";if(n)switch(n){case na:return ra;case oa:return Yo;case aa:return Zo;case ia:return ta;case ua:return ea}return e});var ca=ho,la=wo,fa=No,ha=Wo,da=sa,va=Qt,pa=Lt,ba=oe,ga="[object Arguments]",ya="[object Array]",_a="[object Object]",ma=Object.prototype.hasOwnProperty;var wa=function(t,e,r,n,o,a){var i=va(t),u=va(e),s=i?ya:da(t),c=u?ya:da(e),l=(s=s==ga?_a:s)==_a,f=(c=c==ga?_a:c)==_a,h=s==c;if(h&&pa(t)){if(!pa(e))return!1;i=!0,l=!1}if(h&&!l)return a||(a=new ca),i||ba(t)?la(t,e,r,n,o,a):fa(t,e,s,r,n,o,a);if(!(1&r)){var d=l&&ma.call(t,"__wrapped__"),v=f&&ma.call(e,"__wrapped__");if(d||v){var p=d?t.value():t,b=v?e.value():e;return a||(a=new ca),o(p,b,r,n,a)}}return!!h&&(a||(a=new ca),ha(t,e,r,n,o,a))},ja=Dt;var Sa=function t(e,r,n,o,a){return e===r||(null==e||null==r||!ja(e)&&!ja(r)?e!=e&&r!=r:wa(e,r,n,o,t,a))},Oa=ho,xa=Sa;var Ra=O;var ka=function(t){return t==t&&!Ra(t)},Ca=ka,Aa=we;var Na=function(t,e){return function(r){return null!=r&&(r[t]===e&&(void 0!==e||t in Object(r)))}},Ma=function(t,e,r,n){var o=r.length,a=o,i=!n;if(null==t)return!a;for(t=Object(t);o--;){var u=r[o];if(i&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++o<a;){var s=(u=r[o])[0],c=t[s],l=u[1];if(i&&u[2]){if(void 0===c&&!(s in t))return!1}else{var f=new Oa;if(n)var h=n(c,l,s,t,e,f);if(!(void 0===h?xa(l,c,3,n,f):h))return!1}}return!0},Ea=function(t){for(var e=Aa(t),r=e.length;r--;){var n=e[r],o=t[n];e[r]=[n,o,Ca(o)]}return e},Da=Na;var Pa=$n,za=Vt,Ba=Qt,Ta=jt,$a=gt,Fa=In;var Ia=function(t,e){return null!=t&&e in Object(t)},Va=function(t,e,r){for(var n=-1,o=(e=Pa(e,t)).length,a=!1;++n<o;){var i=Fa(e[n]);if(!(a=null!=t&&r(t,i)))break;t=t[i]}return a||++n!=o?a:!!(o=null==t?0:t.length)&&$a(o)&&Ta(i,o)&&(Ba(t)||za(t))};var Qa=Sa,Ua=Gn,Wa=function(t,e){return null!=t&&Va(t,e,Ia)},qa=Or,La=ka,Ga=Na,Ha=In;var Ja=Un;var Ka=function(t){return function(e){return null==e?void 0:e[t]}},Xa=function(t){return function(e){return Ja(e,t)}},Ya=Or,Za=In;var ti=function(t){var e=Ea(t);return 1==e.length&&e[0][2]?Da(e[0][0],e[0][1]):function(r){return r===t||Ma(r,t,e)}},ei=function(t,e){return qa(t)&&La(e)?Ga(Ha(t),e):function(r){var n=Ua(r,t);return void 0===n&&n===e?Wa(r,t):Qa(e,n,3)}},ri=at,ni=Qt,oi=function(t){return Ya(t)?Ka(Za(t)):Xa(t)};var ai=function(t){return"function"==typeof t?t:null==t?ri:"object"==typeof t?ni(t)?ei(t[0],t[1]):ti(t):oi(t)};var ii=function(t){return function(e,r,n){for(var o=-1,a=Object(e),i=n(e),u=i.length;u--;){var s=i[t?u:++o];if(!1===r(a[s],s,a))break}return e}}(),ui=we;var si=mt;var ci=function(t,e){return function(r,n){if(null==r)return r;if(!si(r))return t(r,n);for(var o=r.length,a=e?o:-1,i=Object(r);(e?a--:++a<o)&&!1!==n(i[a],a,i););return r}}(function(t,e){return t&&ii(t,e,ui)}),li=mt;var fi=or,hi=ai,di=function(t,e){var r=-1,n=li(t)?Array(t.length):[];return ci(t,function(t,o,a){n[++r]=e(t,o,a)}),n},vi=Qt;var pi=u(function(t,e){return(vi(t)?fi:di)(t,hi(e))}),bi=ai,gi=mt,yi=we;var _i=function(t){return function(e,r,n){var o=Object(e);if(!gi(e)){var a=bi(r);e=yi(e),r=function(t){return a(o[t],t,o)}}var i=t(e,r,n);return i>-1?o[a?e[i]:i]:void 0}},mi=Ee,wi=ai,ji=nr,Si=Math.max;var Oi,xi=u(_i(function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=null==r?0:ji(r);return o<0&&(o=Si(n+o,0)),mi(t,wi(e),o)}));class Ri{socket;messageSub;destorySub;get message(){return this.messageSub.asObservable()}constructor(t){this.destorySub=new e,this.messageSub=new e;const{specific:r,id:n}=t.project;this.socket=a(t.ws_url,Ae({autoConnect:!1},r&&void 0!==n?{query:{uuid:n}}:{}))}start(){const t="list",e="cloud",a="channel";r(this.socket,t).pipe(n(1),o(this.destorySub)).subscribe(e=>{this.messageSub.next({event:t,data:e})}),r(this.socket,e).pipe(o(this.destorySub)).subscribe(t=>{this.messageSub.next({event:e,data:t})}),r(this.socket,a).pipe(o(this.destorySub)).subscribe(t=>{this.messageSub.next({event:a,data:t})}),this.socket.connect()}send(t,e){this.socket.emit(t,e)}sendToCloud(t){this.send("cloud",JSON.stringify(t))}onDestory(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect()}}!function(t){t[t.interrupted=0]="interrupted",t[t.pcm=1]="pcm",t[t.cloudSampleRate=2]="cloudSampleRate"}(Oi||(Oi={}));class ki{config;media;chat;destorySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;cloudSampleRate;channelState;get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}set volume(t){this.media.setVolume(t)}get volume(){return this.media.getVolume()}constructor(t,r){this.config=t,this.media=r,this.layoutSub=new e,this.projectsSub=new e,this.destorySub=new e,this.aiiaSubtitleSub=new e,this.userSubtitleSub=new e,this.cloudSampleRate=16e3,this.channelState={proxy:!1,cloud:!1},this.chat=new Ri(t)}start(){this.media.stateObs.pipe(o(this.destorySub)).subscribe(()=>{this.channelCheck()}),this.chat.message.pipe(o(this.destorySub)).subscribe(({event:t,data:e})=>{switch(t){case"cloud":this.cloudToObj(e);break;case"list":{const{id:t,name:r,specific:n}=this.config.project;let o=null;if(n&&void 0!==t)o=t;else{const n=xi(e,e=>e.name===r||e.id===t);n&&(o=n.id)}null!==o?this.chooseProject(o):(this.projectsSub.next(e),gr.info("Please subscribe `projects` and call `chooseProject` method"));break}case"channel":"open"===e&&(this.channelState.proxy=!0,this.channelCheck())}}),this.chat.start()}chooseProject(t){this.chat.send("uuid",t)}cloudToObj(t){try{const e=JSON.parse(t);void 0!==Hn(e,"signal")?this.behavior(e):Ut(e)?pi(e,this.behavior):pi(cr(e),this.behavior)}catch(t){gr.error("message transfer fail",t)}}behavior(t){switch(t.signal){case"layout":this.layoutSub.next(t.content);break;case"audio":if("sampleRate"===t.command)this.cloudSampleRate=t.content;else switch(t.command){case"pcm":{const e=function(t,e,r){if(e===r)return t;const n=r/e,o=Math.ceil(t.length*n),a=new Float32Array(o);for(let e=0;e<o;e++){const r=e/n,o=Math.floor(r),i=r-o,u=t[o],s=t[Math.min(o+1,t.length-1)];a[e]=u+(s-u)*i}return a}(Kn(new Int16Array(t.content)),this.cloudSampleRate,this.media.sampleRate);this.media.addAudioQueue({float32:e}),this.media.playAudio();break}case"interrupted":this.media.stopAudio()}break;case"status":"Connected"===Hn(t,"content")&&(this.channelState.cloud=!0,this.channelCheck());break;case"agent":{const e=Hn(t,"content.function_result.response");e&&this.aiiaSubtitleSub.next(e);break}case"asr":if("ASR"===Hn(t,"content.function_type")){const e=Hn(t,"content.function_result.result");e&&this.userSubtitleSub.next(e)}break;default:gr.debug(t.signal)}}channelCheck(){const{proxy:t,cloud:e}=this.channelState;t&&e&&this.media.state===Ln.allowed?(this.chat.sendToCloud({request:"audio",command:"sampleRate",content:this.media.sampleRate}),this.media.pcm.pipe(o(this.destorySub)).subscribe(t=>{this.chat.sendToCloud({request:"audio",command:"pcm",content:Xn(t)})}),this.media.startRecord(),gr.debug("Channel, Cloud and Media are ready.")):t&&e&&this.media.state!==Ln.allowed&&gr.warn("Media permission didn't get. Please reload page after reset permission or ignore this message.")}onDestory(){this.chat.onDestory(),this.destorySub.next(),this.destorySub.complete()}}function Ci(t){if(Ne){const e=new Me(Ae({},t));_r(e.debug);const r=new to,n=new ki(e,r);return""!==e.worklet_url&&r.init(e.worklet_url),n}throw new Error(me["環境錯誤(browser)"])}export{to as MediaManager,Ci as initSdk};
1
+ import{assign as e,forEach as t,filter as i,some as s,compact as a,map as n,sortBy as o,get as r,find as c,isArray as u,values as h}from"lodash";import d from"moment";import{Subject as l,map as b,takeUntil as p,fromEvent as m,take as f,ReplaySubject as g,BehaviorSubject as S,debounceTime as y}from"rxjs";import{FilesetResolver as C,FaceDetector as w}from"@mediapipe/tasks-vision";import{io as _}from"socket.io-client";var v;!function(e){e["網絡錯誤"]="ERROR CODE: 500",e["環境錯誤(browser)"]="ERROR CODE: 1001",e["Worklet模組載入失敗"]="ERROR CODE: 1002",e["未獲得媒體裝置權限"]="ERROR CODE: 1003",e["實例已摧毀"]="ERROR CODE: 1004",e["環境錯誤(nodejs)"]="ERROR CODE: 2001",e["未提供憑證"]="ERROR CODE: 2002",e["獲取權杖失敗"]="ERROR CODE: 2003",e["沒有可用專案"]="ERROR CODE: 2004",e["重複初始化"]="ERROR CODE: 2005"}(v||(v={}));const x="undefined"!=typeof window;"undefined"!=typeof process&&null!=process.versions&&process.versions.node;class E{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(e,t){const i=t??NaN;if(e){const t=parseInt(e);return isNaN(t)?i:t}return i}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=e({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:e({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}get mediaStream(){return this.config.mediaStream}get chunkTimeInSeconds(){return"number"==typeof this.config.chunkTimeInSeconds&&this.config.chunkTimeInSeconds>0?this.config.chunkTimeInSeconds:1}get llmSampleRate(){return"number"==typeof this.config.llmSampleRate&&this.config.llmSampleRate>0?this.config.llmSampleRate:16e3}get faceDetection(){return e({frame:3,confidence:80},this.config.faceDetection)}get autoClearSubtitle(){const{user:t,aiia:i}=e({},this.config.autoClearSubtitle);let s=3e3,a=3e3;return"number"==typeof t?s=t>=0?t:s:!1===t&&(s=NaN),"number"==typeof i?a=i>=0?i:a:!1===i&&(a=NaN),{userDelayTime:s,aiiaDelayTime:a}}constructor(e){this.config=e}}var R;!function(e){e["通道、雲端服務、麥克風都已就緒"]="CODE: 1000",e["未取得媒體裝置權限,請重新設定或忽略此訊息"]="CODE: 1001",e["請訂閱專案列表"]="CODE: 1002",e["初始化必要依賴"]="CODE: 1010",e["指定依賴已完成"]="CODE: 1011",e["啟動SDK"]="CODE: 1012",e["結束SDK"]="CODE: 1013",e["安全的關閉連線"]="CODE: 2000",e["無副作用的關閉連線"]="CODE: 2001",e["與雲端的服務中斷"]="CODE: 2002",e["沒有授權,請聯繫Graphen"]="CODE: 2003",e["自動重新連線連端服務"]="CODE: 2004",e["未預期的斷線,請聯繫Graphen"]="CODE: 2005",e["開始初始化必要模組"]="CODE: 2010",e["指定模組初始化完成"]="CODE: 2011",e["啟動服務"]="CODE: 2012",e["服務結束"]="CODE: 2013"}(R||(R={}));const D={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},O=[];const k=new Proxy(D,{get(e,i,s){if("string"==typeof i)switch(i){case"debug":case"info":case"error":case"warn":case"fatal":case"code":return(...s)=>{const a=d().format("yyyy-MM-DD[T]HH:mm:ss");t(O,e=>{e.next(i,a,...s)}),e[i](`[Aiia::${i}_${a}_]`,...s)};default:return}},set:(e,t,i,s)=>!0});var N,M;function I(e,t,i){return Math.max(i,Math.min(e,t))}function A(e){const t=new DataView(e.buffer),i=[];for(let s=0;s<e.length;s++){const e=t.getInt16(2*s,!0)/32768;i.push(e)}return new Float32Array(i)}function T(e){const t=new DataView(e.buffer),i=[];for(let s=0;s<e.length;s++){const e=I(32768*t.getFloat32(4*s,!0),32767,-32768);i.push(e)}return i}!function(e){e[e.unknow=0]="unknow",e[e.allowed=1]="allowed",e[e.rejected=2]="rejected"}(N||(N={}));class j{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(100*this.gainNode.gain.value)}constructor(e){this.audioContext=e,this.bufferQueue=[],this.currentNode=null,this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination)}addBuffer(e){this.bufferQueue.push(e)}addBufferByFloat32(e,t=1){const i=e.length,s=this.audioContext.sampleRate,a=this.audioContext.createBuffer(t,i,s),n=e.slice();for(let e=0;e<t;e++)a.copyToChannel(n,e);this.addBuffer(a)}addBufferByInt16(e,t=1){this.addBufferByFloat32(A(e),t)}startSpeech(){null===this.currentNode&&this.continue()}pauseSpeech(){this.audioContext.suspend().catch(e=>{k.error("pause speech fail",e)})}resumeSpeech(){this.audioContext.resume().catch(e=>{k.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(){const e=this.bufferQueue.shift();if(e){this.currentNode=this.audioContext.createBufferSource(),this.currentNode.buffer=e,this.currentNode.connect(this.gainNode);const t=this.continue.bind(this);this.currentNode.onended=t,this.currentNode.start()}else this.clearNode()}}class F{stream;audioContext;type="vad";workletNode;source;isRecording=!1;outputSampleRate;chunkTimeInSeconds;pcmSub;get pcm(){return this.pcmSub.asObservable()}constructor(e,t,i){this.stream=e,this.audioContext=t,this.outputSampleRate=i?.llmSampleRate??16e3,this.chunkTimeInSeconds=i?.chunkTimeInSeconds??1,this.pcmSub=new l}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=>{const{float32:t}=e.data;t&&this.pcmSub.next(new Float32Array(t))},this.isRecording=!0)}stopRecord(){this.isRecording&&(this.workletNode&&(this.workletNode.port.onmessage=null,this.workletNode.disconnect()),this.source&&this.source.disconnect(),this.isRecording=!1)}}class B{type="camera";confidenceScore;aiiaCamera;get detections(){return this.aiiaCamera.detections}get faceResult(){const e=this.confidenceScore;return this.aiiaCamera.detections.pipe(b(t=>function(e,t){const r=i(e,e=>{const i=e.categories[0]?.score??0,a=e.keypoints,n=100*i>=t,o=s(a,e=>"leftEye"===e.label||"rightEye"===e.label);return n&&o});if(0===r.length)return null;const c=a(n(r,e=>{if(void 0!==e.boundingBox){const t=e.boundingBox,i=t.width*t.height,s=e.categories[0]?.score??0;return{...t,area:i,confidenceScore:100*s}}return null}));return o(c,["area","confidenceScore"])[0]??null}(t,e)))}constructor(t,i,s){const{frame:a,confidence:n}=e({frame:3,confidence:80},s);this.confidenceScore=n,this.aiiaCamera=new W,this.aiiaCamera.setAttribute("frequency",`${a}`),this.aiiaCamera.setStream(t),this.aiiaCamera.setFaceDetector(i),document.body.append(this.aiiaCamera)}startCapture(){this.aiiaCamera.startCapture()}stopCapture(){this.aiiaCamera.stopCapture()}onDestroy(){this.aiiaCamera.remove()}}class W extends HTMLElement{static get observedAttributes(){return["debug","frequency"]}_shadow;_containerEl;_styleEl;_videoEl;_isDebug;_debugElements;_analyzeInterval;_frameCount;_loopFrameID;_faceDetector;_detectionsSub;_isReady;get detections(){return this._detectionsSub.asObservable()}constructor(){super(),this._isDebug=!1,this._isReady=!1,this._shadow=this.attachShadow({mode:"open"}),this._containerEl=document.createElement("div"),this._videoEl=document.createElement("video"),this._styleEl=document.createElement("style"),this._debugElements=[],this._loopFrameID=null,this._analyzeInterval=3,this._frameCount=this._analyzeInterval,this._detectionsSub=new l,this.predictWebcam=this.predictWebcam.bind(this),this._settingContainer(),this._settingStyle(),this._settingVideo(),this._containerEl.appendChild(this._videoEl),this._shadow.appendChild(this._styleEl),this._shadow.appendChild(this._containerEl)}connectedCallback(){this.startCapture()}disconnectedCallback(){this.stopCapture()}attributeChangedCallback(e,t,i){switch(e){case"debug":this._isDebug=null!==i&&("true"===i||""===i),this._containerEl.style.visibility=this._isDebug?"visible":"hidden";break;case"frequency":{const e=Number(i);!isNaN(e)&&e>0&&(this._analyzeInterval=e,this._frameCount=this._analyzeInterval)}}}setStream(e){this._videoEl.srcObject=e,this._videoEl.onloadedmetadata=()=>{this._isReady=!0}}setFaceDetector(e){this._faceDetector=e}_settingStyle(){this._styleEl.textContent="\n .aiia_container {\n visibility: hidden;\n position: fixed;\n top: 0;\n left: 0;\n }\n .aiia_container .highlighter {\n background: rgba(0, 255, 0, 0.25);\n border: 1px dashed #fff;\n z-index: 1;\n position: absolute;\n }\n .aiia_container .confidence {\n position: absolute;\n padding-bottom: 5px;\n padding-top: 5px;\n background-color: #007f8b;\n color: #fff;\n border: 1px dashed rgba(255, 255, 255, 0.7);\n z-index: 2;\n font-size: 12px;\n margin: 0;\n }\n "}_settingContainer(){this._containerEl.classList.add("aiia_container")}_settingVideo(){this._videoEl.autoplay=!0,this._videoEl.playsInline=!0,this._videoEl.muted=!0}getVideo(){return this._videoEl}startCapture(){this._videoEl.play(),this._loopFrameID=window.requestAnimationFrame(this.predictWebcam)}stopCapture(){null!==this._loopFrameID&&(window.cancelAnimationFrame(this._loopFrameID),this._loopFrameID=null),this._videoEl.pause()}async predictWebcam(){if(this._loopFrameID=window.requestAnimationFrame(this.predictWebcam),void 0!==this._faceDetector&&this._isReady){if(this._frameCount===this._analyzeInterval){const e=this._faceDetector.detectForVideo(this._videoEl,performance.now()).detections;this._isDebug&&this._drawRect(e),this._detectionsSub.next(e),this._frameCount=0}this._frameCount++}}_drawRect(e){t(this._debugElements,e=>{e.style.display="none"}),t(e,(e,t)=>{const{categories:i,boundingBox:s}=e;if(s){let e=this._debugElements[2*t],a=this._debugElements[2*t+1];e&&a||(e=document.createElement("div"),e.classList.add("highlighter"),a=document.createElement("p"),a.classList.add("confidence"),this._containerEl.append(a,e),this._debugElements.push(e,a)),e.style.display="block",a.style.display="block";const n=100*i[0].score;a.innerText="Confidence: "+Math.round(n)+"% .",a.style.right=this._videoEl.offsetWidth-s.width-s.originX+"px",a.style.top=s.originY-30+"px",a.style.width=s.width-10+"px",e.style.right=this._videoEl.offsetWidth-s.width-s.originX+"px",e.style.top=`${s.originY}px`,e.style.width=s.width-10+"px",e.style.height=`${s.height}px`}});for(let t=2*e.length;t<this._debugElements.length;t++)this._debugElements[t].style.display="none"}destroy(){this._detectionsSub.complete(),this.remove()}}customElements.define("aiia-camera",W),function(e){e[e.padding=0]="padding",e[e.rejected=1]="rejected",e[e.loadfail=2]="loadfail",e[e.allowed=3]="allowed"}(M||(M={}));class V{stream;_state;stateSub;audioCtx;audioManager;vadManager;camManager;destory;pcmSub;faceResultSub;get sampleRate(){return this.audioCtx?this.audioCtx.sampleRate:16e3}get pcm(){return this.pcmSub.asObservable()}get faceResult(){return this.faceResultSub.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()}constructor(e){this.stream=e,this.stateSub=new l,this.pcmSub=new l,this.destory=new l,this.faceResultSub=new l,this.state=M.padding}async init(e,t){const i=this.stream??await async function(e){try{return await navigator.mediaDevices.getUserMedia(e)}catch(e){return null}}({audio:{echoCancellation:!0,noiseSuppression:!0},video:!0});if(null===i)throw this.state=M.rejected,new Error(v["未獲得媒體裝置權限"]);this.stream=i,this.audioCtx=new AudioContext;try{await this.audioCtx.audioWorklet.addModule(e)}catch(e){throw k.fatal(e),this.state=M.loadfail,new Error(v["Worklet模組載入失敗"])}this.state=M.allowed;const s=await async function(){const e=await C.forVisionTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm");return await w.createFromOptions(e,{baseOptions:{modelAssetPath:"https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite",delegate:"GPU"},runningMode:"VIDEO"})}();this.audioManager=new j(this.audioCtx),this.vadManager=new F(i,this.audioCtx,t),this.vadManager.pcm.pipe(p(this.destory)).subscribe(e=>{this.pcmSub.next(e)}),this.camManager=new B(i,s,t?.faceDetection),this.camManager.faceResult.pipe(p(this.destory)).subscribe(e=>{this.faceResultSub.next(e)})}addAudioQueue(e){const t=r(e,"buffer",void 0),i=r(e,"float32",void 0),s=r(e,"int16",void 0),a=r(e,"numberOfChannels",void 0);t?this.audioManager?.addBuffer(t):i?this.audioManager?.addBufferByFloat32(i,a):s&&this.audioManager?.addBufferByInt16(s,a)}playAudio(){this.audioManager?.startSpeech()}stopAudio(){this.audioManager?.stopSpeech()}startRecord(){this.vadManager?.startRecord()}stopRecord(){this.vadManager?.stopRecord()}setVolume(e){this.audioManager&&(this.audioManager.volume=e)}getVolume(){return this.audioManager?this.audioManager.volume:0}startCapture(){this.camManager?.startCapture()}stopCapture(){this.camManager?.stopCapture()}onDestroy(){this.camManager?.onDestroy(),this.audioCtx?.close(),this.destory.next(),this.destory.complete()}}class z{socket;messageSub;destorySub;get message(){return this.messageSub.asObservable()}constructor(t){this.destorySub=new l,this.messageSub=new l;const{specific:i,id:s}=t.project;this.socket=_(t.ws_url,e({autoConnect:!1},i&&void 0!==s?{query:{uuid:s}}:{}))}start(){const e="list",t="cloud",i="channel";m(this.socket,e).pipe(f(1),p(this.destorySub)).subscribe(t=>{this.messageSub.next({event:e,data:t})}),m(this.socket,t).pipe(p(this.destorySub)).subscribe(e=>{this.messageSub.next({event:t,data:e})}),m(this.socket,i).pipe(p(this.destorySub)).subscribe(e=>{this.messageSub.next({event:i,data:e})}),this.socket.connect()}send(e,t){this.socket.emit(e,t)}sendToCloud(e){this.send("cloud",JSON.stringify(e))}onDestroy(){this.destorySub.next(),this.destorySub.complete(),this.messageSub.complete(),this.socket.disconnect()}}class q{config;media;chat;destorySub;projectsSub;layoutSub;aiiaSubtitleSub;userSubtitleSub;sampleRateOfWhisper;channelState;stateSub;isMuteAiia;aiiaSubtitleClearSub;userSubtitleClearSub;get state(){return this.stateSub.asObservable()}get layout(){return this.layoutSub.asObservable()}get projects(){return this.projectsSub.asObservable()}get aiiaSubtitle(){return this.aiiaSubtitleSub.asObservable()}get userSubtitle(){return this.userSubtitleSub.asObservable()}set volume(e){this.media.setVolume(e)}get volume(){return this.media.getVolume()}constructor(e,t){this.config=e,this.media=t,this.layoutSub=new l,this.projectsSub=new g(1),this.destorySub=new l,this.aiiaSubtitleSub=new l,this.userSubtitleSub=new l,this.aiiaSubtitleClearSub=new l,this.userSubtitleClearSub=new l,this.stateSub=new S("NotStart"),this.sampleRateOfWhisper={input:e.llmSampleRate,output:16e3},this.channelState={proxy:!1,cloud:!1},this.isMuteAiia=!1,this.chat=new z(e),k.code(R["指定依賴已完成"],"chat"),this.close=this.onDestroy,this.behavior=this.behavior.bind(this),this.cloudToObj=this.cloudToObj.bind(this);const{userDelayTime:i,aiiaDelayTime:s}=e.autoClearSubtitle;isNaN(s)||this.aiiaSubtitleClearSub.pipe(y(s),p(this.destorySub)).subscribe(()=>{this.aiiaSubtitleSub.next("")}),isNaN(i)||this.userSubtitleClearSub.pipe(y(i),p(this.destorySub)).subscribe(()=>{this.userSubtitleSub.next("")})}start(){this.media.stateObs.pipe(p(this.destorySub)).subscribe(()=>{this.channelCheck()}),this.chat.message.pipe(p(this.destorySub)).subscribe(({event:e,data:t})=>{switch(e){case"cloud":this.cloudToObj(t);break;case"list":{const{id:e,name:i,specific:s}=this.config.project;let a=null;if(s&&void 0!==e)a=e;else{const s=c(t,t=>t.name===i||t.id===e);s&&(a=s.id)}null!==a?this.chooseProject(a):(this.projectsSub.next(t),this.stateSub.next("WattingProjectID"),k.code(R["請訂閱專案列表"]));break}case"channel":switch(t){case"open":this.channelState.proxy=!0,this.channelCheck();break;case"close":this.channelState.proxy=!1,this.media.stopRecord(),this.stateSub.next("CloseService");break;case"no_permissions":this.channelState.proxy=!1,this.stateSub.next("NoPermissions");break;case"reconnect":this.channelState.proxy=!1,this.stateSub.next("ReconnectingCloud")}}}),this.chat.start(),this.stateSub.next("ConnectingCloud"),k.code(R["啟動SDK"])}close;resetSession(){this.chat.sendToCloud({request:"reset"}),this.aiiaSubtitleSub.next(""),this.userSubtitleSub.next(""),this.media.stopAudio(),this.layoutSub.next({type:"resetLayout"})}chooseProject(e){this.chat.send("uuid",e),this.stateSub.next("ConnectingCloud")}mute(){this.isMuteAiia=!0,this.media.stopAudio(),this.media.stopRecord()}unmute(){this.isMuteAiia=!1,this.media.startRecord()}cloudToObj(e){try{const t=JSON.parse(e);void 0!==r(t,"signal")?this.behavior(t):u(t)?n(t,this.behavior):n(h(t),this.behavior)}catch(e){k.error("message transfer fail",e)}}behavior(e){switch(e.signal){case"layout":this.layoutSub.next(e.content);break;case"audio":if("sampleRate"===e.command)this.sampleRateOfWhisper.output=e.content;else switch(e.command){case"pcm":if(!this.isMuteAiia){const t=function(e,t,i){if(t===i)return e;const s=i/t,a=Math.ceil(e.length*s),n=new Float32Array(a);for(let t=0;t<a;t++){const i=t/s,a=Math.floor(i),o=i-a,r=e[a],c=e[Math.min(a+1,e.length-1)];n[t]=r+(c-r)*o}return n}(A(new Int16Array(e.content)),this.sampleRateOfWhisper.output,this.media.sampleRate);this.media.addAudioQueue({float32:t}),this.media.playAudio()}break;case"interrupted":this.media.stopAudio(),this.aiiaSubtitleSub.next("")}break;case"status":"Connected"===r(e,"content")&&(this.channelState.cloud=!0,this.channelCheck(),this.layoutSub.next({type:"resetLayout"}));break;case"agent":if(!this.isMuteAiia){const t=r(e,"content.function_result.response");void 0!==t&&(this.aiiaSubtitleSub.next(t),this.aiiaSubtitleClearSub.next())}break;case"asr":if(!this.isMuteAiia&&"ASR"===r(e,"content.function_type")){const t=r(e,"content.function_result.result");void 0!==t&&(this.userSubtitleSub.next(t),this.userSubtitleClearSub.next())}break;default:k.debug(e.signal)}}channelCheck(){const{proxy:e,cloud:t}=this.channelState;e&&t&&this.media.state===M.allowed?(this.chat.sendToCloud({request:"audio",command:"sampleRate",content:this.sampleRateOfWhisper.input}),this.media.pcm.pipe(p(this.destorySub)).subscribe(e=>{this.chat.sendToCloud({request:"audio",command:"pcm",content:T(e)})}),this.media.faceResult.pipe(p(this.destorySub)).subscribe(e=>{this.chat.send("face",e)}),this.media.startRecord(),this.media.startCapture(),this.stateSub.next("InService"),k.code(R["通道、雲端服務、麥克風都已就緒"])):e&&t&&this.media.state!==M.allowed&&(this.stateSub.next("InServiceNoMedia"),k.code(R["未取得媒體裝置權限,請重新設定或忽略此訊息"]))}onDestroy(){this.chat.onDestroy(),this.media.onDestroy(),this.destorySub.next(),this.destorySub.complete(),this.stateSub.next("Destroy"),this.stateSub.complete(),k.code(R["結束SDK"])}}function P(t){if(x){!function(e){const{info:t,error:i,warn:s,debug:a,fatal:n,code:o}=function(e){if(void 0===e||"all"===e)return{code:!0,error:!0,warn:!0,info:!0,debug:!0,fatal:!0};if("none"===e)return{error:!1,code:!1,warn:!1,info:!1,debug:!1,fatal:!1};if("boolean"==typeof e)return{code:e,error:e,warn:e,info:e,debug:e,fatal:e};{const t=new Set(e);return{code:t.has("code"),debug:t.has("debug"),fatal:t.has("fatal"),error:t.has("error"),warn:t.has("warn"),info:t.has("info")}}}(e);o||(D.code=()=>{}),a||(D.debug=()=>{}),t||(D.info=()=>{}),s||(D.warn=()=>{}),i||(D.error=()=>{}),n||(D.fatal=()=>{})}(r(t,"debug",!0)),k.code(R["初始化必要依賴"]);const i=new E(e({},t));k.code(R["指定依賴已完成"],"config");const s=new V(i.mediaStream);k.code(R["指定依賴已完成"],"config");const a=new q(i,s);return k.code(R["指定依賴已完成"],"sdk"),""!==i.worklet_url&&s.init(i.worklet_url,i),a}throw new Error(v["環境錯誤(browser)"])}export{P as initSdk};
package/dist/node.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var t=require("moment"),e=require("fs"),r=require("os"),n=require("path"),o=require("rxjs"),i=require("axios"),a=require("socket.io"),s=require("ws"),c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function u(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var f="object"==typeof c&&c&&c.Object===Object&&c,l=f,h="object"==typeof self&&self&&self.Object===Object&&self,v=l||h||Function("return this")(),p=v.Symbol,b=p,y=Object.prototype,_=y.hasOwnProperty,d=y.toString,g=b?b.toStringTag:void 0;var j=function(t){var e=_.call(t,g),r=t[g];try{t[g]=void 0;var n=!0}catch(t){}var o=d.call(t);return n&&(e?t[g]=r:delete t[g]),o},O=Object.prototype.toString;var S=j,w=function(t){return O.call(t)},A=p?p.toStringTag:void 0;var E=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":A&&A in Object(t)?S(t):w(t)};var m=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},N=E,D=m;var R,k=function(t){if(!D(t))return!1;var e=N(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},M=v["__core-js_shared__"],I=(R=/[^.]+$/.exec(M&&M.keys&&M.keys.IE_PROTO||""))?"Symbol(src)_1."+R:"";var L=function(t){return!!I&&I in t},P=Function.prototype.toString;var C=function(t){if(null!=t){try{return P.call(t)}catch(t){}try{return t+""}catch(t){}}return""},T=k,U=L,x=m,F=C,z=/^\[object .+?Constructor\]$/,W=Function.prototype,$=Object.prototype,B=W.toString,G=$.hasOwnProperty,V=RegExp("^"+B.call(G).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var X=function(t){return!(!x(t)||U(t))&&(T(t)?V:z).test(F(t))},Y=function(t,e){return null==t?void 0:t[e]};var q=function(t,e){var r=Y(t,e);return X(r)?r:void 0},H=q,Q=function(){try{var t=H(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),K=Q;var J=function(t,e,r){"__proto__"==e&&K?K(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var Z=function(t,e){return t===e||t!=t&&e!=e},tt=J,et=Z,rt=Object.prototype.hasOwnProperty;var nt=function(t,e,r){var n=t[e];rt.call(t,e)&&et(n,r)&&(void 0!==r||e in t)||tt(t,e,r)},ot=nt,it=J;var at=function(t,e,r,n){var o=!r;r||(r={});for(var i=-1,a=e.length;++i<a;){var s=e[i],c=n?n(r[s],t[s],s,r,t):void 0;void 0===c&&(c=t[s]),o?it(r,s,c):ot(r,s,c)}return r};var st=function(t){return t};var ct=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)},ut=Math.max;var ft=function(t,e,r){return e=ut(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,i=ut(n.length-e,0),a=Array(i);++o<i;)a[o]=n[e+o];o=-1;for(var s=Array(e+1);++o<e;)s[o]=n[o];return s[e]=r(a),ct(t,this,s)}};var lt=function(t){return function(){return t}},ht=Q,vt=ht?function(t,e){return ht(t,"toString",{configurable:!0,enumerable:!1,value:lt(e),writable:!0})}:st,pt=Date.now;var bt=function(t){var e=0,r=0;return function(){var n=pt(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(vt),yt=st,_t=ft,dt=bt;var gt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},jt=k,Ot=gt;var St=function(t){return null!=t&&Ot(t.length)&&!jt(t)},wt=/^(?:0|[1-9]\d*)$/;var At=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&wt.test(t))&&t>-1&&t%1==0&&t<e},Et=Z,mt=St,Nt=At,Dt=m;var Rt=function(t,e){return dt(_t(t,e,yt),t+"")},kt=function(t,e,r){if(!Dt(r))return!1;var n=typeof e;return!!("number"==n?mt(r)&&Nt(e,r.length):"string"==n&&e in r)&&Et(r[e],t)};var Mt=function(t){return Rt(function(e,r){var n=-1,o=r.length,i=o>1?r[o-1]:void 0,a=o>2?r[2]:void 0;for(i=t.length>3&&"function"==typeof i?(o--,i):void 0,a&&kt(r[0],r[1],a)&&(i=o<3?void 0:i,o=1),e=Object(e);++n<o;){var s=r[n];s&&t(e,s,n,i)}return e})},It=Object.prototype;var Lt=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||It)};var Pt=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};var Ct=function(t){return null!=t&&"object"==typeof t},Tt=E,Ut=Ct;var xt=function(t){return Ut(t)&&"[object Arguments]"==Tt(t)},Ft=Ct,zt=Object.prototype,Wt=zt.hasOwnProperty,$t=zt.propertyIsEnumerable,Bt=xt(function(){return arguments}())?xt:function(t){return Ft(t)&&Wt.call(t,"callee")&&!$t.call(t,"callee")},Gt=Array.isArray,Vt=u(Gt),Xt={exports:{}};var Yt=function(){return!1};!function(t,e){var r=v,n=Yt,o=e&&!e.nodeType&&e,i=o&&t&&!t.nodeType&&t,a=i&&i.exports===o?r.Buffer:void 0,s=(a?a.isBuffer:void 0)||n;t.exports=s}(Xt,Xt.exports);var qt=Xt.exports,Ht=E,Qt=gt,Kt=Ct,Jt={};Jt["[object Float32Array]"]=Jt["[object Float64Array]"]=Jt["[object Int8Array]"]=Jt["[object Int16Array]"]=Jt["[object Int32Array]"]=Jt["[object Uint8Array]"]=Jt["[object Uint8ClampedArray]"]=Jt["[object Uint16Array]"]=Jt["[object Uint32Array]"]=!0,Jt["[object Arguments]"]=Jt["[object Array]"]=Jt["[object ArrayBuffer]"]=Jt["[object Boolean]"]=Jt["[object DataView]"]=Jt["[object Date]"]=Jt["[object Error]"]=Jt["[object Function]"]=Jt["[object Map]"]=Jt["[object Number]"]=Jt["[object Object]"]=Jt["[object RegExp]"]=Jt["[object Set]"]=Jt["[object String]"]=Jt["[object WeakMap]"]=!1;var Zt=function(t){return Kt(t)&&Qt(t.length)&&!!Jt[Ht(t)]};var te=function(t){return function(e){return t(e)}},ee={exports:{}};!function(t,e){var r=f,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,i=o&&o.exports===n&&r.process,a=function(){try{var t=o&&o.require&&o.require("util").types;return t||i&&i.binding&&i.binding("util")}catch(t){}}();t.exports=a}(ee,ee.exports);var re=ee.exports,ne=Zt,oe=te,ie=re&&re.isTypedArray,ae=ie?oe(ie):ne,se=Pt,ce=Bt,ue=Gt,fe=qt,le=At,he=ae,ve=Object.prototype.hasOwnProperty;var pe=function(t,e){var r=ue(t),n=!r&&ce(t),o=!r&&!n&&fe(t),i=!r&&!n&&!o&&he(t),a=r||n||o||i,s=a?se(t.length,String):[],c=s.length;for(var u in t)!e&&!ve.call(t,u)||a&&("length"==u||o&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||le(u,c))||s.push(u);return s};var be=function(t,e){return function(r){return t(e(r))}},ye=be(Object.keys,Object),_e=Lt,de=ye,ge=Object.prototype.hasOwnProperty;var je=pe,Oe=function(t){if(!_e(t))return de(t);var e=[];for(var r in Object(t))ge.call(t,r)&&"constructor"!=r&&e.push(r);return e},Se=St;var we=function(t){return Se(t)?je(t):Oe(t)},Ae=nt,Ee=at,me=Mt,Ne=St,De=Lt,Re=we,ke=Object.prototype.hasOwnProperty,Me=u(me(function(t,e){if(De(e)||Ne(e))Ee(e,Re(e),t);else for(var r in e)ke.call(e,r)&&Ae(t,r,e[r])})),Ie=E,Le=Ct;var Pe=function(t){return"symbol"==typeof t||Le(t)&&"[object Symbol]"==Ie(t)},Ce=Gt,Te=Pe,Ue=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xe=/^\w*$/;var Fe=function(t,e){if(Ce(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!Te(t))||(xe.test(t)||!Ue.test(t)||null!=e&&t in Object(e))},ze=q(Object,"create"),We=ze;var $e=function(){this.__data__=We?We(null):{},this.size=0};var Be=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ge=ze,Ve=Object.prototype.hasOwnProperty;var Xe=function(t){var e=this.__data__;if(Ge){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return Ve.call(e,t)?e[t]:void 0},Ye=ze,qe=Object.prototype.hasOwnProperty;var He=ze;var Qe=$e,Ke=Be,Je=Xe,Ze=function(t){var e=this.__data__;return Ye?void 0!==e[t]:qe.call(e,t)},tr=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=He&&void 0===e?"__lodash_hash_undefined__":e,this};function er(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}er.prototype.clear=Qe,er.prototype.delete=Ke,er.prototype.get=Je,er.prototype.has=Ze,er.prototype.set=tr;var rr=er;var nr=function(){this.__data__=[],this.size=0},or=Z;var ir=function(t,e){for(var r=t.length;r--;)if(or(t[r][0],e))return r;return-1},ar=ir,sr=Array.prototype.splice;var cr=ir;var ur=ir;var fr=ir;var lr=nr,hr=function(t){var e=this.__data__,r=ar(e,t);return!(r<0)&&(r==e.length-1?e.pop():sr.call(e,r,1),--this.size,!0)},vr=function(t){var e=this.__data__,r=cr(e,t);return r<0?void 0:e[r][1]},pr=function(t){return ur(this.__data__,t)>-1},br=function(t,e){var r=this.__data__,n=fr(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function yr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}yr.prototype.clear=lr,yr.prototype.delete=hr,yr.prototype.get=vr,yr.prototype.has=pr,yr.prototype.set=br;var _r=yr,dr=q(v,"Map"),gr=rr,jr=_r,Or=dr;var Sr=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var wr=function(t,e){var r=t.__data__;return Sr(e)?r["string"==typeof e?"string":"hash"]:r.map},Ar=wr;var Er=wr;var mr=wr;var Nr=wr;var Dr=function(){this.size=0,this.__data__={hash:new gr,map:new(Or||jr),string:new gr}},Rr=function(t){var e=Ar(this,t).delete(t);return this.size-=e?1:0,e},kr=function(t){return Er(this,t).get(t)},Mr=function(t){return mr(this,t).has(t)},Ir=function(t,e){var r=Nr(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Lr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Lr.prototype.clear=Dr,Lr.prototype.delete=Rr,Lr.prototype.get=kr,Lr.prototype.has=Mr,Lr.prototype.set=Ir;var Pr=Lr,Cr=Pr;function Tr(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=t.apply(this,n);return r.cache=i.set(o,a)||i,a};return r.cache=new(Tr.Cache||Cr),r}Tr.Cache=Cr;var Ur=Tr;var xr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Fr=/\\(\\)?/g,zr=function(t){var e=Ur(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(xr,function(t,r,n,o){e.push(n?o.replace(Fr,"$1"):r||t)}),e});var Wr=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o},$r=Wr,Br=Gt,Gr=Pe,Vr=p?p.prototype:void 0,Xr=Vr?Vr.toString:void 0;var Yr=function t(e){if("string"==typeof e)return e;if(Br(e))return $r(e,t)+"";if(Gr(e))return Xr?Xr.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r},qr=Yr;var Hr=Gt,Qr=Fe,Kr=zr,Jr=function(t){return null==t?"":qr(t)};var Zr=function(t,e){return Hr(t)?t:Qr(t,e)?[t]:Kr(Jr(t))},tn=Pe;var en=function(t){if("string"==typeof t||tn(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e},rn=Zr,nn=en;var on=function(t,e){for(var r=0,n=(e=rn(e,t)).length;null!=t&&r<n;)t=t[nn(e[r++])];return r&&r==n?t:void 0},an=on;var sn,cn=function(t,e,r){var n=null==t?void 0:an(t,e);return void 0===n?r:n},un=u(cn);!function(t){t["網絡錯誤"]="ERROR CODE: 500",t["環境錯誤(browser)"]="ERROR CODE: 1001",t["Worklet模組載入失敗"]="ERROR CODE: 1002",t["未獲得媒體裝置權限"]="ERROR CODE: 1003",t["實例已摧毀"]="ERROR CODE: 1004",t["環境錯誤(nodejs)"]="ERROR CODE: 2001",t["未提供憑證"]="ERROR CODE: 2002",t["獲取權杖失敗"]="ERROR CODE: 2003",t["沒有可用專案"]="ERROR CODE: 2004",t["重複初始化"]="ERROR CODE: 205"}(sn||(sn={}));const fn="access_token",ln="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node;class hn{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(t,e){const r=e??NaN;if(t){const e=parseInt(t);return isNaN(e)?r:e}return r}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=Me({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:Me({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}constructor(t){this.config=t}}var vn=function(t,e,r,n){for(var o=t.length,i=r+(n?1:-1);n?i--:++i<o;)if(e(t[i],i,t))return i;return-1},pn=function(t){return t!=t},bn=function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1};var yn=E,_n=Gt,dn=Ct;var gn=/\s/;var jn=function(t){for(var e=t.length;e--&&gn.test(t.charAt(e)););return e},On=/^\s+/;var Sn=function(t){return t?t.slice(0,jn(t)+1).replace(On,""):t},wn=m,An=Pe,En=/^[-+]0x[0-9a-f]+$/i,mn=/^0b[01]+$/i,Nn=/^0o[0-7]+$/i,Dn=parseInt;var Rn=function(t){if("number"==typeof t)return t;if(An(t))return NaN;if(wn(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=wn(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Sn(t);var r=mn.test(t);return r||Nn.test(t)?Dn(t.slice(2),r?2:8):En.test(t)?NaN:+t},kn=1/0;var Mn=function(t){return t?(t=Rn(t))===kn||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0};var In=Wr;var Ln=function(t,e){return In(e,function(e){return t[e]})},Pn=we;var Cn=function(t,e,r){return e==e?bn(t,e,r):vn(t,pn,r)},Tn=St,Un=function(t){return"string"==typeof t||!_n(t)&&dn(t)&&"[object String]"==yn(t)},xn=function(t){var e=Mn(t),r=e%1;return e==e?r?e-r:e:0},Fn=function(t){return null==t?[]:Ln(t,Pn(t))},zn=Math.max;var Wn=u(function(t,e,r,n){t=Tn(t)?t:Fn(t),r=r&&!n?xn(r):0;var o=t.length;return r<0&&(r=zn(o+r,0)),Un(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&Cn(t,e,r)>-1});const $n={debug:()=>{},info:()=>{},error:()=>{},warn:()=>{},fatal:()=>{}};function Bn(){return t().format("yyyy-MM-DD[T]HH:mm:ss")}function Gn(t){const{info:e,error:r,warn:n,debug:o,fatal:i}=function(t){return void 0===t||"all"===t?{error:!0,warn:!0,info:!0,debug:!0,fatal:!0}:"none"===t?{error:!1,warn:!1,info:!1,debug:!1,fatal:!1}:"boolean"==typeof t?{error:t,warn:t,info:t,debug:t,fatal:t}:{debug:Wn(t,"debug"),fatal:Wn(t,"fatal"),error:Wn(t,"error"),warn:Wn(t,"warn"),info:Wn(t,"info")}}(t);o&&($n.debug=(...t)=>{const e=Bn();console.log(`[Aiia::debug_${e}_]`,...t)}),e&&($n.info=(...t)=>{const e=Bn();console.log(`[Aiia::info_${e}_]`,...t)}),n&&($n.warn=(...t)=>{const e=Bn();console.warn(`[Aiia::warn_${e}_]`,...t)}),r&&($n.error=(...t)=>{const e=Bn();console.error(`[Aiia::error_${e}_]`,...t)}),i&&($n.fatal=(...t)=>{const e=Bn();console.error(`[Aiia::fatal_${e}_]`,...t)})}var Vn=_r;var Xn=_r,Yn=dr,qn=Pr;var Hn=_r,Qn=function(){this.__data__=new Vn,this.size=0},Kn=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Jn=function(t){return this.__data__.get(t)},Zn=function(t){return this.__data__.has(t)},to=function(t,e){var r=this.__data__;if(r instanceof Xn){var n=r.__data__;if(!Yn||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new qn(n)}return r.set(t,e),this.size=r.size,this};function eo(t){var e=this.__data__=new Hn(t);this.size=e.size}eo.prototype.clear=Qn,eo.prototype.delete=Kn,eo.prototype.get=Jn,eo.prototype.has=Zn,eo.prototype.set=to;var ro=eo;var no=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t},oo=at,io=we;var ao=function(t,e){return t&&oo(e,io(e),t)};var so=m,co=Lt,uo=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e},fo=Object.prototype.hasOwnProperty;var lo=pe,ho=function(t){if(!so(t))return uo(t);var e=co(t),r=[];for(var n in t)("constructor"!=n||!e&&fo.call(t,n))&&r.push(n);return r},vo=St;var po=function(t){return vo(t)?lo(t,!0):ho(t)},bo=at,yo=po;var _o=function(t,e){return t&&bo(e,yo(e),t)},go={exports:{}};!function(t,e){var r=v,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,i=o&&o.exports===n?r.Buffer:void 0,a=i?i.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(go,go.exports);var jo=go.exports;var Oo=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e};var So=function(){return[]},wo=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,i=[];++r<n;){var a=t[r];e(a,r,t)&&(i[o++]=a)}return i},Ao=So,Eo=Object.prototype.propertyIsEnumerable,mo=Object.getOwnPropertySymbols,No=mo?function(t){return null==t?[]:(t=Object(t),wo(mo(t),function(e){return Eo.call(t,e)}))}:Ao,Do=at,Ro=No;var ko=function(t,e){return Do(t,Ro(t),e)};var Mo=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t},Io=be(Object.getPrototypeOf,Object),Lo=Mo,Po=Io,Co=No,To=So,Uo=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)Lo(e,Co(t)),t=Po(t);return e}:To,xo=at,Fo=Uo;var zo=function(t,e){return xo(t,Fo(t),e)},Wo=Mo,$o=Gt;var Bo=function(t,e,r){var n=e(t);return $o(t)?n:Wo(n,r(t))},Go=Bo,Vo=No,Xo=we;var Yo=function(t){return Go(t,Xo,Vo)},qo=Bo,Ho=Uo,Qo=po;var Ko=function(t){return qo(t,Qo,Ho)},Jo=q(v,"DataView"),Zo=dr,ti=q(v,"Promise"),ei=q(v,"Set"),ri=q(v,"WeakMap"),ni=E,oi=C,ii="[object Map]",ai="[object Promise]",si="[object Set]",ci="[object WeakMap]",ui="[object DataView]",fi=oi(Jo),li=oi(Zo),hi=oi(ti),vi=oi(ei),pi=oi(ri),bi=ni;(Jo&&bi(new Jo(new ArrayBuffer(1)))!=ui||Zo&&bi(new Zo)!=ii||ti&&bi(ti.resolve())!=ai||ei&&bi(new ei)!=si||ri&&bi(new ri)!=ci)&&(bi=function(t){var e=ni(t),r="[object Object]"==e?t.constructor:void 0,n=r?oi(r):"";if(n)switch(n){case fi:return ui;case li:return ii;case hi:return ai;case vi:return si;case pi:return ci}return e});var yi=bi,_i=Object.prototype.hasOwnProperty;var di=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&_i.call(t,"index")&&(r.index=t.index,r.input=t.input),r},gi=v.Uint8Array,ji=gi;var Oi=function(t){var e=new t.constructor(t.byteLength);return new ji(e).set(new ji(t)),e},Si=Oi;var wi=function(t,e){var r=e?Si(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)},Ai=/\w*$/;var Ei=function(t){var e=new t.constructor(t.source,Ai.exec(t));return e.lastIndex=t.lastIndex,e},mi=p?p.prototype:void 0,Ni=mi?mi.valueOf:void 0;var Di=Oi;var Ri=Oi,ki=wi,Mi=Ei,Ii=function(t){return Ni?Object(Ni.call(t)):{}},Li=function(t,e){var r=e?Di(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)};var Pi=function(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return Ri(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return ki(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Li(t,r);case"[object Map]":case"[object Set]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return Mi(t);case"[object Symbol]":return Ii(t)}},Ci=m,Ti=Object.create,Ui=function(){function t(){}return function(e){if(!Ci(e))return{};if(Ti)return Ti(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),xi=Io,Fi=Lt;var zi=function(t){return"function"!=typeof t.constructor||Fi(t)?{}:Ui(xi(t))},Wi=yi,$i=Ct;var Bi=function(t){return $i(t)&&"[object Map]"==Wi(t)},Gi=te,Vi=re&&re.isMap,Xi=Vi?Gi(Vi):Bi,Yi=yi,qi=Ct;var Hi=function(t){return qi(t)&&"[object Set]"==Yi(t)},Qi=te,Ki=re&&re.isSet,Ji=Ki?Qi(Ki):Hi,Zi=ro,ta=no,ea=nt,ra=ao,na=_o,oa=jo,ia=Oo,aa=ko,sa=zo,ca=Yo,ua=Ko,fa=yi,la=di,ha=Pi,va=zi,pa=Gt,ba=qt,ya=Xi,_a=m,da=Ji,ga=we,ja=po,Oa="[object Arguments]",Sa="[object Function]",wa="[object Object]",Aa={};Aa[Oa]=Aa["[object Array]"]=Aa["[object ArrayBuffer]"]=Aa["[object DataView]"]=Aa["[object Boolean]"]=Aa["[object Date]"]=Aa["[object Float32Array]"]=Aa["[object Float64Array]"]=Aa["[object Int8Array]"]=Aa["[object Int16Array]"]=Aa["[object Int32Array]"]=Aa["[object Map]"]=Aa["[object Number]"]=Aa[wa]=Aa["[object RegExp]"]=Aa["[object Set]"]=Aa["[object String]"]=Aa["[object Symbol]"]=Aa["[object Uint8Array]"]=Aa["[object Uint8ClampedArray]"]=Aa["[object Uint16Array]"]=Aa["[object Uint32Array]"]=!0,Aa["[object Error]"]=Aa[Sa]=Aa["[object WeakMap]"]=!1;var Ea=function t(e,r,n,o,i,a){var s,c=1&r,u=2&r,f=4&r;if(n&&(s=i?n(e,o,i,a):n(e)),void 0!==s)return s;if(!_a(e))return e;var l=pa(e);if(l){if(s=la(e),!c)return ia(e,s)}else{var h=fa(e),v=h==Sa||"[object GeneratorFunction]"==h;if(ba(e))return oa(e,c);if(h==wa||h==Oa||v&&!i){if(s=u||v?{}:va(e),!c)return u?sa(e,na(s,e)):aa(e,ra(s,e))}else{if(!Aa[h])return i?e:{};s=ha(e,h,c)}}a||(a=new Zi);var p=a.get(e);if(p)return p;a.set(e,s),da(e)?e.forEach(function(o){s.add(t(o,r,n,o,e,a))}):ya(e)&&e.forEach(function(o,i){s.set(i,t(o,r,n,i,e,a))});var b=l?void 0:(f?u?ua:ca:u?ja:ga)(e);return ta(b||e,function(o,i){b&&(o=e[i=o]),ea(s,i,t(o,r,n,i,e,a))}),s};var ma=on,Na=function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var i=Array(o);++n<o;)i[n]=t[n+e];return i};var Da=function(t,e){return e.length<2?t:ma(t,Na(e,0,-1))},Ra=Zr,ka=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0},Ma=Da,Ia=en;var La=function(t,e){return e=Ra(e,t),null==(t=Ma(t,e))||delete t[Ia(ka(e))]},Pa=E,Ca=Io,Ta=Ct,Ua=Function.prototype,xa=Object.prototype,Fa=Ua.toString,za=xa.hasOwnProperty,Wa=Fa.call(Object);var $a=function(t){if(!Ta(t)||"[object Object]"!=Pa(t))return!1;var e=Ca(t);if(null===e)return!0;var r=za.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&Fa.call(r)==Wa};var Ba=function(t){return $a(t)?void 0:t},Ga=Bt,Va=Gt,Xa=p?p.isConcatSpreadable:void 0;var Ya=Mo,qa=function(t){return Va(t)||Ga(t)||!!(Xa&&t&&t[Xa])};var Ha=function t(e,r,n,o,i){var a=-1,s=e.length;for(n||(n=qa),i||(i=[]);++a<s;){var c=e[a];r>0&&n(c)?r>1?t(c,r-1,n,o,i):Ya(i,c):o||(i[i.length]=c)}return i},Qa=Ha;var Ka=function(t){return(null==t?0:t.length)?Qa(t,1):[]},Ja=ft,Za=bt;var ts=Wr,es=Ea,rs=La,ns=Zr,os=at,is=Ba,as=Ko,ss=function(t){return Za(Ja(t,void 0,Ka),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=ts(e,function(e){return e=ns(e,t),n||(n=e.length>1),e}),os(t,as(t),r),n&&(r=es(r,7,is));for(var o=e.length;o--;)rs(r,e[o]);return r}),cs=u(ss);const us=new class{AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;constructor(t){switch(this.AppName=t,this.platform=process.platform,this.homedir=r.homedir(),this.platform){case"darwin":this.isMAC=!0,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=n.join(this.homedir,"Library","Application Support");break;case"win32":this.isMAC=!1,this.isWIN=!0,this.isLINUX=!1,this.saveFolder=process.env.APPDATA||n.join(this.homedir,"AppData","Roaming");break;case"linux":this.isMAC=!1,this.isWIN=!1,this.isLINUX=!0,this.saveFolder=process.env.XDG_CONFIG_HOME||n.join(this.homedir,".config");break;default:console.log(`當前系統是未知的平台: ${this.platform}`),this.isMAC=!1,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=this.homedir}this.appFolder=n.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder)}addPath(...t){return n.join(...t)}folderCheck(t){e.mkdirSync(t,{recursive:!0})}fileCheck(t){e.existsSync(t)||e.writeFileSync(t,"",{encoding:"utf8"})}}("aiia-sdk");class fs{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=us.addPath(us.appFolder,this.fileName),us.fileCheck(this.filePath)}getFileDataSync(){const t=e.readFileSync(this.filePath,"utf8");try{return JSON.parse(t)}catch(t){return{}}}setFileDataSync(t){try{const r=JSON.stringify(t);e.writeFileSync(this.filePath,r,"utf8")}catch(t){}}async getFileData(){return new Promise(t=>{e.readFile(this.filePath,"utf8",(e,r)=>{if(e)t({});else try{t(JSON.parse(r))}catch(e){t({})}})})}async setFileData(t){return new Promise(r=>{try{const n=JSON.stringify(t);e.writeFile(this.filePath,n,"utf8",t=>{r()})}catch(t){}})}async getItem(t){return(await this.getFileData())[t]??null}async setItem(t,e){const r=await this.getFileData();r[t]=e,await this.setFileData(r)}async removeItem(t){const e=await this.getFileData(),r=cs(e,t);await this.setFileData(r)}async clear(){await this.setFileData({})}getItemSync(t){return this.getFileDataSync()[t]??null}setItemSync(t,e){const r=this.getFileDataSync();r[t]=e,this.setFileDataSync(r)}removeItemSync(t){const e=cs(this.getFileDataSync(),t);this.setFileDataSync(e)}clearSync(){this.setFileDataSync({})}}var ls=Pr,hs=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},vs=function(t){return this.__data__.has(t)};function ps(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new ls;++e<r;)this.add(t[e])}ps.prototype.add=ps.prototype.push=hs,ps.prototype.has=vs;var bs=ps,ys=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1},_s=function(t,e){return t.has(e)};var ds=function(t,e,r,n,o,i){var a=1&r,s=t.length,c=e.length;if(s!=c&&!(a&&c>s))return!1;var u=i.get(t),f=i.get(e);if(u&&f)return u==e&&f==t;var l=-1,h=!0,v=2&r?new bs:void 0;for(i.set(t,e),i.set(e,t);++l<s;){var p=t[l],b=e[l];if(n)var y=a?n(b,p,l,e,t,i):n(p,b,l,t,e,i);if(void 0!==y){if(y)continue;h=!1;break}if(v){if(!ys(e,function(t,e){if(!_s(v,e)&&(p===t||o(p,t,r,n,i)))return v.push(e)})){h=!1;break}}else if(p!==b&&!o(p,b,r,n,i)){h=!1;break}}return i.delete(t),i.delete(e),h};var gs=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r};var js=gi,Os=Z,Ss=ds,ws=gs,As=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},Es=p?p.prototype:void 0,ms=Es?Es.valueOf:void 0;var Ns=function(t,e,r,n,o,i,a){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!i(new js(t),new js(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Os(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var s=ws;case"[object Set]":var c=1&n;if(s||(s=As),t.size!=e.size&&!c)return!1;var u=a.get(t);if(u)return u==e;n|=2,a.set(t,e);var f=Ss(s(t),s(e),n,o,i,a);return a.delete(t),f;case"[object Symbol]":if(ms)return ms.call(t)==ms.call(e)}return!1},Ds=Yo,Rs=Object.prototype.hasOwnProperty;var ks=ro,Ms=ds,Is=Ns,Ls=function(t,e,r,n,o,i){var a=1&r,s=Ds(t),c=s.length;if(c!=Ds(e).length&&!a)return!1;for(var u=c;u--;){var f=s[u];if(!(a?f in e:Rs.call(e,f)))return!1}var l=i.get(t),h=i.get(e);if(l&&h)return l==e&&h==t;var v=!0;i.set(t,e),i.set(e,t);for(var p=a;++u<c;){var b=t[f=s[u]],y=e[f];if(n)var _=a?n(y,b,f,e,t,i):n(b,y,f,t,e,i);if(!(void 0===_?b===y||o(b,y,r,n,i):_)){v=!1;break}p||(p="constructor"==f)}if(v&&!p){var d=t.constructor,g=e.constructor;d==g||!("constructor"in t)||!("constructor"in e)||"function"==typeof d&&d instanceof d&&"function"==typeof g&&g instanceof g||(v=!1)}return i.delete(t),i.delete(e),v},Ps=yi,Cs=Gt,Ts=qt,Us=ae,xs="[object Arguments]",Fs="[object Array]",zs="[object Object]",Ws=Object.prototype.hasOwnProperty;var $s=function(t,e,r,n,o,i){var a=Cs(t),s=Cs(e),c=a?Fs:Ps(t),u=s?Fs:Ps(e),f=(c=c==xs?zs:c)==zs,l=(u=u==xs?zs:u)==zs,h=c==u;if(h&&Ts(t)){if(!Ts(e))return!1;a=!0,f=!1}if(h&&!f)return i||(i=new ks),a||Us(t)?Ms(t,e,r,n,o,i):Is(t,e,c,r,n,o,i);if(!(1&r)){var v=f&&Ws.call(t,"__wrapped__"),p=l&&Ws.call(e,"__wrapped__");if(v||p){var b=v?t.value():t,y=p?e.value():e;return i||(i=new ks),o(b,y,r,n,i)}}return!!h&&(i||(i=new ks),Ls(t,e,r,n,o,i))},Bs=Ct;var Gs=function t(e,r,n,o,i){return e===r||(null==e||null==r||!Bs(e)&&!Bs(r)?e!=e&&r!=r:$s(e,r,n,o,t,i))},Vs=ro,Xs=Gs;var Ys=m;var qs=function(t){return t==t&&!Ys(t)},Hs=qs,Qs=we;var Ks=function(t,e){return function(r){return null!=r&&(r[t]===e&&(void 0!==e||t in Object(r)))}},Js=function(t,e,r,n){var o=r.length,i=o,a=!n;if(null==t)return!i;for(t=Object(t);o--;){var s=r[o];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<i;){var c=(s=r[o])[0],u=t[c],f=s[1];if(a&&s[2]){if(void 0===u&&!(c in t))return!1}else{var l=new Vs;if(n)var h=n(u,f,c,t,e,l);if(!(void 0===h?Xs(f,u,3,n,l):h))return!1}}return!0},Zs=function(t){for(var e=Qs(t),r=e.length;r--;){var n=e[r],o=t[n];e[r]=[n,o,Hs(o)]}return e},tc=Ks;var ec=Zr,rc=Bt,nc=Gt,oc=At,ic=gt,ac=en;var sc=function(t,e,r){for(var n=-1,o=(e=ec(e,t)).length,i=!1;++n<o;){var a=ac(e[n]);if(!(i=null!=t&&r(t,a)))break;t=t[a]}return i||++n!=o?i:!!(o=null==t?0:t.length)&&ic(o)&&oc(a,o)&&(nc(t)||rc(t))},cc=function(t,e){return null!=t&&e in Object(t)},uc=sc;var fc=function(t,e){return null!=t&&uc(t,e,cc)},lc=Gs,hc=cn,vc=fc,pc=Fe,bc=qs,yc=Ks,_c=en;var dc=function(t,e){return pc(t)&&bc(e)?yc(_c(t),e):function(r){var n=hc(r,t);return void 0===n&&n===e?vc(r,t):lc(e,n,3)}};var gc=on;var jc=function(t){return function(e){return gc(e,t)}},Oc=function(t){return function(e){return null==e?void 0:e[t]}},Sc=jc,wc=Fe,Ac=en;var Ec=function(t){return wc(t)?Oc(Ac(t)):Sc(t)},mc=function(t){var e=Zs(t);return 1==e.length&&e[0][2]?tc(e[0][0],e[0][1]):function(r){return r===t||Js(r,t,e)}},Nc=dc,Dc=st,Rc=Gt,kc=Ec;var Mc=function(t){return"function"==typeof t?t:null==t?Dc:"object"==typeof t?Rc(t)?Nc(t[0],t[1]):mc(t):kc(t)};var Ic=function(t){return function(e,r,n){for(var o=-1,i=Object(e),a=n(e),s=a.length;s--;){var c=a[t?s:++o];if(!1===r(i[c],c,i))break}return e}}(),Lc=we;var Pc=St;var Cc=function(t,e){return function(r,n){if(null==r)return r;if(!Pc(r))return t(r,n);for(var o=r.length,i=e?o:-1,a=Object(r);(e?i--:++i<o)&&!1!==n(a[i],i,a););return r}}(function(t,e){return t&&Ic(t,e,Lc)}),Tc=St;var Uc=Wr,xc=Mc,Fc=function(t,e){var r=-1,n=Tc(t)?Array(t.length):[];return Cc(t,function(t,o,i){n[++r]=e(t,o,i)}),n},zc=Gt;var Wc,$c=u(function(t,e){return(zc(t)?Uc:Fc)(t,xc(e))});class Bc{instance;controller;constructor(t){this.controller=new AbortController,this.instance=i.create({baseURL:t,signal:this.controller.signal})}async getAccessToken(t,e){const r={license_number:t,token_value:e??""},n=await this.instance.post("/api/v1/license/agent_token",r).then(t=>un(t.data,"token_value","")).catch(()=>null);if(null===n)throw new Error(sn["網絡錯誤"]);if(""===n)throw new Error(sn["獲取權杖失敗"]);return n}async getProjectList(t){const e=await this.instance.post("/api/v1/license/projects",{license_number:t}).then(t=>$c(un(t,"data.projects",[]),({id:t,sub_project_name:e})=>({id:t,name:e}))).catch(t=>null);if(null===e)throw new Error(sn["網絡錯誤"]);if(0===e.length)throw new Error(sn["沒有可用專案"]);return e}onDestory(){this.controller.abort()}}!function(t){t[t.MDN_NORMAL_CLOSURE=1e3]="MDN_NORMAL_CLOSURE",t[t.MDN_GOING_AWAY=1001]="MDN_GOING_AWAY",t[t.MDN_PROTOCOL_ERROR=1002]="MDN_PROTOCOL_ERROR",t[t.MDN_UNSUPPORTED_DATA=1003]="MDN_UNSUPPORTED_DATA",t[t.MDN_RESERVED_1004=1004]="MDN_RESERVED_1004",t[t.MDN_NO_STATUS_RECEIVED=1005]="MDN_NO_STATUS_RECEIVED",t[t.MDN_ABNORMAL_CLOSURE=1006]="MDN_ABNORMAL_CLOSURE",t[t.MDN_INVALID_FRAME_PAYLOAD=1007]="MDN_INVALID_FRAME_PAYLOAD",t[t.MDN_POLICY_VIOLATION=1008]="MDN_POLICY_VIOLATION",t[t.MDN_MESSAGE_TOO_BIG=1009]="MDN_MESSAGE_TOO_BIG",t[t.MDN_MANDATORY_EXTENSION=1010]="MDN_MANDATORY_EXTENSION",t[t.MDN_INTERNAL_ERROR=1011]="MDN_INTERNAL_ERROR",t[t.MDN_SERVICE_RESTART=1012]="MDN_SERVICE_RESTART",t[t.MDN_TRY_AGAIN_LATER=1013]="MDN_TRY_AGAIN_LATER",t[t.MDN_BAD_GATEWAY=1014]="MDN_BAD_GATEWAY",t[t.MDN_TLS_HANDSHAKE=1015]="MDN_TLS_HANDSHAKE",t[t.MANUAL_CLOSE=4001]="MANUAL_CLOSE",t[t.WS_5000_NORAML_CLOSURE=5e3]="WS_5000_NORAML_CLOSURE",t[t.WS_5001_UNAUTHORIZED=5001]="WS_5001_UNAUTHORIZED",t[t.WS_5002_LICENSE_EXPIRED=5002]="WS_5002_LICENSE_EXPIRED",t[t.WS_5003_TOKEN_EXPIRED=5003]="WS_5003_TOKEN_EXPIRED"}(Wc||(Wc={}));class Gc{socket;messageSub;startLinkSub;destorySub;closeSub;get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get startLink(){return this.startLinkSub.asObservable()}messageQueue=[];isConnected;isStart;constructor(){this.isConnected=!1,this.isStart=!1,this.messageSub=new o.Subject,this.startLinkSub=new o.Subject,this.closeSub=new o.Subject,this.destorySub=new o.Subject}start(t){this.isStart=!0,this.socket=new s(t,{autoPong:!0}),o.fromEvent(this.socket,"open").pipe(o.takeUntil(this.destorySub)).subscribe(t=>{this.isConnected=!0,this.startLinkSub.next(),$n.info("Proxy startup"),this.flushMessageQueue()}),o.fromEvent(this.socket,"message").pipe(o.takeUntil(this.destorySub)).subscribe(t=>{const{data:e}=t;this.messageSub.next(e)}),o.fromEvent(this.socket,"error").pipe(o.takeUntil(this.destorySub)).subscribe(t=>{const{error:e}=t;$n.error("Proxy has some problem",e)}),o.fromEvent(this.socket,"close").pipe(o.takeUntil(this.destorySub)).subscribe(t=>{this.isConnected=!1;const{code:e}=t;switch(e){case Wc.MANUAL_CLOSE:$n.debug("MANUAL_CLOSE stop emit event and reconnecting");break;case Wc.WS_5000_NORAML_CLOSURE:case Wc.MDN_NORMAL_CLOSURE:case Wc.MDN_GOING_AWAY:this.closeSub.next("close"),$n.debug("Safe close connection");break;case Wc.MDN_NO_STATUS_RECEIVED:case Wc.MDN_ABNORMAL_CLOSURE:this.closeSub.next("close"),$n.warn("Cloud disconnect",{code:e},t);break;case Wc.WS_5001_UNAUTHORIZED:case Wc.WS_5002_LICENSE_EXPIRED:this.closeSub.next("no_permissions"),$n.warn("Please contact Graphen");break;case Wc.WS_5003_TOKEN_EXPIRED:this.closeSub.next("reconnect"),$n.debug("Reconnect");break;default:this.closeSub.next("close"),$n.error("Other status always close connection",{code:e})}})}flushMessageQueue(){for(;this.messageQueue.length>0&&this.isConnected;){const t=this.messageQueue.shift();t&&this.socket.send(t)}}send(t){this.isConnected?this.socket.send(t):this.messageQueue.push(t)}onManualClose(){this.isStart&&this.socket?.close(Wc.MANUAL_CLOSE)}onDestory(){this.destorySub.next(),this.destorySub.complete()}}class Vc{sdk;server;get url(){return this.sdk.config.endPoint.socket}get port(){return this.sdk.config.port}get webserver(){return this.sdk.config.webserver}constructor(t){this.sdk=t}start(){this.server=new a.Server(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",t=>{const e=new o.Subject;let r=(n=t.handshake.query.uuid,Vt(n)?un(n,"[0]",void 0):n??void 0);var n;const i=new Gc;$n.debug("client on",t.id),void 0===r?(this.sdk.getProjectList().then(e=>{t.emit("list",e)}),o.fromEvent(t,"uuid").pipe(o.take(1),o.takeUntil(e)).subscribe(n=>{r=n,this.openChannel(r,t,i,e)})):this.openChannel(r,t,i,e),t.on("disconnect",t=>{e.next(),e.complete(),$n.debug("client off",t)})}),void 0===this.webserver&&this.server.listen(this.port)}openChannel(t,e,r,n){o.fromEvent(e,"cloud").pipe(o.takeUntil(n)).subscribe(t=>{r.send(t)}),r.message.pipe(o.takeUntil(n)).subscribe(t=>{e.emit("cloud",t)}),r.close.pipe(o.takeUntil(n)).subscribe(async n=>{switch(n){case"close":case"no_permissions":e.emit("channel",n),r.onDestory();break;case"reconnect":await this.sdk.replaceAccessToken(),r.start(this.getProxySocketURL(t))}}),r.startLink.pipe(o.takeUntil(n)).subscribe(()=>{e.emit("channel","open")}),r.start(this.getProxySocketURL(t))}getProxySocketURL(t){return`${this.url}/v1/chat/project/${this.sdk.accessToken}/${t}`}onDestory(){this.server&&this.server.close()}}class Xc{config;stroage;apiProxy;chat;isStart;destorySub;get destoryObs(){return this.destorySub.asObservable()}access_token;get accessToken(){return this.access_token}constructor(t,e){this.config=t,this.stroage=e,this.isStart=!1,this.destorySub=new o.Subject,this.access_token=e.getItemSync(fn),this.apiProxy=new Bc(this.config.endPoint.api),$n.info("[Initialize] proxy is finished"),this.chat=new Vc(this),$n.info("[Initialize] chat is finished","Start at PORT:",this.config.port)}async start(){if(this.isStart)throw new Error(sn["重複初始化"]);this.isStart=!0,await this.replaceAccessToken(),this.chat.start(),$n.info("Chat service startup")}async replaceAccessToken(){const t=await this.apiProxy.getAccessToken(this.config.license,this.access_token);return this.access_token=t,this.stroage.setItemSync(fn,t),t}async getProjectList(){return await this.apiProxy.getProjectList(this.config.license)}onDestory(){this.apiProxy.onDestory(),this.chat.onDestory(),this.destorySub.next(),this.destorySub.complete(),$n.info("[Destory] core module done")}}exports.aiiaCore=function(t){if(ln){if(void 0===un(t,"license",void 0))throw new Error(sn["未提供憑證"]);$n.info("Initialize necessary modules");const e=new hn(Me({},t));Gn(e.debug),$n.info("config finished");const r=new fs;$n.info("storage finished");const n=new Xc(e,r);return $n.info("core finished"),n.start(),$n.info("Service startup"),()=>{n.onDestory()}}throw new Error(sn["環境錯誤(nodejs)"])};
1
+ "use strict";var e,t=require("lodash"),s=require("moment"),i=require("socket.io"),o=require("rxjs"),r=require("axios"),n=require("ws"),c=require("fs"),a=require("os"),h=require("path"),l=require("node-osc");!function(e){e["網絡錯誤"]="ERROR CODE: 500",e["環境錯誤(browser)"]="ERROR CODE: 1001",e["Worklet模組載入失敗"]="ERROR CODE: 1002",e["未獲得媒體裝置權限"]="ERROR CODE: 1003",e["實例已摧毀"]="ERROR CODE: 1004",e["環境錯誤(nodejs)"]="ERROR CODE: 2001",e["未提供憑證"]="ERROR CODE: 2002",e["獲取權杖失敗"]="ERROR CODE: 2003",e["沒有可用專案"]="ERROR CODE: 2004",e["重複初始化"]="ERROR CODE: 2005"}(e||(e={}));const u="access_token",d="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node;class g{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(e,t){const s=t??NaN;if(e){const t=parseInt(e);return isNaN(t)?s:t}return s}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:e}=t.assign({},this.config);return void 0===e?{specific:!1}:"string"==typeof e?{name:e,id:e,specific:!1}:t.assign({},e,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}get mediaStream(){return this.config.mediaStream}get chunkTimeInSeconds(){return"number"==typeof this.config.chunkTimeInSeconds&&this.config.chunkTimeInSeconds>0?this.config.chunkTimeInSeconds:1}get llmSampleRate(){return"number"==typeof this.config.llmSampleRate&&this.config.llmSampleRate>0?this.config.llmSampleRate:16e3}get faceDetection(){return t.assign({frame:3,confidence:80},this.config.faceDetection)}get autoClearSubtitle(){const{user:e,aiia:s}=t.assign({},this.config.autoClearSubtitle);let i=3e3,o=3e3;return"number"==typeof e?i=e>=0?e:i:!1===e&&(i=NaN),"number"==typeof s?o=s>=0?s:o:!1===s&&(o=NaN),{userDelayTime:i,aiiaDelayTime:o}}constructor(e){this.config=e}}var f;!function(e){e["通道、雲端服務、麥克風都已就緒"]="CODE: 1000",e["未取得媒體裝置權限,請重新設定或忽略此訊息"]="CODE: 1001",e["請訂閱專案列表"]="CODE: 1002",e["初始化必要依賴"]="CODE: 1010",e["指定依賴已完成"]="CODE: 1011",e["啟動SDK"]="CODE: 1012",e["結束SDK"]="CODE: 1013",e["安全的關閉連線"]="CODE: 2000",e["無副作用的關閉連線"]="CODE: 2001",e["與雲端的服務中斷"]="CODE: 2002",e["沒有授權,請聯繫Graphen"]="CODE: 2003",e["自動重新連線連端服務"]="CODE: 2004",e["未預期的斷線,請聯繫Graphen"]="CODE: 2005",e["開始初始化必要模組"]="CODE: 2010",e["指定模組初始化完成"]="CODE: 2011",e["啟動服務"]="CODE: 2012",e["服務結束"]="CODE: 2013"}(f||(f={}));const p={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},S=[];function _(e){return S.push(e),_}const E=new Proxy(p,{get(e,i,o){if("string"==typeof i)switch(i){case"debug":case"info":case"error":case"warn":case"fatal":case"code":return(...o)=>{const r=s().format("yyyy-MM-DD[T]HH:mm:ss");t.forEach(S,e=>{e.next(i,r,...o)}),e[i](`[Aiia::${i}_${r}_]`,...o)};default:return}},set:(e,t,s,i)=>!0});class b{config;server;memberSub;get port(){return this.config.port}get webserver(){return this.config.webserver}get memberChange(){return this.memberSub.asObservable()}constructor(e){this.config=e,this.memberSub=new o.Subject}start(){if(this.server=new i.Server(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",e=>{this.memberSub.next({type:"in",socket:e}),E.debug("client on",e.id),e.on("disconnect",t=>{this.memberSub.next({type:"out",socket:e}),E.debug("client off",t)})}),void 0===this.webserver){const e=this.port;this.server.listen(e),E.info("Websocket server run on",e)}else E.info("Websocket server rely your webserver.")}onDestroy(){this.server&&this.server.close()}}class D{instance;controller;constructor(e){this.controller=new AbortController,this.instance=r.create({baseURL:e,signal:this.controller.signal})}async getAccessToken(s,i){const o={license_number:s,token_value:i??""},r=await this.instance.post("/api/v1/license/agent_token",o).then(e=>t.get(e.data,"token_value","")).catch(()=>null);if(null===r)throw new Error(e["網絡錯誤"]);if(""===r)throw new Error(e["獲取權杖失敗"]);return r}async getProjectList(s){const i=await this.instance.post("/api/v1/license/projects",{license_number:s}).then(e=>t.map(t.get(e,"data.projects",[]),({id:e,sub_project_name:t})=>({id:e,name:t}))).catch(e=>null);if(null===i)throw new Error(e["網絡錯誤"]);if(0===i.length)throw new Error(e["沒有可用專案"]);return i}onDestroy(){this.controller.abort()}}var m;!function(e){e[e.MDN_NORMAL_CLOSURE=1e3]="MDN_NORMAL_CLOSURE",e[e.MDN_GOING_AWAY=1001]="MDN_GOING_AWAY",e[e.MDN_PROTOCOL_ERROR=1002]="MDN_PROTOCOL_ERROR",e[e.MDN_UNSUPPORTED_DATA=1003]="MDN_UNSUPPORTED_DATA",e[e.MDN_RESERVED_1004=1004]="MDN_RESERVED_1004",e[e.MDN_NO_STATUS_RECEIVED=1005]="MDN_NO_STATUS_RECEIVED",e[e.MDN_ABNORMAL_CLOSURE=1006]="MDN_ABNORMAL_CLOSURE",e[e.MDN_INVALID_FRAME_PAYLOAD=1007]="MDN_INVALID_FRAME_PAYLOAD",e[e.MDN_POLICY_VIOLATION=1008]="MDN_POLICY_VIOLATION",e[e.MDN_MESSAGE_TOO_BIG=1009]="MDN_MESSAGE_TOO_BIG",e[e.MDN_MANDATORY_EXTENSION=1010]="MDN_MANDATORY_EXTENSION",e[e.MDN_INTERNAL_ERROR=1011]="MDN_INTERNAL_ERROR",e[e.MDN_SERVICE_RESTART=1012]="MDN_SERVICE_RESTART",e[e.MDN_TRY_AGAIN_LATER=1013]="MDN_TRY_AGAIN_LATER",e[e.MDN_BAD_GATEWAY=1014]="MDN_BAD_GATEWAY",e[e.MDN_TLS_HANDSHAKE=1015]="MDN_TLS_HANDSHAKE",e[e.MANUAL_CLOSE=4001]="MANUAL_CLOSE",e[e.WS_5000_NORAML_CLOSURE=5e3]="WS_5000_NORAML_CLOSURE",e[e.WS_5001_UNAUTHORIZED=5001]="WS_5001_UNAUTHORIZED",e[e.WS_5002_LICENSE_EXPIRED=5002]="WS_5002_LICENSE_EXPIRED",e[e.WS_5003_TOKEN_EXPIRED=5003]="WS_5003_TOKEN_EXPIRED"}(m||(m={}));class y{socket;messageSub;linkStartSub;destorySub;closeSub;get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}messageQueue=[];isConnected;constructor(){this.isConnected=!1,this.messageSub=new o.Subject,this.linkStartSub=new o.Subject,this.closeSub=new o.Subject,this.destorySub=new o.Subject}start(e){this.socket=new n(e,{autoPong:!0}),o.fromEvent(this.socket,"open").pipe(o.takeUntil(this.destorySub)).subscribe(()=>{this.isConnected=!0,E.code(f["啟動服務"],"proxy"),this.flushMessageQueue(),this.linkStartSub.next()}),o.fromEvent(this.socket,"message").pipe(o.takeUntil(this.destorySub)).subscribe(e=>{const{data:t}=e;this.messageSub.next(t)}),o.fromEvent(this.socket,"error").pipe(o.takeUntil(this.destorySub)).subscribe(e=>{const{error:t}=e;E.error("Proxy has some problem",t)}),o.fromEvent(this.socket,"close").pipe(o.takeUntil(this.destorySub)).subscribe(e=>{this.isConnected=!1;const{code:t,reason:s}=e;switch(t){case m.MANUAL_CLOSE:E.code(f["無副作用的關閉連線"]);break;case m.WS_5000_NORAML_CLOSURE:case m.MDN_NORMAL_CLOSURE:case m.MDN_GOING_AWAY:this.closeSub.next("close"),E.code(f["安全的關閉連線"]);break;case m.MDN_NO_STATUS_RECEIVED:case m.MDN_ABNORMAL_CLOSURE:this.closeSub.next("close"),E.code(f["與雲端的服務中斷"],{code:t,reason:s});break;case m.WS_5001_UNAUTHORIZED:case m.WS_5002_LICENSE_EXPIRED:this.closeSub.next("no_permissions"),E.code(f["沒有授權,請聯繫Graphen"]);break;case m.WS_5003_TOKEN_EXPIRED:this.closeSub.next("reconnect"),E.code(f["自動重新連線連端服務"]);break;default:this.closeSub.next("close"),E.code(f["未預期的斷線,請聯繫Graphen"],{code:t,reason:s})}})}reconnect(e){this.onDestroy(),this.destorySub=new o.Subject,this.start(e)}flushMessageQueue(){for(;this.messageQueue.length>0&&this.isConnected&&void 0!==this.socket;){const e=this.messageQueue.shift();e&&this.socket.send(e)}}send(e){this.isConnected&&void 0!==this.socket?this.socket.send(e):this.messageQueue.push(e)}onClose(){this.socket?.close(m.MANUAL_CLOSE)}onDestroy(){this.destorySub.next(),this.destorySub.complete()}}const O=new class{AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;EOL;constructor(e){switch(this.AppName=e,this.platform=process.platform,this.homedir=a.homedir(),this.EOL=a.EOL,this.platform){case"darwin":this.isMAC=!0,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=h.join(this.homedir,"Library","Application Support");break;case"win32":this.isMAC=!1,this.isWIN=!0,this.isLINUX=!1,this.saveFolder=process.env.APPDATA||h.join(this.homedir,"AppData","Roaming");break;case"linux":this.isMAC=!1,this.isWIN=!1,this.isLINUX=!0,this.saveFolder=process.env.XDG_CONFIG_HOME||h.join(this.homedir,".config");break;default:console.log(`當前系統是未知的平台: ${this.platform}`),this.isMAC=!1,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=this.homedir}this.appFolder=h.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder)}addPath(...e){return h.join(...e)}folderCheck(e){c.mkdirSync(e,{recursive:!0})}fileCheck(e){c.existsSync(e)||c.writeFileSync(e,"",{encoding:"utf8"})}}("aiia-sdk");class N{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=O.addPath(O.appFolder,this.fileName),O.fileCheck(this.filePath)}getFileDataSync(){const e=c.readFileSync(this.filePath,"utf8");try{return JSON.parse(e)}catch(e){return{}}}setFileDataSync(e){try{const t=JSON.stringify(e);c.writeFileSync(this.filePath,t,"utf8")}catch(e){}}async getFileData(){return new Promise(e=>{c.readFile(this.filePath,"utf8",(t,s)=>{if(t)e({});else try{e(JSON.parse(s))}catch(t){e({})}})})}async setFileData(e){return new Promise(t=>{try{const s=JSON.stringify(e);c.writeFile(this.filePath,s,"utf8",e=>{t()})}catch(e){}})}async getItem(e){return(await this.getFileData())[e]??null}async setItem(e,t){const s=await this.getFileData();s[e]=t,await this.setFileData(s)}async removeItem(e){const s=await this.getFileData(),i=t.omit(s,e);await this.setFileData(i)}async clear(){await this.setFileData({})}getItemSync(e){return this.getFileDataSync()[e]??null}setItemSync(e,t){const s=this.getFileDataSync();s[e]=t,this.setFileDataSync(s)}removeItemSync(e){const s=t.omit(this.getFileDataSync(),e);this.setFileDataSync(s)}clearSync(){this.setFileDataSync({})}}class R{config;constructor(e){this.config=e,console.log("UEProxy, config=",e)}start(){console.log("UEProxy, start proxy")}send(e){let t=this.cloudToObj(e);if(t&&t.signal&&"osc"==t.signal){console.log("UEProxy, payload=",t);try{let e=t.content;const s=new l.Client(e.host,e.port);console.debug("UEProxy, client open to port "+e.port),s.send(e.message,e=>{e&&console.error(e),s.close(),console.debug("UEProxy, client closed")})}catch(e){console.log(e)}}}cloudToObj(e){try{return JSON.parse(e)}catch(e){console.error("message transfer fail",e)}}onDestroy(){console.log("UEProxy, destroy proxy")}}class A{filePath;fileName;constructor(){this.fileName="log.txt",this.filePath=O.addPath(O.appFolder,this.fileName)}next(e,t,...s){try{const i=s.reduce((e,t)=>{switch(typeof t){case"string":case"number":case"bigint":return`${e} ${t.toString()}`;case"boolean":return`${e} ${t?"true":"false"}`;case"object":try{return`${e} ${JSON.stringify(t)}`}catch(t){return e}case"symbol":case"undefined":case"function":return`${e} [${typeof t}]`}},"");c.appendFileSync(this.filePath,`LOG(${e})__${t}__::${i}${O.EOL}`,{encoding:"utf8"})}catch(e){}}}class w{config;stroage;apiProxy;chat;udpProxy;isStart;channelMap;destorySub;access_token;get accessToken(){return this.access_token}constructor(e,t){this.config=e,this.stroage=t,this.isStart=!1,this.destorySub=new o.Subject,this.channelMap=new Map,this.access_token=t.getItemSync(u),this.apiProxy=new D(this.config.endPoint.api),E.code(f["指定模組初始化完成"],"api"),this.chat=new b(this.config),E.code(f["指定模組初始化完成"],"chat"),this.udpProxy=new R(this.config),E.code(f["指定模組初始化完成"],"udp")}async start(){if(this.isStart)throw new Error(e["重複初始化"]);this.isStart=!0,await this.replaceAccessToken(),this.chat.memberChange.pipe(o.takeUntil(this.destorySub)).subscribe(({type:e,socket:s})=>{switch(e){case"in":{E.debug("member join",s.id);const e=new y,r=new o.Subject,n=(i=s.handshake.query.uuid,t.isArray(i)?t.get(i,"[0]",void 0):i??void 0);void 0===n?(this.getProjectList().then(e=>{s.emit("list",e)}),o.fromEvent(s,"uuid").pipe(o.take(1),o.takeUntil(r)).subscribe(t=>{this.openChannel(t,s,e,r)})):this.openChannel(n,s,e,r),this.channelMap.set(s.id,()=>{r.next(),r.complete()});break}case"out":E.debug("member leave",s.id),this.channelMap.has(s.id)&&(this.channelMap.get(s.id)(),this.channelMap.delete(s.id))}var i}),this.chat.start(),E.code(f["啟動服務"],"chat"),this.udpProxy.start(),E.code(f["啟動服務"],"udp")}async replaceAccessToken(){const e=await this.apiProxy.getAccessToken(this.config.license,this.access_token);return this.access_token=e,this.stroage.setItemSync(u,e),e}async getProjectList(){return await this.apiProxy.getProjectList(this.config.license)}getProxySocketURL(e){return`${this.config.endPoint.socket}/v1/chat/project/${this.accessToken}/${e}`}openChannel(e,t,s,i){o.fromEvent(t,"cloud").pipe(o.takeUntil(i)).subscribe(e=>{s.send(e)}),s.message.pipe(o.takeUntil(i)).subscribe(e=>{t.emit("cloud",e),this.udpProxy.send(e)}),s.close.pipe(o.takeUntil(i)).subscribe(async i=>{switch(t.emit("channel",i),i){case"close":case"no_permissions":s.onDestroy();break;case"reconnect":await this.replaceAccessToken(),s.reconnect(this.getProxySocketURL(e))}}),s.linkStart.pipe(o.takeUntil(i)).subscribe(()=>{t.emit("channel","open")}),i.subscribe(()=>{s.onClose()}),s.start(this.getProxySocketURL(e))}onDestroy(){this.apiProxy.onDestroy(),this.chat.onDestroy(),this.udpProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),E.code(f["服務結束"])}}exports.aiiaCore=function(s){if(d){if(void 0===t.get(s,"license",void 0))throw new Error(e["未提供憑證"]);!function(e){const{info:t,error:s,warn:i,debug:o,fatal:r,code:n}=function(e){if(void 0===e||"all"===e)return{code:!0,error:!0,warn:!0,info:!0,debug:!0,fatal:!0};if("none"===e)return{error:!1,code:!1,warn:!1,info:!1,debug:!1,fatal:!1};if("boolean"==typeof e)return{code:e,error:e,warn:e,info:e,debug:e,fatal:e};{const t=new Set(e);return{code:t.has("code"),debug:t.has("debug"),fatal:t.has("fatal"),error:t.has("error"),warn:t.has("warn"),info:t.has("info")}}}(e);return n||(p.code=()=>{}),o||(p.debug=()=>{}),t||(p.info=()=>{}),i||(p.warn=()=>{}),s||(p.error=()=>{}),r||(p.fatal=()=>{}),_}(t.get(s,"debug",!0))(new A),E.code(f["開始初始化必要模組"]);const i=new g(t.assign({},s));E.code(f["指定模組初始化完成"],"config");const o=new N;E.code(f["指定模組初始化完成"],"storage");const r=new w(i,o);return E.code(f["指定模組初始化完成"],"core"),r.start(),E.code(f["啟動服務"]),()=>{r.onDestroy()}}throw new Error(e["環境錯誤(nodejs)"])};
package/dist/node.d.ts CHANGED
@@ -47,7 +47,7 @@ declare interface InitOptions {
47
47
  * [en]
48
48
  * Extending "socket.io" to your web server
49
49
  */
50
- webserver?: Server | Server_2 | Http2SecureServer | Http2Server;
50
+ webserver?: Webserver;
51
51
  /**
52
52
  * [zh]
53
53
  * 伺服器 port
@@ -81,9 +81,69 @@ declare interface InitOptions {
81
81
  * [en]
82
82
  * Switch message(info, error, warn) dispaly, default: true
83
83
  */
84
- debug?: boolean | "all" | "none" | ("info" | "error" | "warn" | "debug" | "fatal")[];
84
+ debug?: boolean | "all" | "none" | LoggerLevel[];
85
+ /**
86
+ * [zh]
87
+ * 授權的媒體裝置,請包含麥克風及鏡頭/攝影機權限
88
+ *
89
+ * [en]
90
+ * Authorized media devices, please include microphone and lens/camera permissions.
91
+ *
92
+ * https://developer.mozilla.org/en-US/docs/Web/API/MediaStream
93
+ */
94
+ mediaStream?: MediaStream;
95
+ /**
96
+ * [zh]
97
+ * 檢測聲音的區塊大小(秒),預設 1 秒
98
+ *
99
+ * [en]
100
+ * Detecting the chunk size of the sound(unit is second), default 1 second.
101
+ */
102
+ chunkTimeInSeconds?: number;
103
+ /**
104
+ * [zh]
105
+ * 指定音訊輸出的採樣率(提供給LLM分析)。不推薦更動
106
+ *
107
+ * [en]
108
+ * Specify the sampling rate of audio output (provided for LLM analysis). Changing is not recommended.
109
+ */
110
+ llmSampleRate?: number;
111
+ /**
112
+ * [zh]
113
+ * 人臉辨識
114
+ *
115
+ * frame: 每幾幀更新一次, 預設: 3
116
+ *
117
+ * confidence: 分數(0 ~ 100), 預設: 80
118
+ *
119
+ * [en]
120
+ * facial recognition
121
+ *
122
+ * frame: Update every few frames, default: 3
123
+ *
124
+ * confidence: score(0 ~ 100), default: 80
125
+ */
126
+ faceDetection?: {
127
+ frame?: number;
128
+ confidence?: number;
129
+ };
130
+ /**
131
+ * [zh]
132
+ * 清除字幕,可指定時間(毫秒),預設 3000 毫秒後清除
133
+ *
134
+ * [en]
135
+ * Clear subtitles, you can specify the time (milliseconds), the default is to clear after 3000 milliseconds.
136
+ */
137
+ autoClearSubtitle?: {
138
+ user?: boolean | number;
139
+ aiia?: boolean | number;
140
+ };
85
141
  }
86
142
 
87
- export declare type NodeInitOptions = Omit<InitOptions, "project" | "ws_url" | "worklet_url">;
143
+ declare type LoggerLevel = "info" | "error" | "warn" | "debug" | "fatal" | "code";
144
+
145
+ export declare type NodeInitOptions = Omit<InitOptions, "project" | "ws_url" | "worklet_url" | "mediaStream" | "chunkTimeInSeconds" | "llmSampleRate" | "autoClearSubtitle">;
146
+
147
+ declare type Webserver = Server<any, any> | Server_2<any, any> | Http2SecureServer<any, any, any, any> | Http2Server<any, any, any, any>;
88
148
 
89
149
  export { }
package/dist/node.mjs CHANGED
@@ -1 +1 @@
1
- import t from"moment";import e from"fs";import r from"os";import n from"path";import{Subject as o,fromEvent as i,takeUntil as a,take as s}from"rxjs";import c from"axios";import{Server as u}from"socket.io";import f from"ws";var l="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function h(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var v="object"==typeof l&&l&&l.Object===Object&&l,p=v,b="object"==typeof self&&self&&self.Object===Object&&self,y=p||b||Function("return this")(),_=y.Symbol,d=_,g=Object.prototype,O=g.hasOwnProperty,j=g.toString,w=d?d.toStringTag:void 0;var A=function(t){var e=O.call(t,w),r=t[w];try{t[w]=void 0;var n=!0}catch(t){}var o=j.call(t);return n&&(e?t[w]=r:delete t[w]),o},S=Object.prototype.toString;var m=A,E=function(t){return S.call(t)},N=_?_.toStringTag:void 0;var D=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":N&&N in Object(t)?m(t):E(t)};var R=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},M=D,k=R;var I,L=function(t){if(!k(t))return!1;var e=M(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},P=y["__core-js_shared__"],C=(I=/[^.]+$/.exec(P&&P.keys&&P.keys.IE_PROTO||""))?"Symbol(src)_1."+I:"";var T=function(t){return!!C&&C in t},x=Function.prototype.toString;var U=function(t){if(null!=t){try{return x.call(t)}catch(t){}try{return t+""}catch(t){}}return""},F=L,z=T,W=R,$=U,B=/^\[object .+?Constructor\]$/,G=Function.prototype,V=Object.prototype,X=G.toString,Y=V.hasOwnProperty,H=RegExp("^"+X.call(Y).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Q=function(t){return!(!W(t)||z(t))&&(F(t)?H:B).test($(t))},K=function(t,e){return null==t?void 0:t[e]};var J=function(t,e){var r=K(t,e);return Q(r)?r:void 0},q=J,Z=function(){try{var t=q(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),tt=Z;var et=function(t,e,r){"__proto__"==e&&tt?tt(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r};var rt=function(t,e){return t===e||t!=t&&e!=e},nt=et,ot=rt,it=Object.prototype.hasOwnProperty;var at=function(t,e,r){var n=t[e];it.call(t,e)&&ot(n,r)&&(void 0!==r||e in t)||nt(t,e,r)},st=at,ct=et;var ut=function(t,e,r,n){var o=!r;r||(r={});for(var i=-1,a=e.length;++i<a;){var s=e[i],c=n?n(r[s],t[s],s,r,t):void 0;void 0===c&&(c=t[s]),o?ct(r,s,c):st(r,s,c)}return r};var ft=function(t){return t};var lt=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)},ht=Math.max;var vt=function(t,e,r){return e=ht(void 0===e?t.length-1:e,0),function(){for(var n=arguments,o=-1,i=ht(n.length-e,0),a=Array(i);++o<i;)a[o]=n[e+o];o=-1;for(var s=Array(e+1);++o<e;)s[o]=n[o];return s[e]=r(a),lt(t,this,s)}};var pt=function(t){return function(){return t}},bt=Z,yt=bt?function(t,e){return bt(t,"toString",{configurable:!0,enumerable:!1,value:pt(e),writable:!0})}:ft,_t=Date.now;var dt=function(t){var e=0,r=0;return function(){var n=_t(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(yt),gt=ft,Ot=vt,jt=dt;var wt=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},At=L,St=wt;var mt=function(t){return null!=t&&St(t.length)&&!At(t)},Et=/^(?:0|[1-9]\d*)$/;var Nt=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&Et.test(t))&&t>-1&&t%1==0&&t<e},Dt=rt,Rt=mt,Mt=Nt,kt=R;var It=function(t,e){return jt(Ot(t,e,gt),t+"")},Lt=function(t,e,r){if(!kt(r))return!1;var n=typeof e;return!!("number"==n?Rt(r)&&Mt(e,r.length):"string"==n&&e in r)&&Dt(r[e],t)};var Pt=function(t){return It(function(e,r){var n=-1,o=r.length,i=o>1?r[o-1]:void 0,a=o>2?r[2]:void 0;for(i=t.length>3&&"function"==typeof i?(o--,i):void 0,a&&Lt(r[0],r[1],a)&&(i=o<3?void 0:i,o=1),e=Object(e);++n<o;){var s=r[n];s&&t(e,s,n,i)}return e})},Ct=Object.prototype;var Tt=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||Ct)};var xt=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n};var Ut=function(t){return null!=t&&"object"==typeof t},Ft=D,zt=Ut;var Wt=function(t){return zt(t)&&"[object Arguments]"==Ft(t)},$t=Ut,Bt=Object.prototype,Gt=Bt.hasOwnProperty,Vt=Bt.propertyIsEnumerable,Xt=Wt(function(){return arguments}())?Wt:function(t){return $t(t)&&Gt.call(t,"callee")&&!Vt.call(t,"callee")},Yt=Array.isArray,Ht=h(Yt),Qt={exports:{}};var Kt=function(){return!1};!function(t,e){var r=y,n=Kt,o=e&&!e.nodeType&&e,i=o&&t&&!t.nodeType&&t,a=i&&i.exports===o?r.Buffer:void 0,s=(a?a.isBuffer:void 0)||n;t.exports=s}(Qt,Qt.exports);var Jt=Qt.exports,qt=D,Zt=wt,te=Ut,ee={};ee["[object Float32Array]"]=ee["[object Float64Array]"]=ee["[object Int8Array]"]=ee["[object Int16Array]"]=ee["[object Int32Array]"]=ee["[object Uint8Array]"]=ee["[object Uint8ClampedArray]"]=ee["[object Uint16Array]"]=ee["[object Uint32Array]"]=!0,ee["[object Arguments]"]=ee["[object Array]"]=ee["[object ArrayBuffer]"]=ee["[object Boolean]"]=ee["[object DataView]"]=ee["[object Date]"]=ee["[object Error]"]=ee["[object Function]"]=ee["[object Map]"]=ee["[object Number]"]=ee["[object Object]"]=ee["[object RegExp]"]=ee["[object Set]"]=ee["[object String]"]=ee["[object WeakMap]"]=!1;var re=function(t){return te(t)&&Zt(t.length)&&!!ee[qt(t)]};var ne=function(t){return function(e){return t(e)}},oe={exports:{}};!function(t,e){var r=v,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,i=o&&o.exports===n&&r.process,a=function(){try{var t=o&&o.require&&o.require("util").types;return t||i&&i.binding&&i.binding("util")}catch(t){}}();t.exports=a}(oe,oe.exports);var ie=oe.exports,ae=re,se=ne,ce=ie&&ie.isTypedArray,ue=ce?se(ce):ae,fe=xt,le=Xt,he=Yt,ve=Jt,pe=Nt,be=ue,ye=Object.prototype.hasOwnProperty;var _e=function(t,e){var r=he(t),n=!r&&le(t),o=!r&&!n&&ve(t),i=!r&&!n&&!o&&be(t),a=r||n||o||i,s=a?fe(t.length,String):[],c=s.length;for(var u in t)!e&&!ye.call(t,u)||a&&("length"==u||o&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||pe(u,c))||s.push(u);return s};var de=function(t,e){return function(r){return t(e(r))}},ge=de(Object.keys,Object),Oe=Tt,je=ge,we=Object.prototype.hasOwnProperty;var Ae=_e,Se=function(t){if(!Oe(t))return je(t);var e=[];for(var r in Object(t))we.call(t,r)&&"constructor"!=r&&e.push(r);return e},me=mt;var Ee=function(t){return me(t)?Ae(t):Se(t)},Ne=at,De=ut,Re=Pt,Me=mt,ke=Tt,Ie=Ee,Le=Object.prototype.hasOwnProperty,Pe=h(Re(function(t,e){if(ke(e)||Me(e))De(e,Ie(e),t);else for(var r in e)Le.call(e,r)&&Ne(t,r,e[r])})),Ce=D,Te=Ut;var xe=function(t){return"symbol"==typeof t||Te(t)&&"[object Symbol]"==Ce(t)},Ue=Yt,Fe=xe,ze=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,We=/^\w*$/;var $e=function(t,e){if(Ue(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!Fe(t))||(We.test(t)||!ze.test(t)||null!=e&&t in Object(e))},Be=J(Object,"create"),Ge=Be;var Ve=function(){this.__data__=Ge?Ge(null):{},this.size=0};var Xe=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ye=Be,He=Object.prototype.hasOwnProperty;var Qe=function(t){var e=this.__data__;if(Ye){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return He.call(e,t)?e[t]:void 0},Ke=Be,Je=Object.prototype.hasOwnProperty;var qe=Be;var Ze=Ve,tr=Xe,er=Qe,rr=function(t){var e=this.__data__;return Ke?void 0!==e[t]:Je.call(e,t)},nr=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=qe&&void 0===e?"__lodash_hash_undefined__":e,this};function or(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}or.prototype.clear=Ze,or.prototype.delete=tr,or.prototype.get=er,or.prototype.has=rr,or.prototype.set=nr;var ir=or;var ar=function(){this.__data__=[],this.size=0},sr=rt;var cr=function(t,e){for(var r=t.length;r--;)if(sr(t[r][0],e))return r;return-1},ur=cr,fr=Array.prototype.splice;var lr=cr;var hr=cr;var vr=cr;var pr=ar,br=function(t){var e=this.__data__,r=ur(e,t);return!(r<0)&&(r==e.length-1?e.pop():fr.call(e,r,1),--this.size,!0)},yr=function(t){var e=this.__data__,r=lr(e,t);return r<0?void 0:e[r][1]},_r=function(t){return hr(this.__data__,t)>-1},dr=function(t,e){var r=this.__data__,n=vr(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};function gr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}gr.prototype.clear=pr,gr.prototype.delete=br,gr.prototype.get=yr,gr.prototype.has=_r,gr.prototype.set=dr;var Or=gr,jr=J(y,"Map"),wr=ir,Ar=Or,Sr=jr;var mr=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var Er=function(t,e){var r=t.__data__;return mr(e)?r["string"==typeof e?"string":"hash"]:r.map},Nr=Er;var Dr=Er;var Rr=Er;var Mr=Er;var kr=function(){this.size=0,this.__data__={hash:new wr,map:new(Sr||Ar),string:new wr}},Ir=function(t){var e=Nr(this,t).delete(t);return this.size-=e?1:0,e},Lr=function(t){return Dr(this,t).get(t)},Pr=function(t){return Rr(this,t).has(t)},Cr=function(t,e){var r=Mr(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Tr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Tr.prototype.clear=kr,Tr.prototype.delete=Ir,Tr.prototype.get=Lr,Tr.prototype.has=Pr,Tr.prototype.set=Cr;var xr=Tr,Ur=xr;function Fr(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=t.apply(this,n);return r.cache=i.set(o,a)||i,a};return r.cache=new(Fr.Cache||Ur),r}Fr.Cache=Ur;var zr=Fr;var Wr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$r=/\\(\\)?/g,Br=function(t){var e=zr(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Wr,function(t,r,n,o){e.push(n?o.replace($r,"$1"):r||t)}),e});var Gr=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r<n;)o[r]=e(t[r],r,t);return o},Vr=Gr,Xr=Yt,Yr=xe,Hr=_?_.prototype:void 0,Qr=Hr?Hr.toString:void 0;var Kr=function t(e){if("string"==typeof e)return e;if(Xr(e))return Vr(e,t)+"";if(Yr(e))return Qr?Qr.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r},Jr=Kr;var qr=Yt,Zr=$e,tn=Br,en=function(t){return null==t?"":Jr(t)};var rn=function(t,e){return qr(t)?t:Zr(t,e)?[t]:tn(en(t))},nn=xe;var on=function(t){if("string"==typeof t||nn(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e},an=rn,sn=on;var cn=function(t,e){for(var r=0,n=(e=an(e,t)).length;null!=t&&r<n;)t=t[sn(e[r++])];return r&&r==n?t:void 0},un=cn;var fn,ln=function(t,e,r){var n=null==t?void 0:un(t,e);return void 0===n?r:n},hn=h(ln);!function(t){t["網絡錯誤"]="ERROR CODE: 500",t["環境錯誤(browser)"]="ERROR CODE: 1001",t["Worklet模組載入失敗"]="ERROR CODE: 1002",t["未獲得媒體裝置權限"]="ERROR CODE: 1003",t["實例已摧毀"]="ERROR CODE: 1004",t["環境錯誤(nodejs)"]="ERROR CODE: 2001",t["未提供憑證"]="ERROR CODE: 2002",t["獲取權杖失敗"]="ERROR CODE: 2003",t["沒有可用專案"]="ERROR CODE: 2004",t["重複初始化"]="ERROR CODE: 205"}(fn||(fn={}));const vn="access_token",pn="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node;class bn{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(t,e){const r=e??NaN;if(t){const e=parseInt(t);return isNaN(e)?r:e}return r}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=Pe({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:Pe({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}constructor(t){this.config=t}}var yn=function(t,e,r,n){for(var o=t.length,i=r+(n?1:-1);n?i--:++i<o;)if(e(t[i],i,t))return i;return-1},_n=function(t){return t!=t},dn=function(t,e,r){for(var n=r-1,o=t.length;++n<o;)if(t[n]===e)return n;return-1};var gn=D,On=Yt,jn=Ut;var wn=/\s/;var An=function(t){for(var e=t.length;e--&&wn.test(t.charAt(e)););return e},Sn=/^\s+/;var mn=function(t){return t?t.slice(0,An(t)+1).replace(Sn,""):t},En=R,Nn=xe,Dn=/^[-+]0x[0-9a-f]+$/i,Rn=/^0b[01]+$/i,Mn=/^0o[0-7]+$/i,kn=parseInt;var In=function(t){if("number"==typeof t)return t;if(Nn(t))return NaN;if(En(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=En(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=mn(t);var r=Rn.test(t);return r||Mn.test(t)?kn(t.slice(2),r?2:8):Dn.test(t)?NaN:+t},Ln=1/0;var Pn=function(t){return t?(t=In(t))===Ln||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0};var Cn=Gr;var Tn=function(t,e){return Cn(e,function(e){return t[e]})},xn=Ee;var Un=function(t,e,r){return e==e?dn(t,e,r):yn(t,_n,r)},Fn=mt,zn=function(t){return"string"==typeof t||!On(t)&&jn(t)&&"[object String]"==gn(t)},Wn=function(t){var e=Pn(t),r=e%1;return e==e?r?e-r:e:0},$n=function(t){return null==t?[]:Tn(t,xn(t))},Bn=Math.max;var Gn=h(function(t,e,r,n){t=Fn(t)?t:$n(t),r=r&&!n?Wn(r):0;var o=t.length;return r<0&&(r=Bn(o+r,0)),zn(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&Un(t,e,r)>-1});const Vn={debug:()=>{},info:()=>{},error:()=>{},warn:()=>{},fatal:()=>{}};function Xn(){return t().format("yyyy-MM-DD[T]HH:mm:ss")}function Yn(t){const{info:e,error:r,warn:n,debug:o,fatal:i}=function(t){return void 0===t||"all"===t?{error:!0,warn:!0,info:!0,debug:!0,fatal:!0}:"none"===t?{error:!1,warn:!1,info:!1,debug:!1,fatal:!1}:"boolean"==typeof t?{error:t,warn:t,info:t,debug:t,fatal:t}:{debug:Gn(t,"debug"),fatal:Gn(t,"fatal"),error:Gn(t,"error"),warn:Gn(t,"warn"),info:Gn(t,"info")}}(t);o&&(Vn.debug=(...t)=>{const e=Xn();console.log(`[Aiia::debug_${e}_]`,...t)}),e&&(Vn.info=(...t)=>{const e=Xn();console.log(`[Aiia::info_${e}_]`,...t)}),n&&(Vn.warn=(...t)=>{const e=Xn();console.warn(`[Aiia::warn_${e}_]`,...t)}),r&&(Vn.error=(...t)=>{const e=Xn();console.error(`[Aiia::error_${e}_]`,...t)}),i&&(Vn.fatal=(...t)=>{const e=Xn();console.error(`[Aiia::fatal_${e}_]`,...t)})}var Hn=Or;var Qn=Or,Kn=jr,Jn=xr;var qn=Or,Zn=function(){this.__data__=new Hn,this.size=0},to=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},eo=function(t){return this.__data__.get(t)},ro=function(t){return this.__data__.has(t)},no=function(t,e){var r=this.__data__;if(r instanceof Qn){var n=r.__data__;if(!Kn||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Jn(n)}return r.set(t,e),this.size=r.size,this};function oo(t){var e=this.__data__=new qn(t);this.size=e.size}oo.prototype.clear=Zn,oo.prototype.delete=to,oo.prototype.get=eo,oo.prototype.has=ro,oo.prototype.set=no;var io=oo;var ao=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t},so=ut,co=Ee;var uo=function(t,e){return t&&so(e,co(e),t)};var fo=R,lo=Tt,ho=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e},vo=Object.prototype.hasOwnProperty;var po=_e,bo=function(t){if(!fo(t))return ho(t);var e=lo(t),r=[];for(var n in t)("constructor"!=n||!e&&vo.call(t,n))&&r.push(n);return r},yo=mt;var _o=function(t){return yo(t)?po(t,!0):bo(t)},go=ut,Oo=_o;var jo=function(t,e){return t&&go(e,Oo(e),t)},wo={exports:{}};!function(t,e){var r=y,n=e&&!e.nodeType&&e,o=n&&t&&!t.nodeType&&t,i=o&&o.exports===n?r.Buffer:void 0,a=i?i.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(wo,wo.exports);var Ao=wo.exports;var So=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e};var mo=function(){return[]},Eo=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,i=[];++r<n;){var a=t[r];e(a,r,t)&&(i[o++]=a)}return i},No=mo,Do=Object.prototype.propertyIsEnumerable,Ro=Object.getOwnPropertySymbols,Mo=Ro?function(t){return null==t?[]:(t=Object(t),Eo(Ro(t),function(e){return Do.call(t,e)}))}:No,ko=ut,Io=Mo;var Lo=function(t,e){return ko(t,Io(t),e)};var Po=function(t,e){for(var r=-1,n=e.length,o=t.length;++r<n;)t[o+r]=e[r];return t},Co=de(Object.getPrototypeOf,Object),To=Po,xo=Co,Uo=Mo,Fo=mo,zo=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)To(e,Uo(t)),t=xo(t);return e}:Fo,Wo=ut,$o=zo;var Bo=function(t,e){return Wo(t,$o(t),e)},Go=Po,Vo=Yt;var Xo=function(t,e,r){var n=e(t);return Vo(t)?n:Go(n,r(t))},Yo=Xo,Ho=Mo,Qo=Ee;var Ko=function(t){return Yo(t,Qo,Ho)},Jo=Xo,qo=zo,Zo=_o;var ti=function(t){return Jo(t,Zo,qo)},ei=J(y,"DataView"),ri=jr,ni=J(y,"Promise"),oi=J(y,"Set"),ii=J(y,"WeakMap"),ai=D,si=U,ci="[object Map]",ui="[object Promise]",fi="[object Set]",li="[object WeakMap]",hi="[object DataView]",vi=si(ei),pi=si(ri),bi=si(ni),yi=si(oi),_i=si(ii),di=ai;(ei&&di(new ei(new ArrayBuffer(1)))!=hi||ri&&di(new ri)!=ci||ni&&di(ni.resolve())!=ui||oi&&di(new oi)!=fi||ii&&di(new ii)!=li)&&(di=function(t){var e=ai(t),r="[object Object]"==e?t.constructor:void 0,n=r?si(r):"";if(n)switch(n){case vi:return hi;case pi:return ci;case bi:return ui;case yi:return fi;case _i:return li}return e});var gi=di,Oi=Object.prototype.hasOwnProperty;var ji=function(t){var e=t.length,r=new t.constructor(e);return e&&"string"==typeof t[0]&&Oi.call(t,"index")&&(r.index=t.index,r.input=t.input),r},wi=y.Uint8Array,Ai=wi;var Si=function(t){var e=new t.constructor(t.byteLength);return new Ai(e).set(new Ai(t)),e},mi=Si;var Ei=function(t,e){var r=e?mi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)},Ni=/\w*$/;var Di=function(t){var e=new t.constructor(t.source,Ni.exec(t));return e.lastIndex=t.lastIndex,e},Ri=_?_.prototype:void 0,Mi=Ri?Ri.valueOf:void 0;var ki=Si;var Ii=Si,Li=Ei,Pi=Di,Ci=function(t){return Mi?Object(Mi.call(t)):{}},Ti=function(t,e){var r=e?ki(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)};var xi=function(t,e,r){var n=t.constructor;switch(e){case"[object ArrayBuffer]":return Ii(t);case"[object Boolean]":case"[object Date]":return new n(+t);case"[object DataView]":return Li(t,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Ti(t,r);case"[object Map]":case"[object Set]":return new n;case"[object Number]":case"[object String]":return new n(t);case"[object RegExp]":return Pi(t);case"[object Symbol]":return Ci(t)}},Ui=R,Fi=Object.create,zi=function(){function t(){}return function(e){if(!Ui(e))return{};if(Fi)return Fi(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),Wi=Co,$i=Tt;var Bi=function(t){return"function"!=typeof t.constructor||$i(t)?{}:zi(Wi(t))},Gi=gi,Vi=Ut;var Xi=function(t){return Vi(t)&&"[object Map]"==Gi(t)},Yi=ne,Hi=ie&&ie.isMap,Qi=Hi?Yi(Hi):Xi,Ki=gi,Ji=Ut;var qi=function(t){return Ji(t)&&"[object Set]"==Ki(t)},Zi=ne,ta=ie&&ie.isSet,ea=ta?Zi(ta):qi,ra=io,na=ao,oa=at,ia=uo,aa=jo,sa=Ao,ca=So,ua=Lo,fa=Bo,la=Ko,ha=ti,va=gi,pa=ji,ba=xi,ya=Bi,_a=Yt,da=Jt,ga=Qi,Oa=R,ja=ea,wa=Ee,Aa=_o,Sa="[object Arguments]",ma="[object Function]",Ea="[object Object]",Na={};Na[Sa]=Na["[object Array]"]=Na["[object ArrayBuffer]"]=Na["[object DataView]"]=Na["[object Boolean]"]=Na["[object Date]"]=Na["[object Float32Array]"]=Na["[object Float64Array]"]=Na["[object Int8Array]"]=Na["[object Int16Array]"]=Na["[object Int32Array]"]=Na["[object Map]"]=Na["[object Number]"]=Na[Ea]=Na["[object RegExp]"]=Na["[object Set]"]=Na["[object String]"]=Na["[object Symbol]"]=Na["[object Uint8Array]"]=Na["[object Uint8ClampedArray]"]=Na["[object Uint16Array]"]=Na["[object Uint32Array]"]=!0,Na["[object Error]"]=Na[ma]=Na["[object WeakMap]"]=!1;var Da=function t(e,r,n,o,i,a){var s,c=1&r,u=2&r,f=4&r;if(n&&(s=i?n(e,o,i,a):n(e)),void 0!==s)return s;if(!Oa(e))return e;var l=_a(e);if(l){if(s=pa(e),!c)return ca(e,s)}else{var h=va(e),v=h==ma||"[object GeneratorFunction]"==h;if(da(e))return sa(e,c);if(h==Ea||h==Sa||v&&!i){if(s=u||v?{}:ya(e),!c)return u?fa(e,aa(s,e)):ua(e,ia(s,e))}else{if(!Na[h])return i?e:{};s=ba(e,h,c)}}a||(a=new ra);var p=a.get(e);if(p)return p;a.set(e,s),ja(e)?e.forEach(function(o){s.add(t(o,r,n,o,e,a))}):ga(e)&&e.forEach(function(o,i){s.set(i,t(o,r,n,i,e,a))});var b=l?void 0:(f?u?ha:la:u?Aa:wa)(e);return na(b||e,function(o,i){b&&(o=e[i=o]),oa(s,i,t(o,r,n,i,e,a))}),s};var Ra=cn,Ma=function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var i=Array(o);++n<o;)i[n]=t[n+e];return i};var ka=function(t,e){return e.length<2?t:Ra(t,Ma(e,0,-1))},Ia=rn,La=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0},Pa=ka,Ca=on;var Ta=function(t,e){return e=Ia(e,t),null==(t=Pa(t,e))||delete t[Ca(La(e))]},xa=D,Ua=Co,Fa=Ut,za=Function.prototype,Wa=Object.prototype,$a=za.toString,Ba=Wa.hasOwnProperty,Ga=$a.call(Object);var Va=function(t){if(!Fa(t)||"[object Object]"!=xa(t))return!1;var e=Ua(t);if(null===e)return!0;var r=Ba.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&$a.call(r)==Ga};var Xa=function(t){return Va(t)?void 0:t},Ya=Xt,Ha=Yt,Qa=_?_.isConcatSpreadable:void 0;var Ka=Po,Ja=function(t){return Ha(t)||Ya(t)||!!(Qa&&t&&t[Qa])};var qa=function t(e,r,n,o,i){var a=-1,s=e.length;for(n||(n=Ja),i||(i=[]);++a<s;){var c=e[a];r>0&&n(c)?r>1?t(c,r-1,n,o,i):Ka(i,c):o||(i[i.length]=c)}return i},Za=qa;var ts=function(t){return(null==t?0:t.length)?Za(t,1):[]},es=vt,rs=dt;var ns=Gr,os=Da,is=Ta,as=rn,ss=ut,cs=Xa,us=ti,fs=function(t){return rs(es(t,void 0,ts),t+"")}(function(t,e){var r={};if(null==t)return r;var n=!1;e=ns(e,function(e){return e=as(e,t),n||(n=e.length>1),e}),ss(t,us(t),r),n&&(r=os(r,7,cs));for(var o=e.length;o--;)is(r,e[o]);return r}),ls=h(fs);const hs=new class{AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;constructor(t){switch(this.AppName=t,this.platform=process.platform,this.homedir=r.homedir(),this.platform){case"darwin":this.isMAC=!0,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=n.join(this.homedir,"Library","Application Support");break;case"win32":this.isMAC=!1,this.isWIN=!0,this.isLINUX=!1,this.saveFolder=process.env.APPDATA||n.join(this.homedir,"AppData","Roaming");break;case"linux":this.isMAC=!1,this.isWIN=!1,this.isLINUX=!0,this.saveFolder=process.env.XDG_CONFIG_HOME||n.join(this.homedir,".config");break;default:console.log(`當前系統是未知的平台: ${this.platform}`),this.isMAC=!1,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=this.homedir}this.appFolder=n.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder)}addPath(...t){return n.join(...t)}folderCheck(t){e.mkdirSync(t,{recursive:!0})}fileCheck(t){e.existsSync(t)||e.writeFileSync(t,"",{encoding:"utf8"})}}("aiia-sdk");class vs{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=hs.addPath(hs.appFolder,this.fileName),hs.fileCheck(this.filePath)}getFileDataSync(){const t=e.readFileSync(this.filePath,"utf8");try{return JSON.parse(t)}catch(t){return{}}}setFileDataSync(t){try{const r=JSON.stringify(t);e.writeFileSync(this.filePath,r,"utf8")}catch(t){}}async getFileData(){return new Promise(t=>{e.readFile(this.filePath,"utf8",(e,r)=>{if(e)t({});else try{t(JSON.parse(r))}catch(e){t({})}})})}async setFileData(t){return new Promise(r=>{try{const n=JSON.stringify(t);e.writeFile(this.filePath,n,"utf8",t=>{r()})}catch(t){}})}async getItem(t){return(await this.getFileData())[t]??null}async setItem(t,e){const r=await this.getFileData();r[t]=e,await this.setFileData(r)}async removeItem(t){const e=await this.getFileData(),r=ls(e,t);await this.setFileData(r)}async clear(){await this.setFileData({})}getItemSync(t){return this.getFileDataSync()[t]??null}setItemSync(t,e){const r=this.getFileDataSync();r[t]=e,this.setFileDataSync(r)}removeItemSync(t){const e=ls(this.getFileDataSync(),t);this.setFileDataSync(e)}clearSync(){this.setFileDataSync({})}}var ps=xr,bs=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},ys=function(t){return this.__data__.has(t)};function _s(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new ps;++e<r;)this.add(t[e])}_s.prototype.add=_s.prototype.push=bs,_s.prototype.has=ys;var ds=_s,gs=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1},Os=function(t,e){return t.has(e)};var js=function(t,e,r,n,o,i){var a=1&r,s=t.length,c=e.length;if(s!=c&&!(a&&c>s))return!1;var u=i.get(t),f=i.get(e);if(u&&f)return u==e&&f==t;var l=-1,h=!0,v=2&r?new ds:void 0;for(i.set(t,e),i.set(e,t);++l<s;){var p=t[l],b=e[l];if(n)var y=a?n(b,p,l,e,t,i):n(p,b,l,t,e,i);if(void 0!==y){if(y)continue;h=!1;break}if(v){if(!gs(e,function(t,e){if(!Os(v,e)&&(p===t||o(p,t,r,n,i)))return v.push(e)})){h=!1;break}}else if(p!==b&&!o(p,b,r,n,i)){h=!1;break}}return i.delete(t),i.delete(e),h};var ws=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r};var As=wi,Ss=rt,ms=js,Es=ws,Ns=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},Ds=_?_.prototype:void 0,Rs=Ds?Ds.valueOf:void 0;var Ms=function(t,e,r,n,o,i,a){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!i(new As(t),new As(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Ss(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var s=Es;case"[object Set]":var c=1&n;if(s||(s=Ns),t.size!=e.size&&!c)return!1;var u=a.get(t);if(u)return u==e;n|=2,a.set(t,e);var f=ms(s(t),s(e),n,o,i,a);return a.delete(t),f;case"[object Symbol]":if(Rs)return Rs.call(t)==Rs.call(e)}return!1},ks=Ko,Is=Object.prototype.hasOwnProperty;var Ls=io,Ps=js,Cs=Ms,Ts=function(t,e,r,n,o,i){var a=1&r,s=ks(t),c=s.length;if(c!=ks(e).length&&!a)return!1;for(var u=c;u--;){var f=s[u];if(!(a?f in e:Is.call(e,f)))return!1}var l=i.get(t),h=i.get(e);if(l&&h)return l==e&&h==t;var v=!0;i.set(t,e),i.set(e,t);for(var p=a;++u<c;){var b=t[f=s[u]],y=e[f];if(n)var _=a?n(y,b,f,e,t,i):n(b,y,f,t,e,i);if(!(void 0===_?b===y||o(b,y,r,n,i):_)){v=!1;break}p||(p="constructor"==f)}if(v&&!p){var d=t.constructor,g=e.constructor;d==g||!("constructor"in t)||!("constructor"in e)||"function"==typeof d&&d instanceof d&&"function"==typeof g&&g instanceof g||(v=!1)}return i.delete(t),i.delete(e),v},xs=gi,Us=Yt,Fs=Jt,zs=ue,Ws="[object Arguments]",$s="[object Array]",Bs="[object Object]",Gs=Object.prototype.hasOwnProperty;var Vs=function(t,e,r,n,o,i){var a=Us(t),s=Us(e),c=a?$s:xs(t),u=s?$s:xs(e),f=(c=c==Ws?Bs:c)==Bs,l=(u=u==Ws?Bs:u)==Bs,h=c==u;if(h&&Fs(t)){if(!Fs(e))return!1;a=!0,f=!1}if(h&&!f)return i||(i=new Ls),a||zs(t)?Ps(t,e,r,n,o,i):Cs(t,e,c,r,n,o,i);if(!(1&r)){var v=f&&Gs.call(t,"__wrapped__"),p=l&&Gs.call(e,"__wrapped__");if(v||p){var b=v?t.value():t,y=p?e.value():e;return i||(i=new Ls),o(b,y,r,n,i)}}return!!h&&(i||(i=new Ls),Ts(t,e,r,n,o,i))},Xs=Ut;var Ys=function t(e,r,n,o,i){return e===r||(null==e||null==r||!Xs(e)&&!Xs(r)?e!=e&&r!=r:Vs(e,r,n,o,t,i))},Hs=io,Qs=Ys;var Ks=R;var Js=function(t){return t==t&&!Ks(t)},qs=Js,Zs=Ee;var tc=function(t,e){return function(r){return null!=r&&(r[t]===e&&(void 0!==e||t in Object(r)))}},ec=function(t,e,r,n){var o=r.length,i=o,a=!n;if(null==t)return!i;for(t=Object(t);o--;){var s=r[o];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<i;){var c=(s=r[o])[0],u=t[c],f=s[1];if(a&&s[2]){if(void 0===u&&!(c in t))return!1}else{var l=new Hs;if(n)var h=n(u,f,c,t,e,l);if(!(void 0===h?Qs(f,u,3,n,l):h))return!1}}return!0},rc=function(t){for(var e=Zs(t),r=e.length;r--;){var n=e[r],o=t[n];e[r]=[n,o,qs(o)]}return e},nc=tc;var oc=rn,ic=Xt,ac=Yt,sc=Nt,cc=wt,uc=on;var fc=function(t,e,r){for(var n=-1,o=(e=oc(e,t)).length,i=!1;++n<o;){var a=uc(e[n]);if(!(i=null!=t&&r(t,a)))break;t=t[a]}return i||++n!=o?i:!!(o=null==t?0:t.length)&&cc(o)&&sc(a,o)&&(ac(t)||ic(t))},lc=function(t,e){return null!=t&&e in Object(t)},hc=fc;var vc=function(t,e){return null!=t&&hc(t,e,lc)},pc=Ys,bc=ln,yc=vc,_c=$e,dc=Js,gc=tc,Oc=on;var jc=function(t,e){return _c(t)&&dc(e)?gc(Oc(t),e):function(r){var n=bc(r,t);return void 0===n&&n===e?yc(r,t):pc(e,n,3)}};var wc=cn;var Ac=function(t){return function(e){return wc(e,t)}},Sc=function(t){return function(e){return null==e?void 0:e[t]}},mc=Ac,Ec=$e,Nc=on;var Dc=function(t){return Ec(t)?Sc(Nc(t)):mc(t)},Rc=function(t){var e=rc(t);return 1==e.length&&e[0][2]?nc(e[0][0],e[0][1]):function(r){return r===t||ec(r,t,e)}},Mc=jc,kc=ft,Ic=Yt,Lc=Dc;var Pc=function(t){return"function"==typeof t?t:null==t?kc:"object"==typeof t?Ic(t)?Mc(t[0],t[1]):Rc(t):Lc(t)};var Cc=function(t){return function(e,r,n){for(var o=-1,i=Object(e),a=n(e),s=a.length;s--;){var c=a[t?s:++o];if(!1===r(i[c],c,i))break}return e}}(),Tc=Ee;var xc=mt;var Uc=function(t,e){return function(r,n){if(null==r)return r;if(!xc(r))return t(r,n);for(var o=r.length,i=e?o:-1,a=Object(r);(e?i--:++i<o)&&!1!==n(a[i],i,a););return r}}(function(t,e){return t&&Cc(t,e,Tc)}),Fc=mt;var zc=Gr,Wc=Pc,$c=function(t,e){var r=-1,n=Fc(t)?Array(t.length):[];return Uc(t,function(t,o,i){n[++r]=e(t,o,i)}),n},Bc=Yt;var Gc,Vc=h(function(t,e){return(Bc(t)?zc:$c)(t,Wc(e))});class Xc{instance;controller;constructor(t){this.controller=new AbortController,this.instance=c.create({baseURL:t,signal:this.controller.signal})}async getAccessToken(t,e){const r={license_number:t,token_value:e??""},n=await this.instance.post("/api/v1/license/agent_token",r).then(t=>hn(t.data,"token_value","")).catch(()=>null);if(null===n)throw new Error(fn["網絡錯誤"]);if(""===n)throw new Error(fn["獲取權杖失敗"]);return n}async getProjectList(t){const e=await this.instance.post("/api/v1/license/projects",{license_number:t}).then(t=>Vc(hn(t,"data.projects",[]),({id:t,sub_project_name:e})=>({id:t,name:e}))).catch(t=>null);if(null===e)throw new Error(fn["網絡錯誤"]);if(0===e.length)throw new Error(fn["沒有可用專案"]);return e}onDestory(){this.controller.abort()}}!function(t){t[t.MDN_NORMAL_CLOSURE=1e3]="MDN_NORMAL_CLOSURE",t[t.MDN_GOING_AWAY=1001]="MDN_GOING_AWAY",t[t.MDN_PROTOCOL_ERROR=1002]="MDN_PROTOCOL_ERROR",t[t.MDN_UNSUPPORTED_DATA=1003]="MDN_UNSUPPORTED_DATA",t[t.MDN_RESERVED_1004=1004]="MDN_RESERVED_1004",t[t.MDN_NO_STATUS_RECEIVED=1005]="MDN_NO_STATUS_RECEIVED",t[t.MDN_ABNORMAL_CLOSURE=1006]="MDN_ABNORMAL_CLOSURE",t[t.MDN_INVALID_FRAME_PAYLOAD=1007]="MDN_INVALID_FRAME_PAYLOAD",t[t.MDN_POLICY_VIOLATION=1008]="MDN_POLICY_VIOLATION",t[t.MDN_MESSAGE_TOO_BIG=1009]="MDN_MESSAGE_TOO_BIG",t[t.MDN_MANDATORY_EXTENSION=1010]="MDN_MANDATORY_EXTENSION",t[t.MDN_INTERNAL_ERROR=1011]="MDN_INTERNAL_ERROR",t[t.MDN_SERVICE_RESTART=1012]="MDN_SERVICE_RESTART",t[t.MDN_TRY_AGAIN_LATER=1013]="MDN_TRY_AGAIN_LATER",t[t.MDN_BAD_GATEWAY=1014]="MDN_BAD_GATEWAY",t[t.MDN_TLS_HANDSHAKE=1015]="MDN_TLS_HANDSHAKE",t[t.MANUAL_CLOSE=4001]="MANUAL_CLOSE",t[t.WS_5000_NORAML_CLOSURE=5e3]="WS_5000_NORAML_CLOSURE",t[t.WS_5001_UNAUTHORIZED=5001]="WS_5001_UNAUTHORIZED",t[t.WS_5002_LICENSE_EXPIRED=5002]="WS_5002_LICENSE_EXPIRED",t[t.WS_5003_TOKEN_EXPIRED=5003]="WS_5003_TOKEN_EXPIRED"}(Gc||(Gc={}));class Yc{socket;messageSub;startLinkSub;destorySub;closeSub;get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get startLink(){return this.startLinkSub.asObservable()}messageQueue=[];isConnected;isStart;constructor(){this.isConnected=!1,this.isStart=!1,this.messageSub=new o,this.startLinkSub=new o,this.closeSub=new o,this.destorySub=new o}start(t){this.isStart=!0,this.socket=new f(t,{autoPong:!0}),i(this.socket,"open").pipe(a(this.destorySub)).subscribe(t=>{this.isConnected=!0,this.startLinkSub.next(),Vn.info("Proxy startup"),this.flushMessageQueue()}),i(this.socket,"message").pipe(a(this.destorySub)).subscribe(t=>{const{data:e}=t;this.messageSub.next(e)}),i(this.socket,"error").pipe(a(this.destorySub)).subscribe(t=>{const{error:e}=t;Vn.error("Proxy has some problem",e)}),i(this.socket,"close").pipe(a(this.destorySub)).subscribe(t=>{this.isConnected=!1;const{code:e}=t;switch(e){case Gc.MANUAL_CLOSE:Vn.debug("MANUAL_CLOSE stop emit event and reconnecting");break;case Gc.WS_5000_NORAML_CLOSURE:case Gc.MDN_NORMAL_CLOSURE:case Gc.MDN_GOING_AWAY:this.closeSub.next("close"),Vn.debug("Safe close connection");break;case Gc.MDN_NO_STATUS_RECEIVED:case Gc.MDN_ABNORMAL_CLOSURE:this.closeSub.next("close"),Vn.warn("Cloud disconnect",{code:e},t);break;case Gc.WS_5001_UNAUTHORIZED:case Gc.WS_5002_LICENSE_EXPIRED:this.closeSub.next("no_permissions"),Vn.warn("Please contact Graphen");break;case Gc.WS_5003_TOKEN_EXPIRED:this.closeSub.next("reconnect"),Vn.debug("Reconnect");break;default:this.closeSub.next("close"),Vn.error("Other status always close connection",{code:e})}})}flushMessageQueue(){for(;this.messageQueue.length>0&&this.isConnected;){const t=this.messageQueue.shift();t&&this.socket.send(t)}}send(t){this.isConnected?this.socket.send(t):this.messageQueue.push(t)}onManualClose(){this.isStart&&this.socket?.close(Gc.MANUAL_CLOSE)}onDestory(){this.destorySub.next(),this.destorySub.complete()}}class Hc{sdk;server;get url(){return this.sdk.config.endPoint.socket}get port(){return this.sdk.config.port}get webserver(){return this.sdk.config.webserver}constructor(t){this.sdk=t}start(){this.server=new u(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",t=>{const e=new o;let r=(n=t.handshake.query.uuid,Ht(n)?hn(n,"[0]",void 0):n??void 0);var n;const c=new Yc;Vn.debug("client on",t.id),void 0===r?(this.sdk.getProjectList().then(e=>{t.emit("list",e)}),i(t,"uuid").pipe(s(1),a(e)).subscribe(n=>{r=n,this.openChannel(r,t,c,e)})):this.openChannel(r,t,c,e),t.on("disconnect",t=>{e.next(),e.complete(),Vn.debug("client off",t)})}),void 0===this.webserver&&this.server.listen(this.port)}openChannel(t,e,r,n){i(e,"cloud").pipe(a(n)).subscribe(t=>{r.send(t)}),r.message.pipe(a(n)).subscribe(t=>{e.emit("cloud",t)}),r.close.pipe(a(n)).subscribe(async n=>{switch(n){case"close":case"no_permissions":e.emit("channel",n),r.onDestory();break;case"reconnect":await this.sdk.replaceAccessToken(),r.start(this.getProxySocketURL(t))}}),r.startLink.pipe(a(n)).subscribe(()=>{e.emit("channel","open")}),r.start(this.getProxySocketURL(t))}getProxySocketURL(t){return`${this.url}/v1/chat/project/${this.sdk.accessToken}/${t}`}onDestory(){this.server&&this.server.close()}}class Qc{config;stroage;apiProxy;chat;isStart;destorySub;get destoryObs(){return this.destorySub.asObservable()}access_token;get accessToken(){return this.access_token}constructor(t,e){this.config=t,this.stroage=e,this.isStart=!1,this.destorySub=new o,this.access_token=e.getItemSync(vn),this.apiProxy=new Xc(this.config.endPoint.api),Vn.info("[Initialize] proxy is finished"),this.chat=new Hc(this),Vn.info("[Initialize] chat is finished","Start at PORT:",this.config.port)}async start(){if(this.isStart)throw new Error(fn["重複初始化"]);this.isStart=!0,await this.replaceAccessToken(),this.chat.start(),Vn.info("Chat service startup")}async replaceAccessToken(){const t=await this.apiProxy.getAccessToken(this.config.license,this.access_token);return this.access_token=t,this.stroage.setItemSync(vn,t),t}async getProjectList(){return await this.apiProxy.getProjectList(this.config.license)}onDestory(){this.apiProxy.onDestory(),this.chat.onDestory(),this.destorySub.next(),this.destorySub.complete(),Vn.info("[Destory] core module done")}}function Kc(t){if(pn){if(void 0===hn(t,"license",void 0))throw new Error(fn["未提供憑證"]);Vn.info("Initialize necessary modules");const e=new bn(Pe({},t));Yn(e.debug),Vn.info("config finished");const r=new vs;Vn.info("storage finished");const n=new Qc(e,r);return Vn.info("core finished"),n.start(),Vn.info("Service startup"),()=>{n.onDestory()}}throw new Error(fn["環境錯誤(nodejs)"])}export{Kc as aiiaCore};
1
+ import{assign as e,forEach as t,get as s,map as o,omit as i,isArray as r}from"lodash";import n from"moment";import{Server as c}from"socket.io";import{Subject as a,fromEvent as h,takeUntil as l,take as u}from"rxjs";import d from"axios";import p from"ws";import f from"fs";import g from"os";import _ from"path";import{Client as S}from"node-osc";var E;!function(e){e["網絡錯誤"]="ERROR CODE: 500",e["環境錯誤(browser)"]="ERROR CODE: 1001",e["Worklet模組載入失敗"]="ERROR CODE: 1002",e["未獲得媒體裝置權限"]="ERROR CODE: 1003",e["實例已摧毀"]="ERROR CODE: 1004",e["環境錯誤(nodejs)"]="ERROR CODE: 2001",e["未提供憑證"]="ERROR CODE: 2002",e["獲取權杖失敗"]="ERROR CODE: 2003",e["沒有可用專案"]="ERROR CODE: 2004",e["重複初始化"]="ERROR CODE: 2005"}(E||(E={}));const m="access_token",b="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node;class D{config;get webserver(){return this.config.webserver}get environment(){return this.config.env}get license(){return this.config.license??""}get port(){return function(e,t){const s=t??NaN;if(e){const t=parseInt(e);return isNaN(t)?s:t}return s}(process.env.PORT,this.config.port??3e3)}get ws_url(){return this.config.ws_url??""}get worklet_url(){return this.config.worklet_url??""}get project(){const{project:t}=e({},this.config);return void 0===t?{specific:!1}:"string"==typeof t?{name:t,id:t,specific:!1}:e({},t,{specific:!0})}get endPoint(){return this.environment,{api:"https://aiia-content-management-dev-21193779403.asia-east1.run.app",socket:"wss://graphen-agentic-workflow-dev-21193779403.asia-east1.run.app"}}get debug(){return this.config.debug??!0}get mediaStream(){return this.config.mediaStream}get chunkTimeInSeconds(){return"number"==typeof this.config.chunkTimeInSeconds&&this.config.chunkTimeInSeconds>0?this.config.chunkTimeInSeconds:1}get llmSampleRate(){return"number"==typeof this.config.llmSampleRate&&this.config.llmSampleRate>0?this.config.llmSampleRate:16e3}get faceDetection(){return e({frame:3,confidence:80},this.config.faceDetection)}get autoClearSubtitle(){const{user:t,aiia:s}=e({},this.config.autoClearSubtitle);let o=3e3,i=3e3;return"number"==typeof t?o=t>=0?t:o:!1===t&&(o=NaN),"number"==typeof s?i=s>=0?s:i:!1===s&&(i=NaN),{userDelayTime:o,aiiaDelayTime:i}}constructor(e){this.config=e}}var y;!function(e){e["通道、雲端服務、麥克風都已就緒"]="CODE: 1000",e["未取得媒體裝置權限,請重新設定或忽略此訊息"]="CODE: 1001",e["請訂閱專案列表"]="CODE: 1002",e["初始化必要依賴"]="CODE: 1010",e["指定依賴已完成"]="CODE: 1011",e["啟動SDK"]="CODE: 1012",e["結束SDK"]="CODE: 1013",e["安全的關閉連線"]="CODE: 2000",e["無副作用的關閉連線"]="CODE: 2001",e["與雲端的服務中斷"]="CODE: 2002",e["沒有授權,請聯繫Graphen"]="CODE: 2003",e["自動重新連線連端服務"]="CODE: 2004",e["未預期的斷線,請聯繫Graphen"]="CODE: 2005",e["開始初始化必要模組"]="CODE: 2010",e["指定模組初始化完成"]="CODE: 2011",e["啟動服務"]="CODE: 2012",e["服務結束"]="CODE: 2013"}(y||(y={}));const O={code:console.log,debug:console.log,info:console.log,warn:console.warn,error:console.error,fatal:console.error},N=[];function R(e){return N.push(e),R}const A=new Proxy(O,{get(e,s,o){if("string"==typeof s)switch(s){case"debug":case"info":case"error":case"warn":case"fatal":case"code":return(...o)=>{const i=n().format("yyyy-MM-DD[T]HH:mm:ss");t(N,e=>{e.next(s,i,...o)}),e[s](`[Aiia::${s}_${i}_]`,...o)};default:return}},set:(e,t,s,o)=>!0});class w{config;server;memberSub;get port(){return this.config.port}get webserver(){return this.config.webserver}get memberChange(){return this.memberSub.asObservable()}constructor(e){this.config=e,this.memberSub=new a}start(){if(this.server=new c(this.webserver,{cors:{origin:"*"}}),this.server.on("connection",e=>{this.memberSub.next({type:"in",socket:e}),A.debug("client on",e.id),e.on("disconnect",t=>{this.memberSub.next({type:"out",socket:e}),A.debug("client off",t)})}),void 0===this.webserver){const e=this.port;this.server.listen(e),A.info("Websocket server run on",e)}else A.info("Websocket server rely your webserver.")}onDestroy(){this.server&&this.server.close()}}class C{instance;controller;constructor(e){this.controller=new AbortController,this.instance=d.create({baseURL:e,signal:this.controller.signal})}async getAccessToken(e,t){const o={license_number:e,token_value:t??""},i=await this.instance.post("/api/v1/license/agent_token",o).then(e=>s(e.data,"token_value","")).catch(()=>null);if(null===i)throw new Error(E["網絡錯誤"]);if(""===i)throw new Error(E["獲取權杖失敗"]);return i}async getProjectList(e){const t=await this.instance.post("/api/v1/license/projects",{license_number:e}).then(e=>o(s(e,"data.projects",[]),({id:e,sub_project_name:t})=>({id:e,name:t}))).catch(e=>null);if(null===t)throw new Error(E["網絡錯誤"]);if(0===t.length)throw new Error(E["沒有可用專案"]);return t}onDestroy(){this.controller.abort()}}var M;!function(e){e[e.MDN_NORMAL_CLOSURE=1e3]="MDN_NORMAL_CLOSURE",e[e.MDN_GOING_AWAY=1001]="MDN_GOING_AWAY",e[e.MDN_PROTOCOL_ERROR=1002]="MDN_PROTOCOL_ERROR",e[e.MDN_UNSUPPORTED_DATA=1003]="MDN_UNSUPPORTED_DATA",e[e.MDN_RESERVED_1004=1004]="MDN_RESERVED_1004",e[e.MDN_NO_STATUS_RECEIVED=1005]="MDN_NO_STATUS_RECEIVED",e[e.MDN_ABNORMAL_CLOSURE=1006]="MDN_ABNORMAL_CLOSURE",e[e.MDN_INVALID_FRAME_PAYLOAD=1007]="MDN_INVALID_FRAME_PAYLOAD",e[e.MDN_POLICY_VIOLATION=1008]="MDN_POLICY_VIOLATION",e[e.MDN_MESSAGE_TOO_BIG=1009]="MDN_MESSAGE_TOO_BIG",e[e.MDN_MANDATORY_EXTENSION=1010]="MDN_MANDATORY_EXTENSION",e[e.MDN_INTERNAL_ERROR=1011]="MDN_INTERNAL_ERROR",e[e.MDN_SERVICE_RESTART=1012]="MDN_SERVICE_RESTART",e[e.MDN_TRY_AGAIN_LATER=1013]="MDN_TRY_AGAIN_LATER",e[e.MDN_BAD_GATEWAY=1014]="MDN_BAD_GATEWAY",e[e.MDN_TLS_HANDSHAKE=1015]="MDN_TLS_HANDSHAKE",e[e.MANUAL_CLOSE=4001]="MANUAL_CLOSE",e[e.WS_5000_NORAML_CLOSURE=5e3]="WS_5000_NORAML_CLOSURE",e[e.WS_5001_UNAUTHORIZED=5001]="WS_5001_UNAUTHORIZED",e[e.WS_5002_LICENSE_EXPIRED=5002]="WS_5002_LICENSE_EXPIRED",e[e.WS_5003_TOKEN_EXPIRED=5003]="WS_5003_TOKEN_EXPIRED"}(M||(M={}));class k{socket;messageSub;linkStartSub;destorySub;closeSub;get message(){return this.messageSub.asObservable()}get close(){return this.closeSub.asObservable()}get linkStart(){return this.linkStartSub.asObservable()}messageQueue=[];isConnected;constructor(){this.isConnected=!1,this.messageSub=new a,this.linkStartSub=new a,this.closeSub=new a,this.destorySub=new a}start(e){this.socket=new p(e,{autoPong:!0}),h(this.socket,"open").pipe(l(this.destorySub)).subscribe(()=>{this.isConnected=!0,A.code(y["啟動服務"],"proxy"),this.flushMessageQueue(),this.linkStartSub.next()}),h(this.socket,"message").pipe(l(this.destorySub)).subscribe(e=>{const{data:t}=e;this.messageSub.next(t)}),h(this.socket,"error").pipe(l(this.destorySub)).subscribe(e=>{const{error:t}=e;A.error("Proxy has some problem",t)}),h(this.socket,"close").pipe(l(this.destorySub)).subscribe(e=>{this.isConnected=!1;const{code:t,reason:s}=e;switch(t){case M.MANUAL_CLOSE:A.code(y["無副作用的關閉連線"]);break;case M.WS_5000_NORAML_CLOSURE:case M.MDN_NORMAL_CLOSURE:case M.MDN_GOING_AWAY:this.closeSub.next("close"),A.code(y["安全的關閉連線"]);break;case M.MDN_NO_STATUS_RECEIVED:case M.MDN_ABNORMAL_CLOSURE:this.closeSub.next("close"),A.code(y["與雲端的服務中斷"],{code:t,reason:s});break;case M.WS_5001_UNAUTHORIZED:case M.WS_5002_LICENSE_EXPIRED:this.closeSub.next("no_permissions"),A.code(y["沒有授權,請聯繫Graphen"]);break;case M.WS_5003_TOKEN_EXPIRED:this.closeSub.next("reconnect"),A.code(y["自動重新連線連端服務"]);break;default:this.closeSub.next("close"),A.code(y["未預期的斷線,請聯繫Graphen"],{code:t,reason:s})}})}reconnect(e){this.onDestroy(),this.destorySub=new a,this.start(e)}flushMessageQueue(){for(;this.messageQueue.length>0&&this.isConnected&&void 0!==this.socket;){const e=this.messageQueue.shift();e&&this.socket.send(e)}}send(e){this.isConnected&&void 0!==this.socket?this.socket.send(e):this.messageQueue.push(e)}onClose(){this.socket?.close(M.MANUAL_CLOSE)}onDestroy(){this.destorySub.next(),this.destorySub.complete()}}const L=new class{AppName;platform;isMAC;isWIN;isLINUX;saveFolder;homedir;appFolder;EOL;constructor(e){switch(this.AppName=e,this.platform=process.platform,this.homedir=g.homedir(),this.EOL=g.EOL,this.platform){case"darwin":this.isMAC=!0,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=_.join(this.homedir,"Library","Application Support");break;case"win32":this.isMAC=!1,this.isWIN=!0,this.isLINUX=!1,this.saveFolder=process.env.APPDATA||_.join(this.homedir,"AppData","Roaming");break;case"linux":this.isMAC=!1,this.isWIN=!1,this.isLINUX=!0,this.saveFolder=process.env.XDG_CONFIG_HOME||_.join(this.homedir,".config");break;default:console.log(`當前系統是未知的平台: ${this.platform}`),this.isMAC=!1,this.isWIN=!1,this.isLINUX=!1,this.saveFolder=this.homedir}this.appFolder=_.join(this.saveFolder,this.AppName),this.folderCheck(this.appFolder)}addPath(...e){return _.join(...e)}folderCheck(e){f.mkdirSync(e,{recursive:!0})}fileCheck(e){f.existsSync(e)||f.writeFileSync(e,"",{encoding:"utf8"})}}("aiia-sdk");class P{type="node";filePath;fileName;constructor(){this.fileName="storage.json",this.filePath=L.addPath(L.appFolder,this.fileName),L.fileCheck(this.filePath)}getFileDataSync(){const e=f.readFileSync(this.filePath,"utf8");try{return JSON.parse(e)}catch(e){return{}}}setFileDataSync(e){try{const t=JSON.stringify(e);f.writeFileSync(this.filePath,t,"utf8")}catch(e){}}async getFileData(){return new Promise(e=>{f.readFile(this.filePath,"utf8",(t,s)=>{if(t)e({});else try{e(JSON.parse(s))}catch(t){e({})}})})}async setFileData(e){return new Promise(t=>{try{const s=JSON.stringify(e);f.writeFile(this.filePath,s,"utf8",e=>{t()})}catch(e){}})}async getItem(e){return(await this.getFileData())[e]??null}async setItem(e,t){const s=await this.getFileData();s[e]=t,await this.setFileData(s)}async removeItem(e){const t=await this.getFileData(),s=i(t,e);await this.setFileData(s)}async clear(){await this.setFileData({})}getItemSync(e){return this.getFileDataSync()[e]??null}setItemSync(e,t){const s=this.getFileDataSync();s[e]=t,this.setFileDataSync(s)}removeItemSync(e){const t=i(this.getFileDataSync(),e);this.setFileDataSync(t)}clearSync(){this.setFileDataSync({})}}class I{config;constructor(e){this.config=e,console.log("UEProxy, config=",e)}start(){console.log("UEProxy, start proxy")}send(e){let t=this.cloudToObj(e);if(t&&t.signal&&"osc"==t.signal){console.log("UEProxy, payload=",t);try{let e=t.content;const s=new S(e.host,e.port);console.debug("UEProxy, client open to port "+e.port),s.send(e.message,e=>{e&&console.error(e),s.close(),console.debug("UEProxy, client closed")})}catch(e){console.log(e)}}}cloudToObj(e){try{return JSON.parse(e)}catch(e){console.error("message transfer fail",e)}}onDestroy(){console.log("UEProxy, destroy proxy")}}class v{filePath;fileName;constructor(){this.fileName="log.txt",this.filePath=L.addPath(L.appFolder,this.fileName)}next(e,t,...s){try{const o=s.reduce((e,t)=>{switch(typeof t){case"string":case"number":case"bigint":return`${e} ${t.toString()}`;case"boolean":return`${e} ${t?"true":"false"}`;case"object":try{return`${e} ${JSON.stringify(t)}`}catch(t){return e}case"symbol":case"undefined":case"function":return`${e} [${typeof t}]`}},"");f.appendFileSync(this.filePath,`LOG(${e})__${t}__::${o}${L.EOL}`,{encoding:"utf8"})}catch(e){}}}class T{config;stroage;apiProxy;chat;udpProxy;isStart;channelMap;destorySub;access_token;get accessToken(){return this.access_token}constructor(e,t){this.config=e,this.stroage=t,this.isStart=!1,this.destorySub=new a,this.channelMap=new Map,this.access_token=t.getItemSync(m),this.apiProxy=new C(this.config.endPoint.api),A.code(y["指定模組初始化完成"],"api"),this.chat=new w(this.config),A.code(y["指定模組初始化完成"],"chat"),this.udpProxy=new I(this.config),A.code(y["指定模組初始化完成"],"udp")}async start(){if(this.isStart)throw new Error(E["重複初始化"]);this.isStart=!0,await this.replaceAccessToken(),this.chat.memberChange.pipe(l(this.destorySub)).subscribe(({type:e,socket:t})=>{switch(e){case"in":{A.debug("member join",t.id);const e=new k,i=new a,n=(o=t.handshake.query.uuid,r(o)?s(o,"[0]",void 0):o??void 0);void 0===n?(this.getProjectList().then(e=>{t.emit("list",e)}),h(t,"uuid").pipe(u(1),l(i)).subscribe(s=>{this.openChannel(s,t,e,i)})):this.openChannel(n,t,e,i),this.channelMap.set(t.id,()=>{i.next(),i.complete()});break}case"out":A.debug("member leave",t.id),this.channelMap.has(t.id)&&(this.channelMap.get(t.id)(),this.channelMap.delete(t.id))}var o}),this.chat.start(),A.code(y["啟動服務"],"chat"),this.udpProxy.start(),A.code(y["啟動服務"],"udp")}async replaceAccessToken(){const e=await this.apiProxy.getAccessToken(this.config.license,this.access_token);return this.access_token=e,this.stroage.setItemSync(m,e),e}async getProjectList(){return await this.apiProxy.getProjectList(this.config.license)}getProxySocketURL(e){return`${this.config.endPoint.socket}/v1/chat/project/${this.accessToken}/${e}`}openChannel(e,t,s,o){h(t,"cloud").pipe(l(o)).subscribe(e=>{s.send(e)}),s.message.pipe(l(o)).subscribe(e=>{t.emit("cloud",e),this.udpProxy.send(e)}),s.close.pipe(l(o)).subscribe(async o=>{switch(t.emit("channel",o),o){case"close":case"no_permissions":s.onDestroy();break;case"reconnect":await this.replaceAccessToken(),s.reconnect(this.getProxySocketURL(e))}}),s.linkStart.pipe(l(o)).subscribe(()=>{t.emit("channel","open")}),o.subscribe(()=>{s.onClose()}),s.start(this.getProxySocketURL(e))}onDestroy(){this.apiProxy.onDestroy(),this.chat.onDestroy(),this.udpProxy.onDestroy(),this.destorySub.next(),this.destorySub.complete(),A.code(y["服務結束"])}}function x(t){if(b){if(void 0===s(t,"license",void 0))throw new Error(E["未提供憑證"]);!function(e){const{info:t,error:s,warn:o,debug:i,fatal:r,code:n}=function(e){if(void 0===e||"all"===e)return{code:!0,error:!0,warn:!0,info:!0,debug:!0,fatal:!0};if("none"===e)return{error:!1,code:!1,warn:!1,info:!1,debug:!1,fatal:!1};if("boolean"==typeof e)return{code:e,error:e,warn:e,info:e,debug:e,fatal:e};{const t=new Set(e);return{code:t.has("code"),debug:t.has("debug"),fatal:t.has("fatal"),error:t.has("error"),warn:t.has("warn"),info:t.has("info")}}}(e);return n||(O.code=()=>{}),i||(O.debug=()=>{}),t||(O.info=()=>{}),o||(O.warn=()=>{}),s||(O.error=()=>{}),r||(O.fatal=()=>{}),R}(s(t,"debug",!0))(new v),A.code(y["開始初始化必要模組"]);const o=new D(e({},t));A.code(y["指定模組初始化完成"],"config");const i=new P;A.code(y["指定模組初始化完成"],"storage");const r=new T(o,i);return A.code(y["指定模組初始化完成"],"core"),r.start(),A.code(y["啟動服務"]),()=>{r.onDestroy()}}throw new Error(E["環境錯誤(nodejs)"])}export{x as aiiaCore};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphen.ai/aiia-sdk",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "keywords": [],
5
5
  "author": {
6
6
  "name": "Jay Huang",
@@ -36,10 +36,12 @@
36
36
  "tsdoc-metadata.json"
37
37
  ],
38
38
  "scripts": {
39
- "clean": "rm -rf ./dist",
40
- "clean:type": "rm -rf ./dist/types",
39
+ "clean": "node rm.cjs ./dist",
40
+ "clean:type": "node rm.cjs ./dist/types",
41
41
  "build": "npm run clean && rollup -c && npm run types:extract",
42
42
  "watch": "rollup -c -w",
43
+ "build:testmodule": "node rm.cjs ./dist_test && rollup -c ./rollup.module.config.js",
44
+ "test": "jest",
43
45
  "types:extract": "npm run types:extract:browser && npm run types:extract:node && npm run clean:type",
44
46
  "types:extract:browser": "api-extractor run --local --config api-extractor.browser.json",
45
47
  "types:extract:node": "api-extractor run --local --config api-extractor.node.json"
@@ -51,18 +53,26 @@
51
53
  "@rollup/plugin-node-resolve": "^15.3.1",
52
54
  "@rollup/plugin-terser": "^0.4.4",
53
55
  "@rollup/plugin-typescript": "^11.1.6",
56
+ "@types/audioworklet": "^0.0.83",
57
+ "@types/jest": "^30.0.0",
54
58
  "@types/lodash": "^4.17.20",
55
59
  "@types/node": "^24.2.1",
60
+ "@types/node-osc": "^9.1.0",
56
61
  "@types/ws": "^8.18.1",
62
+ "jest": "^30.1.3",
63
+ "jest-environment-jsdom": "^30.1.2",
57
64
  "rollup": "^4.46.2",
58
65
  "rollup-plugin-javascript-obfuscator": "^1.0.1",
66
+ "ts-jest": "^29.4.1",
59
67
  "tslib": "^2.6.2",
60
68
  "typescript": "^5.9.2"
61
69
  },
62
70
  "dependencies": {
71
+ "@mediapipe/tasks-vision": "^0.10.22-rc.20250304",
63
72
  "axios": "^1.11.0",
64
73
  "lodash": "^4.17.21",
65
74
  "moment": "^2.30.1",
75
+ "node-osc": "^11.0.0",
66
76
  "rxjs": "^7.8.2",
67
77
  "socket.io": "^4.8.1",
68
78
  "socket.io-client": "^4.8.1",
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.52.11"
8
+ "packageVersion": "7.52.13"
9
9
  }
10
10
  ]
11
11
  }