ppagent 0.0.13 → 0.0.15

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.
Files changed (3) hide show
  1. package/dist/lib.d.ts +16 -3
  2. package/dist/lib.js +24 -26
  3. package/package.json +127 -122
package/dist/lib.js CHANGED
@@ -1,32 +1,30 @@
1
- import Sr from"emittery";import Wo from"pino";import Ht from"node:process";import Vo from"emittery";var ro={level:Ht.env.LOG_LEVEL??"debug"};Ht.env.NODE_ENV==="development"&&(ro.transport={target:"pino-pretty",options:{colorize:!0}});var oo=Wo(ro),$t=class extends Vo{_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(t){super(),this.setLevel(t??Ht.env.LOG_LEVEL??"trace")}setLevel(t){this._currentLevelVal=this._levelMap[t],this._currentLevel=t}emitString(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}emitObject(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}},fe=(c,t,e,o)=>{typeof e=="string"?(oo[c]("[%s] %s",t,e),o.emitString(c,t,e)):(oo[c]("[%s] %o",t,e),o.emitObject(c,t,e))},le=new $t,y=(c,t=!1)=>({trace:e=>fe("trace",c,e,le),debug:e=>fe("debug",c,e,le),info:e=>fe("info",c,e,le),warn:e=>fe("warn",c,e,le),error:e=>fe("error",c,e,le),fatal:e=>fe("fatal",c,e,le),emitter:t?le:void 0});import{createReadStream as ur,existsSync as dr,mkdirSync as gr,readFile as hr,stat as fr,writeFile as Ir}from"node:fs";import{mkdirSync as Xo}from"node:fs";import qt from"node:path";import v from"node:process";import{v4 as Jo}from"uuid";var jt="0.0.13";import{forward as Qo}from"@ngrok/ngrok";var Yo=(d=>(d.text="text",d.number="number",d.boolean="boolean",d.radio="radio",d.check="check",d.select="select",d.date="date",d.image="image",d.video="video",d.audio="audio",d.url="url",d.email="email",d.phone="phone",d.ipv4="ipv4",d))(Yo||{}),N={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},H=y("config"),It=Number(v.env.PORT??5050),no=String(v.env.HOST?.length?v.env.HOST:"0.0.0.0"),so=String(v.env.PRIVATE_HOST?.length?v.env.PRIVATE_HOST:no),Zo="http://"+so+":"+It,er="ws://"+so+":"+It,Ie,ye,ne=String(v.env.PUBLIC_HOST??"").trim();if(ne.length){let c=Number(v.env.PUBLIC_SSL)===1,t=80;v.env.PUBLIC_PORT?.length?t=Number(v.env.PUBLIC_PORT):c&&(t=443),ne.indexOf("$port")<0?(Ie=(c?"wss://":"ws://")+ne+":"+t,ye=(c?"https://":"http://")+ne+":"+t):(Ie=(c?"wss://":"ws://")+ne.replace("$port",t.toString()),ye=(c?"https://":"http://")+ne.replace("$port",t.toString()))}else{let c=v.env.PUBLIC_TUNNEL_NAME;c?.length||H.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let t=v.env.PUBLIC_TUNNEL_TOKEN;if(!t?.length)throw new Error("ngrok token\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u81EA\u52A8\u751F\u6210\u5916\u7F51\u6620\u5C04\u5730\u5740\uFF0C\u8BF7\u5148\u914D\u7F6EPUBLIC_HOST\u6216\u8005ngrok\u76F8\u5173\u4FE1\u606F\uFF01");let e=await Qo({addr:It,authtoken:t,domain:c}),o=e.url();if(!o?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let n of["SIGINT","SIGTERM"])v.once(n,async()=>{H.info("close ngrok tunnel"),e.close()});ye=o;let r=o.indexOf("https")===0;ne=o.replace("https://","").replace("http://",""),Ie=(r?"wss://":"ws://")+ne,H.debug("auto generated public httpurl "+ye),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.debug("auto generated public wsurl "+Ie)}ye?.length||H.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var io=v.env.PUBLIC_PATH?.length?v.env.PUBLIC_PATH:"/public",ao=qt.resolve(qt.join("./",io));Ie.length||H.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var ft=v.env.PUBLIC_TOKEN;ft?.length||(ft=Jo(),H.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),H.warn("\u968F\u673Atoken\u4E3A\uFF1A"+ft));var co=qt.resolve(ao,"temp");Xo(co,{recursive:!0});var po=v.env.CONFIG_SERVER_URL,lo=v.env.CONFIG_SERVER_EMAIL,mo=v.env.CONFIG_SERVER_PASSWORD,uo=!!(v.env.OFFLINE??!1);(!po?.length||!mo?.length||!lo?.length)&&(H.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),uo=!0);var _={port:It,host:no,wsUrl:Ie,httpUrl:ye,privateHttpUrl:Zo,privateWsUrl:er,publicPath:ao,publicPathName:io,tempDir:co,redisUrl:v.env.REDIS_URL,offline:uo,configServerUrl:po,configServerEmail:lo,configServerPassword:mo,publicToken:ft,publicForceAuth:v.env.PUBLIC_FORCE_AUTH=="1",secretFile:v.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:v.env.TRACE_HTTP_REQUEST==="1",version:jt,npmRegistry:v.env.NPM_REGISTRY?.length?v.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(v.env.NPM_TIMEOUT??3e5),serverCompress:v.env.SERVER_COMPRESS==="1",serverCompressMinSize:v.env.SERVER_COMPRESS_MIN_SIZE?Number(v.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(v.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(",")};H.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);H.warn("\u8F6F\u4EF6\u7248\u672C "+jt);H.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");H.trace(_);import oe,{dirname as yr}from"node:path";import{v4 as _r}from"uuid";import{Buffer as Te}from"node:buffer";import fo from"recorder-core";var V=(l=>(l.CHAT_MESSAGE="CHAT_MESSAGE",l.LOGIN="LOGIN",l.LOGOUT="LOGOUT",l.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",l.SYSTEM="SYSTEM",l.SELF_SEND="SELF_SEND",l.FIRST_CHAT="FIRST_CHAT",l.GROUP_NEW_USER="GROUP_NEW_USER",l.ENTER_CHAT="ENTER_CHAT",l.CUSTOM="CUSTOM",l))(V||{}),M=(b=>(b.TEXT="TEXT",b.RICH_TEXT="RICH_TEXT",b.IMAGE="IMAGE",b.AUDIO="AUDIO",b.VIDEO="VIDEO",b.ARTICLE="ARTICLE",b.MUSIC="MUSIC",b.FILE="FILE",b.EMOTION="EMOTION",b.MP="MP",b.REF="REF",b.POSITION="POSITION",b.PHONE="PHONE",b.FRIEND_REQUEST="FRIEND_REQUEST",b.CONTACT_CARD="CONTACT_CARD",b.CARD="CARD",b.RECALL="RECALL",b.PAT="PAT",b.SYSTEM="SYSTEM",b.SUBSCRIBE="SUBSCRIBE",b.UNSUBSCRIBE="UNSUBSCRIBE",b.CUSTOM="CUSTOM",b))(M||{}),yt=class extends Error{},_t=class extends Error{},xt=class extends Error{};import{v4 as Gt}from"uuid";import{decodeWavFile as tr}from"wav-file-decoder";import go from"keyv";import or from"@keyv/redis";import rr from"ffmpeg-static";import Io from"fluent-ffmpeg";import{createReadStream as nr,readFileSync as sr}from"fs";import{fileTypeFromBuffer as ir,fileTypeFromStream as ar}from"file-type";import{exec as yo}from"child_process";Io.setFfmpegPath(rr);var P=y("helper"),cr=JSON.parse(await sr(_.secretFile).toString());P.trace("secrets files path:"+_.secretFile);var se=function(c,t,e,o){let r=c.byteLength,n=new ArrayBuffer(44+r),s=new DataView(n);function i(u,g,d){for(let I=0;I<d.length;I++)u.setUint8(g+I,d.charCodeAt(I))}let a=0;i(s,a,"RIFF"),a+=4,s.setUint32(a,36+r,!0),a+=4,i(s,a,"WAVE"),a+=4,i(s,a,"fmt "),a+=4,s.setUint32(a,16,!0),a+=4,s.setUint16(a,1,!0),a+=2,s.setUint16(a,o,!0),a+=2,s.setUint32(a,t,!0),a+=4,s.setUint32(a,t*o*(e/8),!0),a+=4,s.setUint16(a,o*(e/8),!0),a+=2,s.setUint16(a,e,!0),a+=2,i(s,a,"data"),a+=4,s.setUint32(a,r,!0),a+=4;function p(u,g,d){let I=new Int32Array(d);for(let f=0;f<I.length;f++,g+=4)u.setInt32(g,I[f],!0)}function l(u,g,d){let I=new Int16Array(d);for(let f=0;f<I.length;f++,g+=2)u.setInt16(g,I[f],!0)}function m(u,g,d){let I=new Int8Array(d);for(let f=0;f<I.length;f++,g++)u.setInt8(g,I[f])}return e==16?l(s,44,c):e==8?m(s,44,c):p(s,44,c),s.buffer};function _o(c){return c.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}function xo(c){return c.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}function So(c){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(c)}function Co(c){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(e=>e.test(c))}function bo(c){return`\u6807\u9898\uFF1A${c.title};\u4F5C\u8005\uFF1A${c.source};\u7F51\u5740\uFF1A${c.url}`}function Kt(c){let t="";return c.placeName?.length&&(t+=c.placeName),c.placeDetail?.length&&(t+="("+c.placeDetail+")"),c.lat!==void 0&&(t+=`\u7ECF\u5EA6${c.lon}\uFF0C\u7EAC\u5EA6${c.lat}`),t}function Z(c){let t=/\((https?:\/\/[^\s]+)\)/g,e,o=c;for(;(e=t.exec(c))!==null;){let r=e[1];o=o.replaceAll(r,` ${r} `)}return o}async function ie(c){for(let t of c)if(t.dispose){let e=await t.dispose();e?.length&&P.error(e)}}async function me(c){return new Promise((t,e)=>{fo.amr2wav(c.buffer,o=>{t(h.fromBuffer(Buffer.from(o),Gt()+".wav","binary"))},o=>{P.error(o),e(o)})})}async function te(c){let t=(await c.asBuffer()).buffer,e=tr(t),o=e.channelData[0];if(e.numberOfChannels===2){o=new Float32Array(e.channelData[0].length);for(let n=0;n<o.length;n++)o[n]=(e.channelData[0][n]+e.channelData[1][n])/2}else if(e.numberOfChannels!==1){P.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+e.numberOfChannels);return}let r=new Int16Array(o.length);for(let n=0;n<o.length;n++)o[n]<-.999999?r[n]=-32768:o[n]>.999999?r[n]=32767:r[n]=Math.round(o[n]*32767);return new Promise((n,s)=>{fo({type:"amr",sampleRate:e.sampleRate,bitRate:12.2}).mock(r,e.sampleRate).stop(async(a,p)=>{let l=h.fromBuffer(Buffer.from(await a.arrayBuffer()),Gt()+".amr");n({file:l,duration:p})},a=>{s(a)})})}function St(c){return _.redisUrl?.length?new go(new or(_.redisUrl),{namespace:c}):new go}function W(c){if(!c.startsWith("__"))return c;let t=cr[c.slice(2)];return t?.length||P.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+c.slice(2)+"\u7684\u79D8\u94A5"),t}function Ct(c){return/^1[3-9]\d{9}$/.test(c)}function ae(c=16){let t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",e="";for(let o=0;o<c;o++){let r=Math.floor(Math.random()*t.length);e+=t[r]}return e}async function pr(c,t,e,o){return new Promise(r=>{let n=Io(c);o&&(n=o(n)),n.toFormat(e).on("end",()=>{r(!0)}).on("error",s=>{P.debug(`\u4ECE${c}\u8F6C\u6362\u4E3A${e}\u5931\u8D25\uFF1A${s.message}`),r(!1)}).save(t)})}async function ke(c,t,e){return new Promise(o=>{c.asLocalPath().then(r=>{let n=r+"."+t;pr(r,n,t,e).then(s=>{if(s){let i=h.fromPath(n);o(i)}else o(void 0)})})})}function lr(c){let t=/!\[.*?\]\((.*?)\)/g,e=[],o;for(;(o=t.exec(c))!==null;)e.push(o[1]);return e}function we(c,t=!1){if(c.indexOf("![")>=0)return lr(c);if(t)return[];let e=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=c.match(e);return o?o.map(r=>r.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}function vo(c){let t=/!\[.*?\]\(.*?\)/g;return c.match(t)||[]}async function ko(c,t){let e=typeof c=="string"?await ar(nr(c)):await ir(c);if(!e)return P.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),t;if(t){let o=t.lastIndexOf(".");o>0?t=t.substring(0,o)+"."+e.ext:t+="."+e.ext}else t=t??Gt()+"."+e.ext;return t}async function wo(c){let t=[];for await(let e of c)t.push(e);return Buffer.concat(t)}async function ee(c,t){let e=c.getReader(),o=new TextDecoder("utf-8"),r="",n=async()=>{let{value:s,done:i}=await e.read();if(s){let a=o.decode(s)?.trim();if(a?.length){let p=a.split(`
2
- `).map(l=>l.replace("data:","").trim()).filter(l=>l.length&&!l.startsWith("event:"));if(p.length){let l=r+p[0];try{let m=JSON.parse(l);if(t(m),p.length>1){for(let u=1;u<p.length-1;u++)m=JSON.parse(p[u]),t(m);try{m=JSON.parse(p[p.length-1]),t(m)}catch{r=p[p.length-1]}}}catch{r=l}}}}i?P.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await n()};return n()}async function bt(c){let t=`### ${c.title}`;for(let e of c.content)if(e.type==="text")t+=`
1
+ var lr=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var H=(p,e,t,o)=>{for(var r=o>1?void 0:o?mr(e,t):e,n=p.length-1,s;n>=0;n--)(s=p[n])&&(r=(o?s(e,t,r):s(r))||r);return o&&r&&lr(e,t,r),r};import"reflect-metadata";import Dr from"emittery";import ur from"pino";import Xt from"node:process";import dr from"emittery";var go={level:Xt.env.LOG_LEVEL??"debug"};Xt.env.NODE_ENV==="development"&&(go.transport={target:"pino-pretty",options:{colorize:!0}});var uo=ur(go),zt=class extends dr{_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(e){super(),this.setLevel(e??Xt.env.LOG_LEVEL??"trace")}setLevel(e){this._currentLevelVal=this._levelMap[e],this._currentLevel=e}emitString(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}emitObject(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}},fe=(p,e,t,o)=>{typeof t=="string"?(uo[p]("[%s] %s",e,t),o.emitString(p,e,t)):(uo[p]("[%s] %o",e,t),o.emitObject(p,e,t))},ue=new zt,f=(p,e=!1)=>({trace:t=>fe("trace",p,t,ue),debug:t=>fe("debug",p,t,ue),info:t=>fe("info",p,t,ue),warn:t=>fe("warn",p,t,ue),error:t=>fe("error",p,t,ue),fatal:t=>fe("fatal",p,t,ue),emitter:e?ue:void 0});import{createReadStream as Mr,existsSync as Go,mkdirSync as Ko,readFile as Or,stat as Er,writeFile as Fr}from"node:fs";import{existsSync as ho,mkdirSync as fo}from"node:fs";import _e from"node:path";import b from"node:process";import{v4 as hr}from"uuid";var Jt="0.0.15";import{forward as fr}from"@ngrok/ngrok";var Ir=(d=>(d.text="text",d.number="number",d.boolean="boolean",d.radio="radio",d.check="check",d.select="select",d.date="date",d.image="image",d.video="video",d.audio="audio",d.url="url",d.email="email",d.phone="phone",d.ipv4="ipv4",d))(Ir||{}),D={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},j=f("config"),bt=Number(b.env.PORT??5050),Io=String(b.env.HOST?.length?b.env.HOST:"0.0.0.0"),yo=String(b.env.PRIVATE_HOST?.length?b.env.PRIVATE_HOST:Io),yr="http://"+yo+":"+bt,_r="ws://"+yo+":"+bt,Ie,ye,ne=String(b.env.PUBLIC_HOST??"").trim();if(ne.length){let p=Number(b.env.PUBLIC_SSL)===1,e=80;b.env.PUBLIC_PORT?.length?e=Number(b.env.PUBLIC_PORT):p&&(e=443),ne.indexOf("$port")<0?(Ie=(p?"wss://":"ws://")+ne+":"+e,ye=(p?"https://":"http://")+ne+":"+e):(Ie=(p?"wss://":"ws://")+ne.replace("$port",e.toString()),ye=(p?"https://":"http://")+ne.replace("$port",e.toString()))}else{let p=b.env.PUBLIC_TUNNEL_NAME;p?.length||j.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let e=b.env.PUBLIC_TUNNEL_TOKEN;if(!e?.length)throw new Error("ngrok token\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u81EA\u52A8\u751F\u6210\u5916\u7F51\u6620\u5C04\u5730\u5740\uFF0C\u8BF7\u5148\u914D\u7F6EPUBLIC_HOST\u6216\u8005ngrok\u76F8\u5173\u4FE1\u606F\uFF01");let t=await fr({addr:bt,authtoken:e,domain:p}),o=t.url();if(!o?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let n of["SIGINT","SIGTERM"])b.once(n,async()=>{j.info("close ngrok tunnel"),t.close()});ye=o;let r=o.indexOf("https")===0;ne=o.replace("https://","").replace("http://",""),Ie=(r?"wss://":"ws://")+ne,j.debug("auto generated public httpurl "+ye),j.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),j.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),j.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),j.debug("auto generated public wsurl "+Ie)}ye?.length||j.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var _o=b.env.PUBLIC_PATH?.length?b.env.PUBLIC_PATH:"/public",xo=_e.resolve(_e.join("./",_o));Ie.length||j.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var xt=b.env.PUBLIC_TOKEN;xt?.length||(xt=hr(),j.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),j.warn("\u968F\u673Atoken\u4E3A\uFF1A"+xt));var Qt=_e.resolve(xo,"temp");ho(Qt)||fo(Qt,{recursive:!0});var So=b.env.CONFIG_SERVER_URL,bo=b.env.CONFIG_SERVER_EMAIL,Co=b.env.CONFIG_SERVER_PASSWORD,vo=!!(b.env.OFFLINE??!1);(!So?.length||!Co?.length||!bo?.length)&&(j.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),vo=!0);var St=_e.resolve(_e.join("./","data"));ho(St)||fo(St,{recursive:!0});var h={port:bt,host:Io,wsUrl:Ie,httpUrl:ye,privateHttpUrl:yr,privateWsUrl:_r,publicPath:xo,publicPathName:_o,tempDir:Qt,redisUrl:b.env.REDIS_URL,offline:vo,configServerUrl:So,configServerEmail:bo,configServerPassword:Co,publicToken:xt,publicForceAuth:b.env.PUBLIC_FORCE_AUTH=="1",secretFile:b.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:b.env.TRACE_HTTP_REQUEST==="1",version:Jt,npmRegistry:b.env.NPM_REGISTRY?.length?b.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(b.env.NPM_TIMEOUT??3e5),serverCompress:b.env.SERVER_COMPRESS==="1",serverCompressMinSize:b.env.SERVER_COMPRESS_MIN_SIZE?Number(b.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(b.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(","),dataPath:St,dbProvider:b.env.DB_PROVIDER?.length?b.env.DB_PROVIDER:"sqlite",dbConnection:b.env.DB_CONNECTION?.length?b.env.DB_CONNECTION:_e.join(St,"chat.db"),minioMessageBucket:b.env.MINIO_MESSAGE_BUCKET??"messages"};j.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+h.httpUrl+" ,API TOKEN:"+h.publicToken);j.warn("\u8F6F\u4EF6\u7248\u672C "+Jt);j.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");j.trace(h);import X,{dirname as Nr}from"node:path";import{v4 as Rr}from"uuid";import{Buffer as Pe}from"node:buffer";import wo from"recorder-core";var ee=(m=>(m.CHAT_MESSAGE="CHAT_MESSAGE",m.RESPONSE_MESSAGE="RESPONSE_MESSAGE",m.LOGIN="LOGIN",m.LOGOUT="LOGOUT",m.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",m.SYSTEM="SYSTEM",m.SELF_SEND="SELF_SEND",m.FIRST_CHAT="FIRST_CHAT",m.GROUP_NEW_USER="GROUP_NEW_USER",m.ENTER_CHAT="ENTER_CHAT",m.CUSTOM="CUSTOM",m))(ee||{}),M=(v=>(v.TEXT="TEXT",v.RICH_TEXT="RICH_TEXT",v.IMAGE="IMAGE",v.AUDIO="AUDIO",v.VIDEO="VIDEO",v.ARTICLE="ARTICLE",v.MUSIC="MUSIC",v.FILE="FILE",v.EMOTION="EMOTION",v.MP="MP",v.REF="REF",v.POSITION="POSITION",v.PHONE="PHONE",v.FRIEND_REQUEST="FRIEND_REQUEST",v.CONTACT_CARD="CONTACT_CARD",v.CARD="CARD",v.RECALL="RECALL",v.PAT="PAT",v.SYSTEM="SYSTEM",v.SUBSCRIBE="SUBSCRIBE",v.UNSUBSCRIBE="UNSUBSCRIBE",v.CUSTOM="CUSTOM",v))(M||{}),Ct=class extends Error{},vt=class extends Error{},kt=class extends Error{};import{v4 as Yt}from"uuid";import{decodeWavFile as xr}from"wav-file-decoder";import ko from"keyv";import Sr from"@keyv/redis";import br from"ffmpeg-static";import Ao from"fluent-ffmpeg";import{createReadStream as Cr,readFileSync as vr}from"fs";import{fileTypeFromBuffer as kr,fileTypeFromStream as Tr}from"file-type";import{exec as Po}from"child_process";Ao.setFfmpegPath(br);var A=f("helper"),wr=JSON.parse(await vr(h.secretFile).toString());A.trace("secrets files path:"+h.secretFile);var xe=function(p,e,t,o){let r=p.byteLength,n=new ArrayBuffer(44+r),s=new DataView(n);function i(u,g,d){for(let y=0;y<d.length;y++)u.setUint8(g+y,d.charCodeAt(y))}let a=0;i(s,a,"RIFF"),a+=4,s.setUint32(a,36+r,!0),a+=4,i(s,a,"WAVE"),a+=4,i(s,a,"fmt "),a+=4,s.setUint32(a,16,!0),a+=4,s.setUint16(a,1,!0),a+=2,s.setUint16(a,o,!0),a+=2,s.setUint32(a,e,!0),a+=4,s.setUint32(a,e*o*(t/8),!0),a+=4,s.setUint16(a,o*(t/8),!0),a+=2,s.setUint16(a,t,!0),a+=2,i(s,a,"data"),a+=4,s.setUint32(a,r,!0),a+=4;function c(u,g,d){let y=new Int32Array(d);for(let I=0;I<y.length;I++,g+=4)u.setInt32(g,y[I],!0)}function l(u,g,d){let y=new Int16Array(d);for(let I=0;I<y.length;I++,g+=2)u.setInt16(g,y[I],!0)}function m(u,g,d){let y=new Int8Array(d);for(let I=0;I<y.length;I++,g++)u.setInt8(g,y[I])}return t==16?l(s,44,p):t==8?m(s,44,p):c(s,44,p),s.buffer};function Mo(p){return p.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}function Oo(p){return p.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}function Eo(p){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(p)}function Fo(p){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(p))}function No(p){return`\u6807\u9898\uFF1A${p.title};\u4F5C\u8005\uFF1A${p.source};\u7F51\u5740\uFF1A${p.url}`}function Zt(p){let e="";return p.placeName?.length&&(e+=p.placeName),p.placeDetail?.length&&(e+="("+p.placeDetail+")"),p.lat!==void 0&&(e+=`\u7ECF\u5EA6${p.lon}\uFF0C\u7EAC\u5EA6${p.lat}`),e}function se(p){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=p;for(;(t=e.exec(p))!==null;){let r=t[1];o=o.replaceAll(r,` ${r} `)}return o}async function ie(p){for(let e of p)if(e.dispose){let t=await e.dispose();t?.length&&A.error(t)}}async function de(p){return new Promise((e,t)=>{wo.amr2wav(p.buffer,o=>{e(_.fromBuffer(Buffer.from(o),Yt()+".wav","binary"))},o=>{A.error(o),t(o)})})}async function re(p){let e=(await p.asBuffer()).buffer,t=xr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let n=0;n<o.length;n++)o[n]=(t.channelData[0][n]+t.channelData[1][n])/2}else if(t.numberOfChannels!==1){A.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let r=new Int16Array(o.length);for(let n=0;n<o.length;n++)o[n]<-.999999?r[n]=-32768:o[n]>.999999?r[n]=32767:r[n]=Math.round(o[n]*32767);return new Promise((n,s)=>{wo({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(r,t.sampleRate).stop(async(a,c)=>{let l=_.fromBuffer(Buffer.from(await a.arrayBuffer()),Yt()+".amr");n({file:l,duration:c})},a=>{s(a)})})}function Tt(p){return h.redisUrl?.length?new ko(new Sr(h.redisUrl),{namespace:p}):new ko}function V(p){if(!p.startsWith("__"))return p;let e=wr[p.slice(2)];return e?.length||A.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+p.slice(2)+"\u7684\u79D8\u94A5"),e}function wt(p){return/^1[3-9]\d{9}$/.test(p)}function ae(p=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<p;o++){let r=Math.floor(Math.random()*e.length);t+=e[r]}return t}async function Ar(p,e,t,o){return new Promise(r=>{let n=Ao(p);o&&(n=o(n)),n.toFormat(t).on("end",()=>{r(!0)}).on("error",s=>{A.debug(`\u4ECE${p}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${s.message}`),r(!1)}).save(e)})}async function we(p,e,t){return new Promise(o=>{p.asLocalPath().then(r=>{let n=r+"."+e;Ar(r,n,e,t).then(s=>{if(s){let i=_.fromPath(n);o(i)}else o(void 0)})})})}function Pr(p){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(p))!==null;)t.push(o[1]);return t}function Ae(p,e=!1){if(p.indexOf("![")>=0)return Pr(p);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=p.match(t);return o?o.map(r=>r.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}function Ro(p){let e=/!\[.*?\]\(.*?\)/g;return p.match(e)||[]}async function Bo(p,e){let t=typeof p=="string"?await Tr(Cr(p)):await kr(p);if(!t)return A.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),e;if(e){let o=e.lastIndexOf(".");o>0?e=e.substring(0,o)+"."+t.ext:e+="."+t.ext}else e=e??Yt()+"."+t.ext;return e}async function Do(p){let e=[];for await(let t of p)e.push(t);return Buffer.concat(e)}async function te(p,e){let t=p.getReader(),o=new TextDecoder("utf-8"),r="",n=async()=>{let{value:s,done:i}=await t.read();if(s){let a=o.decode(s)?.trim();if(a?.length){let c=a.split(`
2
+ `).map(l=>l.replace("data:","").trim()).filter(l=>l.length&&!l.startsWith("event:"));if(c.length){let l=r+c[0];try{let m=JSON.parse(l);if(e(m),c.length>1){for(let u=1;u<c.length-1;u++)m=JSON.parse(c[u]),e(m);try{m=JSON.parse(c[c.length-1]),e(m)}catch{r=c[c.length-1]}}}catch{r=l}}}}i?A.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await n()};return n()}async function At(p){let e=`### ${p.title}`;for(let t of p.content)if(t.type==="text")e+=`
3
3
 
4
- ${e.data}
5
- `;else if(e.type==="image"){let o=e.data;t+=`
4
+ ${t.data}
5
+ `;else if(t.type==="image"){let o=t.data;e+=`
6
6
  ![${o.file.name}](${await o.file.asUrl()})
7
- `}else if(e.type==="file"||e.type==="video"){let o=e.data;t+=`
7
+ `}else if(t.type==="file"||t.type==="video"){let o=t.data;e+=`
8
8
  [${o.file.name}](${await o.file.asUrl()})
9
- `}else e.type==="at"?t+=`@${e.data}`:P.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return t}function To(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`chat message[id:${c.messageId}] from user id:${c.senderId},name:${c.senderName},nick:${c.senderInfo?.nickName} of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Ao(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`send message[id:${c.messageId}] to user(s): [${c.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Po(c){return{type:"formily",formily:{type:"object",properties:c}}}function ho(c,t){return t.type==="startsWith"&&!c.startsWith(t.content)||t.type==="contains"&&c.indexOf(t.content)<0?!1:t.type==="in"?t.content.indexOf(c)<0:c.match(t.content)!==null}async function Wt(c){return new Promise(t=>{setTimeout(()=>{t()},c)})}function ue(c,t){if(P.trace("check rule "+c.instanceName),(t.message.type==="TEXT"||t.message.type==="REF")&&t.message.isGroupChat&&c.respondTo){let e=!1;c.respondTo.at&&t.message.atList?.indexOf(t.me[t.source.params.fieldInAtList??"userId"])>=0&&(e=!0);let o=!1,r=((typeof t.message.content=="string"?t.message.content:t.message.content.text)??"").trim();r.length&&c.respondTo.names?.find(s=>r.startsWith(s))&&(o=!0);let n=!1;if(c.respondTo.refered&&t.message.type==="REF"&&t.message.content.refMessage?.senderId===t.me.userId&&(n=!0),!e&&!o&&!n)return P.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),P.debug("at: "+e+";name: "+o+";content: "+n),!1}if(c.messageTypes?.length&&c.messageTypes.indexOf("ALL")<0&&c.messageTypes.indexOf(t.message.type)<0)return P.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+t.message.type),!1;if(t.message.isGroupChat){let e=t.message;if(c.groupMode==="deny")return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(c.groupNameRule){let o=e.groupInfo?.nickName??e.groupInfo?.userName??e.groupInfo?.userId??e.fromId,r=ho(o,c.groupNameRule);if(c.groupMode==="blacklist"&&r)return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(c.groupNameRule&&!r)return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!t.message.isGroupChat||c.checkUserInGroup){if(c.userMode==="blacklist"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)>=0)return!1;if(c.userMode!=="all"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)<0)return!1}if(c.contentFilter&&c.contentFilter.content?.length&&(typeof t.message.content=="string"||typeof t.message.content.text=="string")){let e=typeof t.message.content=="string"?t.message.content:t.message.content.text;if(!ho(e,c.contentFilter))return!1}return P.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}async function mr(c,t,e){e=e??"latest";let o=await fetch(`${t}/${c}/${e}`);if(o.status!==200)throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);let r=await o.json();if(!r.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`);return new Promise((n,s)=>{let i=`pnpm add ${c}@${e} ${t?.length?"--registry="+t:""}`;P.debug("RUN "+i),yo(i,(a,p,l)=>{if(a||l&&!l.startsWith("Debug")){P.warn(String(a??l)),s(a);return}P.info(p),n(r)})})}function Mo(c){return{author:c.author,homepage:c.homepage,keywords:c.keywords?.join(","),repo:c.repository?.url?.replace(/^git\+/,""),version:c.version,name:c.name,desc:c.description}}async function Oo(c,t,e){e=e??_.npmRegistry;let o=await mr(c,e,t);return Mo(o)}async function Eo(c){let t=await import(`${c}/package.json`);if(!t){P.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+c+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((e,o)=>{let r=`pnpm remove ${c}`;P.debug("RUN "+r),yo(r,{timeout:_.npmTimeout,windowsHide:!0},(n,s,i)=>{if(n||i&&!i.startsWith("Debug")){P.warn(String(n??i)),o(n);return}P.info(s),e(Mo(t))})})}function vt(c){let t=process.env[c];if(t){let e=Number(t);return isNaN(e)?void 0:e}}function kt(c){return(typeof c=="string"?c:c.text)?.trim()??""}var Vt=y("async-file"),h=class c{constructor(t,e){this.loader=t;this.format=e}tempDir="temp";buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded=!1;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let t=await this.loader();await this.setSource(t)}async setSource({data:t,type:e,name:o,textEncoding:r}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!t||!e)throw new Error("can't initialize async file!");if(e==="buffer")this.buffer=t;else if(e==="base64")this.base64=t;else if(e==="path")this.path=t;else if(e==="text")this.text=t;else throw new Error("erro file type:"+e);this._name||(this._name=o??_r(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=r}async loadBufferFromPath(t){if(t.startsWith("http"))try{let e=await(await fetch(t)).arrayBuffer();return Te.from(e)}catch{return Vt.debug("retry to get file "+t),new Promise(e=>{setTimeout(async()=>{let o=await(await fetch(t)).arrayBuffer();e(Te.from(o))},1e3)})}return new Promise((e,o)=>{hr(t,(r,n)=>{if(r){o(r);return}e(n)})})}async saveFile(){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),this._name=await ko(t,this._name)),new Promise((e,o)=>{try{let r=oe.join(_.publicPath,this.tempDir,this._name),n=yr(r);dr(n)||gr(n,{recursive:!0}),Ir(r,t,()=>{e(oe.resolve(r))})}catch(r){o(r)}})}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Te.from(this.text,this.textEncoding):Te.from(this.text);else if(this.base64)this.buffer=Te.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{Vt.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let t=await this.asBuffer();return this.base64=t.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let t=await this.asBuffer();if(!t){Vt.warn("load file as buffer failed!");return}return this.text=this.textEncoding?t.toString(this.textEncoding):t.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let t;return this.path&&!this.path.startsWith("http")&&oe.dirname(oe.resolve(this.path))===oe.dirname(oe.join(_.publicPath,`${this.tempDir}/`))?t=oe.resolve(this.path):t=await this.saveFile(),this.url=_.httpUrl+`${_.publicPathName}/${this.tempDir}/${oe.basename(t)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let t=await this.asLocalPath();return ur(t)}async info(){if(this._info)return this._info;let t=await this.asLocalPath();return new Promise((e,o)=>{fr(t,(r,n)=>{r?o(r):e(n)})})}toString(){return this.name}static fromPath(t,e="binary",o,r){let n=o??oe.basename(t);n.indexOf("?")>0&&(n=n.split("?")[0]);let s=async()=>({data:t,type:"path",name:n,textEncoding:r}),i=new c(s,e);return i._name=n,i}static fromBuffer(t,e,o="binary",r){let n=async()=>({data:t,type:"buffer",name:e,textEncoding:r}),s=new c(n,o);return s._name=e,s}};import{isWav as Cr}from"silk-wasm";var wt=class c{constructor(t){this.options=t;this.options={...c.DefaultOptions,...t}}static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};messages=[];wordsCount=0;addMessage(t,e){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:t,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let r=(typeof e=="string"?e:e?.text)?.trim();if(r?.length&&(this.wordsCount+=r.length,o.wordsCount=r.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let n=this.messages.shift();if(this.wordsCount-=n.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let t=new Date().getTime(),e=-1;for(let o=0;o<this.messages.length;o++){let r=this.messages[o];if(r.expiresAt>t){e=o;break}else this.wordsCount-=r.wordsCount}return e>0&&(this.messages=this.messages.splice(0,e)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import xr from"emittery";var Tt=class extends xr{_queue=Promise.resolve();_logger=y("sorted-promise");add(t){let e=this._queue.then(()=>t);return this._queue=e.catch(o=>{this._logger.error(o.message)}),e}};import{v4 as zt}from"uuid";var _e=class extends Sr{constructor(e,o){super();this.app=e;this._options=o;if(!o.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!o.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=y(o.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=o.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u540E\u7AEF\u6A21\u578B\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u89C4\u5219\u5217\u8868",items:{type:"void","x-component":"Space",properties:{input:{type:"object","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
10
- \u5982\u679C\u540E\u7AEF\u58F0\u660E\u4E86\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\uFF08\u5982dify\uFF0Ccoze\u7B49\uFF09\uFF0C\u5219\u6B64\u529F\u80FD\u5931\u6548\uFF0C\u6B64\u65F6\u65E0\u9700\u5F00\u542F\uFF0C\u5426\u5219\u4F1A\u6D6A\u8D39\u5185\u5B58\u3002`}},historyOptions:{type:"object",title:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u914D\u7F6E","x-decorator":"FormItem",properties:{expireInSeconds:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:300,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002"}},maxWordsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u4E2A\u5B57\u7B26","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:10240,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002\u4EC5\u5BF9\u6587\u672C\u7C7B\u6D88\u606F\u6709\u6548\u3002"}},maxItemsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u6761\u8BB0\u5F55\uFF08\u5355\u4E2A\u5BF9\u8BDD\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:3},default:30,"x-decorator-props":{tooltip:"\u8D85\u8FC7\u7684\u8BB0\u5F55\u4F1A\u88AB\u8986\u76D6\uFF0C\u9ED8\u8BA430\u6761\u3002\u540C\u4E00\u4E2A\u7FA4\u91CC\u9762\u7684\u804A\u5929\u89C6\u4E3A\u5355\u4E2A\u5BF9\u8BDD\u3002"}}}},sendMode:{type:"string",enum:[{label:"\u76F4\u63A5\u53D1\u9001",value:"now"},{label:"\u6392\u961F\u53D1\u9001\uFF08\u63A8\u8350\uFF09",value:"queue"}],title:"\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"queue","x-decorator-props":{tooltip:"\u53D1\u9001\u6A21\u5F0F\uFF0Cnow\u662F\u6240\u6709\u6D88\u606F\u90FD\u9ED8\u8BA4\u7ACB\u5373\u53D1\u9001\uFF08\u5F53\u4F7F\u7528\u6280\u80FD\u65F6\uFF0C\u4E0D\u540C\u6587\u5B57\u5904\u7406\u7684\u987A\u5E8F\u53EF\u80FD\u4E0D\u540C\uFF0C\u6709\u53EF\u80FD\u5BFC\u81F4\u56DE\u590D\u4E71\u5E8F\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6392\u961F\u53D1\u9001\uFF09\uFF0Cqueue\u662F\u52A0\u5165\u53D1\u9001\u961F\u5217\uFF0C\u786E\u4FDD\u6309\u7167\u540E\u7AEF\u8F93\u51FA\u987A\u5E8F\u8FDB\u884C\u56DE\u590D\uFF0C\u540C\u65F6\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E\u961F\u5217\u95F4\u9694\u6765\u63A7\u5236\u53D1\u9001\u901F\u5EA6\uFF0C\u907F\u514D\u89E6\u53D1\u98CE\u63A7\u3002"}},minSendInterval:{type:"number",title:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:1e3,"x-decorator-props":{tooltip:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2\u3002\u9632\u6B62\u53D1\u9001\u8FC7\u5FEB\u88AB\u8BC6\u522B\u4E3A\u5783\u573E\u6D88\u606F\u3002\u9ED8\u8BA4\u4E3A1000\u3002\u9700\u8981\u53D1\u9001\u6A21\u5F0F\u4E3A\u961F\u5217\uFF08queue\uFF09"}},timeoutInSeconds:{type:"number",title:"\u4F1A\u8BDD\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:20,max:3600},default:60,"x-decorator-props":{tooltip:"\u5355\u4E2A\u4F1A\u8BDD\uFF08\u63D0\u95EE\uFF09\u7B49\u5F85\u7684\u6700\u957F\u65F6\u95F4\uFF0C\u9ED8\u8BA460\u79D2\u3002\u7531\u4E8E\u5927\u90E8\u5206\u667A\u80FD\u4F53\u4E3A\u4E86\u7EF4\u6301\u8FDE\u7EED\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u652F\u6301\u5728\u540C\u4E00\u4E2A\u4E0A\u4E0B\u6587\u4E2D\u540C\u65F6\u6FC0\u6D3B\u591A\u4E2A\u5BF9\u8BDD\uFF0C\u56E0\u6B64\u7CFB\u7EDF\u5728\u51FA\u73B0\u540C\u4E00\u4E2A\u7528\u6237\uFF08\u7FA4\u7EC4\uFF09\u5728\u4E0A\u4E00\u4E2A\u95EE\u9898\u672A\u5B8C\u6210\u7EE7\u7EED\u63D0\u95EE\u65F6\uFF0C\u4F1A\u52A0\u5165\u961F\u5217\u7B49\u5F85\u3002\u8D85\u65F6\u540E\u5C06\u4E0D\u518D\u7B49\u5F85\uFF0C\u76F4\u63A5\u6267\u884C\u4E0B\u4E00\u4E2A\u63D0\u95EE\u3002"}},checkWavAudio:{type:"boolean",title:"\u68C0\u6D4B\u56DE\u590D\u7684\u97F3\u9891\u4E3Awav\u683C\u5F0F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!0,"x-decorator-props":{tooltip:"wav\u662F\u7CFB\u7EDF\u5185\u90E8\u9ED8\u8BA4\u7684\u8BED\u97F3\u683C\u5F0F\uFF0C\u5EFA\u8BAE\u5F00\u542F\uFF0C\u907F\u514D\u540E\u7AEF\u5904\u7406\u65F6\u629B\u51FA\u5F02\u5E38\u3002\u5982\u679C\u6CA1\u6709\u4F7F\u7528\u8BED\u97F3\u6280\u80FD\u53EF\u4EE5\u5173\u95ED\uFF0C\u5F00\u542F\u4E5F\u4E0D\u5F71\u54CD\u6027\u80FD\u3002"}},fallbackAnswer:{type:"string",title:"\u515C\u5E95\u56DE\u590D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u515C\u5E95\u56DE\u590D\u5185\u5BB9"},"x-decorator-props":{tooltip:"\u5F53\u5339\u914D\u5230\u89C4\u5219\uFF0C\u4F46\u662Fbot\u65E0\u6CD5\u56DE\u590D\u7684\u65F6\u5019\u89E6\u53D1\u8BE5\u56DE\u590D\u3002\u5982\u679C\u4E0D\u8BBE\u7F6E\uFF0C\u5219\u4E0D\u56DE\u590D\u3002\u5982\u679C\u6D88\u606F\u88AB\u6280\u80FD\u53D6\u6D88\u56DE\u590D\uFF0C\u4E0D\u4F1A\u89E6\u53D1\u8BE5\u56DE\u590D\u3002"},default:"\u{1F979}\uFF0C\u6211\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u6D88\u606F\u7C7B\u578B\u5462\uFF01"},multiActiveChatInConversationMode:{type:"string",enum:[{label:"\u6392\u961F\u5904\u7406\uFF0C\u4E0D\u63D0\u9192",value:"pool"},{label:"\u63D0\u9192\u540E\u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u5904\u7406",value:"tips"},{label:"\u63D0\u9192\u540E\u6392\u961F\u5904\u7406",value:"pool_tips"}],title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u5904\u7406\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"pool_tips","x-decorator-props":{tooltip:"\u5982\u679C\u4E00\u4E2A\u7528\u6237\u540C\u65F6\u5728\u4E00\u4E2Abot\u8FD8\u6CA1\u6709\u56DE\u7B54\u7ED3\u675F\u65F6\u53C8\u63D0\u95EE\uFF0C\u4E14bot\u4E0D\u652F\u6301\u4E00\u4E2A\u4F1A\u8BDD\u4E2D\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF08\u57FA\u672C\u90FD\u4E0D\u652F\u6301\uFF0C\u5982dify\uFF0Ccoze\uFF09\uFF0C\u8981\u91C7\u53D6\u7684\u63AA\u65BD\uFF0Cpool\u662F\u76F4\u63A5\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u7B49\u4E0A\u4E00\u8F6E\u56DE\u590D\u7ED3\u675F\u540E\u7EE7\u7EED\u5904\u7406\uFF0C\u4E0D\u8F93\u51FA\u63D0\u793A\uFF1Btips\u662F\u7ED9\u51FA\u63D0\u793A\u4E0D\u63D0\u4EA4\u5230\u540E\u7AEF\u76F4\u63A5\u8FD4\u56DE\uFF1Bpool_tips\u662F\u653E\u5165\u7B49\u5F85\u533A\u4E14\u7ED9\u51FA\u63D0\u793A\u3002"}},multiActiveChatInConversationTips:{type:"string",title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF08\u4E0D\u6E05\u695A\u8BF7\u7559\u7A7A\uFF09"},"x-decorator-props":{tooltip:"\u51FA\u73B0\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF0C\u8F93\u51FA\u7684\u56DE\u590D\u3002\u5F53\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u6A21\u5F0F\u914D\u7F6E\u4E3A\u53D1\u9001\u63D0\u793A\u65F6\uFF08tips\u6216\u8005pool_tips\uFF09\u624D\u4F1A\u751F\u6548\u3002"},default:""},sendErrorLog:{type:"boolean",title:"\u53D1\u9001\u5F02\u5E38\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u53D1\u9001\u6D88\u606F\u5904\u7406\u5F02\u5E38\u7684\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF\uFF0C\u9ED8\u8BA4false"}}}}}};_initialized=!1;_logger;_responseRule;_skillRules;_textEndId=zt();_historyManagers={};_sendMessagePool=new Map;_sourceMessagePool=new Map;get options(){return this._options}get name(){return this._options.instanceName}async sendMessage(e,o,r=!1,n){if(this._options.sendMode==="queue"&&!r){let a=this._sendMessagePool.size===0,p=o.options.instanceName;this._sendMessagePool.has(p)||this._sendMessagePool.set(p,[]),this._sendMessagePool.get(p).push({message:e,to:o,fromMessage:n}),a&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval);return}if(e.type==="AUDIO"){this._logger.trace("audio message,check format");let a=e.content.file;if(this._options.checkWavAudio&&!Cr(await a.asBuffer()))return this._logger.warn("\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"),"\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"}if(e.type==="TEXT"&&e.content===this._textEndId){o.afterSend(n);return}let s=[];if(e.type==="TEXT"&&this._options.splitImageFromBotText){let a=e.content,p=we(a);if(p?.length)for(let l of p){let m={...e},u={file:h.fromPath(l,"binary",zt()+".png")};m.content=u,m.type="IMAGE",s.push(o.sendMessage(m,n)),this._options.removeImageAfterSplit&&(e.content=a.replace(l,"[\u56FE\u7247\u7A0D\u540E\u53D1\u9001]")),this._logger.trace("image extracted from url:"+l)}}let i=await o.sendMessage(e,n);return await Promise.allSettled(s),this._logger.debug(`message sent to ${e.toInfo[0].nickName??e.toInfo[0].userId} with channel ${o.options.instanceName}`),this._logger.trace(Ao(e,o)),i}async dispose(){for(let e of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(e);o&&(o.event.off("CHAT_MESSAGE",this.processChatMessage),o.event.off("SELF_SEND",this.onSelfChatMessage))}}processChatMessage=async e=>{this._logger.trace("message received"),this._logger.trace(To(e.message,e.source));let o,r;try{if(!ue(this._responseRule,e)){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u5728"+this._options.instanceName+"\u56DE\u590D\u7684\u6761\u4EF6\u5185");return}let n=this.app.botManager.getInstance(this._responseRule.instanceName);if(!n){this._logger.warn("\u540D\u4E3A"+this._responseRule.instanceName+"\u7684\u673A\u5668\u4EBA\u5B9E\u4F8B\u4E0D\u5B58\u5728\uFF01");return}if(o=this._wrapEventWithChatReply(e),r=o.source.options.instanceName+"-"+o.message.fromId,!n.params.allowMultiActiveChat)if(this._sourceMessagePool.get(r)?.busy){if(this._options.multiActiveChatInConversationMode==="tips"){o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u540C\u4E00\u4E2A\u540E\u7AEF\u670D\u52A1\u4E0D\u5141\u8BB8\u591A\u4E2A\u6D3B\u52A8\u4E2D\u7684\u5BF9\u8BDD\uFF0C\u8FD4\u56DEtips\uFF1A"+this._options.multiActiveChatInConversationTips);return}this._sourceMessagePool.get(r).pool.push(o),this._options.multiActiveChatInConversationMode==="pool_tips"&&o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u5F53\u524D\u7528\u6237\u5B58\u5728\u6B63\u5728\u6267\u884C\u7684\u4F1A\u8BDD\uFF0C\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u5F85\u6267\u884C\u5B8C\u540E\u7EE7\u7EED\uFF01");return}else this._sourceMessagePool.set(r,{busy:!0,pool:[]});let s=!1,i=setTimeout(()=>{s=!0,this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u4E2A\uFF01"),this._nextQuestion(r)},this._options.timeoutInSeconds*1e3);if(await this.onChatMessage(o),s){this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u5DF2\u88AB\u63D0\u524D\u6267\u884C\uFF0C\u76F4\u63A5\u8FD4\u56DE\uFF01");return}clearTimeout(i),this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u5B8C\u6210"),this._nextQuestion(r)}catch(n){this._logger.warn("\u6D88\u606F\u5904\u7406\u51FA\u9519"),this._logger.error(n.message),r&&this._nextQuestion(r)}};onChatMessage=async e=>{this._logger.debug(`process chat message[id:${e.message.messageId}] of channel ${e.source.options.instanceName}`),this.emit("CHAT_MESSAGE",e);let o=this._findRules(e,this._skillRules,!0);if(await this._applyBeforeSkills(o,e),!e.message){this._logger.info("skill\u8FD4\u56DE\u7684message\u4E3A\u7A7A\uFF0C\u6B64\u6D88\u606F\u65E0\u9700\u4F7F\u7528bot\u54CD\u5E94\uFF01");return}let r=this.app.botManager.getInstance(this._responseRule.instanceName),n=this._getBotMessageManager(e.source.options.instanceName,e.message.fromId);if(e.message.type==="TEXT"){let I=e.message.content?.trim();if(I.startsWith("#reset")||I.startsWith("#\u91CD\u7F6E")){n.clearHistory();let f=await r.clearHistoryRequested(e);f?(e.reply("\u91CD\u7F6E\u5931\u8D25\uFF01","TEXT",void 0,!0),this._logger.error(f)):e.reply("\u91CD\u7F6E\u6210\u529F\uFF01","TEXT",void 0,!0);return}}let s=await r.prepareMessage(e);if(!s?.forSend){this._logger.debug("reply denied by bot"),this._options.fallbackAnswer?.length&&e.reply(this._options.fallbackAnswer,"TEXT",void 0,!0);return}e.source.beforeSend&&(await e.source.beforeSend(e.message),this._logger.debug("before reply hook"));let i=[];r.params.needHistoryMessage&&this._options.historyEnabled&&(i=n.getHistoryMessages(),s.forHistory&&(s.forHistory.type="user",n.addMessage(s.forHistory,e.message.content)));let a=new Tt,p=e.message.isGroupChat&&e.message.type!=="PAT",l=!e.message.isGroupChat,m=!1,u="",g=0,d="";try{let I=await r.getResponse(e,{onContent:async(f,T)=>{if(l&&!m&&(m=!0,e.onGenerating?.()),!f)return;let L=typeof f=="string"?f:f?.text,U="",x;if(typeof L=="string"){L=L.trimStart(),d+=L,u+=L;let F=this._splitWords(u,g);U=F.extract,u=F.remaining,F.extract?.length&&g++,T="TEXT"}else x=f;if(U.trim().length){let F=await a.add(this._applyAfterSkills(o,e,U,"TEXT",void 0,"part"));if(F){let b={};p&&(p=!1,F.messageType==="TEXT"&&e.message.senderInfo?.nickName&&e.source.params.autoAppendAt&&(F.content="@"+e.message.senderInfo.nickName+" "+F.content,b.atList=[e.message.senderInfo?.[e.source.params.fieldInAtList??"userId"]])),await e.reply(F.content,F.messageType,b)}}if(x){this._logger.debug("process none text content,content type:"+T);let F=await a.add(this._applyAfterSkills(o,e,f,T,void 0,"part"));F?.content&&await e.reply(F.content,F.messageType)}},onError:f=>{throw f}},s,i);if(d.trim().length){this._logger.debug("all words:"+d);let f=u,T="TEXT",L=await a.add(this._applyAfterSkills(o,e,u,"TEXT",d,"part"));if(f=L.content,T=L.messageType,f&&T==="TEXT"){let x=await a.add(this._applyAfterSkills(o,e,u,"TEXT",d,"complete"));f=x.content,T=x.messageType}let U=typeof f=="string"?f:f.text;f&&(!U||U.length)&&await e.reply(f,T)}r.params.needHistoryMessage&&this._options.historyEnabled&&I&&(I.type="bot",n.addMessage(I,d))}catch(I){if(this._logger.warn("process message error"),this._logger.error(I.message),await e.reply(`\u5904\u7406\u6D88\u606F\u65F6\u9047\u5230\u5F02\u5E38
11
- `,"TEXT",void 0,!0),this._options.sendErrorLog&&await e.reply(String(I),"TEXT",void 0,!1),process.env.LOG_LEVEL==="debug")throw I}finally{e.source.afterSend&&await e.reply(this._textEndId,"TEXT",void 0,!1)}};onSelfChatMessage=e=>{this._logger.debug("self send message"),e.message.type==="TEXT"&&this._logger.debug(e.message.content),this.emit("SELF_SEND",this._wrapEventWithChatReply(e))};async _applyAfterSkills(e,o,r,n,s,i){for(let a of e){let p=this.app.skillManager.getInstance(a.instanceName);if(!(p?.options.disabled||a.skillApplyOn==="source"||!ue(a,o))&&(this._logger.warn("status:"+i),!(a.skillWhenReplyStatus?.length&&a.skillWhenReplyStatus!==i)&&(this._logger.warn("status checked"),p?.applyOnReply))){this._logger.trace("apply after skill:"+a.instanceName+" for message from "+o.message.senderInfo.nickName);let l=await p.applyOnReply(a.skillWhenReplyStatus==="complete"?void 0:r,n,o,s);l?.content!==void 0&&l?.messageType!==void 0&&(r=l.content,n=l.messageType)}}return{content:r,messageType:n}}async _applyBeforeSkills(e,o){for(let r of e){let n=this.app.skillManager.getInstance(r.instanceName);if(!(n?.options.disabled||r.skillApplyOn==="reply")&&n?.applyOnSource&&(this._logger.trace("apply before skill:"+r.instanceName+" for message from "+o.message.senderInfo.nickName),await n.applyOnSource(o),!o.message)){this._logger.trace("\u6280\u80FD"+n.options.instanceName+"\u53D6\u6D88\u4E86\u540E\u7EED\u6280\u80FD\u7EE7\u7EED\u6267\u884C!");break}}}async _nextQuestion(e){let o=this._sourceMessagePool.get(e);if(!o){this._logger.trace("\u5F53\u524D\u7B49\u5F85\u6267\u884C\u7684\u5BF9\u8BDD\u5747\u5DF2\u5B8C\u6210\uFF01");return}if(!o.pool.length){this._sourceMessagePool.delete(e),this._logger.debug(e+"\u7528\u6237\u7684\u6240\u6709\u6D88\u606F\u5904\u7406\u5B8C\u6210\uFF01");return}let r=o.pool.shift();this._logger.debug("\u7EE7\u7EED\u56DE\u7B54\u7B49\u5F85\u533A\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898");try{await this.onChatMessage(r)}catch(n){if(this._logger.error("\u5904\u7406\u6D88\u606F\u51FA\u9519"),this._logger.error(n),process.env.LOG_LEVEL==="debug")throw n}finally{this._nextQuestion(e)}}_findRules(e,o,r){if(r){let s=[];return o.forEach(i=>{ue(i,e)&&s.push(i)}),s}return[o.find(s=>ue(s,e))]}_getBotMessageManager(e,o){if(this._historyManagers[e]){if(this._historyManagers[e][o])return this._historyManagers[e][o]}else this._historyManagers[e]={};let r=new wt(this._options.historyOptions??{});return this._historyManagers[e][o]=r,r}_wrapEventWithChatReply(e){return{...e,reply:(r,n="TEXT",s={},i=!1)=>{let a=e.message,p={messageId:zt(),senderName:e.me?.userName,senderId:e.me?.userId,senderInfo:e.me,fromId:a.isGroupChat?a.fromId:e.me?.userId,type:n,content:r,toInfo:[a.isGroupChat?a.groupInfo:a.senderInfo],isGroupChat:a.isGroupChat,...s};return this.sendMessage(p,e.source,i,e.message)}}}async _sendFromPool(){let e=[];for(let o of this._sendMessagePool.keys()){let r=this._sendMessagePool.get(o);if(r?.length){let n=r.shift();e.push(this.sendMessage(n.message,n.to,!0,n.fromMessage))}r.length===0&&this._sendMessagePool.delete(o)}await Promise.allSettled(e),this._sendMessagePool.size>0&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval)}_splitWords(e,o){if(this._options.bufferWordsMinCount<=0||e.length<=this._options.bufferWordsMinCount||o>=this._options.maxSplitCount-1)return{extract:"",remaining:e};let r=e.substring(0,this._options.bufferWordsMinCount),n=e.substring(this._options.bufferWordsMinCount);if(this._options.splitCharacters[0]!=="none"){let s=1/0;for(let i of this._options.splitCharacters){let a=n.indexOf(i);a<0||(s=Math.min(a,s))}if(s===1/0)return{extract:"",remaining:e};r+=n.substring(0,s+1),n=n.substring(s+1)}return{extract:r,remaining:n}}_initAgent(){if(this._initialized){this._logger.error("current source is defined,can't reinit!");return}if(this._logger.trace("agent init"),this._initialized=!0,this._options.skillRules?.length){let e=[...this._options.skillRules];this._skillRules=e.sort((o,r)=>(o.order??100)-(r.order??100))}else this._skillRules=[];for(let e of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(e);if(!o){this._logger.error(`can't find source instance of key ${e},please create in admin page first!`);continue}o.event.on("CHAT_MESSAGE",this.processChatMessage),o.event.on("SELF_SEND",this.onSelfChatMessage)}}};import{readItems as kr}from"@directus/sdk";import br from"emittery";import{v4 as vr}from"uuid";var xe=(r=>(r.APP_STARTED="APP_STARED",r.APP_RELOAD="APP_REALOD",r.APP_RESTARTED="APP_RESTARTED",r.APP_NOTIFY="APP_NOTIFY",r))(xe||{}),At=class extends br{constructor(t){super(),this._logger=y(t+"-global-trigger")}_logger;_eventNames=["APP_REALOD","APP_STARED","APP_RESTARTED","APP_NOTIFY"];get eventNames(){return[...this._eventNames]}async emit(t,e){return e=e??{},e.id=e.id??vr(),e.time=e.time??new Date,super.emit(t,e)}registerGlobalEventNames(t){if(this._eventNames.indexOf(t)>=0){this._logger.error("\u91CD\u590D\u7684\u6D88\u606F\u540D\u79F0\u6CE8\u518C\uFF1A"+t);return}this._eventNames.push(t)}};var O=y("agent-service"),Pt=class{constructor(t,e={}){this._app=t;this._options=e;this._options.maxRecords=this._options.maxRecords??1e3,this._options.models=this._options.models??{},this._options.models.agents=this._options.models.agents??[],this._options.models.bots=this._options.models.bots??[],this._options.models.skills=this._options.models.skills??[],this._options.models.sources=this._options.models.sources??[]}_initialized=!1;_agents=[];_tableNames={SOURCES:"sources",BOTS:"bots",SKILLS:"skills",AGENTS:"agents"};_resourceCount={agents:0,bots:0,sources:0,skills:0};get resourceCount(){return this._resourceCount}get agents(){return[...this._agents]}async init(){if(this._initialized){O.warn("agent service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,O.trace("agent service initializing..."),this._loadInstances()}getAgentByName(t){return this._agents?.find(e=>e.name===t)}async reload(){return O.trace("dispose agents,bots,skills,sources"),await this.dispose(),this._agents=[],O.trace("reinit instances"),this._loadInstances()}async _loadConfig(){let t=await this._loadTableConfig(this._tableNames.AGENTS),e=[...this._options.models.agents,...t.map(p=>({...p.options}))??[]],o=await this._loadTableConfig(this._tableNames.BOTS),r=[...this._options.models.bots,...o.map(p=>({name:p.name,options:p.options}))??[]],n=await this._loadTableConfig(this._tableNames.SKILLS),s=[...this._options.models.skills,...n.map(p=>({name:p.name,options:p.options}))??[]],i=await this._loadTableConfig(this._tableNames.SOURCES),a=[...this._options.models.sources,...i.map(p=>({name:p.name,options:p.options}))??[]];return{agents:e,bots:r,skills:s,sources:a}}async _loadTableConfig(t){if(this._app.offlineMode)return[];let e=await this._app.client.request(kr(t,{limit:this._options.maxRecords,filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));return e?.length?e:(O.warn("\u6CA1\u6709\u4ECE\u5728\u7EBF"+t+"\u83B7\u53D6\u5230\u6570\u636E\uFF01"),O.warn(e),[])}async _loadInstances(){let t=await this._loadConfig(),e=[];this._loadSkills(t.skills,e),this._loadBots(t.bots,e),this._loadSources(t.sources),O.info(`${t.sources.length}\u4E2Asource\u5B9E\u4F8B\uFF0C${t.bots.length}\u4E2Abot\u5B9E\u4F8B\uFF0C${t.skills.length}\u4E2Askill\u5B9E\u4F8B\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),await Promise.allSettled(e),e=[],this._loadAgents(t.agents),await Promise.allSettled(e),O.info(`${t.agents.length}\u4E2Aagent\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),this._resourceCount.agents=t.agents.length,this._resourceCount.bots=t.bots.length,this._resourceCount.skills=t.skills.length,this._resourceCount.sources=t.sources.length}_loadSources(t){let e=[];for(let o of t){o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.sourceManager.createInstance(o.name,o.options);if(!r){O.info("\u6CA1\u6709\u627E\u5230\u540D\u4E3A"+o.name+"\u7684\u6D88\u606F\u6E90");return}O.trace("source "+r.options.instanceName+"created");let n=o.options.instanceName,s=r.actions;s&&s.forEach(i=>{i.type==="api"?this._app.registerRoutes(n,i):i.type==="ws"?this._app.registerWSHandler(n,i):O.warn("\u4E0D\u80FD\u8BC6\u522B\u7684action\u7C7B\u578B\uFF1A"+i.type)}),e.push(r)}this._app.running?e.forEach(o=>o.login()):this._app.globalEvent.once("APP_STARED").then(()=>{e.forEach(o=>o.login())})}_loadBots(t,e){t.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.botManager.createInstance(o.name,o.options);if(!r){O.info("load bot failed:"+o.options.instanceName);return}O.trace("bot "+o.options.instanceName+" created"),e.push(r.init())})}_loadSkills(t,e){t.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.skillManager.createInstance(o.name,o.options);if(!r){O.info("load skill failed:"+o.options.instanceName);return}O.trace("skill "+r.options.instanceName+" created"),e.push(r.init())})}_loadAgents(t){O.trace(t),this._agents=t.map(e=>(e.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210agent\u7684\u5B9E\u4F8BID"),e.instanceName=ae(10)),new _e(this._app,e)))}async dispose(){await ie(this._agents),await this._app.botManager.clearInstances(),await this._app.skillManager.clearInstances(),await this._app.sourceManager.clearInstances()}};import wr from"emittery";var A=class extends wr{constructor(e){super();this._options=e;this.logger=y(this._options.instanceName),this._options.historyExipresInSeconds=this._options.historyExipresInSeconds??30*60,this._options.attachSendMode=this._options.attachSendMode??"later",this._options.maxAttachCount=this._options.maxAttachCount??3,this._options.subscribeWelcome=this._options.subscribeWelcome??"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002",this.chatIdCache=St(this._options.instanceName),this._options.onlyText=this._options.onlyText??!1}static params={name:"basic bot",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1},historyExipresInSeconds:{type:"number",title:"\u540E\u7AEF\u7BA1\u7406\u7684\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09"},"x-decorator-props":{min:60,tooltip:"\u5F53\u7531\u540E\u7AEF\u7BA1\u7406\u5386\u53F2\u6D88\u606F\u65F6\u5019\uFF08\u975E\u81EA\u5EFA\u5BA2\u6237\u7AEF\u7BA1\u7406\uFF09\uFF0C\u591A\u4E45\u540E\u91CD\u65B0\u5F00\u542F\u65B0\u7684\u5BF9\u8BDDsession\u3002\u9ED8\u8BA41800\u79D2\uFF0C\u537330\u5206\u949F\u3002\u5F53\u4F7F\u7528\u81EA\u5EFA\u540E\u7AEF\u5E26\u7684\u5386\u53F2\u6D88\u606F\u65F6\uFF0C\u8FC7\u671F\u76F8\u5173\u9009\u9879\u5728agent\u4E2D\u914D\u7F6E\u3002"},default:1800},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later"},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3},subscribeWelcome:{type:"string",title:"\u8BA2\u9605\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6B22\u8FCE\u8BED\uFF08\u4E3B\u8981\u7528\u4E8E\u516C\u4F17\u53F7\u8BA2\u9605\u540E\u7684\u81EA\u52A8\u56DE\u590D\uFF09"},"x-decorator-props":{tooltip:`\u5F53\u6536\u5230\u8BA2\u9605\u6D88\u606F\u65F6\uFF0C\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B22\u8FCE\u8BCD\uFF0C\u5982\u679C\u6B22\u8FCE\u8BCD\u4EE5\u53CC\u4E0B\u5212\u7EBF__\u5F00\u5934\uFF0C\u8868\u793A\u4F7F\u7528\u56FA\u5B9A\u8BCD\u8BED\uFF0C\u5982 __\u6B22\u8FCE\u5173\u6CE8\uFF01\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u914D\u7F6E\u7684\u8BCD\u4F5C\u4E3A\u63D0\u793A\u8BCD\u8BA9\u540E\u7AEF\u7ED9\u51FA\u6B22\u8FCE\u8BCD
12
- \u53EF\u4EE5\u4F7F\u7528\u8BE5\u529F\u80FD\u63D0\u4F9B\u5BF9\u6A21\u578B\u80FD\u529B\u7684\u4ECB\u7ECD\u3002`},default:"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002"}}}}};commandText={attach:"_command_attach",position:"_command_position",article:"_command_article",subscribe:"_command_subscribe"};chatIdCache;chatAttachCache={};logger;get options(){return this._options}checkCommand(e,o,r){return e===this.commandText.attach?(this.chatAttachCache[o]||this.logger.warn("\u6709\u6536\u5230\u56FE\u7247\u6D88\u606F\uFF0C\u4F46\u662F\u6CA1\u6709\u7F13\u5B58\u6210\u529F\uFF01"),!1):e===this.commandText.position||e===this.commandText.article?!1:e===this.commandText.subscribe?(r.reply(this._options.subscribeWelcome.slice(2),"TEXT"),!1):!0}async getLastInfo(e){let o=await this.chatIdCache.get(e);if(!o&&this.supportConversationOnline){let r=await this.getLatestConversationId(e);if(r?.length&&this._options.historyExipresInSeconds>0){let n=await this.getLatestChatTime(r,e);if(this.logger.debug("server time hours "+new Date().getHours()),n){let s=(n+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>s?(await this.deleteConversation(r,e),this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u8FC7\u671F\uFF0C\u5220\u9664")):o={conversationId:r,timeInSeconds:n}}else o={conversationId:r,timeInSeconds:void 0}}else o={conversationId:r,timeInSeconds:void 0}}else if(this._options.historyExipresInSeconds>0&&o?.timeInSeconds){let r=(o.timeInSeconds+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>r&&(this.supportConversationOnline&&await this.deleteConversation(o.conversationId,e),await this.chatIdCache.delete(e),o=void 0,this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u7F13\u5B58\u8FC7\u671F\uFF0C\u5220\u9664"))}return o}async clearHistoryRequested(e){try{let o=e.source.options.instanceName+"-"+e.message.fromId;delete this.chatAttachCache[o];let r=(await this.chatIdCache.get(o))?.conversationId;if(r?await this.chatIdCache.delete(o):r=await this.getLatestConversationId(o),!r){this.logger.debug("\u6CA1\u6709\u5386\u53F2\u6D88\u606F\u8981\u5220\u9664\uFF01");return}await this.deleteConversation(r,o)}catch(o){return String(o)}}async prepareMessage(e){let o=e.source.options.instanceName+"-"+e.message.fromId;try{let r=e.message,n=[],s;switch(r.type){case"RECALL":case"FRIEND_REQUEST":case"SYSTEM":case"CUSTOM":case"PHONE":return;case"TEXT":s=r.content;break;case"REF":{let a=r.content;if(s=a.text,a.refMessage?.type==="TEXT"||a.refMessage?.type==="REF"||a.refMessage?.type==="AUDIO"){let p=typeof a.refMessage.content=="string"?a.refMessage.content:a.refMessage.content.text;p?.length&&(s=`\u6839\u636E\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u5E76\u91CD\u70B9\u9488\u5BF9\u201C${p}\u201D\u8FD9\u6BB5\u8BDD\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\uFF1A${s}`)}else if(a.refMessage?.type==="POSITION"){let p=Kt(a.refMessage.content);p.length&&(s=`\u6839\u636E\u4EE5\u4E0B\u4F4D\u7F6E\u4FE1\u606F\u3010${p}\u3011\u9488\u5BF9\u8BE5\u95EE\u9898\u8FDB\u884C\u56DE\u590D\uFF1A${s}`)}else a.refMessage?.type==="ARTICLE"?s=`\u6839\u636E\u8BE5\u6587\u7AE0\u7684\u4FE1\u606F\uFF08${bo(a.refMessage.content)}\uFF09,\u6293\u53D6\u5176\u8BE6\u7EC6\u5185\u5BB9\uFF0C\u7136\u540E\u56DE\u7B54\u4EE5\u4E0B\u95EE\u9898\uFF08\u6CE8\u610F\u5982\u679C\u662F\u603B\u7ED3\u5185\u5BB9\uFF0C\u5219\u5148\u6982\u8FF0\uFF0C\u518D\u5206\u51E0\u4E2A\u91CD\u70B9\u8BE6\u7EC6\u63CF\u8FF0\uFF09\uFF1A${s}`:s="\u8BF7\u56DE\u590D\u4E00\u6BB5\u8BDD\u53CB\u597D\u7684\u8868\u8FBE\u4F60\u6682\u65F6\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u529F\u80FD\uFF01";this.logger.debug("ref message"),this.logger.debug(s);break}case"AUDIO":{let a=e.message.content;a.text?.length?s=a.text:this.logger.info("\u5F53\u524D\u8BED\u97F3\u6CA1\u6709\u88AB\u8F6C\u6362\u4E3A\u6587\u672C\uFF0C\u65E0\u6CD5\u53D1\u9001\u5230dify\u540E\u7AEF\uFF01\u8BF7\u8003\u8651\u4F7F\u7528skill\u8FDB\u884C\u8F6C\u6362\uFF01");break}case"POSITION":{if(e.message.isGroupChat)s=this.commandText.position;else{let a=Kt(e.message.content);a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u4F4D\u7F6E\u4FE1\u606F\uFF1A\u3010${a}\u3011\uFF0C\u6211\u7A0D\u540E\u53EF\u80FD\u4F1A\u95EE\u4F60\u5173\u4E8E\u8FD9\u4E2A\u4F4D\u7F6E\u7684\u95EE\u9898\u3002`)}break}case"PAT":{let a=e.message.content;e.message.isGroupChat?s="\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u7684\u62CD\u4E86\u62CD\u4F60\uFF0C\u7ED9\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01":s=`\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u5730\u62CD\u4E86\u62CD\u4F60\uFF0C\u5177\u4F53\u6D88\u606F\u5185\u5BB9\u662F\uFF1A\u3010${a.text}\u3011\u3002\u6765\u4E00\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01`;break}case"ARTICLE":{if(e.message.isGroupChat)s=this.commandText.article;else{let a=e.message.content.url;a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u7F51\u5740\uFF1A${a}\uFF0C\u8BF7\u7B49\u5F85\u6211\u7684\u63D0\u95EE\uFF08\u5982\u679C\u540E\u7EED\u8981\u6C42\u603B\u7ED3\uFF0C\u5219\u5148\u6982\u62EC\u6574\u4F53\u63CF\u8FF0\uFF0C\u7136\u540E\u52063-5\u70B9\u5C55\u5F00\u63CF\u8FF0\u91CD\u70B9\u5185\u5BB9\uFF0C\u53EF\u4EE5\u4F7F\u7528\u4E00\u4E9B\u8868\u60C5\u7B26\u53F7\u6765\u589E\u5F3A\u63CF\u8FF0\u7684\u8DA3\u5473\u6027\uFF0C\u4E0D\u7528\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u8981\u6C42\uFF09\u3002`)}break}case"UNSUBSCRIBE":{this.logger.debug("\u7528\u6237\u53D6\u6D88\u8BA2\u9605\uFF0C\u65E0\u9700\u56DE\u590D\uFF01");break}case"SUBSCRIBE":{this._options.subscribeWelcome.startsWith("__")?s=this.commandText.subscribe:s=this._options.subscribeWelcome;break}}if(!this._options.onlyText)switch(r.type){case"RICH_TEXT":{let a=r.content;s="";for(let p of a.content)p.type==="text"?s+=p.data+`
13
- `:p.type==="image"||p.type==="file"?n.push({file:p.data.file,messageId:e.message.messageId,type:p.type}):(this.logger.warn("\u65E0\u6CD5\u8BC6\u522B\u7684rich text content\u7C7B\u578B"),this.logger.warn(p));break}case"REF":{let a=r.content;if(a.refMessage?.type==="IMAGE"||a.refMessage?.type==="EMOTION"||a.refMessage?.type==="FILE"||a.refMessage?.type==="VIDEO"){s=a.text;let p=a.refMessage.content,l=await e.source.me();if(!this.chatAttachCache[o]?.some(u=>u.messageId===a.refMessage.messageId)||a.refMessage.senderId===l.userId&&p?.file){this.logger.info("update file now");let u="image";a.refMessage?.type==="VIDEO"?u="video":a.refMessage?.type==="FILE"&&(u="file"),n.push({file:p.file,messageId:a.refMessage.messageId,type:u})}else a.refMessage?.messageId&&(s=`\u6309\u6B64\u8981\u6C42\u5206\u6790\u7F16\u53F7\u4E3A${a.refMessage.messageId}\u7684\u9644\u4EF6\uFF08\u56DE\u590D\u4E2D\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\uFF09\uFF1A${s}`);this.logger.debug("ref mutil model message"),this.logger.debug(s)}break}case"FILE":case"VIDEO":case"IMAGE":case"EMOTION":{let a={file:r.content.file,messageId:e.message.messageId,type:"image"};r.type==="VIDEO"?a.type="video":r.type==="FILE"&&(a.type="file"),this._options.attachSendMode==="now"?n.push(a):(this.chatAttachCache[o]=this.chatAttachCache[o]??[],this.chatAttachCache[o].push(a),this.chatAttachCache[o].length>this._options.maxAttachCount&&(this.chatAttachCache[o].shift(),this.logger.debug("\u7F13\u5B58\u7684\u5185\u5BB9\u6570\u91CF\u5927\u4E8E\u4E86\u8BBE\u7F6E\u7684"+this._options.maxAttachCount+"\u4EFD\uFF0C\u65E7\u7684\u88AB\u79FB\u9664\uFF01")),s=this.commandText.attach),this.logger.debug(s);break}}if(!s){this.logger.debug("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+r.type);return}if(s.startsWith("_command_"))return{forSend:{},forHistory:void 0,chatId:o,plainText:s};let i=[...n??[]];if(this.chatAttachCache[o]?.length&&i.push(...this.chatAttachCache[o]),n.length){let a="\u8FD9\u51E0\u4E2A\u6587\u4EF6\u7684\u7F16\u53F7\u5206\u522B\u662F";for(let p of i)a+=p.messageId+"\uFF0C";s=a+`\u540E\u7EED\u5982\u679C\u6211\u63D0\u5230\u8FD9\u4E9B\u7F16\u53F7\uFF0C\u4E5F\u9700\u8981\u9488\u5BF9\u6307\u5B9A\u7F16\u53F7\u7684\u6587\u4EF6\u8FDB\u884C\u56DE\u7B54\uFF0C\u5982\u679C\u540E\u7EED\u63D0\u5230\u5206\u6790\u6587\u4EF6\uFF0C\u4E00\u822C\u6307\u5206\u6790\u6700\u8FD1\u4E00\u6761\u6D88\u606F\u7684\u6587\u4EF6\uFF0C\u6CE8\u610F\u6240\u6709\u7684\u56DE\u7B54\u90FD\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\u4FE1\u606F\uFF0C\u53EF\u4EE5\u7528\u7B2C\u51E0\u4E2A\u6587\u4EF6\u6765\u4EE3\u66FF\u3002\u73B0\u5728\u8BF7\u6839\u636E\u5982\u4E0B\u63D0\u95EE\u5BF9\u6587\u4EF6\u8FDB\u884C\u5206\u6790\u5E76\u56DE\u7B54\uFF1A${s}\uFF08\u76F4\u63A5\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u8981\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u89C4\u5219\u4E86\uFF09`}return n=i,this.generateReadyMessage(o,s,n,e)}catch(r){throw delete this.chatAttachCache[o],r}}async getResponse(e,o,r,n){let s=r.forSend,i=r.chatId;if(!this.checkCommand(r.plainText,i,e))return;let a;n?.length&&(a=n.map(m=>m.data)),this.chatAttachCache[i]=[];let p=await this.getLastInfo(i),l=await this.sendMessageBody(s,a,{onContent:(m,u)=>{o.onContent(m,u)},onCompleted:(m,u)=>{this.supportConversationOnline&&this.chatIdCache.set(i,{conversationId:m,timeInSeconds:u})},onError:m=>{throw m}},p,e);return this.logger.debug(this._options.instanceName+" reply completed"),l}};var Xt=y("instance-manager"),z=class{constructor(t){this.options=t;this.options=this.options??{},this.options.cacheInstance=this.options.cacheInstance??!0}_instances={};_creators={};_params={};registerInstanceCreator(t,e){this._creators[e.name]&&Xt.warn(`\u540D\u4E3A${e.name}\u7684bot\u5DF2\u7ECF\u88AB\u6CE8\u518C\uFF0C\u5C06\u88AB\u66F4\u65B0\u4E3A\u6700\u65B0\u503C\uFF01`),this._creators[e.name]=t,this._params[e.name]=e}getParams(t){return this._params[t]}getAllParams(){return this._params}getAllParamsArray(){return Object.values(this._params)}getInstance(t){return this._instances[t]}getInstances(t){return t?.length?Object.values(this._instances).filter(e=>e.params.name===t):Object.values(this._instances)}createInstance(t,e){let o=e.instanceName;if(!o?.length){Xt.error("instanceKey\u672A\u8BBE\u7F6E\uFF1A"+t+"\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5B9E\u4F8B\uFF01");return}if(this.options.cacheInstance&&this._instances[o])return this._instances[o];if(typeof this._creators[t]!="function"){Xt.error("\u672A\u80FD\u627E\u5230\u540D\u4E3A"+t+"\u7684\u5B9E\u4F8B\u6784\u5EFA\u5668\uFF01");return}let r=this._creators[t](e);return this.options.cacheInstance&&(this._instances[o]=r),r}async clearInstances(){await ie(Object.values(this._instances)),this._instances={}}};var Mt=class extends z{};import{RoleType as Or}from"@coze/api";import{existsSync as Tr}from"fs";import{v4 as Ar}from"uuid";import Pr from"jsonwebtoken";import{ChatEventType as Ae,CozeAPI as Mr}from"@coze/api";var Jt=y("coze-service"),Ot=class{constructor(t){this._options=t;this._options.apiBase=this._options.apiBase??"https://api.coze.cn",this._options.apiBase.endsWith("/")&&(this._options.apiBase=this._options.apiBase.slice(0,this._options.apiBase.length-1))}_token;_client;get client(){return this._client}async _loadToken(){let t=W(this._options.privateKeyPath),e;Tr(t)?e=await h.fromPath(t,"text").asText():(Jt.warn("coze\u79C1\u94A5\u8DEF\u5F84\u4E0D\u5B58\u5728\uFF0C\u5C1D\u8BD5\u5C06\u5185\u5BB9\u76F4\u63A5\u4F5C\u4E3A\u79C1\u94A5\u4F7F\u7528\u3002"),e=t);let o=parseInt(new Date().getTime()/1e3),r={iss:W(this._options.appId),aud:this._options.apiBase.replace("https://","").replace("http://",""),iat:o,exp:o+86399,jti:Ar()},n={alg:"RS256",typ:"JWT",kid:W(this._options.publicKey)},s=Pr.sign(r,e,{algorithm:"RS256",header:n}),i=await(await fetch(this._options.apiBase+"/api/permission/oauth2/token",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${s}`},body:JSON.stringify({duration_seconds:86399,grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer"})})).json();this._token=i.access_token;let a=i.expires_in;Jt.trace("\u6210\u529F\u83B7\u53D6coze\u5E94\u7528token\uFF1A"+this._token),this._client=new Mr({baseURL:this._options.apiBase,token:this._token});let p=(a-o)*1e3;setTimeout(()=>{this._loadToken()},p/1.2)}async init(){await this._loadToken()}async conversations(t){return await this._get("/v1/conversations",{bot_id:t})}async createConversation(t,e){let o=await this._post("/v1/conversation/create",{messages:t,meta_data:e});return Jt.debug(o),o}async streamChat(t,e){let o=await this._client.chat.stream(t),r;for await(let n of o)switch(n.event){case Ae.CONVERSATION_CHAT_CREATED:{e.onStart?.(n.data);break}case Ae.CONVERSATION_MESSAGE_DELTA:{e.onReply(n.data.content,n);break}case Ae.CONVERSATION_MESSAGE_COMPLETED:{r||(r=n.data.content,e.onReplyCompleted?.(r,n));break}case Ae.CONVERSATION_CHAT_COMPLETED:{e.onCompleted?.(r,n.data);break}case Ae.CONVERSATION_CHAT_FAILED:throw new Error(JSON.stringify(n.data));default:e.others?.(n);break}}async _post(t,e,o){return o&&(t=t+"?"+new URLSearchParams(o).toString()),(await fetch(this._options.apiBase+t,{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._token}`},body:JSON.stringify(e)})).json()}async _get(t,e){return e&&(t=t+"?"+new URLSearchParams(e).toString()),(await fetch(this._options.apiBase+t,{method:"get",headers:{authorization:`Bearer ${this._token}`}})).json()}};var Pe=class c extends A{constructor(e){super(e);this._options=e}static params={name:"coze-bot",desc:"\u5B57\u8282\u6263\u5B50\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.coze.cn"},"x-validator":{format:"url"}},appId:{type:"string",title:"Coze\u5E73\u53F0\u5E94\u7528ID","x-index":30,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684\u5E94\u7528ID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u4ECEOAuth\u9009\u9879\u5361\u4E2D\u83B7\u5F97"},required:!0},botId:{type:"string",title:"Coze\u5E73\u53F0\u7684BotID","x-index":35,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684BotID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u7F16\u8F91\u9875\u9762\uFF0C\u6D4F\u89C8\u5668\u5730\u5740bot/xxx\uFF0Cxxx\u5C31\u662FbotId\u3002"},required:!0},apiKey:{type:"string",title:"\u5E94\u7528\u516C\u94A5","x-index":40,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u516C\u94A5"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97"},required:!0},privateKey:{type:"string",title:"\u5E94\u7528\u79C1\u94A5","x-index":50,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u79C1\u94A5",rows:4},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97\uFF0C\u76F4\u63A5\u586B\u5165pem\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u5185\u5BB9\u5373\u53EF"},required:!0},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};_service;async init(){let e=new Ot({privateKeyPath:this._options.privateKey,publicKey:this._options.apiKey,appId:this._options.appId,apiBase:this._options.apiBase});await e.init(),this._service=e}get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,o){let r;if(_.httpUrl&&this._options.preferLocalAttach)r={file_url:await e.asUrl(),type:o};else{let n=await this._service.client.files.upload({file:await e.asReadStream()});if(n)r={file_id:n.id,type:o};else return}return r}async generateReadyMessage(e,o,r){let n={role:Or.User,type:"question",content_type:"text"},s=[],i={bot_id:this._options.botId,user_id:e,auto_save_history:!0,additional_messages:[n],custom_variables:this._options.customVars};if(r.length){for(let a of r){if(a.type!=="image"&&a.type!=="file")continue;let p=await this._loadFileInfo(a.file,a.type);s.push(p)}o.length&&(s.push({type:"text",text:o}),o=JSON.stringify(s)),n.content_type="object_string"}return n.content=o,{forSend:i,chatId:e,plainText:o}}async getLatestChatTime(){}async getLatestConversationId(){}async deleteConversation(){}async sendMessageBody(e,o,r,n){n?.conversationId?.length&&(e.conversation_id=n.conversationId),await this._service.streamChat(e,{onReply:s=>{r.onContent(s,"TEXT")},onCompleted:(s,i)=>{r.onCompleted(i.conversation_id,i.completed_at)}})}};import Er from"axios";import Fr from"form-data";var Nr=1e5,Fo={json:"application/json",stream:"text/event-stream",form:"application/x-www-form-urlencoded; charset=UTF-8",download:"application/octet-stream"};function Rr(c){return c.replace(/\\u[0-9a-f]{4}/g,(t,e)=>String.fromCharCode(parseInt(e,16)))}var Et=class{constructor(t){this._options=t;let e=this._options.appKey;e&&this._baseOptions.headers.append("Authorization",`Bearer ${e}`),this._options.appServiceBase.endsWith("/")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-1)),this._options.appServiceBase.endsWith("/v1")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-3)),this._apiUrl=this._options.appServiceBase+"/v1"}_apiUrl;_baseOptions={method:"GET",mode:"cors",headers:new Headers({"Content-Type":Fo.json}),redirect:"follow"};_handleStream=async(t,e,o,r,n,s,i,a,p,l,m,u,g,d,I,f)=>{if(!t.ok)throw new Error("Network response was not ok");let T=t.body?.getReader(),L=new TextDecoder("utf-8"),U="",x,F=!0;async function b(){let Q=!1;return T?.read().then(he=>{if(he.done){o&&o();return}U+=L.decode(he.value,{stream:!0});let ve=U.split(`
14
- `);try{ve.forEach(Y=>{Y.startsWith("data: ")&&(Y=Y.substring(6));try{x=JSON.parse(Y)}catch{e("",F,{conversationId:x?.conversation_id,messageId:x?.message_id,sourceBuffer:x});return}if(x.status===400||!x.event){e("",!1,{conversationId:void 0,messageId:"",errorMessage:x?.message,errorCode:x?.code,sourceBuffer:x}),Q=!0,o?.(!0);return}x.event==="message"||x.event==="agent_message"?(e(Rr(x.answer),F,{conversationId:x.conversation_id,taskId:x.task_id,messageId:x.id,sourceBuffer:x}),F=!1):x.event==="agent_thought"?r?.(x):x.event==="message_file"?i?.(x):x.event==="message_end"?n?.(x):x.event==="message_replace"?s?.(x):x.event==="workflow_started"?a?.(x):x.event==="workflow_finished"?p?.(x):x.event==="node_started"?l?.(x):x.event==="node_finished"?m?.(x):x.event==="iteration_started"?u?.(x):x.event==="iteration_next"?g?.(x):x.event==="iteration_completed"?d?.(x):x.event==="text_chunk"?I?.(x):x.event==="text_replace"&&f?.(x)}),U=ve[ve.length-1]}catch(Y){e("",!1,{conversationId:void 0,messageId:"",errorMessage:`${Y}`,sourceBuffer:x}),Q=!0,o?.(!0);return}if(!Q)return b()})}return b()};_baseFetch=(t,e,{needAllResponseContent:o})=>{let r=Object.assign({},this._baseOptions,e),s=`${this._apiUrl}${t.startsWith("/")?t:`/${t}`}`,{params:i,body:a}=r;if(i=i??{},i){let p=[];Object.keys(i).forEach(l=>p.push(`${l}=${encodeURIComponent(i[l])}`)),s.search(/\?/)===-1?s+=`?${p.join("&")}`:s+=`&${p.join("&")}`,delete r.params}return a&&(r.body=JSON.stringify(a)),Promise.race([new Promise((p,l)=>{setTimeout(()=>{l(new Error("request timeout"))},Nr)}),new Promise((p,l)=>{globalThis.fetch(s,r).then(m=>{let u=m.clone();if(!/^(2|3)\d{2}$/.test(m.status)){try{let d=m.json();switch(m.status){case 401:{this._options.onError?.("Invalid token");return}default:new Promise(()=>{d.then(I=>{this._options.onError?.(I.message)})})}}catch(d){this._options.onError?.(String(d))}return Promise.reject(u)}if(m.status===204){p({result:"success"});return}let g=r.headers.get("Content-type")===Fo.download?m.blob():m.json();p(o?u:g)}).catch(m=>{this._options.onError?.(String(m)),l(m)})})])};_upload=async t=>{let n={...{method:"POST",url:`${`${this._apiUrl}/files/upload`}`,data:{}},...t},s=n.data;s.append("user",t.user),this.options.appKey&&(n.headers=n.headers??{},n.headers.Authorization=`Bearer ${this.options.appKey}`),n.headers={...s.getHeaders(),...n.headers};let i=await Er({method:n.method,url:n.url,headers:n.headers,data:n.data,responseType:"json",withCredentials:!0,onUploadProgress:n.onprogress});if(i.status===201)return i.data;throw new Error(`Request failed with status ${i.status}`)};_ssePost=async(t,e,{onData:o,onCompleted:r,onThought:n,onFile:s,onMessageEnd:i,onMessageReplace:a,onWorkflowStarted:p,onWorkflowFinished:l,onNodeStarted:m,onNodeFinished:u,onError:g,onIterationStart:d,onIterationNext:I,onIterationFinish:f,onTextChunk:T,onTextReplace:L})=>{let U=Object.assign({},this._baseOptions,{method:"POST"},e),F=`${this._apiUrl}${t.startsWith("/")?t:`/${t}`}`,{body:b}=U;return b&&(U.body=JSON.stringify(b)),U.credentials="omit",fetch(F,U).then(Q=>{if(!/^(2|3)\d{2}$/.test(Q.status)){new Promise(()=>{Q.json().then(he=>{this._options.onError?.(he.message||"Server Error")})}),g?.("Server Error");return}return this._handleStream(Q,(he,ve,Y)=>{if(Y.errorMessage){this._options.onError?.(Y.errorMessage);return}o?.(he,ve,Y)},()=>{r?.()},n,i,a,s,p,l,m,u,d,I,f,T,L)}).catch(Q=>{this._options.onError?.(String(Q)),g?.(Q)})};_request=(t,e={},o)=>this._baseFetch(t,e,o||{});_get=(t,e={},o)=>this._request(t,Object.assign({},e,{method:"GET"}),o);_patch=(t,e={},o)=>this._request(t,Object.assign({},e,{method:"PATCH"}),o);_post=(t,e={},o)=>this._request(t,Object.assign({},e,{method:"POST"}),o);_put=(t,e={},o)=>this._request(t,Object.assign({},e,{method:"PUT"}),o);_del=(t,e={},o)=>this._request(t,Object.assign({},e,{method:"DELETE"}),o);get options(){return this._options}imageUpload=({file:t,onProgressCallback:e,user:o,fileName:r})=>{let n=new Fr;r?n.append("file",t,r):n.append("file",t);let s=i=>{if(i.lengthComputable){let a=Math.floor(i.loaded/i.total*100);e?.(a)}};return this._upload({data:n,onprogress:s,user:o})};sendChatMessage=async(t,{onData:e,onCompleted:o,onThought:r,onFile:n,onError:s,getAbortController:i,onMessageEnd:a,onMessageReplace:p,onWorkflowStarted:l,onNodeStarted:m,onNodeFinished:u,onWorkflowFinished:g})=>this._ssePost("chat-messages",{body:{...t,response_mode:t.response_mode??"streaming",user:t.user}},{onData:e,onCompleted:o,onThought:r,onFile:n,onError:s,getAbortController:i,onMessageEnd:a,onMessageReplace:p,onNodeStarted:m,onWorkflowStarted:l,onWorkflowFinished:g,onNodeFinished:u});sendWorkflowMessage=async(t,{onWorkflowStarted:e,onNodeStarted:o,onNodeFinished:r,onWorkflowFinished:n,onIterationStart:s,onIterationNext:i,onIterationFinish:a,onTextChunk:p,onTextReplace:l})=>this._ssePost("workflows/run",{body:{...t,response_mode:"streaming",user:t.user}},{onNodeStarted:o,onWorkflowStarted:e,onWorkflowFinished:n,onNodeFinished:r,onIterationStart:s,onIterationNext:i,onIterationFinish:a,onTextChunk:p,onTextReplace:l});stopChatMessageResponding=(t,e)=>this._post(`chat-messages/${t}/stop`,{body:{user:e}});fetchSuggestedQuestions=(t,e)=>this._get(`messages/${t}/suggested`,{params:{user:e}});fetchConversations=async(t,e=!1,o=100)=>this._get("conversations",{params:{limit:o,first_id:"",pinned:e,user:t}});fetchChatList=async(t,e,o=20)=>this._get("messages",{params:{conversation_id:t,limit:o,last_id:"",user:e}});fetchAppParams=async t=>this._get("parameters",{params:{user:t}});updateFeedback=async({url:t,body:e,user:o})=>this._post(t,{body:{...e,user:o}});generationConversationName=async(t,e,o)=>this._post(`conversations/${t}/name`,{body:{auto_generate:!o,name:o,user:e}});deleteConversation=async(t,e)=>this._del(`conversations/${t}`,{body:{user:e}});pinConversation=async(t,e)=>this._patch(`conversations/${t}/pin`,{params:{user:e}});unpinConversation=async(t,e)=>this._patch(`conversations/${t}/unpin`,{params:{user:e}});getFilesUrl(t){return t.startsWith("/")?this._options.appServiceBase+t:t}};var Me=class c extends A{constructor(e){super(e);this._options=e;this._options.apiBase||(this.logger.warn("\u5F53\u524D\u6CA1\u6709\u914D\u7F6Edify\u670D\u52A1\u5668\u5730\u5740\uFF0C\u5C06\u4F7F\u7528\u5B98\u7F51\u5730\u5740\uFF1Ahttps://api.dify.ai"),this._options.apiBase="https://api.dify.ai")}static params={name:"dify-agent-bot",desc:"Dify\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u4E0D\u5E26/v1\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.dify.ai"},"x-validator":{format:"url"}},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};_service;get params(){return c.params}get options(){return this._options}get supportConversationOnline(){return!0}async _uploadImage(e,o){let r=await e.asReadStream();try{return(await this._service.imageUpload({file:r,user:o})).id}catch(n){this.logger.error(n);return}}async _loadFileInfo(e,o){let r;if(_.httpUrl&&this._options.preferLocalAttach)r={transfer_method:"remote_url",url:await e.asUrl(),type:"image"};else{let n=await this._uploadImage(e,o);if(n)r={transfer_method:"local_file",upload_file_id:n,type:"image"};else return}return r}async init(){this._service=new Et({appKey:this._options.apiKey,appServiceBase:this._options.apiBase})}async generateReadyMessage(e,o,r){let n={query:o,inputs:this._options.customVars??{},user:e};if(r.length){n.files=[];for(let s of r){if(s.type!=="image"){this.logger.warn("dify\u5F53\u524D\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6\uFF01");continue}n.files.push(await this._loadFileInfo(s.file,e))}}return{forSend:n,chatId:e,plainText:o}}async getLatestConversationId(e){this.logger.debug("get conversation id "+e);let o=await this._service.fetchConversations(e,!1,1);if(o.data?.length)return o.data[0].id}async getLatestChatTime(e,o){return(await this._service.fetchChatList(e,o,1)).data?.[0]?.created_at}async deleteConversation(e,o){await this._service.deleteConversation(e,o)}async sendMessageBody(e,o,r,n){e.conversation_id=n?.conversationId,await this._service.sendChatMessage(e,{onData:s=>{r.onContent(s,"TEXT")},onMessageEnd:s=>{r.onCompleted(s.conversation_id,s.created_at)},onThought:s=>{this.logger.debug(s.tool_input)},onError:s=>{throw s}})}};import Br from"openai";var R=class c extends A{constructor(e){super(e);this._options=e;this._options.clientOptions=this._options.clientOptions??{},this._options.chatOptions?.model?.length||this.logger.warn("\u5F53\u524D\u672A\u8BBE\u7F6E\u4F7F\u7528\u7684\u6A21\u578B\u540D\u79F0\uFF0C\u8BE5bot\u6267\u884C\u53EF\u80FD\u4F1A\u5F02\u5E38:"+this._options.instanceName),this._options.apiBase?.length||this.logger.warn("\u5F53\u524D\u4F7F\u7528\u7684open ai\u5B98\u65B9\u5730\u5740\uFF0C\u8BF7\u786E\u4FDD\u7F51\u7EDC\u80FD\u591F\u8BBF\u95EE\uFF01"),this._options.apiBase?.length&&!this._options.apiBase.endsWith("/v1")&&this.logger.warn("openai\u7684\u63A5\u53E3\u5730\u5740\u4E00\u822C\u4EE5/V1\u7ED3\u5C3E\uFF0C\u5F53\u524D\u662F\uFF1A"+this._options.apiBase)}static params={name:"openai-bot",desc:"OpenAI\u517C\u5BB9\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://your.domain.com/v1 \u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u8BF7\u7559\u7A7A\u3002"},"x-validator":{format:"url"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 gtp4o-mini"},required:!0}},required:!0},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":10,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};client;get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,o){let r=await e.asUrl();if(this.logger.debug("\u9644\u4EF6\u5730\u5740\uFF1A"+r),o==="image")return{type:"image_url",image_url:{url:r}};if(o==="video")return{type:"video_url",video_url:{url:r}}}async generateReadyMessage(e,o,r){let n;if(this._options.onlyText)n={role:"user",content:o};else{let i=[];if(n={role:"user",content:i},r.length)for(let a of r){let p=await this._loadFileInfo(a.file,a.type);if(!p){this.logger.debug("\u4E0D\u652F\u6301\u7684\u9644\u4EF6\u7C7B\u578B\uFF1A"+a.type);continue}i.push(p)}o?.length&&i.push({type:"text",text:o})}let s={...this._options.chatOptions,stream:!0,messages:[n]};return s.user=e,{forHistory:{type:"user",data:n},forSend:s,chatId:e,plainText:o}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r){o?.length&&(e.messages=[...o,...e.messages]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let n=await this.client.chat.completions.create(e),s=!1,i="";for await(let a of n){let p="";for(let l of a.choices)if(l.delta.content?.length&&(p+=l.delta.content),l.finish_reason?.length){l.finish_reason==="content_filter"?p+="\u3010\u56DE\u590D\u4E2D\u65AD\uFF1A\u60A8\u7684\u5185\u5BB9\u88AB\u68C0\u6D4B\u4E3A\u4E0D\u5408\u89C4\u3002\u3011":l.finish_reason!=="stop"&&this.logger.warn("\u9047\u5230\u672A\u77E5\u7684\u539F\u56E0\u56DE\u590D\u7ED3\u675F\uFF1A"+l.finish_reason),s=!0;break}if(i+=p,p.length&&r.onContent(p,"TEXT"),s)break}return{type:"bot",data:{role:"assistant",content:i}}}async init(){this.client=new Br({...this._options.clientOptions,baseURL:this._options.apiBase,apiKey:this._options.apiKey})}};var Oe=class extends R{constructor(e){let o;e.apiBase?.length||(e.apiBase="https://cloud.fastgpt.cn/api"),e.apiBase.endsWith("/v1")?o=e.apiBase.slice(0,e.apiBase.length-3):(o=e.apiBase,e.apiBase=e.apiBase+"/v1"),e.chatOptions?.model?.length&&(e.chatOptions=e.chatOptions??{},e.chatOptions.model="gpt-4");super(e);this._options=e;this._options.disableHistory=this._options.disableHistory??!1,this._commonApiBase=o}static params={name:"fastgpt-bot",desc:"fastgpt\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://cloud.fastgpt.cn/api"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u680F\u53EF\u4EE5\u770B\u5230\u6240\u9009\u5E94\u7528\u7684appId"}},disableHistory:{type:"string",title:"\u662F\u5426\u7981\u7528\u5728\u7EBF\u5386\u53F2\u6D88\u606F","x-index":4,"x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u7981\u7528\u540E\u6BCF\u6B21\u5BF9\u8BDD\u90FD\u662F\u65B0\u7684\uFF0C\u6CA1\u6709\u4E0A\u4E0B\u6587"},default:!1},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E",properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0\uFF08\u65E0\u9700\u586B\u5199\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u65E0\u9700\u586B\u5199"},"x-disabled":!0}},"x-display":!1}}}}};_commonApiBase;get options(){return this._options}get supportConversationOnline(){return!0}async generateReadyMessage(e,o,r){let n=await super.generateReadyMessage(e,o,r);return this._options.disableHistory||(n.forSend.chatId=e),n}async getLatestConversationId(e){return e}async getLatestChatTime(e,o){let n=((await(await fetch(this._commonApiBase+"/core/chat/getHistories",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({appId:this._options.appId,offset:0,pageSize:1e3,source:"api"})})).json()).data?.list).find(s=>s.chatId===o);if(n)return new Date(n.updateTime).getTime()/1e3}async deleteConversation(e,o){let r=await await fetch(this._commonApiBase+`/core/chat/delHistory?chatId=${o}&appId=${this._options.appId}`,{method:"delete",headers:{authorization:`Bearer ${this._options.apiKey}`}});this.logger.debug(r)}};var Ee=class c extends A{constructor(e){super(e);this._options=e;if(!this._options.apiBase)throw new Error("\u6CA1\u6709\u914D\u7F6EapiBase!")}static params={name:"ollama-bot",desc:"Ollama\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://your.domain.com"},"x-validator":{format:"url"},required:!0},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"},"x-visible":!1},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 qwen2"},required:!0},authType:{type:"string",enum:["basic","token","none"],title:"\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F","x-index":5,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F"},"x-decorator-props":{tooltip:"basic\u8BA4\u8BC1\u65F6\u9700\u8981\u914D\u7F6E\u57FA\u7840\u6388\u6743\u4FE1\u606F\uFF0Ctoken\u65F6\u5019\u9700\u8981\u914D\u7F6Etoken\u6388\u6743\u4FE1\u606F\u3002none\u65F6\u65E0\u9700\u586B\u5199\u3002"},default:"basic"},basicOptions:{type:"object",title:"\u57FA\u7840\u6388\u6743\u4FE1\u606F","x-index":6,properties:{name:{type:"string",title:"Basic\u7528\u6237\u540D","x-index":7,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u540D"}},password:{type:"string",title:"Basic\u5BC6\u7801","x-index":8,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"}}}},tokenOptions:{type:"object",title:"Token\u6388\u6743\u4FE1\u606F","x-index":9,properties:{in:{type:"string",enum:["header","query"],title:"Token\u4FE1\u606F\u4F4D\u7F6E","x-index":10,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u4FE1\u606F\u4F4D\u7F6E"},"x-decorator-props":{tooltip:"\u6388\u6743\u4FE1\u606F\u5B58\u5728\u4E8Eheader\u8FD8\u662Furl\u7684query\u4E32\u4E2D\u3002"},default:"header"},key:{type:"string",title:"Token Key","x-index":11,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165TokenKey"},"x-decorator-props":{tooltip:"\u6BD4\u5982Header\u4E2D\u7684Key\u901A\u5E38\u4E3AAuthorization\uFF0CUrl\u4E2D\u7684\u53EF\u80FD\u4E3Atoken\uFF0C\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u586B\u5199\u3002"},default:"Authorization"},token:{type:"string",title:"Token Value","x-index":12,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Token\u503C"}}}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0},options:{type:"object",title:"Ollama\u7684\u53EF\u9009\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94Ollama\u4E2D\u6E29\u5EA6\uFF0CTop P\u7B49\u914D\u7F6E\u53C2\u6570\u3002"}},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":3,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,o,r){let n={model:this._options.model,messages:[],options:this._options.options},s=[];if(r.length)for(let a of r)if(a.type==="image"){let p=await a.file.asBase64();s.push(p)}else this.logger.debug("\u4E0D\u652F\u6301\u7684\u6587\u4EF6");let i={role:"user",content:o,images:s};return n.messages.push(i),{forSend:n,chatId:e,plainText:o,forHistory:{type:"user",data:i}}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r){o?.length&&(e.messages=[...o,e.messages[0]]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let n=this._options.apiBase+"/api/chat";this._options.authType==="token"&&this._options.tokenOptions.in==="query"&&(n+=`?${this._options.tokenOptions.key}=${this._options.tokenOptions.token}`);let s={"Content-Type":"application/json"};if(this._options.authType==="token"&&this._options.tokenOptions.in==="header")s.Authorization=this._options.tokenOptions.token;else if(this._options.authType==="basic"){let p=`${this._options.basicOptions.name}:${this._options.basicOptions.password}`;s.Authorization=`Basic ${btoa(p)}`}let i=await fetch(n,{method:"post",keepalive:!0,headers:s,body:JSON.stringify(e)}),a="";if(await ee(i.body,p=>{let l=p.message?.content;l?.length&&(a+=l,r.onContent(l,"TEXT"))}),a?.length)return this.logger.debug(a),{type:"bot",data:{role:"assistant",content:a}}}async init(){}};var Fe=class extends R{static params={name:"openrouter-bot",desc:"OpenRouter\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://openrouter.ai/api/v1 \u4F7F\u7528OpenRouter\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528OpenRouter\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"meta-llama/llama-3.1-70b-instruct:free"},required:!0}},required:!0}}}}};constructor(t){t.apiBase?.length||(t.apiBase="https://openrouter.ai/api/v1"),super(t)}};var Ne=class c extends A{constructor(e){e.onlyText=e.onlyText??!0;super(e);this._options=e;this._options.apiBase||(this.logger.warn("\u6CA1\u6709\u914D\u7F6EapiBase\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u7684https://openapi.youdao.com/q_anything/api"),this._options.apiBase="https://openapi.youdao.com/q_anything/api")}static params={name:"qanything-bot",desc:"\u7F51\u6613\u6709\u9053\u77E5\u8BC6\u5E93\u667A\u80FD\u4F53",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://openapi.youdao.com/q_anything/api"},"x-validator":{format:"url"}},botId:{type:"string",title:"botId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165bot\u7684id"},required:!0,"x-decorator-props":{tooltip:"\u5728Agents\u9875\u9762\u7684\u53F3\u4E0A\u89D2\u6216\u8005\u6D4F\u89C8\u5668\u7684URL\u4E2D\u90FD\u53EF\u4EE5\u770B\u5230botId"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},"x-display":!1}}}}};get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,o){return{forSend:{uuid:this._options.botId,question:o,sourceNeeded:!1},chatId:e,plainText:o}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r){o?.length?e.history=[...o]:e.history=[];let n=await fetch(this._options.apiBase+"/bot/chat_stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:this._options.apiKey},body:JSON.stringify(e)}),s;if(await ee(n.body,i=>{let a=i.result.response;i.result.singleQAId!==null?s=a:a?.length&&r.onContent(a,"TEXT")}),s?.length)return this.logger.debug(s),{type:"bot",data:{question:e.question,response:s}}}async init(){}};import{v4 as Dr}from"uuid";var Re=class c extends A{constructor(e){e.apiBase=e.apiBase??"https://agentapi.baidu.com";super(e);this._options=e}static params={name:"wenxin-agent-bot",desc:"\u767E\u5EA6\u6587\u5FC3\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://agentapi.baidu.com"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u8BE6\u60C5\u9875\u9762\u53EF\u4EE5\u770B\u5230\u5E94\u7528\u7684appId\u3002"}}}}}};get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,o){let r=await e.asUrl(),n=e.name.substring(e.name.lastIndexOf(".")+1);if(o==="image")return{imageName:e.name,imageType:n,imageUrl:r};{let s=await e.info();return{fileId:Dr(),fileName:e.name,fileSize:s.size,fileType:n,fileUrl:r}}}async generateReadyMessage(e,o,r){let n={},s={openId:e,message:{content:n},source:this._options.appId,from:"openapi"};if(r.length){n.type="multimodal",n.value=[];for(let i of r)n.value.push({type:i.type,value:await this._loadFileInfo(i.file,i.type)});n.value.push({type:"text",value:{showText:o,text:o}})}else n.type="text",n.value={showText:o,text:o};return{forSend:s,chatId:e,plainText:o}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r,n){e.threadId=n?.conversationId;let s=await fetch(this._options.apiBase+`/assistant/conversation?appId=${this._options.appId}&secretKey=${this._options.apiKey}`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),i="";await ee(s.body,a=>{let p=a.data?.message?.content[0]?.data?.text;p?.length&&(i+=p,r.onContent(p,"TEXT")),a.data?.message?.endTurn&&r.onCompleted(a.data.message.threadId,new Date().getTime()/1e3)}),this.logger.debug(i)}async init(){}};var Be=class c extends A{constructor(e){e.apiBase=e.apiBase??"https://yuanqi.tencent.com";super(e);this._options=e}static params={name:"yuanqi-bot",needHistoryMessage:!0,desc:"\u817E\u8BAF\u5143\u5668\u667A\u80FD\u4F53",optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://open.hunyuan.tencent.com"},"x-validator":{format:"url"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}}}}}};get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,o){let r=await e.asUrl(),n=e.name.substring(e.name.lastIndexOf(".")+1);return o==="image"?{type:"image",url:r}:(this.logger.info("\u5F53\u524D\u5E73\u53F0\u53EF\u80FD\u4E0D\u652F\u6301\u8BE5\u7C7B\u578B\u6570\u636E\u89E3\u6790\uFF1A"+n),{type:n,url:r})}async generateReadyMessage(e,o,r){let n=[],s={role:"user",content:n},i={assistant_id:this._options.appId,user_id:e,stream:!0,messages:[s]};if(o?.length&&n.push({type:"text",text:o}),r.length)for(let a of r)n.push({type:"file_url",file_url:await this._loadFileInfo(a.file,a.type)});return{forSend:i,chatId:e,plainText:o,forHistory:s}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r){let n=await fetch(this._options.apiBase+"/openapi/v1/agent/chat/completions",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json","X-Source":"openapi",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(e)}),s="";return await ee(n.body,i=>{if(i.choices?.[0]?.delta.role!=="assistant")return;let a=i.choices?.[0]?.delta.content;a?.length&&(s+=a,r.onContent(a,"TEXT"))}),this.logger.debug(s),{type:"bot",data:{role:"assistant",content:[{type:"text",text:s}]}}}async init(){}};import Lr from"form-data";import Ur from"axios";var De=class c extends A{constructor(e){e.apiBase||(e.apiBase="https://chatglm.cn/chatglm/assistant-api/v1");super(e);this._options=e}static params={name:"zhipu-qingyan-agent",desc:"\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u7559\u7A7A\u4F7F\u7528 https://chatglm.cn/chatglm/assistant-api/v1"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u53EF\u7559\u7A7A\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1Key","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1key"},"x-validator":{required:!0,message:"\u670D\u52A1Key\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},apiSecret:{type:"string",title:"\u670D\u52A1Secret","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u79C1\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},assistantId:{type:"string",title:"assistantId","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u667A\u80FD\u4F53\u7684\u5BF9\u8BDD\u6216\u8005\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u4E0A\u53EF\u4EE5\u770B\u5230\uFF0Cid=xxx\uFF0Cxxx\u5C31\u662Fid\u3002"}}}}}};_token;get options(){return this._options}get params(){return c.params}get supportConversationOnline(){return!0}async _loadToken(){let e=await(await fetch(`${this._options.apiBase}/get_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:this._options.apiKey,api_secret:this._options.apiSecret})})).json();this._token=e.result?.access_token,this.logger.trace("\u5DF2\u83B7\u53D6\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53token\uFF1A"+this._token);let o=parseInt(e.result?.expires_in??24*60*60);setTimeout(()=>{this._loadToken()},o*1e3/1.1)}async _loadFileInfo(e){let o=new Lr,r=await e.asReadStream();o.append("file",r);let n={...o.getHeaders(),Authorization:`Bearer ${this._token}`},s=await Ur({method:"post",url:this._options.apiBase+"/file_upload",headers:n,data:o,responseType:"json"});if(s.status!==200)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25:"+s.statusText);return{file_id:s.data.result.file_id}}async generateReadyMessage(e,o,r){let n=[],s={assistant_id:this._options.assistantId,prompt:o,file_list:n,meta_data:this._options.metaData};if(r.length)for(let i of r)n.push(await this._loadFileInfo(i.file));return{forSend:s,chatId:e,plainText:o}}getLatestConversationId(e){}getLatestChatTime(e,o){}deleteConversation(e,o){}async sendMessageBody(e,o,r,n){e.conversation_id=n?.conversationId;let s=await fetch(this._options.apiBase+"/stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._token}`},body:JSON.stringify(e)}),i="";await ee(s.body,a=>{if(a.status==="init")return;let p=a.message.content,l="";switch(p.type){case"text":l=p.text;break;case"image":{let m=0;for(let u of p.image)l+=`![\u56FE\u7247${m++}](${u.image_url})`;break}case"code":{l=p.code;break}}if(l?.length){let m=i;i=l,l=l.replace(m,""),r.onContent(l,"TEXT")}if((a.status==="finish"||a.status==="error")&&(r.onCompleted(a.conversation_id,new Date().getTime()/1e3),a.status==="error"))throw new Error(a.last_error)}),this.logger.debug(i)}async init(){await this._loadToken()}};var Le=class extends R{static params={name:"siliconflow-bot",desc:"\u7845\u57FA\u6D41\u52A8",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.siliconflow.cn/v1 \u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"Qwen/Qwen2.5-7B-Instruct"},required:!0}},required:!0}}}}};constructor(t){t.apiBase?.length||(t.apiBase="https://api.siliconflow.cn/v1"),super(t)}};var Ue=class extends R{static params={name:"xunfei-bot",desc:"\u8BAF\u98DE\u661F\u706B\u8BA4\u77E5\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://spark-api-open.xf-yun.com/v1 \u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"lite(Spark Lite)",value:"lite"},{label:"generalv3(Spark Pro)",value:"generalv3"},{label:"pro-128k(Spark Pro-128K)",value:"pro-128k"},{label:"generalv3.5(Spark Max)",value:"generalv3.5"},{label:"max-32k(Spark Max-32K)",value:"max-32k"},{label:"4.0Ultr(Spark4.0 Ultra)",value:"4.0Ultra"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"lite","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003\u8BAF\u98DE\u63A7\u5236\u53F0-\u661F\u706B\u8C03\u8BD5\u4E2D\u5FC3-\uFF08\u53F3\u4FA7\uFF09\u8F6C\u6362\u6A21\u7248\u4E3A\u4EE3\u7801\u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u8BAF\u98DE\u5B98\u7F51"},required:!1},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1,"x-display":!1}}}}};constructor(t){t.apiBase?.length||(t.apiBase="https://spark-api-open.xf-yun.com/v1"),t.onlyText=!0,t.chatOptions.model=t.modelName??t.chatOptions.model??"lite",super(t),this.logger.trace("\u5F53\u524D\u8BAF\u98DE\u661F\u706B\u6A21\u578B\uFF1A"+t.chatOptions.model)}};var $e=class extends R{static params={name:"zhipu-bot",desc:"\u667A\u666EAI\u5927\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://open.bigmodel.cn/api/paas/v4 \u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"glm-4-flash",label:"glm-4-flash(free)"},{value:"glm-4v-flash",label:"glm-4v-flash(free)"},{value:"glm-4-0520",label:"glm-4-0520"},{value:"glm-4",label:"glm-4"},{value:"glm-4-air",label:"glm-4-air"},{value:"glm-4-airx",label:"glm-4-airx"},{value:"glm-4-long",label:"glm-4-long"},{value:"glm-4-flashx",label:"glm-4-flashx"},{value:"glm-4v-plus",label:"glm-4v-plus"},{value:"glm-4v",label:"glm-4v"},{value:"charglm-4",label:"charglm-4"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"glm-4-flash","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://bigmodel.cn/dev/api/normal-model/glm-4 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u667A\u666EAI\u5B98\u7F51"},required:!1}}}}};constructor(t){t.apiBase?.length||(t.apiBase="https://open.bigmodel.cn/api/paas/v4"),t.chatOptions.model=t.modelName??t.chatOptions.model??"glm-4-flash",super(t),this.logger.trace("\u5F53\u524D\u667A\u666EAI\u6A21\u578B\uFF1A"+t.chatOptions.model)}};import{createItem as $r,deleteItem as Hr,readItems as No,updateItem as jr}from"@directus/sdk";var D=y("api-plugin",!0);function E(c,t){return{data:c,err:t}}var op=async(c,t)=>{t=t||{},t.checkNotifyFequencySeconds=Math.max(t.checkNotifyFequencySeconds??vt("PLUGIN_API_CHECK_NOTIFY_FEQ_SECONDS")??20,0),t.expiresInSeconds=Math.max(t.expiresInSeconds??vt("PLUGIN_API_NOTIFY_EXPIRES_SECONDS")??3600,0),t.maxNotifyCount=Math.max(t.maxNotifyCount??vt("PLUGIN_API_MAX_NOTIFY_COUNT")??100,5);let e=c.options.name,o=[],r,n=7*24*3600,s=()=>{r!==void 0&&(clearInterval(r),r=void 0),r=setInterval(()=>{let a=o.filter(p=>{let m=Math.min(p.info?.expireInSeconds??t.expiresInSeconds,n)*1e3+p.time.getTime();return new Date().getTime()<=m});if(a.length>t.maxNotifyCount){let p=a.length-t.maxNotifyCount;o=a.slice(p,p+t.maxNotifyCount)}else o=a;o.length===0&&(clearInterval(r),r=void 0)},t.checkNotifyFequencySeconds*1e3)},i=a=>{if(!(a.time instanceof Date)||!a.id){D.warn("\u6536\u5230\u6CA1\u6709id\u6216\u8005time\u7684\u901A\u77E5\uFF0C\u5C06\u4E0D\u4F1A\u53D1\u9001\u5230\u5BA2\u6237\u7AEF\uFF01"),D.warn(a);return}o.length===0&&s(),o.push(a)};return c.globalEvent.on("APP_NOTIFY",i),{name:"\u901A\u7528API\u670D\u52A1\u63D2\u4EF6",needOnline:!1,schema:{type:"object",properties:{}},init:async()=>({}),beforeStart:async()=>{D.debug("api\u63D2\u4EF6\u5F00\u59CB\u6CE8\u518C"),c.registerRoutes(e,{actionName:"ping",action:{type:"normal",handler:async l=>{let m={status:"ok"},u=l.body.needNotify==="true",g=parseInt(l.body.notifyCursor);return E(u?{...m,notifies:{data:isNaN(g)?o:o.filter(d=>d.time.getTime()>g),cursor:new Date().getTime()}}:m)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"resource-summary",action:{type:"normal",handler:async()=>{let l=c.botManager.getAllParamsArray().length,m=c.sourceManager.getAllParamsArray().length,u=c.skillManager.getAllParamsArray().length;return E({sources:{count:m,created:c.agentService.resourceCount.sources},bots:{count:l,created:c.agentService.resourceCount.bots},agents:{running:c.agentService.resourceCount.agents},skills:{count:u,created:c.agentService.resourceCount.skills},tasks:{running:c.taskService.onlineCount}})}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"bot-creators",action:{type:"normal",handler:async()=>{let l=c.botManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"source-creators",action:{type:"normal",handler:async()=>{let l=c.sourceManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"skill-creators",action:{type:"normal",handler:async()=>{let l=c.skillManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"agent-creators",action:{type:"normal",handler:async()=>E([_e.params])},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"task-runner-creators",action:{type:"normal",handler:async()=>{let l=c.taskRunnerManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"task-trigger-creators",action:{type:"normal",handler:async()=>{let l=c.taskTriggerManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),c.registerRoutes(e,{actionName:"users",action:{type:"normal",handler:async l=>{let m=l.body,u=m.instanceName,g=c.sourceManager.getInstance(u);if(!g)return E([],"\u6D88\u606F\u6E90"+u+"\u4E0D\u5B58\u5728\uFF01");let d=m.type??"user";return D.trace("get "+u+" contacts"),E(await g.getContacts(d))}},type:"api",needAuth:!0});let a=new TextDecoder("utf-8"),p=l=>m=>{l.readyState===l.OPEN&&(typeof m.message=="object"&&(m={...m,message:JSON.stringify(m.message)}),l.send(JSON.stringify(m)))};c.registerWSHandler(e,{actionName:"logs",action:{onMessage:async(l,m,u)=>{if(l instanceof Buffer&&(l=a.decode(l)),typeof l!="string"){D.warn("\u65E0\u6CD5\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),u.send("error message format");return}if(l==="ping"){u.send("pong"),D.trace("ping received");return}if(["fatal","error","warn","info","debug","trace"].includes(l)){D.emitter.setLevel(l),u.send("log level set to "+l),u.send(l);return}D.trace("ws log - client message received:"+l)},onOpen:async(l,m)=>{let u=p(m);D.emitter.on("log",u),m.handler=u,m.send(D.emitter.level)},onClose:async(l,m)=>{m.handler?D.emitter.off("log",m.handler):D.emitter.clearListeners("log")}},type:"ws",needAuth:!0}),c.registerRoutes(e,{actionName:"sync-config",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>(await c.reload(),E("success"))}}),c.registerRoutes(e,{actionName:"restart",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>(c.globalEvent.emit("restart",void 0),E("success"))}}),c.registerRoutes(e,{actionName:"using",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body,u=m.instanceName,g=m.type,d=c.agentService.agents,I=!1;return g==="bots"?I=d.some(f=>f.options.botResponseRule.instanceName===u):g==="sources"?I=d.some(f=>f.options.sourceInstanceNames.includes(u)):g==="skills"&&(I=d.some(f=>f.options.skillRules?.some(T=>T.instanceName===u))),E(I)}}}),c.registerRoutes(e,{actionName:"install-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body;if(!m.name)return E(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");m.name=m.name.trim();try{m=await Oo(m.name,m.version?.trim(),m.registry),m.options=m.options??{},m.displayName=m.displayName??m.name,D.trace(m);let u=await c.client.request(No("plugins",{filter:{name:{_eq:m.name}}}));if(u?.length>0){let g=await c.client.request(jr("plugins",u[0].id,m));D.debug("update plugin res:"+JSON.stringify(g))}else{let g=await c.client.request($r("plugins",m));D.debug("create plugin res:"+JSON.stringify(g))}return E({type:u?.length?"update":"create",info:m})}catch(u){let g=JSON.stringify(u);return D.error("\u5B89\u88C5\u63D2\u4EF6\u5931\u8D25\uFF1A"+u),E(void 0,g)}}}}),c.registerRoutes(e,{actionName:"uninstall-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body;if(!m.name)return E(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");m.name=m.name.trim();let u=await c.client.request(No("plugins",{filter:{name:{_eq:m.name}}}));if(!u?.length)return E(void 0,`\u672A\u80FD\u5728\u5B89\u88C5\u8BB0\u5F55\u4E2D\u627E\u5230\u63D2\u4EF6 ${m.name} \uFF0C\u5982\u679C\u786E\u5B9A\u5DF2\u7ECF\u5B89\u88C5\uFF0C\u53EF\u4EE5\u767B\u5F55\u670D\u52A1\u5668\u624B\u52A8\u5378\u8F7D\uFF01`);m=u[0];let g=await c.client.request(Hr("plugins",u[0].id));D.debug("delete plugin res:"+JSON.stringify(g));try{return await Eo(m.name),E({type:"delete",info:m})}catch(d){let I=JSON.stringify(d);return D.error("\u5378\u8F7D\u63D2\u4EF6\u5931\u8D25\uFF08\u914D\u7F6E\u5DF2\u5220\u9664\uFF09\uFF1A"+I),E(void 0,I)}}}}),c.registerRoutes(e,{actionName:"plugins",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>{let l=[];for(let m of c.onlinePlugins)m.schecma&&l.push({name:m.name,optionsSchema:{type:"formily",formily:m.schecma}});return E(l)}}})},dispose:async()=>{r!==void 0&&(clearInterval(r),r=void 0),c.globalEvent.off("APP_NOTIFY",i),D.trace("api plugin desposed")}}};import{readItems as qr}from"@directus/sdk";var Ro={disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\uFF0C\u4EFB\u52A1\u4E0D\u4F1A\u88AB\u8FD0\u884C\uFF0C\u4F46\u4ECD\u4F1A\u88AB\u89E6\u53D1\u3002"},default:!1,required:!1}},Se=class{constructor(t,e){this.app=t;this._options=e}},X=y("task-service"),Ft=class{constructor(t,e={}){this._app=t;this._options=e;this._options.maxRecords=this._options.maxRecords??1e3}_initialized=!1;_taskTriggers=[];_onlineCount=0;get onlineCount(){return this._onlineCount}async init(){if(this._initialized){X.warn("task service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,this._loadTasks()}async reload(){return X.trace("dispose tasks"),await this.dispose(),this._taskTriggers=[],X.trace("create tasks"),this._loadTasks()}async _loadTasks(){if(this._app.offlineMode)return;let t=await this._app.client.request(qr("tasks",{filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));t?.length?this._onlineCount=t.length:(X.warn("\u5F53\u524D\u6CA1\u6709\u5728\u7EBF\u914D\u7F6E\u7684\u4EFB\u52A1\uFF01"),X.warn(t));let e=[...t??[],...this._options.tasks??[]];e.forEach(o=>{o.runnerOptions.instanceName||(X.trace("\u81EA\u52A8\u751F\u6210"+o.runnerName+"\u7684\u5B9E\u4F8BID"),o.runnerOptions.instanceName=ae(10));let r=this._app.taskRunnerManager.createInstance(o.runnerName,o.runnerOptions);o.triggerOptions.instanceName||(X.trace("\u81EA\u52A8\u751F\u6210"+o.triggerName+"\u7684\u5B9E\u4F8BID"),o.triggerOptions.instanceName=ae(10));let n={...o.triggerOptions,onTask:async i=>{if(r.options.disabled){X.trace("\u5F53\u524D\u4EFB\u52A1\u5DF2\u88AB\u7981\u7528\uFF0C\u7EC8\u6B62\u8FD0\u884C\uFF01");return}let a=new Date,p=await r.run(i);p.startTime=a,p.endTime=new Date,X.trace("task "+n.instanceName+" run by "+r.options.instanceName+",costs "+(p.endTime.getTime()-p.startTime.getTime())+" ms")}},s=this._app.taskTriggerManager.createInstance(o.triggerName,n);X.trace("create task trigger instance "+n.instanceName),this._taskTriggers.push(s)}),X.info(e.length+" tasks loaded!")}async dispose(){await ie(this._taskTriggers),await this._app.taskTriggerManager.clearInstances(),await this._app.taskRunnerManager.clearInstances()}};var Nt=class extends Se{constructor(e,o){super(e,o);this.app=e;this._options=o;this._options.eventNames=this._options.eventNames??[],this.init()}_initialized=!1;_logger;_disposers=[];get logger(){return this._logger?this._logger:this._logger=y(this.loggerName)}async dispose(){this._disposers?.forEach(e=>e()),this._disposers=void 0}init(){if(!this._disposers){this._logger.error("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u88AB\u91CA\u653E\uFF0C\u65E0\u6CD5\u91CD\u65B0\u521D\u59CB\u5316\uFF01\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B");return}if(this._initialized){this.logger.warn("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}this._initialized=!0,this.getEventTriggers()?.forEach(o=>{let r=o.name;this._options.eventNames.forEach(n=>{let s=i=>{let a={triggerName:r,eventName:n,data:i,from:r};this.options.onTask(a)};o.trigger.on(n,s),this._disposers.push(()=>{o.trigger.off(n,s)})})})}},He=class c extends Nt{constructor(e,o){super(e,o);this.app=e;this._options=o;let r=this._options.onTask;if(!r)throw new Error("\u5F53\u524Dtrigger\u6CA1\u6709\u7ED1\u5B9A\u4EFB\u52A1\uFF01");if(this._options.messageRule){let n=s=>{if(s.eventName!=="CHAT_MESSAGE")return;let i=s.data;if(!ue(this._options.messageRule,i)){this.logger.debug("\u6D88\u606F\u6E90\u4E0D\u5339\u914D\u4EFB\u52A1\u89C4\u5219\uFF01");return}r(s)};this._options.onTask=n}}static params={name:"source-trigger",desc:"\u804A\u5929\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u804A\u5929\u6D88\u606F",value:"CHAT_MESSAGE"},{label:"\u65B0\u7528\u6237\u8FDB\u7FA4",value:"GROUP_NEW_USER"},{label:"\u81EA\u5B9A\u4E49\u4E8B\u4EF6",value:"CUSTOM"}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5B9E\u9645\u54CD\u5E94\u54EA\u4E9B\u7C7B\u578B\uFF0C\u53D6\u51B3\u4E8E\u6D88\u606F\u6E90\u80FD\u5426\u652F\u6301\u8FD9\u4E9B\u7C7B\u578B\u7684\u6D88\u606F\u53D1\u5E03\u3002\u5373\u8FD9\u91CC\u914D\u7F6E\u7684\u662F\u9488\u5BF9\u6D88\u606F\u6E90\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\u7684\u4E8C\u6B21\u8FC7\u6EE4\u3002\u8981\u8FC7\u6EE4\u524D\u8BF7\u5148\u53D6\u6D88\u9009\u62E9\u6240\u6709\u3002"},"x-component-props":{mode:"multiple",allowClear:!0},default:["CHAT_MESSAGE"],required:!0},sourceNames:{type:"string",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u6A21\u677F\uFF09","x-decorator":"FormItem","x-component":"CNameSelector","x-component-props":{resourceType:"sources",size:"small"},"x-decorator-props":{tooltip:"\u6240\u9009\u7684\u6A21\u677F\u4E0B\u7684\u6240\u6709\u7684\u6D88\u606F\u6E90\u90FD\u4F1A\u88AB\u76D1\u542C\uFF0C\u4E0E\u5B9E\u4F8B\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},sourceInstanceNames:{type:"array",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u5B9E\u4F8B\uFF09","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u6240\u9009\u5B9E\u4F8B\u7684\u6D88\u606F\u4F1A\u88AB\u76D1\u542C\uFF0C\u652F\u6301\u591A\u9009\u3002\u4E0E\u6A21\u677F\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},messageRule:{type:"object",title:"\u6D88\u606F\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},"x-decorator-props":{tooltip:"\u53EA\u6709\u9009\u62E9\u7C7B\u578B\u4E3A\u804A\u5929\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u8FC7\u6EE4\u624D\u4F1A\u751F\u6548\uFF0C\u4E0D\u7B26\u5408\u8FC7\u6EE4\u6761\u4EF6\u7684\u6D88\u606F\u4E0D\u4F1A\u89E6\u53D1\u6267\u884C\u5668\u6267\u884C\u3002"}}}}}};get loggerName(){return"source-event-task-trigger"}get options(){return this._options}get params(){return c.params}getEventTriggers(){let e=this.app.sourceManager,o=[],r=this.options.sourceNames;return typeof r=="string"&&(r=[r]),r?.forEach(n=>{o.push(...e.getInstances(n)??[])}),this.options.sourceInstanceNames?.forEach(n=>{let s=e.getInstance(n);s?o.push(s):this.logger.error(`\u672A\u627E\u5230\u540D\u4E3A${n}\u7684\u6D88\u606F\u6E90\u5B9E\u4F8B\uFF01`)}),o.map(n=>({name:n.params.name,trigger:n.event}))}},je=class c extends Nt{constructor(e,o){super(e,o);this.app=e;this._options=o}static params={name:"global-trigger",desc:"\u5168\u5C40\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u5E94\u7528\u901A\u77E5",value:"APP_NOTIFY"},{label:"\u914D\u7F6E\u91CD\u8F7D",value:"APP_REALOD"},{label:"\u5E94\u7528\u91CD\u542F",value:"APP_RESTARTED"},{label:"\u5E94\u7528\u542F\u52A8",value:"APP_STARED"}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u652F\u6301\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7C7B\u578B\uFF0C\u76F4\u63A5\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u540D\u79F0\u5373\u53EF\u3002"},"x-component-props":{mode:"tags",allowClear:!0,placeholder:"\u652F\u6301\u624B\u52A8\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6"},required:!0}}}}};get loggerName(){return"global-event-task-trigger"}get options(){return this._options}get params(){return c.params}getEventTriggers(){return[{name:c.params.name,trigger:this.app.globalEvent}]}};import Gr from"axios";import Kr from"form-data";var Ce={...N,disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\u8BE5\u6280\u80FD\u5B9E\u4F8B\u5C06\u4F1A\u4E0D\u53EF\u7528"}}};var $=class c{constructor(t){this._options=t;this._logger=y(this._options.instanceName),this._options.ensureAudioFormat=this._options.ensureAudioFormat??!0}static params={name:"base-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,ensureAudioFormat:{type:"boolean","x-index":10,title:"\u68C0\u67E5\u5E76\u8F6C\u6362\u975E\u6807\u51C6\u97F3\u9891","x-component":"Switch",default:!0,"x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5927\u90E8\u5206\u8BC6\u522B\u5F15\u64CE\u8BED\u97F3\u652F\u63018k\u548C16k\u7684\u5355\u58F0\u9053\u97F3\u9891\uFF0C\u5982\u679C\u5F00\u542F\u68C0\u67E5\uFF0C\u6240\u6709\u4E0D\u662F\u8BE5\u7C7B\u578B\u7684\u97F3\u9891\u5C06\u88AB\u8F6C\u6362\uFF0C\u68C0\u67E5\u4F1A\u589E\u52A0\u7CFB\u7EDF\u5904\u7406\u65F6\u95F4\uFF0C\u5982\u679C\u5DF2\u7ECF\u786E\u5B9A\u97F3\u9891\u662F\u652F\u6301\uFF0C\u5EFA\u8BAE\u5173\u95ED\u68C0\u67E5\u3002"}}}}},desc:"\u8BED\u97F3\u8BC6\u522B\u57FA\u7840\u7C7B"};_logger;_targetFormat="wav";get options(){return this._options}get params(){return c.params}init(){return Promise.resolve()}async _transpileContent(t){let e=t;if(e?.text?.length){this._logger.debug("\u5F53\u524D\u8BED\u97F3\u6D88\u606F\u5DF2\u7ECF\u88AB\u8F6C\u4E3A\u6587\u672C\uFF0C\u5C06\u53D6\u6D88\u672C\u6B21\u8F6C\u6362\uFF01");return}let o=e?.file;if(!o){this._logger.warn("\u672A\u68C0\u6D4B\u5230\u97F3\u9891\u6587\u4EF6\uFF01");return}if(this._options.ensureAudioFormat&&(this._logger.trace("\u8F6C\u6362\u97F3\u9891\u683C\u5F0F\u4E3A\u5355\u901A\u905316k\u7684"+this._targetFormat),o=await ke(o,this._targetFormat,n=>(n.audioFrequency(16e3),n.audioChannels(1),n))),e.text=await this._getText(o),!e.text?.length){this._logger.warn("\u8F6C\u6362\u5931\u8D25\uFF01");return}this._logger.debug("\u8F6C\u6362\u5B8C\u6210\uFF1A"+e.text)}async applyOnSource(t){if(t.message.type!=="AUDIO"){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01");return}await this._transpileContent(t.message.content)}async applyOnReply(t,e){return e!=="AUDIO"?(this._logger.debug("\u5F53\u524D\u54CD\u5E94\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01"),{content:t,messageType:e}):(await this._transpileContent(t),{content:t,messageType:e})}};var qe=class c extends ${constructor(e){super(e);this._options=e;if(this._headers={"content-type":"multipart/form-data"},this._options.authType.toLowerCase()==="basic"){let o=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(o)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`);this._options.apiHost.indexOf("extract_text")>0&&this._logger.warn("api\u5730\u5740\u65E0\u9700\u5305\u542Bextract_text\uFF0C\u5982\u679C\u662F\u6709\u610F\u4E3A\u4E4B\uFF0C\u8BF7\u5FFD\u7565\uFF01"),this._options.apiHost.endsWith("/")||(this._options.apiHost+="/")}static params={name:"sensevoice-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com \u65E0\u9700\u5E26 extract_text"},"x-decorator-props":{tooltip:"API \u6765\u81EAhttps://github.com/HG-ha/SenseVoice-Api"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"jwt"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}}}}},desc:"SenseVoice\u8BED\u97F3\u8BC6\u522B"};_headers;get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");let o=new Kr;return o.append("file",await e.asReadStream()),(await Gr({method:"post",url:this._options.apiHost+"extract_text",headers:{...this._headers,...o.getHeaders()},data:o,responseType:"json"})).data?.results}};import{v4 as Wr}from"uuid";var B=class c{constructor(t){this._options=t;this._options.probability=this._options.probability??.5,this._logger=y(this._options.instanceName)}static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,probability:{type:"number","x-index":100,title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean","x-index":110,title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1}}}}};_logger;get options(){return this._options}get params(){return c.params}init(){return Promise.resolve()}async applyOnReply(t,e,o,r){this._logger.debug("check whether apply tts skill");let n=kt(t);if(!n?.length){if(this._logger.warn("\u6CA1\u6709\u4ECEcontent\u4E2D\u68C0\u6D4B\u5230\u5185\u5BB9"),!r?.length)return{content:t,messageType:e};this._logger.debug("\u4F7F\u7528allContent"),this._logger.debug("allContent:"+r),this._logger.debug("content"+t)}if(!n?.length||n.length<3||this._options.probability<=0)return{content:t,messageType:e};if(n.length>=this._maxToken)return this._logger.warn(`\u6587\u672C\u957F\u5EA6\u4E3A${n.length}\uFF0C\u8D85\u8FC7\u4E86\u5141\u8BB8\u7684\u6700\u5927\u957F\u5EA6\uFF1A${this._maxToken}`),{content:t,messageType:e};if(this._options.probability<1&&Math.random()>this._options.probability)return{content:t,messageType:e};if(So(n)||Co(n))if(this._logger.trace("\u68C0\u6D4B\u5230\u5185\u5BB9\u4E2D\u53EF\u80FD\u542B\u6709emoji\u6216\u8005Markdown\u7B49\u65E0\u6CD5\u8F6C\u6362\u4E3A\u8BED\u97F3\u7684\u5185\u5BB9"),this._options.deleteUnreadableText)this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u6B63\u5728\u79FB\u9664\u76F8\u5173\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9"),n=_o(n),n=xo(n);else return this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u53D6\u6D88\u8BED\u97F3\u8F6C\u6362"),{content:t,messageType:e};this._logger.debug("tts skill need apply"),this._logger.debug("text:"+n);let s=await this.getAudioBuffer(n,o);if(s?.length){let i={file:h.fromBuffer(s,Wr()+".wav"),text:n};return this._logger.debug("tts skill applyed"),await i.file.asLocalPath(),{content:i,messageType:"AUDIO"}}return this._logger.warn("tts skill apply failed"),{content:t,messageType:e}}};var Ge=class c extends B{constructor(e){super(e);this._options=e;if(this._headers={"Content-Type":"application/json"},this._options.authType.toLowerCase()==="basic"){let o=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(o)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`)}static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com"},"x-decorator-props":{tooltip:"\u542F\u52A8\u5B98\u65B9docker-compose\u4E4B\u540E\uFF0C\u8FDB\u5165\u5BB9\u5668\u6309api.py\u63D0\u793A\uFF0C\u542F\u52A8api.py\u811A\u672C\uFF0C\u5E76\u6620\u5C04\u51FA\u5916\u7F51\u7AEF\u53E3\u57DF\u540D\u5373\u53EF\u3002"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"JWT"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}},probability:{type:"number",title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean",title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1},customReqOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5982\u8BED\u8A00\uFF08\u9ED8\u8BA4\u4E3A\u4E2D\u6587\uFF09\uFF0Ctop_k\u7B49\u3002"}}}}},desc:"Sovits\u8BED\u97F3\u5408\u6210"};_headers;get _maxToken(){return 10240}get options(){return this._options}get params(){return c.params}init(){return Promise.resolve()}async getAudioBuffer(e){let o=this._options.customReqOptions??{},r={text:e,...o,text_language:o.text_language??"zh"},s=await(await fetch(this._options.apiHost,{body:JSON.stringify(r),headers:this._headers,method:"post"})).arrayBuffer();return Buffer.from(s)}};import Vr from"emittery";import{v4 as J}from"uuid";import{XMLParser as Bo}from"fast-xml-parser";import Qt from"node:path";import{Buffer as Yt}from"node:buffer";import{decode as zr,encode as Xr,getWavFileInfo as Jr,isSilk as Qr}from"silk-wasm";var k=y("wechat-source"),Yr=new TextDecoder,Ke=class c{constructor(t,e){this._app=t;this._options={...e},this._chatUrl=(this._options.ssl?"https://":"http://")+this._options.apiHost+":"+this._options.chatPort+"/api/",this._downloadUrl=(this._options.ssl?"https://":"http://")+this._options.apiHost+":"+this._options.dufsPort+"/"+this._downloadName+"/",this._uploadUrl=(this._options.ssl?"https://":"http://")+this._options.apiHost+":"+this._options.dufsPort+"/"+this._uploadName+"/",this._options.audioEncodeRate=this._options.audioEncodeRate??32e3,this._options.audioDecodeRate=this._options.audioDecodeRate??32e3,this.event=new Vr,this._connect()}static params={name:"wechat-sdk",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,apiHost:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF08\u4E0D\u542B\u534F\u8BAE\u548C\u7AEF\u53E3\uFF0C\u4EC5 IP \u6216\u57DF\u540D\uFF09\u5982 127.0.0.1"},"x-decorator-props":{tooltip:"API \u5730\u5740\uFF0C\u5982 127.0.0.1\uFF0C\u4E0D\u542B\u534F\u8BAE\u548C\u7AEF\u53E3\uFF0C\u4EC5 IP \u6216\u57DF\u540D\uFF0Chttps://github.com/WeChatAPIs/WeChatApi"},required:!0},ssl:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528 HTTPS \u534F\u8BAE","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u662F HTTPS \u534F\u8BAE\uFF0C\u9ED8\u8BA4 false"},default:!1},chatPort:{type:"number",title:"\u804A\u5929\u670D\u52A1\u7AEF\u53E3","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1024,max:65535,placeholder:"\u8BF7\u8F93\u5165\u804A\u5929\u670D\u52A1\u7AEF\u53E3"},"x-decorator-props":{tooltip:"\u9ED8\u8BA4 8888"},default:8888},dufsPort:{type:"number",title:"Dufs\u6587\u4EF6\u670D\u52A1\u7AEF\u53E3","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6587\u4EF6\u670D\u52A1\u7AEF\u53E3"},"x-decorator-props":{tooltip:"\u6587\u4EF6\u670D\u52A1\u7684\u7AEF\u53E3 5000\u3002\u6CE8\u610F\u6587\u4EF6\u670D\u52A1\u4E2D\u9700\u8981\u6709 wechat \u7684 upload \u548C download \u4E24\u4E2A\u76EE\u5F55"},default:5e3},dufsUser:{type:"string",title:"Dufs\u6587\u4EF6\u4E0A\u4F20\u670D\u52A1\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6587\u4EF6\u4E0A\u4F20\u670D\u52A1\u7528\u6237\u540D"},"x-decorator-props":{tooltip:"\u6587\u4EF6\u4E0A\u4F20\u670D\u52A1\u7684\u7528\u6237\u540D\uFF0C\u5982\u679C\u7559\u7A7A\u8868\u793A\u65E0\u9700\u8BA4\u8BC1\uFF0C\u4EC5\u652F\u6301Basic\u8BA4\u8BC1\u3002"}},dufsPass:{type:"string",title:"Dufs\u6587\u4EF6\u670D\u52A1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6587\u4EF6\u670D\u52A1\u5BC6\u7801"},"x-decorator-props":{tooltip:"\u6587\u4EF6\u670D\u52A1\u7684\u5BC6\u7801"}},clearProcessors:{type:"boolean",title:"\u6E05\u7A7A\u5DF2\u6CE8\u518C\u6D88\u606F\u5904\u7406\u5668","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u5728\u6CE8\u518C\u6D88\u606F\u5904\u7406\u5668\u4E4B\u524D\u6E05\u7A7A\u5DF2\u7ECF\u6CE8\u518C\u7684\u6240\u6709\u5904\u7406\u5668\uFF0C\u9ED8\u8BA4 false\u3002\u5982\u679C\u662F\u7684\u8BDD\uFF0C\u610F\u5473\u7740\u540C\u4E00\u4E2A apiBase \u4E0A\u53EA\u80FD\u6709\u4E00\u4E2A\u6D88\u606F\u5904\u7406\u5668"},default:!1},attachLocalSavePath:{type:"string",title:"\u5BBF\u4E3B\u673A\u9644\u4EF6\u5B58\u50A8\u8DEF\u5F84","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u9644\u4EF6\u5B58\u50A8\u8DEF\u5F84\uFF0C\u5982 C:\\Data"},"x-decorator-props":{tooltip:"\u9644\u4EF6\u5728\u5FAE\u4FE1\u5BBF\u4E3B\u673A\u4E0A\u7684\u5B58\u50A8\u7EDD\u5BF9\u4F4D\u7F6E\u3002\u8BF7\u786E\u4FDD\u8BE5\u8DEF\u5F84\u7684\u6587\u4EF6\u5939\u5DF2\u7ECF\u521B\u5EFA\uFF0C\u4E14\u8BE5\u76EE\u5F55\u4E0B\u5B58\u5728 upload \u548C download \u4E24\u4E2A\u5B50\u76EE\u5F55"}},auto2text:{type:"boolean",title:"\u8BED\u97F3\u81EA\u52A8\u8F6C\u6587\u672C","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u5C06\u8BED\u97F3\u8F6C\u6362\u4E3A\u6587\u672C\u540C\u65F6\u8FD4\u56DE\uFF08\u540C\u6B65\u64CD\u4F5C\uFF09"},default:!0},audioEncodeRate:{type:"number",title:"\u97F3\u9891\u7F16\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-decorator-props":{tooltip:"\u97F3\u9891\u7F16\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},audioDecodeRate:{type:"number",title:"\u97F3\u9891\u89E3\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u97F3\u9891\u89E3\u7801\u7801\u7387"},"x-decorator-props":{tooltip:"\u97F3\u9891\u89E3\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3}}}},autoAppendAt:!0,eventNames:["CHAT_MESSAGE","LOGIN","LOGOUT","SELF_SEND"],desc:"\u5F00\u6E90-WeChatApi"};_options;_chatUrl;_meCache;_downloadName="download";_uploadName="upload";_downloadUrl;_uploadUrl;_actionNames={SDK_ACTION:"wechatsdk"};event;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"ws",actionName:this._actionNames.SDK_ACTION,action:t=>this._onSDKMessage(t)}]}hasLogin(){return!!this._meCache}async login(){try{let o=await this.me();if(this._meCache){let r={type:"LOGIN",user:this._meCache,id:J(),source:this,me:o};this.event.emit(r.type,r);return}}catch{k.info("user not login")}let t=await this._req({type:0});if(!t?.qrcode?.length)throw k.error(t),new Error("\u83B7\u53D6\u767B\u5F55\u4E8C\u7EF4\u7801\u5931\u8D25\uFF01");let e={id:J(),title:"\u626B\u7801\u767B\u5F55",data:t.qrcode};this._app.globalEvent.emit("APP_NOTIFY",e)}async me(t=!1){if(!t&&this._meCache)return this._meCache;let e=await this._req({type:28});if(!e?.data?.alias)throw k.error(e),new Error("\u65E0\u6CD5\u83B7\u53D6\u7528\u6237\u4FE1\u606F\uFF01");let o=e.data;return this._meCache={userName:o.alias,nickName:o.nickName,avatarUrl:o.smallHeadImgUrl,bigAvatarUrl:o.bigHeadImgUrl,userId:o.userName,signature:o.signature,origin:o},this._meCache}async sendMessage(t){let e;switch(t.type){case"TEXT":{let o=t.content;o.indexOf("(http")>=0&&(o=Z(o)),e={type:10009,userName:t.toInfo[0].userId,msgContent:o},t.isGroupChat&&t.atList?.length&&(e.atUserList=t.atList,o.indexOf("@")<0&&k.warn("\u60A8\u63D0\u4F9B\u4E86@\u5217\u8868\uFF0C\u4F46\u662F\u6D88\u606F\u4E2D\u6CA1\u6709\u51FA\u73B0@\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u6709@\u6548\u679C\uFF01"));break}case"IMAGE":{let o=t.content,r=await this._uploadToChatServer(o.file);if(!r?.chatServerLocalPath)return"file can't upload to chat server!";e={type:10010,userName:t.toInfo[0].userId,filePath:r.chatServerLocalPath};break}case"AUDIO":{let o=t.content,r=await o.file.asBuffer(),n=Jr(r);if(!Qr(r)){await o.file.asLocalPath();let i=await Xr(r,n.fmt.sampleRate);t={...t},t.content=o={file:h.fromBuffer(Yt.from(i.data),J()+".silk")}}let s=await this._uploadToChatServer(o.file);if(!s?.chatServerLocalPath)return"file can't upload to chat server!";e={type:10014,userName:t.toInfo[0].userId,filePath:s.chatServerLocalPath};break}case"FILE":{let o=t.content,r=await this._uploadToChatServer(o.file);if(!r?.chatServerLocalPath)return"file can't upload to chat server!";e={type:10012,userName:t.toInfo[0].userId,filePath:r.chatServerLocalPath};break}case"VIDEO":{let o=t.content,r=await this._uploadToChatServer(o.file);o.file.name?.toLowerCase().endsWith(".mp4")||k.warn("\u89C6\u9891\u6587\u4EF6\u4E0D\u662Fmp4\u683C\u5F0F\uFF0C\u6709\u53EF\u80FD\u65E0\u6CD5\u64AD\u653E\uFF01"),e={type:10093,userName:t.toInfo[0].userId,filePath:r.chatServerLocalPath};break}case"REF":{let o=t.content,r=o.refMessage.origin;e={type:10056,userName:t.toInfo[0].userId,msgSvrID:r.szMsgSvrID,content:o.text,sourceContent:r.content},t.isGroupChat&&(e.sourceUserName=o.refMessage.senderId,e.atUserList=t.atList??[]);break}}if(e){let o=await this._req(e);o?.status!==0&&k.error(o?.desc)}}async getContacts(t="all"){let e="SELECT Alias,UserName,Remark,NickName,PYInitial,RemarkPYInitial,t2.smallHeadImgUrl FROM Contact t1 LEFT JOIN ContactHeadImgUrl t2 ON t1.UserName = t2.usrName WHERE t1.VerifyFlag = 0 AND (t1.Type =2 OR t1.Type = 3 OR t1.Type > 50) AND t1.UserName NOT IN ('qmessage', 'tmessage') ORDER BY t1.Remark DESC;";t==="user"?e="SELECT Alias,UserName,Remark,NickName,PYInitial,RemarkPYInitial,t2.smallHeadImgUrl FROM Contact t1 LEFT JOIN ContactHeadImgUrl t2 ON t1.UserName = t2.usrName WHERE t1.VerifyFlag = 0 AND (t1.Type = 3 OR t1.Type > 50) and t1.Type != 2050 AND t1.UserName NOT IN ('qmessage', 'tmessage') ORDER BY t1.Remark DESC;":t==="group"&&(e="SELECT Alias,UserName,Remark, NickName,PYInitial,RemarkPYInitial FROM Contact t1 WHERE t1.Type in(2,2050);");let o=await this._req({type:10058,dbName:"MicroMsg.db",sql:e});return o.data?.length?o.data.map(n=>({nickName:n.Remark?.length?n.Remark:n.NickName,userId:n.UserName,userName:n.Alias,avatarUrl:n.smallHeadImgUrl,origin:n})):(k.warn("\u672A\u80FD\u83B7\u53D6\u5230\u8054\u7CFB\u4EBA\u5217\u8868\uFF01"),[])}async getContactDetail(t){if(t.userId?.length||!t.userName)return t;let e=await this._req({type:10015,userName:t.userName});return e.data?{...t,nickName:e.data.nickName,avatarUrl:e.data.smallHeadImgUrl,userId:e.data.userName,userName:e.data.alias??e.data.userName}:t}async _onSDKMessage(t){let e;if(t instanceof Yt){let o=Yr.decode(t);try{e=JSON.parse(o)}catch{if(o==="hello"){k.info("connected message from server");return}k.info("unsupported message:"+o);return}}else{k.info("unsupported message:"+t);return}switch(e.pushType){case 2:if(e.data?.userName?.length){let o=await this.me(!0);this.event.emit("LOGIN",{id:J(),user:o,source:this,origin:e,type:"LOGIN",me:o})}break;case 1:{let o=await this._processSyncMessage(e.data);if(!o)break;let r={id:J(),type:"CHAT_MESSAGE",message:o,source:this,me:this._meCache};o?.isSender?(r.type="SELF_SEND",this.event.emit(r.type,r)):this.event.emit(r.type,r);break}case 4:{let o=await this._processSyncMessage({content:e.data.content,extraData:e.data.extraData,type:e.data.msgType,createtime:e.data.createTime,from:e.data.userName,isChatroomMsg:e.data.isChatroomMsg,isSender:e.data.isSender,msgSvrID:e.data.msgSvrID,szMsgSvrID:e.data.szMsgSvrID,syncFromMobile:!1,to:e.data.talker,talkerInfo:e.data.talkerInfo});if(!o)break;let r={id:J(),type:"CHAT_MESSAGE",message:o,source:this,me:this._meCache};r.type="SELF_SEND",this.event.emit(r.type,r);break}case 3:this.event.emit("LOGOUT",{user:this._meCache??e.data,origin:e,id:J(),type:"LOGOUT"});break;case 0:k.info(e);break;default:k.info("unhandled message"),k.info(e);break}}_extractMentions(t){let e=/@([^\s]+)\s/g,o=[],r;for(;(r=e.exec(t))!==null;)o.push(r[0].trim().slice(1));return o}_wrapMessge(t,e,o){let n=new Bo({allowBooleanAttributes:!0,ignoreAttributes:!1}).parse(e.reserved1??"").msgsource?.atuserlist?.split(",")??[];if(n.length){let i=this._extractMentions(t);k.debug(i)}let s={atList:n,type:o,content:t,time:new Date(e.createtime*1e3),senderId:e.from??e.fromusr,fromId:e.from??e.fromusr,isGroupChat:e.isChatroomMsg!==0,isSender:e.isSender!==0,senderName:e.isSender?this._meCache?.userName:e.talkerInfo?.alias,senderInfo:{userName:e.talkerInfo?.alias??e.talkerInfo?.userName,nickName:e.talkerInfo?.nickName,avatarUrl:e.talkerInfo?.smallHeadImgUrl,userId:e.talkerInfo?.userName,origin:e.talkerInfo},toInfo:[this._meCache],origin:e,messageId:String(e.szMsgSvrID??e.svrid??"")};return s.isGroupChat&&e.chatroomMemberInfo!==void 0?s={...s,groupInfo:{userId:e.chatroomMemberInfo.belongChatroomUserName,userName:e.chatroomMemberInfo.belongChatroomNickName,nickName:e.chatroomMemberInfo.chatroomDisplayName,avatarUrl:e.chatroomMemberInfo.belongChatroomSmallHeadImgUrl,signature:e.chatroomMemberInfo.remark,origin:e.chatroomMemberInfo,isGroup:!0},isAdmin:e.chatroomMemberInfo.isChatroomAdmin,isOwner:e.chatroomMemberInfo.isChatroomOwner,senderId:e.chatroomMemberInfo.userName,senderName:e.chatroomMemberInfo.alias,senderInfo:{userName:e.chatroomMemberInfo.alias,nickName:e.chatroomMemberInfo.nickName,avatarUrl:e.chatroomMemberInfo.smallHeadImgUrl,userId:e.chatroomMemberInfo.userName,origin:e.chatroomMemberInfo,isGroup:!0},toInfo:[{userId:e.to??e.chatusr}]}:s.isGroupChat&&s.isSender&&!e.syncFromMobile&&(s={...s,groupInfo:{userId:e.to,userName:e.talkerInfo?.nickName,avatarUrl:e.talkerInfo?.smallHeadImgUrl,origin:e.talkerInfo,isGroup:!0},senderId:this._meCache.userId,senderName:this._meCache.userName,senderInfo:this._meCache,toInfo:[{userId:e.to??e.chatusr}]}),s}async _createAsyncFileLoader(t,e,o,r){let n=e+r,s=Qt.join(this._options.attachLocalSavePath,this._downloadName,n);return async()=>{let a=await this._req({type:88,fileid:t,aeskey:e,fileType:o,savePath:s});if(a?.status!==0){k.error("\u8BF7\u6C42\u6587\u4EF6\u5931\u8D25\uFF01"),k.error(a?.desc);return}let p=this._downloadUrl+n;return{name:n,data:p,type:"path"}}}async _loadRefContent(t){let e=t.msg.appmsg.title,o=t.msg.appmsg.refermsg;if(!o||o==="")return{text:e};try{let r=await this._processSyncMessage(o);return{text:e,refMessage:r}}catch(r){return k.debug(r),{text:e}}}async _loadMPContent(t){if(!t.msg?.appmsg)return;let e=t.msg.appmsg,o;if(!e.thumburl&&e.appattach?.aeskey){let r=await this._createAsyncFileLoader(e.appattach.cdnthumburl,e.appattach.aeskey,3,".png");o=new h(r,"binary")}else o=h.fromPath(e.thumburl,"binary",J()+".png");return{title:e.title,desc:e.desc,openUrl:e.url,id:e.weappinfo?.appid,iconUrl:e.weappinfo?.weappiconurl,openRelativePath:e.weappinfo?.pagepath,cover:o,displayName:e.sourcedisplayname}}_loadContactContent(t){if(!t.msg)return;let e=t.msg;return{display:e["@_nickname"]??e["@_fullpy"],smallImageUrl:e["@_smallheadimgurl"],bigImageUrl:e["@_bigheadimgurl"],custom:e}}async _loadArticleContent(t){if(!t.msg?.appmsg)return;let e=t.msg.appmsg,o;if(!e.thumburl?.length&&e.appattach?.aeskey){let r=await this._createAsyncFileLoader(e.appattach.cdnthumburl,e.appattach.aeskey,3,".png");o=new h(r,"binary")}return{url:e.url,title:e.title,desc:e.desc,thumbFile:o,coverFile:o,source:e.sourcedisplayname}}_loadMusicContent(t){if(!t.msg?.appmsg)return;let e=t.msg.appmsg,o=e.dataurl,n=new URL(o).pathname.split("/"),s=n[n.length-1],i=async()=>({name:s,data:o,type:"path"});return{file:new h(i,"binary"),sizeInBytes:e.appattach?.totallen,title:e.title,desc:e.desc,coverUrl:e.songalbumurl,signer:e.musicShareItem?.mvSingerName}}async _loadFileContent(t){if(!t.msg?.appmsg)return;let e=t.msg.appmsg,o=e.title,r=e.appattach.totallen,n="."+e.appattach.fileext,s=e.appattach.cdnattachurl,i=e.appattach.aeskey,a=r/1024/1024>=25,p=await this._createAsyncFileLoader(s,i,a?7:5,n);return{sizeInBytes:r,title:o,file:new h(p,"binary")}}async _loadVideoContent(t){if(!t.msg?.videomsg)return;let e=t.msg.videomsg,o=await this._createAsyncFileLoader(e["@_cdnvideourl"],e["@_aeskey"],4,".mp4"),r=await this._createAsyncFileLoader(e["@_cdnthumburl"],e["@_aeskey"],3,".png");return{previewImage:new h(r,"binary"),file:new h(o,"binary"),sizeInBytes:e["@_length"]}}async _loadAudioUrlAndText(t){if(!t.msg?.voicemsg)return;let e=t.msg.voicemsg,o=e["@_voiceurl"],r=e["@_aeskey"],n=r+".silk",s=await this._createAsyncFileLoader(o,r,15,".silk"),i=Qt.join(this._options.attachLocalSavePath,this._downloadName,n),a=new h(s,"binary"),p=await a.asBuffer(),l=await zr(p,this._options.audioDecodeRate),m=se(l.data.buffer,this._options.audioEncodeRate,16,1),u=h.fromBuffer(Yt.from(m),a.name.replace(".silk",".wav"));if(await u.asLocalPath(),this._options.auto2text){let g=await this._req({type:10045,filePath:i});return g?.status!==0?(k.error("\u8BF7\u6C42\u8F6C\u6362\u8BED\u97F3\u6587\u4EF6\u5931\u8D25\uFF01"),k.error(g?.desc),{file:u}):{file:u,text:g.data}}return{file:u}}async _loadImageContent(t,e="chat"){if(!t.msg?.img)return;let o="@_cdnmidimgurl",r=2;if(e==="oa")o="@_cdnbigimgurl",r=1;else if(e==="mini")o="@_cdnthumburl",r=3;else if(e!=="chat"){k.error("\u4E0D\u5B58\u5728\u7684\u56FE\u7247\u6765\u6E90\u7C7B\u578B\uFF1A"+e);return}let n=t.msg.img[o],s=t.msg.img["@_aeskey"],i=await this._createAsyncFileLoader(n,s,r,".png");return{file:new h(i,"binary")}}async _loadPositionContent(t){if(!t.msg?.location)return;let e=t.msg.location;return{placeName:e["@_poiname"],placeDetail:e["@_label"],mapLevel:parseFloat(e["@_scale"]),lon:parseFloat(e["@_x"]),lat:parseFloat(e["@_y"])}}async _loadRecallContent(t,e){let o=e.sysmsg.revokemsg;if(!o)return;let r;return t?.Type=="1"&&(r=t.StrContent),{display:o.replacemsg,sourceMessageId:o.msgid,sourceContent:r}}_loadPatContent(t,e){let o=t.sysmsg.pat;return{text:`${e.talkerInfo?.nickName??o.fromusername} \u62CD\u4E86\u62CD\u6211${o.patsuffix}`}}async _processSyncMessage(t){if(typeof t.content!="string"){k.warn("can't parse message content for load!");return}let e=t.content;e.startsWith("wxid_")&&(e=e.slice(e.indexOf(`
15
- `)+1)),e=e.replaceAll(`
16
- `,"").replaceAll(" ","");let o=new Bo({allowBooleanAttributes:!0,ignoreAttributes:!1}).parse(e),r,n,s;switch(t.type){case 1:r=e,s="TEXT";break;case 3:{r=await this._loadImageContent(o),s="IMAGE";break}case 34:{r=await this._loadAudioUrlAndText(o),s="AUDIO";break}case 43:{r=await this._loadVideoContent(o),s="VIDEO";break}case 49:if(o.msg.appmsg?.action!=="view")return;if(o.msg.appmsg?.type===3)r=this._loadMusicContent(o),s="MUSIC";else if(o.msg.appmsg?.type===5)r=await this._loadArticleContent(o),s="ARTICLE";else if(o.msg.appmsg?.type===33)r=await this._loadMPContent(o),s="MP";else if(o.msg.appmsg?.type===57)r=await this._loadRefContent(o),s="REF";else if(o.msg.appmsg?.type!==6){k.debug("\u6536\u5230\u6587\u4EF6\u6216\u8005\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),k.debug(o.msg);return}else r=await this._loadFileContent(o),s="FILE";break;case 48:r=await this._loadPositionContent(o),s="POSITION";break;case 47:{if(o.msg){let i=o.msg.emoji["@_cdnurl"],a=o.msg.emoji["@_thumburl"],p;if(a?.length)p=h.fromPath(a,"binary",J()+".jpg"),i||(i=a);else if(i.length){let l=J()+".jpg";p=h.fromPath(i,"binary",l);let m=(await p.asBuffer()).subarray(0,4).toString();m!=="GIF8"&&k.warn("\u6536\u5230\u4E00\u5F20\u975EGIF\u56FE\uFF0C\u53EF\u80FD\u65E0\u6CD5\u663E\u793A\uFF0C\u7C7B\u578B\u4E3A\uFF1A"+m),a=i}else k.warn("\u4E0D\u652F\u6301\u7684\u8868\u60C5\uFF01");p&&(r={url:i,previewUrl:a,file:p})}s="EMOTION";break}case 42:{r=this._loadContactContent(o),s="CONTACT_CARD";break}case 10002:{if(!o.sysmsg)break;o.sysmsg["@_type"]==="pat"?(r=this._loadPatContent(o,t),s="PAT"):t.revokedMsg&&(r=await this._loadRecallContent(t.revokedMsg,o),s="RECALL");break}default:n=void 0}if(s==null){k.warn("\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),k.debug(t);return}else n=this._wrapMessge(r??"",t,s);return n}async _uploadToChatServer(t){let e=await t.asReadStream(),o=t.name??J()+".dat",r=this._uploadUrl+o,n={"Content-Type":"application/octet-stream"};if(this._options.dufsUser!==void 0&&this._options.dufsPass!==void 0){let i=`${this._options.dufsUser}:${this._options.dufsPass}`;n.authorization=`Basic ${btoa(i)}`}let s=await fetch(r,{headers:{...n},method:"PUT",body:e,duplex:"half"});if(!s.status.toString().startsWith("2")){k.error("upload status "+s.statusText);return}return{chatServerLocalPath:Qt.join(this._options.attachLocalSavePath,this._uploadName,o).replaceAll("/","\\"),chatServerUrl:r}}async _req(t){let e=await(await fetch(this._chatUrl,{method:"post",body:JSON.stringify(t)})).json();if(e.error_code!==1e4)throw k.error(e),new Error("API\u8C03\u7528\u5931\u8D25\uFF01");return e.data}async _connect(){if(!_.wsUrl)throw new Error("\u6CA1\u6709\u914D\u7F6EPUBLIC_HOST\uFF0C\u65E0\u6CD5\u83B7\u53D6\u5230websocket\u670D\u52A1\u5668\u5916\u90E8\u8BBF\u95EE\u5730\u5740\uFF01");let t=_.wsUrl;if(t.startsWith("ws")||(t="ws://"+t),t.endsWith("/")||(t=t+"/"),(await this._req({type:1001,protocol:3,url:`${t}ws/${this._options.instanceName}/${this._actionNames.SDK_ACTION}`}))?.status!==0)throw new Error("unable to post ws url to wechatsdk server!")}};import Zr from"emittery";import{v4 as Rt}from"uuid";var j=y("worktool"),We=class c{constructor(t){this._options=t;if(!this._options.robotId)throw new Error("\u673A\u5668\u4EBAID\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u542F\u52A8\u8BE5\u6D88\u606F\u6E90\uFF01");if(!this._options.me.nickName)throw new Error("\u673A\u5668\u4EBA\u8D26\u53F7\u81EA\u8EAB\u7684\u4FE1\u606F\u672A\u914D\u7F6E\uFF01");this._options.me.userId=this._options.me.userId??this._options.me.nickName,this._options.me.userName=this._options.me.userName??this._options.me.nickName,this._options.apiHost=this._options.apiHost??"https://api.worktool.ymdyes.cn",this._options.apiHost.endsWith("/")&&(this._options.apiHost=this._options.apiHost.slice(0,this._options.apiHost.length-1)),this.event=new Zr,this._init()}static params={name:"worktool",optionsSchema:{type:"formily",formily:{type:"object",properties:{robotId:{type:"string",title:"Robot ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Robot ID"},"x-decorator-props":{tooltip:"\u5728worktool\u7AD9\u70B9\u53EF\u4EE5\u770B\u5230"}},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"\u9ED8\u8BA4 https://api.worktool.ymdyes.cn\uFF0C\u65E0\u9700 / \u7ED3\u5C3E"},default:"https://api.worktool.ymdyes.cn"},me:{type:"object",title:"\u4E2A\u4EBA\u4FE1\u606F","x-decorator":"FormItem","x-component":"Object","x-decorator-props":{tooltip:"\u8BE5\u6D88\u606F\u6E90\u65E0\u6CD5\u901A\u8FC7 API \u83B7\u53D6\u4E2A\u4EBA\u4FE1\u606F\uFF0C\u9700\u8981\u624B\u52A8\u586B\u5165\uFF0CuserId \u548C userName \u5747\u914D\u7F6E\u4E3A nickName"},properties:{nickName:{type:"string",title:"Nick Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6635\u79F0\uFF0C\u9700\u8981\u4E0E\u5FAE\u4FE1\u4E2D\u81EA\u5DF1\u7684\u6635\u79F0\u5B8C\u5168\u4E00\u81F4"},"x-decorator-props":{tooltip:"\u6D88\u606F\u6E90\u7528\u6237\u7684\u6635\u79F0"},required:!0},userId:{type:"string",title:"User ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0},userName:{type:"string",title:"User Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0}},required:!0},commandCallback:{type:"boolean",title:"\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u662F\u5426\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03\uFF0C\u9ED8\u8BA4 false\u3002\u5F00\u542F\u540E\u53EF\u4EE5\u5B9E\u73B0\u4E00\u4E9B\u8C03\u8BD5\u4FE1\u606F\u8BB0\u5F55\uFF0C\u65E0\u5176\u4ED6\u5B9E\u9645\u7528\u9014\u3002"},default:!1}}}},fieldInAtList:"nickName",autoAppendAt:!0,eventNames:["CHAT_MESSAGE","LOGIN","LOGOUT","SELF_SEND"],desc:"WorkTool\u65E0\u969C\u788D\u670D\u52A1"};_actionNames={CHAT_CALLBACK_ACTION:"chat",COMMAND_CALLBACK_ACTION:"command",LOGIN_CALLBACK_ACTION:"login",LOGOUT_CALLBACK_ACTION:"logout"};_online=!1;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"api",actionName:this._actionNames.CHAT_CALLBACK_ACTION,action:{type:"normal",handler:t=>this._onChatMessage(t)}},{type:"api",actionName:this._actionNames.COMMAND_CALLBACK_ACTION,action:{type:"normal",handler:t=>this._onCommandMessage(t)}},{type:"api",actionName:this._actionNames.LOGIN_CALLBACK_ACTION,action:{type:"normal",handler:t=>this._onLoginMessage(t)}},{type:"api",actionName:this._actionNames.LOGOUT_CALLBACK_ACTION,action:{type:"normal",handler:t=>this._onLogoutMessage(t)}}]}event;async me(){if(this._online)return this._options.me}hasLogin(){return this._online}async login(){if(!this._online&&(await this._get("/robot/robotInfo/online")).data?.data===!0){this._fireLogin();return}}async sendMessage(t){let e;switch(t.type){case"TEXT":case"AUDIO":case"REF":{let o=typeof t.content=="string"?t.content:t.content.text;if(!o?.length){j.debug("text is empty");break}o.indexOf("(http")>=0&&(o=Z(o)),e=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:203,titleList:[...t.toInfo.map(r=>r.nickName?.length?r.nickName:r.userName)],receivedContent:o}]});break}case"IMAGE":case"EMOTION":case"MUSIC":case"VIDEO":case"FILE":{let o=t.content.file,r=await o.asUrl();j.debug(r);let n=t.type==="IMAGE"?"image":t.type==="VIDEO"?"video":t.type==="MUSIC"?"audio":"*";e=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:218,titleList:[...t.toInfo.map(s=>s.nickName)],objectName:o.name,fileUrl:r,fileType:n}]});break}default:return j.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),j.warn(t),"\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"}j.debug(e)}async getContacts(t,e=!1){return[]}async getContactDetail(t){return t}async _init(){this._post("/robot/robotInfo/update",{openCallback:1,callbackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.CHAT_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:5,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGIN_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:6,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGOUT_CALLBACK_ACTION}`}),this._options.commandCallback&&this._post("/robot/robotInfo/callBack/bind",{type:1,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.COMMAND_CALLBACK_ACTION}`})}_getUrl(t){return this._options.apiHost+t+"?robotId="+this._options.robotId}async _get(t){let e=await fetch(this._getUrl(t));return{data:await e.json(),status:e.status}}async _post(t,e){try{return await(await fetch(this._getUrl(t),{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()}catch(o){j.error(o);return}}async _processChatMessage(t){let e,o;switch(t.textType){case 0:case 1:case 15:case 3:{if(t.spoken==="\u4E2A\u4EBA\u540D\u7247"&&t.rawSpoken==="\u4E2A\u4EBA\u540D\u7247")return;e=t.spoken,o="TEXT";break}default:{j.debug("unsupported message"),j.debug(t);return}}j.debug(t);let r=t.roomType===1||t.roomType===3,n={content:e,type:o,time:new Date,isGroupChat:r,atList:t.atMe==="true"?[this._options.me.nickName]:[],fromId:r?t.groupRemark.length?t.groupRemark:t.groupName:t.receivedName,senderId:t.receivedName,senderName:t.receivedName,senderInfo:{userId:t.receivedName,userName:t.receivedName,nickName:t.receivedName},toInfo:[this._options.me],messageId:Rt(),origin:t};if(r){let a=n;a.groupInfo={userId:t.groupName,userName:t.groupName,nickName:t.groupRemark?.length?t.groupRemark:t.groupName,isGroup:!0},a.toInfo=[t.atMe?this._options.me:a.groupInfo]}let s=t.receivedName===this._options.me.nickName,i={id:Rt(),type:"CHAT_MESSAGE",message:n,source:this,me:this._options.me};s?(i.type="SELF_SEND",this.event.emit(i.type,i)):this.event.emit(i.type,i)}async _onChatMessage(t){let e=t.body;return e.receivedName==="WorkTool"?(j.debug("received system test chat message"),{code:0,message:"success"}):(this._processChatMessage(e),{code:0,message:"success"})}async _onCommandMessage(t){return j.debug("command message"),j.debug(t.body),{code:0,message:"success"}}async _onLoginMessage(t){return j.debug("login message"),j.debug(t.body),this._fireLogin(),{code:0,message:"success"}}async _onLogoutMessage(t){j.debug("logout message"),j.debug(t.body);let e={type:"LOGOUT",user:this._options.me,id:Rt(),source:this,me:this._options.me};return this.event.emit(e.type,e),{code:0,message:"success"}}_fireLogin(){let t={type:"LOGIN",user:this._options.me,id:Rt(),source:this,me:this._options.me};this.event.emit(t.type,t)}};var Do=y("echo-runner"),Ve=class c{constructor(t,e){this._app=t;this._options=e}static params={name:"test-echo-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ro}}},desc:"\u6D4B\u8BD5\u8F93\u51FA\u6267\u884C\u5668"};get options(){return this._options}get params(){return c.params}async run(t){let e=t.data;return e.me?Do.debug(e.me.nickName+"\u767B\u9646"):Do.debug("\u6536\u5230echo\u6D88\u606F\uFF1A"+t.from),{}}};import{scheduleJob as en}from"node-schedule";var ze=class c extends Se{constructor(e,o){super(e,o);this.app=e;this._options=o;this._logger=y(this._options.instanceName);let r=this._options.cron,n=this._options.cron?.trim().split(/\s+/);if(!n||n.length<5||n.length>7)throw new Error("cron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5\u3002");n.length===7&&(n.splice(6,1),r=n.join(" "),this._logger.debug("cron\u8868\u8FBE\u5F0F\u5DF2\u5FFD\u7565\u5E74\u4EFD\uFF1A"+r)),this._job=en(r,()=>this._options.onTask({from:c.params.name,data:this}))}static params={name:"cron-task-trigger",desc:"\u5B9A\u65F6\u4EFB\u52A1",optionsSchema:{type:"formily",formily:{type:"object",properties:{cron:{type:"string",title:"Cron\u8868\u8FBE\u5F0F","x-decorator":"FormItem","x-component":"CronEditor","x-component-props":{placeholder:"\u8BF7\u70B9\u51FB\u7F16\u8F91\u6309\u94AE\u8FDB\u884C\u7F16\u8F91"}},context:{type:"object",title:"\u81EA\u5B9A\u4E49JSON Context","x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"trigger\u53EF\u4EE5\u62FF\u5230\u8FD9\u91CC\u81EA\u5B9A\u4E49\u7684\u5185\u5BB9\uFF0C\u4E0D\u6E05\u695A\u5219\u65E0\u9700\u8BBE\u7F6E\u3002"}}}}}};_job;_logger;get options(){return this._options}get params(){return c.params}async dispose(){this._job.cancel()}};import tn from"emittery";import{createHash as on}from"node:crypto";import{v4 as de}from"uuid";import"recorder-core/src/engine/beta-amr.js";import"recorder-core/src/engine/beta-amr-engine.js";import"recorder-core/src/engine/wav.js";import rn from"form-data";import nn from"axios";var q=y("wcoa"),Xe=class c{constructor(t){this._options=t;if(!this._options.token||!this._options.appId)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this.options.apiBase=this._options.apiBase??"https://api.weixin.qq.com",this.event=new tn}static params={name:"wcoa",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,appId:{type:"string",title:"\u5F00\u53D1\u8005ID\uFF08App ID\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u7684\u5F00\u53D1\u8005ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002"},required:!0},appSecret:{type:"string",title:"\u5F00\u53D1\u8005\u5BC6\u7801\uFF08App Secret\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002\u53EF\u4EE5\u4F7F\u7528__\u53D8\u91CF\uFF0C \u5982\uFF1A __wechat_oa_secret\u3002\u53EA\u9700\u5728\u5BA2\u6237\u7AEF\u7684.secret.json\u4E2D\u914D\u7F6E\u5BF9\u5E94\u7684\u53D8\u91CF\u5373\u53EF\u3002"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406-\u670D\u52A1\u5668\u914D\u7F6E\u4E2D\u67E5\u770B\u3002"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key\uFF08\u5F53\u524D\u4EC5\u652F\u6301\u660E\u6587\u6A21\u5F0F\uFF0C\u65E0\u9700\u8F93\u5165\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u524D\u5C1A\u672A\u652F\u6301\u52A0\u5BC6\u6A21\u5F0F\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u540E\u53F0\u8BBE\u7F6E\u670D\u52A1\u5668\u914D\u7F6E\u4E3A\u660E\u6587\u6A21\u5F0F\u3002"},required:!1,"x-disabled":!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://api.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://api.weixin.qq.com"}}}},eventNames:["CHAT_MESSAGE"],desc:"\u5FAE\u4FE1\u516C\u4F17\u5E73\u53F0"};_token;_sendMessageUrl;_me;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:t=>this._onChatMessage(t)}}]}event;async _onCheckSignature(t){let e=t.query,o=e.signature,r=this._options.token,n=e.echostr,s=e.timestamp,i=e.nonce,a=[r,s,i].sort().join(""),p=on("sha1");if(p.update(a),p.digest("hex")==o)return n}async _loadToken(){let t=`${this._options.apiBase}/cgi-bin/token?grant_type=client_credential&appid=${this._options.appId}&secret=${W(this._options.appSecret)}`,e=await(await fetch(t)).json();if(e.errmsg?.length){q.error(e.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=e.access_token,this._sendMessageUrl=`${this._options.apiBase}/cgi-bin/message/custom/send?access_token=${this._token}`,q.trace("\u6210\u529F\u83B7\u53D6\u516C\u4F17\u53F7token:"+this._token);let o=Number(e.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}async _loadMediaFile(t,e){let o=`${this._options.apiBase}/cgi-bin/media/get?access_token=${this._token}&media_id=${t}`,r=await fetch(o),n;if(r.headers.get("Content-Type").indexOf("json")>=0){let s=await r.json();if(s.errcode!==0){q.error(s.errmsg);return}n=h.fromPath(s.video_url,"binary",e)}else{let s=await r.arrayBuffer();n=h.fromBuffer(Buffer.from(s),e,"binary")}return n}async _uploadMediaFile(t,e){let o=`${this._options.apiBase}/cgi-bin/media/upload?access_token=${this._token}&type=${e}`,r=new rn,n=await t.asReadStream();r.append("media",n);let s={...r.getHeaders()};return(await nn({method:"post",url:o,headers:s,data:r,responseType:"json"})).data?.media_id}async _processMessage(t){this._me={userId:t.ToUserName,userName:t.ToUserName,nickName:t.ToUserName};let e={atList:[],time:new Date(t.CreateTime*1e3),senderId:t.FromUserName,fromId:t.FromUserName,isGroupChat:!1,isSender:!1,senderName:t.FromUserName,senderInfo:{userName:t.FromUserName,userId:t.FromUserName,nickName:t.FromUserName,origin:t.FromUserName},toInfo:[this._me],origin:t,messageId:t.MsgId,type:void 0,content:void 0};switch(t.MsgType){case"text":{let r=t;e.type="TEXT",e.content=r.Content;break}case"image":{e.type="IMAGE";let r=t,s={file:h.fromPath(r.PicUrl,"binary",de()+".png")};e.content=s;break}case"voice":{let r=t;if(r.Format.toLowerCase()!=="amr"){q.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+r.Format);break}e.type="AUDIO";let n=await this._loadMediaFile(r.MediaId,de()+".amr"),s=await me(await n.asBuffer());await s.asLocalPath();let i={file:s};e.content=i;break}case"video":case"shortvideo":{let r=t;e.type="VIDEO";let n=await this._loadMediaFile(r.MediaId,de()+".mp4"),s=await this._loadMediaFile(r.ThumbMediaId,de()+".png"),i={file:n,previewImage:s};e.content=i;break}case"link":{e.type="ARTICLE";let r=t,n={url:r.Url,title:r.Title,desc:r.Description};e.content=n;break}case"location":{e.type="POSITION";let r=t,n={placeName:r.Label,placeDetail:r.Label,lon:r.Location_X,lat:r.Location_Y,mapLevel:r.Scale};e.content=n;break}case"event":{let r=t;switch(r.Event){case"subscribe":e.type="SUBSCRIBE",e.content={isSubscribe:!0};break;case"unsubscribe":e.type="UNSUBSCRIBE",e.content={isSubscribe:!1};break;default:q.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B\uFF1A"+r.Event);return}break}default:{q.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.MsgType);return}}let o={id:de(),type:"CHAT_MESSAGE",message:e,source:this,me:this._me,onGenerating:()=>this._setTyping(e.fromId)};this.event.emit(o.type,o)}async _onChatMessage(t){if(this._onCheckSignature(t)){if(t.method.toLowerCase()==="get")return t.query.echostr}else return q.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),q.debug(t.body),"error";return this._processMessage(t.body.xml),"success"}async _setTyping(t){try{let e=`${this._options.apiBase}/cgi-bin/message/custom/typing?access_token=${this._token}`,o=await(await fetch(e,{method:"post",body:JSON.stringify({touser:t,command:"Typing"})})).json()}catch{q.info("\u8BBE\u7F6Etyping\u72B6\u6001\u5931\u8D25\uFF01")}}async me(){return this._me??{userId:"gh",userName:"gh",nickName:"gh-\u6536\u5230\u6D88\u606F\u540E\u624D\u80FD\u66F4\u65B0"}}hasLogin(){return!!this._token?.length}async login(){if(await this._loadToken()){let t={type:"LOGIN",user:this._me,id:de(),source:this,me:this._me};this.event.emit(t.type,t)}}async sendMessage(t,e){let o={touser:t.toInfo[0].userId};switch(t.type){case"TEXT":{o.msgtype="text";let n=t.content;n.indexOf("(http")>=0&&(n=Z(n)),o.text={content:n};break}case"IMAGE":{o.msgtype="image";let n=await this._uploadMediaFile(t.content.file,"image");if(!n){q.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}o.image={media_id:n};break}case"AUDIO":{o.msgtype="voice";let n=t.content.file,{file:s}=await te(n),i=await this._uploadMediaFile(s,"voice");if(!i){q.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}o.voice={media_id:i};break}case"VIDEO":{o.msgtype="video";let n=t.content;if(!n.previewImage){q.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadMediaFile(n.file,"video"),i=await this._uploadMediaFile(n.previewImage,"image");o.video={media_id:s,thumb_media_id:i,title:n.title??de()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"ARTICLE":{o.msgtype="news";let n=t.content,s=n.coverFile??n.thumbFile,i;s&&(i=await s.asUrl()),o.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]};break}default:q.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);break}let r=await(await fetch(this._sendMessageUrl,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})).json();r.errcode!==0&&q.error(r.errmsg)}async getContacts(t,e=!1){return[]}async getContactDetail(t){return t}};import sn from"emittery";import{DWClient as an,TOPIC_ROBOT as Lo}from"dingtalk-stream";import{v4 as re}from"uuid";import cn from"form-data";import pn from"axios";import{getWavFileInfo as ln}from"wav-file-decoder";import mn from"node-video-lib";var C=y("ding-robot"),Je=class c{constructor(t,e){this._app=t;this._options=e;this._options.apiHost=this._options.apiHost??"https://api.dingtalk.com",this._options.oldApiHost=this._options.oldApiHost??"https://oapi.dingtalk.com",this._options.sendAudioFormat=this._options.sendAudioFormat??"amr",this._options.streamTemplateId?.length||C.info("\u60A8\u53EF\u4EE5\u53C2\u8003\u4EE5\u4E0B\u94FE\u63A5\uFF0C\u521B\u5EFA\u5361\u7247\u6A21\u677F\u540E\uFF0C\u5C06\u6A21\u677FID\u914D\u7F6E\u5230source\u9009\u9879\u4E2D\uFF0C\u652F\u6301\u6D41\u5F0F\u56DE\u590D\uFF1Ahttps://open.dingtalk.com/document/orgapp/typewriter-effect-streaming-ai-card"),this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,C.trace("\u8054\u7CFB\u4EBA\u7F13\u5B58\u6709\u6548\u671F\uFF1A"+this._options.contactsCacheTime/60/60+"\u5C0F\u65F6"),this._options.contactDepartId=this._options.contactDepartId??1,this._options.contactSleepMS=this._options.contactSleepMS??30,this._options.contactAutoloadOnStart=this._options.contactAutoloadOnStart??!0,this.event=new sn}static params={name:"dingbot",optionsSchema:Po({...N,clientId:{type:"string",title:"\u5BA2\u6237\u7AEFID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEFID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client ID\uFF0C\u975EApp ID"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},clientSecret:{type:"string",title:"\u5BA2\u6237\u7AEF\u5BC6\u94A5","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEF\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client Secret"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u4F01\u4E1AID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Corp ID"},"x-decorator-props":{tooltip:"\u4F01\u4E1AID\uFF0C\u53EF\u4EE5\u5728\u9489\u9489\u5F00\u653E\u5E73\u53F0\u9996\u9875\u770B\u5230\u3002\u4E00\u822C\u4EE5ding\u5F00\u5934\u3002"}},apiHost:{type:"string",title:"API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u4E3B\u673A\u5730\u5740"},default:"https://api.dingtalk.com"},oldApiHost:{type:"string",title:"\u65E7API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u65E7API\u4E3B\u673A\u5730\u5740"},default:"https://oapi.dingtalk.com"},agentId:{type:"number",title:"Agent ID","x-decorator":"FormItem","x-component":"NumberPicker","x-validator":{required:!0,message:"Agent ID\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\uFF0C\u540D\u4E3A \u539F\u4F01\u4E1A\u5185\u90E8\u5E94\u7528AgentId \u3002"}},robotCode:{type:"string",title:"\u673A\u5668\u4EBA\u4EE3\u7801","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u673A\u5668\u4EBA\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u673A\u5668\u4EBA\u7684\u4EE3\u7801"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u5E94\u7528\u80FD\u529B-\u673A\u5668\u4EBA\u9875\u9762\uFF0C\u70B9\u51FB\u590D\u5236 RobotCode \u5373\u53EF\u3002"}},markdownMsgTitle:{type:"string",title:"Markdown\u6D88\u606F\u6807\u9898","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5F53\u53D1\u9001\u6587\u672C\u7C7B\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u9489\u9489\u652F\u6301\u63D0\u4F9B\u4E00\u4E2A\u6807\u9898\uFF0C\u6807\u9898\u4F1A\u5728\u5217\u8868\u4E2D\u5C55\u793A\u3002\u9ED8\u8BA4\u662FAI\u56DE\u590D\u7684\u524D16\u4E2A\u5B57\u3002\u5982\u679C\u914D\u7F6E\u8FD9\u4E2A\u53C2\u6570\uFF0C\u5219\u4F1A\u56FA\u5B9A\u7528\u8FD9\u4E2A\u6807\u9898\u3002\u9ED8\u8BA4\u6536\u5230\u7684\u6D88\u606F\u5185\u5BB9\u7684\u524D16\u4E2A\u5B57\u3002"}},sendAudioFormat:{type:"string",enum:["wav","amr"],title:"\u53D1\u9001\u97F3\u9891\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u53D1\u9001\u97F3\u9891\u65F6\u7684\u683C\u5F0F\uFF0C\u9ED8\u8BA4amr\uFF0C\u53EF\u9009wav\uFF0Camr\u6587\u4EF6\u5C3A\u5BF8\u5C0F\uFF0C\u6548\u679C\u7565\u4F4E\u4E8Ewav\u3002"},default:"amr"},streamTemplateId:{type:"string",title:"\u6D41\u5F0F\u6A21\u677FID","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5982\u679C\u914D\u7F6E\u4E86\u8BE5\u53C2\u6570\uFF0C\u5219\u5F00\u542F\u6D41\u5F0F\u56DE\u590D\u3002\u9700\u8981\u5F00\u653E\u5E94\u7528\u7684\u5361\u7247\u76F8\u5173\u6743\u9650\u3002\u5361\u7247\u521B\u5EFA\u5730\u5740\uFF1Ahttps://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33e01934gUydw0"}},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},"x-component-props":{min:60*60},default:24*60*60},contactDepartId:{type:"number",title:"\u8054\u7CFB\u4EBA\u5217\u8868ID","x-decorator":"FormItem","x-component":"InputNumber","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7684\u5217\u8868ID\uFF0C\u53EF\u4EE5\u4ECE\u9489\u9489API Explorer\u76F8\u5173\u63A5\u53E3\u83B7\u53D6\uFF08\u4ECE\u6839\u8DEF\u5F84\u5F00\u59CB\u4E00\u5C42\u5C42\u83B7\u53D6\uFF09\u3002\u9ED8\u8BA41\uFF0C\u8868\u793A\u6839\u8DEF\u5F84\u3002\u5982\u679C\u5E0C\u671B\u53EA\u6709\u90E8\u5206\u90E8\u95E8\u7684\u7528\u6237\u53EF\u88AB\u524D\u7AEF\u9009\u53D6\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E0A\u7EA7\u90E8\u95E8ID\u3002"},default:1},contactAutoloadOnStart:{type:"boolean",title:"\u542F\u52A8\u65F6\u81EA\u52A8\u52A0\u8F7D\u8054\u7CFB\u4EBA","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5728\u7CFB\u7EDF\u542F\u52A8\u7684\u65F6\u5019\u5C31\u81EA\u52A8\u83B7\u53D6\u8054\u7CFB\u4EBA\u3002\u9ED8\u8BA4true\u3002\u5982\u679C\u5458\u5DE5\u8F83\u591A\uFF0C\u5EFA\u8BAE\u542F\u52A8\u65F6\u83B7\u53D6\uFF0C\u907F\u514D\u7B2C\u4E00\u6B21\u4F7F\u7528\u7B49\u5F85\u65F6\u95F4\u8FC7\u957F\u3002"},default:!0},contactSleepMS:{type:"number",title:"\u8054\u7CFB\u4EBA\u83B7\u53D6\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u9012\u5F52\u8C03\u7528\u83B7\u53D6\u7528\u6237\u63A5\u53E3\u53EF\u80FD\u89E6\u53D1\u9650\u6D41\uFF0C\u6B64\u65F6\u53EF\u4EE5\u8BBE\u7F6E\u83B7\u53D6\u95F4\u9694\uFF0C\u9ED8\u8BA4\u662F30ms\u4E00\u6B21\uFF0C\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u53EF\u4EE5\u8C03\u5927\u3002"},default:30}}),eventNames:["CHAT_MESSAGE"],supportedFileExts:["xlsx","pdf","zip","rar","doc","docx"],desc:"\u9489\u9489\u5E94\u7528"};_token;_oldToken;_talkClient;_me;_trackIdCache={};_contacts=[];_contactLoadingPromise;_departIdNameMap=new Map;get params(){return c.params}get options(){return this._options}get actions(){return[]}event;async _loadToken(){try{let t=`${this._options.apiHost}/v1.0/oauth2/${this._options.corpId}/token`,e=await(await fetch(t,{method:"post",body:JSON.stringify({client_id:this._options.clientId,client_secret:this._options.clientSecret,grant_type:"client_credentials"}),headers:{"Content-Type":"application/json"}})).json();if(!e.access_token){C.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+e.message),setTimeout(()=>{this._loadToken()},10*60*1e3);return}let o=Number(e.expires_in);this._token=e.access_token,C.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5E94\u7528token\uFF1A"+this._token),t=`${this._options.oldApiHost}/gettoken?appkey=${this._options.clientId}&appsecret=${this._options.clientSecret}`;let r=await(await fetch(t)).json();if(!r.access_token){C.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+r.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._oldToken=r.access_token,C.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5F15\u7528\u65E7\u7248token\uFF1A"+this._oldToken),o=Math.min(Number(e.expires_in),o),setTimeout(()=>{this._loadToken()},o/2*1e3)}catch(t){C.error(t),setTimeout(()=>{this._loadToken()},10*60*1e3)}}async _api(t,e,o=void 0){let r=`${this._options.apiHost}${t}`,n;return e==="get"?n=await(await fetch(r,{headers:{"x-acs-dingtalk-access-token":this._token}})).json():n=await(await fetch(r,{headers:{"x-acs-dingtalk-access-token":this._token,"Content-Type":"application/json"},method:e,body:JSON.stringify(o)})).json(),n}async _oldApi(t,e,o=void 0){let r=`${this._options.oldApiHost}${t}?access_token=${this._oldToken}`,n;return e==="get"?n=await(await fetch(r)).json():n=await(await fetch(r,{headers:{"Content-Type":"application/json"},method:e,body:JSON.stringify(o)})).json(),n.errcode!==0&&C.error(n.errmsg),n.result}async _downloadMedia(t,e){let o=await this._api("/v1.0/robot/messageFiles/download","post",{robotCode:this._options.robotCode,downloadCode:t});if(o.downloadUrl?.length)return h.fromPath(o.downloadUrl,"binary",e)}async _onChatMessage(t){let e={time:new Date(t.createAt),senderId:t.senderStaffId,fromId:t.senderStaffId,isGroupChat:!1,isSender:!1,senderName:t.senderStaffId,senderInfo:{userId:t.senderStaffId,userName:t.senderStaffId,nickName:t.senderNick},toInfo:[this._me],origin:t,messageId:t.msgId,type:void 0,content:void 0};switch(t.conversationType==="2"&&(e.fromId=t.conversationId,e.isGroupChat=!0,e.atList=[this._me.userId],e.groupInfo={userId:t.conversationId,userName:t.conversationId,nickName:t.conversationTitle}),t.msgtype){case"text":{e.type="TEXT",e.content=t.text.content;break}case"audio":{let o=t.content,n={file:await this._downloadMedia(o.downloadCode,re()+".ogg"),text:o.recognition};e.type="AUDIO",e.content=n;break}case"richText":{let o={content:[]},r=t.content;for(let n of r.richText)if(n.downloadCode?.length){let s=n,a={file:await this._downloadMedia(s.downloadCode,re()+".png")};o.content.push({type:"image",data:a})}else if(typeof n.text=="string"){let s=n;o.content.push({type:"text",data:s.text})}else C.warn("\u4E0D\u80FD\u8BC6\u522B\u7684rich text content"),C.warn(n);e.type="RICH_TEXT",e.content=o;break}case"file":{let o=t.content,n={file:await this._downloadMedia(o.downloadCode,o.fileName),title:o.fileName,desc:o.fileName};e.type="FILE",e.content=n;break}case"picture":{let o=t.content,n={file:await this._downloadMedia(o.downloadCode,re()+".png")};e.type="IMAGE",e.content=n;break}case"video":{let o=t.content,n={file:await this._downloadMedia(o.downloadCode,re()+"."+o.videoType)};e.type="VIDEO",e.content=n;break}default:C.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.msgtype),C.debug(t);return}if(e.content){let o={id:re(),type:"CHAT_MESSAGE",message:e,source:this,me:this._me};this.event.emit(o.type,o)}}async _sendByWebhook(t){let e=W(t.toInfo[0].userId??t.toInfo[0].userName);if(!e.startsWith("http")){C.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o={at:{}};if(t.atList?.length)if(t.atList[0]==="@all")o.at.isAtAll=!0;else{let r=[],n=[];t.atList.forEach(s=>{Ct(s)?r.push(s):n.push(s)}),o.at.atMobiles=r,o.at.atUserIds=n}switch(t.type){case"TEXT":{o.msgtype="markdown";let r=t.content;o.markdown={text:r,title:this._options.markdownMsgTitle??t.content.slice(0,Math.min(t.content.length,16))};break}case"AUDIO":{let r=t.content;if(!r.text?.length){C.warn("\u5F53\u524D\u97F3\u9891\u6CA1\u6709\u5BF9\u5E94\u7684\u6587\u5B57\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u9489\u9489\u673A\u5668\u4EBA\u53D1\u9001\uFF01");return}o.msgtype="markdown",o.markdown={text:r.text,title:this._options.markdownMsgTitle??r.text.slice(0,Math.min(r.text.length,16))};break}case"IMAGE":{let r=t.content,n=await this._getPublicUrl(r.file);o.msgtype="markdown",o.markdown={text:`![\u56FE\u7247](${n})`,title:"\u6536\u5230\u4E00\u5F20\u56FE\u7247"};break}case"ARTICLE":{let r=t.content;o.msgtype="link",o.link={title:r.title,messageUrl:r.url,text:r.desc??r.title,picUrl:await(r.coverFile??r.thumbFile??this._app.sharedLogo).asUrl()};break}}o.msgtype&&await fetch(e,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})}async _getPublicUrl(t){if(t)return await t.asUrl()}async _uploadMediaFile(t,e){let o=`${this._options.oldApiHost}/media/upload?access_token=${this._oldToken}`,r=new cn,n=await t.asReadStream();r.append("media",n),r.append("type",e);let s={...r.getHeaders()},i=await pn({method:"post",url:o,headers:s,data:r,responseType:"json"});if(i.data?.errcode!==0){C.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF01");return}return i.data?.media_id}async _sendByAPI(t,e){let o={robotCode:this._options.robotCode},r;if(t.isGroupChat)r="/v1.0/robot/groupMessages/send",o.openConversationId=t.toInfo[0].userId;else{let n=t.toInfo.map(s=>s.userId);o.userIds=n,r="/v1.0/robot/oToMessages/batchSend"}switch(t.type){case"TEXT":if(this._options.streamTemplateId?.length&&e?.origin?.outTrackId?.length){let n=e.origin.outTrackId,s=(this._trackIdCache[n]??"")+t.content;this._trackIdCache[n]=s,await this._api("/v1.0/card/streaming","put",{outTrackId:n,guid:re(),key:"content",content:s,isFull:!0,isFinalize:!1,isError:!1});return}else{o.msgKey="sampleMarkdown",o.msgParam={title:this._options.markdownMsgTitle??t.content.slice(0,Math.min(t.content.length,16)),text:`${t.content}`};break}case"IMAGE":{o.msgKey="sampleImageMsg";let n=t.content;o.msgParam={photoURL:await this._getPublicUrl(n.file)};break}case"ARTICLE":{o.msgKey="sampleLink";let n=t.content,s=await this._getPublicUrl(n.coverFile??this._app.sharedCover);o.msgParam={text:n.desc??n.title,title:n.title,picUrl:s,messageUrl:n.url};break}case"AUDIO":{let n=t.content,s,i;if(this._options.sendAudioFormat==="amr"){let a=await te(n.file);s=await this._uploadMediaFile(a.file,"voice"),i=a.duration}else{s=await this._uploadMediaFile(n.file,"voice");let a=ln((await n.file.asBuffer()).buffer);i=parseInt(a.chunkInfo[1].dataLength/a.fmt.bytesPerSec*1e3)}o.msgKey="sampleAudio",o.msgParam={mediaId:s,duration:i};break}case"FILE":{let n=t.content,s=n.file.name.slice(n.file.name.lastIndexOf(".")+1);c.params.supportedFileExts.indexOf(s)<0&&(s=n.title?.slice(n.title.lastIndexOf(".")+1),c.params.supportedFileExts.indexOf(s)<0&&(C.warn("\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B\uFF1A"+s+",\u6765\u81EA\u6587\u4EF6\uFF1A"+n.file.name),C.warn("\u6587\u4EF6\u6807\u9898\uFF1A"+n.title),C.warn("\u76EE\u524D\u652F\u6301\u7684\u7C7B\u578B\uFF1A"+c.params.supportedFileExts.join(","))));let i=await this._uploadMediaFile(n.file,"file");o.msgKey="sampleFile",o.msgParam={mediaId:i,fileName:n.title??n.file.name,fileType:s};break}case"VIDEO":{let n=t.content;if(!n.file.name.endsWith(".mp4")&&!n.title?.endsWith(".mp4")){C.warn("\u5F53\u524D\u9489\u9489\u4EC5\u652F\u6301mp4\u6587\u4EF6\u4E0A\u4F20\uFF01");return}n.previewImage?.name||C.info("mp4\u6587\u4EF6\u5EFA\u8BAE\u63D0\u4F9B\u9884\u89C8\u56FE\uFF01");let s=mn.MovieParser.parse(await n.file.asBuffer()),i=await this._uploadMediaFile(n.file,"video");if(o.msgKey="sampleVideo",o.msgParam={duration:String(s.duration/1e3),videoMediaId:i,videoType:"mp4"},n.previewImage?.name){let a=await this._uploadMediaFile(n.previewImage,"image");o.msgParam.picMediaId=a}break}default:{C.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);return}}o.msgParam&&(o.msgParam=JSON.stringify(o.msgParam),this._api(r,"post",o))}async _getDepartList(t,e){this._options.contactSleepMS>0&&await Wt(this._options.contactSleepMS),C.debug("get depart of "+t);let o=await this._oldApi("/topapi/v2/department/listsub","post",{dept_id:t});if(e.push(t),o?.length)for(let r of o)this._departIdNameMap.set(r.dept_id,r.name),await this._getDepartList(r.dept_id,e)}async _getDepartUsers(t,e){this._options.contactSleepMS>0&&await Wt(this._options.contactSleepMS);let o=await this._oldApi("/topapi/v2/user/list","post",{dept_id:t,cursor:e,size:100}),r=[];if(o?.list.length){for(let n of o.list)r.push({userId:n.userid,userName:n.userid,nickName:n.name,avatarUrl:n.avatar,bigAvatarUrl:n.avatar,signature:n.remark,origin:n});o.has_more&&r.push(...await this._getDepartUsers(t,o.next_cursor))}return C.debug("\u90E8\u95E8 id "+t+",name "+this._departIdNameMap.get(t)+" \u4E0B\u5171\u6709"+r.length+"\u4E2A\u8054\u7CFB\u4EBA"),r}async me(){if(this._me)return this._me;if(!this._options.clientId||!this._options.clientSecret)return this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"},this._me;let e=(await this._api("/v1.0/microApp/allInnerApps","get")).appList.find(o=>o.agentId===Number(this._options.agentId));return e?(this._me={userId:e.agentId,userName:e.name,avatarUrl:e.icon,bigAvatarUrl:e.icon,nickName:e.name,origin:e},this._me):(C.warn("\u6CA1\u6709\u627E\u5230agentId\u4E3A"+this._options.agentId+"\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5F00\u901A\u4E86\u5E94\u7528\u7BA1\u7406\u76F8\u5173\u6743\u9650\u6216\u8005id\u662F\u5426\u6B63\u786E\uFF01"),{userId:this._options.agentId.toString(),userName:this._options.agentId.toString(),nickName:"\u9489\u9489\u5E94\u7528-"+this._options.agentId})}hasLogin(){return!!(this._options.clientId&&this._options.clientSecret&&this._talkClient?.connected||!this._options.clientId||!this._options.clientSecret)}async login(){if(this._talkClient?.connected){C.warn("\u5F53\u524D\u8FDE\u63A5\u5DF2\u7ECF\u5F00\u542F\uFF0C\u65E0\u9700\u91CD\u590D\u767B\u5F55\uFF01");return}this._options.clientId&&this._options.clientSecret?(this._talkClient?this._talkClient.removeAllListeners(Lo):(await this._loadToken(),this._talkClient=new an({clientId:this._options.clientId,clientSecret:this._options.clientSecret,debug:this._options.debug??process.env.LOG_LEVEL==="debug"})),this._talkClient.registerCallbackListener(Lo,o=>{this._talkClient.socketCallBackResponse(o.headers.messageId,"success");let r=JSON.parse(o.data);this._onChatMessage(r)}),await this._talkClient.connect()):C.info("\u6CA1\u6709\u914D\u7F6E\u9489\u9489\u5E94\u7528\u7684client\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528\u7FA4\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01");let t=await this.me();this._options.contactAutoloadOnStart&&!this._contacts.length&&(C.debug("get contacts from login method"),await this.getContacts("all"));let e={id:re(),source:this,me:t,user:t,type:"LOGIN"};!this._talkClient||this._talkClient.connected?this.event.emit(e.type,e):this._talkClient.socket.on("open",()=>{this.event.emit(e.type,e)})}async beforeSend(t){if((t.type==="TEXT"||t.type==="RICH_TEXT"||t.type==="AUDIO"||t.type==="REF")&&this._options.streamTemplateId?.length){let e=re(),o;t.isGroupChat?o={cardTemplateId:this._options.streamTemplateId,outTrackId:e,cardData:{cardParamMap:{}},imGroupOpenSpaceModel:{supportForward:!1},imGroupOpenDeliverModel:{robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_GROUP.${t.fromId}`}:o={cardTemplateId:this._options.streamTemplateId,outTrackId:e,cardData:{cardParamMap:{}},imRobotOpenSpaceModel:{supportForward:!1},imRobotOpenDeliverModel:{spaceType:"IM_ROBOT",robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_ROBOT.${t.fromId}`},(await this._api("/v1.0/card/instances/createAndDeliver","post",o)).success&&(t.origin.outTrackId=e)}}async afterSend(t){let e=t.origin?.outTrackId;if(!e?.length)return;let o=this._trackIdCache[e]??"";await this._api("/v1.0/card/streaming","put",{outTrackId:e,guid:re(),key:"content",content:o,isFull:!0,isFinalize:!0,isError:!1}),delete this._trackIdCache[e]}sendMessage(t,e){let o=t.toInfo[0];return(o.userId??o.userName).startsWith("http")||o.userId.startsWith("__")?this._sendByWebhook(t):this._sendByAPI(t,e)}async getContacts(t,e=!1){return C.trace("=========================================================="),t==="group"?(C.warn("\u9489\u9489\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[]):this._contacts.length&&!e?(C.trace("get contacts from cache"),this._contacts):this._contactLoadingPromise?this._contactLoadingPromise:(this._contactLoadingPromise=(async()=>{C.trace("loading ding contacts");let o=[];await this._getDepartList(this._options.contactDepartId,o);let r=new Set;for(let n of o)(await this._getDepartUsers(n,0)).forEach(i=>{r.add(i)});return this._contacts=Array.from(r),this._contactLoadingPromise=void 0,C.debug("\u5171\u83B7\u53D6\u5230"+this._contacts.length+"\u4E2A\u9489\u9489\u8054\u7CFB\u4EBA"),this._contacts})(),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3),this._contactLoadingPromise)}async getContactDetail(t){return t}dispose(){this._talkClient?.connected&&this._talkClient.disconnect()}};import un from"emittery";import{decrypt as Uo,getSignature as dn}from"@wecom/crypto";import{v4 as G}from"uuid";import{XMLParser as gn}from"fast-xml-parser";import hn from"form-data";import fn from"axios";import In from"md5";var S=y("wework-app"),Qe=class c{constructor(t,e){this._app=t;this._options=e;this._apiHost=this._options.apiHost??"https://qyapi.weixin.qq.com",this._cacheManager=St(this._options.instanceName),this.event=new un}static params={name:"wework-app",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u4F01\u4E1AID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u6211\u7684\u4F01\u4E1A \u6700\u4E0B\u65B9\u67E5\u770B"},required:!0},agentId:{type:"string",title:"Agent ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Agent ID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},secret:{type:"string",title:"Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Secret"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u53E3\u6D88\u606F\u7684 Token"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u6536\u6D88\u606F\u7684 AES Key"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"API \u5730\u5740"},default:"https://qyapi.weixin.qq.com"},welcomeInKfMode:{type:"boolean",title:"\u5BA2\u670D\u6A21\u5F0F\u63A5\u5165\u7684\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u5BA2\u670D\u6A21\u5F0F\u4E0B\uFF0C\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u65F6\u662F\u5426\u53D1\u9001\u6B22\u8FCE\u8BED\uFF0C\u9ED8\u8BA4 false"},default:!1},welcomePrompt:{type:"string",title:"\u5BA2\u670D\u6A21\u5F0F\u751F\u6210\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u5982 __\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2"},"x-decorator-props":{tooltip:"\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED\uFF0C\u53EF\u4EE5\u4F7F\u7528 {nickName} \u5BF9\u7528\u6237\u7684\u6635\u79F0\u8FDB\u884C\u5360\u4F4D\uFF0C\u5982\u679C\u4EE5 __\u5F00\u5934\uFF0C\u8868\u793A\u76F4\u63A5\u53D1\u9001\u8BE5\u6B22\u8FCE\u8BCD\uFF0C\u800C\u4E0D\u662F\u9001\u5230\u540E\u7AEF\u8FDB\u884C\u751F\u6210\u3002"}},appChatGroups:{type:"array",title:"\u8981\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A","x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u4EC5\u4F7F\u7528\u5E94\u7528\u5355\u804A\u5BF9\u8BDD\uFF0C\u65E0\u9700\u8BBE\u7F6E\u3002\u9700\u8981\u8BE5\u5E94\u7528\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A\uFF08\u5DF2\u5B58\u5728\u65F6\u4E0D\u4F1A\u91CD\u590D\u521B\u5EFA\uFF09\u3002\u7531\u4E8E\u53EA\u6709\u5E94\u7528\u521B\u5EFA\u7684\u7FA4\u804A\u624D\u80FD\u4E3B\u52A8\u63A8\u9001\u6D88\u606F\uFF0C\u56E0\u6B64\u9700\u8981\u5148\u521B\u5EFA\u7FA4\u804A\u3002\u5F80\u7FA4\u91CC\u63A8\u6D88\u606F\u5EFA\u8BAE\u4F7F\u7528webhook\u673A\u5668\u4EBA\uFF0C\u800C\u4E0D\u662F\u5E94\u7528\u673A\u5668\u4EBA\uFF0Cwebhook\u652F\u6301Markdown\u6D88\u606F\u3002"},items:{type:"object","x-component":"ArrayItems.Item",properties:{userlist:{type:"array",title:"\u7FA4\u6210\u5458\u5217\u8868","x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6210\u5458\u7684ID\uFF0C\u53EF\u5728\u540E\u53F0\u901A\u8BAF\u5F55\u67E5\u770B"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u6210\u5458","x-component":"ArrayItems.Addition"}}},chatid:{type:"string",title:"\u7FA4\u804A ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u804A ID\uFF0C\u5EFA\u8BAE\u968F\u673A\u751F\u6210\u4E00\u4E2A"}},name:{type:"string",title:"\u7FA4\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u540D\u79F0"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u7FA4","x-component":"ArrayItems.Addition"}}}}}},eventNames:["CHAT_MESSAGE","LOGIN"],desc:"\u4F01\u4E1A\u5FAE\u4FE1\u5E94\u7528/\u5BA2\u670D"};_apiHost;_token;_me;_cacheManager;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:t=>this._onMessage(t)}}]}event;async _loadToken(){if(!this._options.corpId||!this._options.secret)return S.info("\u5F53\u524D\u4F01\u5FAE\u6E90\u672A\u914D\u7F6E\u4F01\u4E1A\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528webhook\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01"),!0;let t=`${this._apiHost}/cgi-bin/gettoken?corpid=${this._options.corpId}&corpsecret=${this._options.secret}`,e=await(await fetch(t)).json();if(e.errcode!==0){S.error(e.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=e.access_token,S.debug("\u6210\u529F\u83B7\u53D6\u4F01\u5FAE\u5E94\u7528token:"+this._token);let o=Number(e.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}_checkSignature(t,e,o,r){let n=dn(this._options.token,e,o,r);return t===n}async _loadMediaFile(t,e){let o=`${this._apiHost}/cgi-bin/media/get?access_token=${this._token}&media_id=${t}`,r=await fetch(o),n;if(r.headers.get("Content-Type").indexOf("json")>=0){let s=await r.json();if(s.errcode!==0){S.error(s.errmsg);return}n=h.fromPath(s.video_url,"binary",e)}else{let s=await r.arrayBuffer();n=h.fromBuffer(Buffer.from(s),e,"binary")}return n}async _uploadMediaFile(t,e){let o=new hn,r=await e.asReadStream();o.append("media",r);let n={...o.getHeaders()},s=await fn({method:"post",url:t,headers:n,data:o,responseType:"json"});return s.data?.errcode!==0&&S.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u5927\u5C0F\u548C\u7C7B\u578B\u662F\u5426\u652F\u6301\uFF01"),s.data?.media_id}async _uploadAppMediaFile(t,e){let o=`${this._apiHost}/cgi-bin/media/upload?access_token=${this._token}&type=${e}`;return this._uploadMediaFile(o,t)}async _uploadRobotMediaFile(t,e,o){let r=`${this._apiHost}/cgi-bin/webhook/upload_media?key=${o}&type=${e}`;return this._uploadMediaFile(r,t)}async _processKfMessage(t,e){let o=t.external_userid??t.event?.external_userid;if(!o?.length){S.warn("\u8BE5\u6D88\u606F\u6CA1\u6709userid\uFF0C\u65E0\u6CD5\u56DE\u590D\uFF01"),S.warn(t);return}t.external_userid=o,t.open_kfid=t.open_kfid??t.event?.open_kfid;let r=await this._cacheManager.get(o);if(!r){let i=await this._api("/cgi-bin/kf/customer/batchget","post",{external_userid_list:[o],need_enter_session_context:0});if(i?.customer_list?.length){let a=i.customer_list[0];r={userId:o,userName:o,avatarUrl:a.avatar,bigAvatarUrl:a.avatar,nickName:a.nicname,origin:a},this._cacheManager.set(o,r)}}r||(S.warn("\u672A\u80FD\u83B7\u53D6\u5230\u8BE5\u7528\u6237\u7684\u4FE1\u606F\uFF0C\u53EF\u80FD\u8BE5\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u5BA2\u670D\u5DF2\u7ECF\u8D85\u8FC748\u5C0F\u65F6\uFF01"),r={userId:o,userName:o,nickName:o});let n={atList:[],time:new Date(t.send_time*1e3),senderId:t.external_userid,fromId:t.external_userid,isGroupChat:!1,isSender:!1,senderName:r.userName,senderInfo:r,toInfo:[this._me],messageId:t.msgid,origin:{...e,data:{...t}},type:void 0,content:void 0};switch(t.msgtype){case"text":{let i=t.text;n.type="TEXT",n.content=i.content;break}case"image":{n.type="IMAGE";let i=t.image,p={file:await this._loadMediaFile(i.media_id,G()+".png")};n.content=p;break}case"voice":{let i=t.voice;n.type="AUDIO";let a=await this._loadMediaFile(i.media_id,G()+".amr"),p=await me(await a.asBuffer());await p.asLocalPath();let l={file:p};n.content=l;break}case"video":{let i=t.video;n.type="VIDEO";let a=await this._loadMediaFile(i.media_id,G()+".mp4"),p=await this._app.sharedCover,l={file:a,previewImage:p};n.content=l;break}case"link":{n.type="ARTICLE";let i=t.link,a={url:i.url,title:i.title,desc:i.desc,coverFile:i.pic_url?.length?h.fromPath(i.pic_url,"binary",G()+".png"):this._app.sharedCover};n.content=a;break}case"location":{n.type="POSITION";let i=t.location,a={placeName:i.name,placeDetail:i.address,lon:i.longitude,lat:i.latitude,mapLevel:void 0};n.content=a;break}case"event":{t.event.external_userid?.length&&await this._processKfUserEventMessage(t,n);break}default:break}if(!n.content){S.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),S.warn(n);return}let s={id:G(),type:"CHAT_MESSAGE",message:n,source:this,me:this._me};this.event.emit(s.type,s)}async _processKfUserEventMessage(t,e){switch(t.event.event_type){case"enter_session":{if(this._options.welcomeInKfMode){let o=this._options.welcomePrompt??"__\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2";if(o=o.replaceAll("{nickName}",e.senderInfo.nickName),e.type="TEXT",e.content=o,o.startsWith("__")){let r={type:"TEXT",content:o,toInfo:[e.senderInfo],isGroupChat:!1};await this._sendKfMessage(r,e),e.type=void 0,e.content=void 0}}break}}}async _onKfMessage(t){let e=await this._cacheManager.get("cursor"),o;if(e?.length)o=await this._api("/cgi-bin/kf/sync_msg","post",{token:t.Token,open_kfid:t.OpenKfId,cursor:e});else for(o=await this._api("/cgi-bin/kf/sync_msg","post",{token:t.Token,open_kfid:t.OpenKfId});o.has_more===1;){let s=await this._api("/cgi-bin/kf/sync_msg","post",{token:t.Token,open_kfid:t.OpenKfId,cursor:o.next_cursor});if(s.msg_list?.length){let i=o.msg_list;i.push(...s.msg_list),s.msg_list=i,o=s}else break}if(!o?.next_cursor){S.warn("\u83B7\u53D6\u6700\u65B0\u6D88\u606F\u5931\u8D25\uFF01");return}if(await this._cacheManager.get("cursor")!==e){S.info("\u6709\u65B0\u7684\u6D88\u606F\u8986\u76D6\u4E86\u672C\u6B21\u8FDE\u63A5\uFF0C\u5185\u5BB9\u5C06\u5728\u65B0\u7684\u8BF7\u6C42\u4E2D\u5904\u7406");return}if(await this._cacheManager.set("cursor",e),!o.msg_list.length)return;let n=o.msg_list.toReversed();if(!e?.length)this._processKfMessage(n[0],t);else{let s=[];for(let i of n)if(i.msgtype==="event"){if(i.event.external_userid?.length){let a=i.event.external_userid;s.indexOf(a)<0&&(s.push(a),this._processKfMessage(i,t))}}else s.indexOf(i.external_userid)<0&&(s.push(i.external_userid),this._processKfMessage(i,t))}}async _processEventMessage(t,e){switch(t.Event){case"subscribe":e.type="SUBSCRIBE",e.content={isSubscribe:!0};break;case"unsubscribe":e.type="UNSUBSCRIBE",e.content={isSubscribe:!1};break;case"LOCATION":break;default:break}}async _processAppMessage(t){let e={atList:[],time:new Date(t.CreateTime*1e3),senderId:t.FromUserName,fromId:t.FromUserName,isGroupChat:!1,isSender:!1,senderName:t.FromUserName,senderInfo:{userName:t.FromUserName,userId:t.FromUserName,nickName:t.FromUserName,origin:t.FromUserName},toInfo:[this._me],origin:t,messageId:t.MsgId,type:void 0,content:void 0};switch(t.MsgType){case"text":{let r=t;e.type="TEXT",e.content=r.Content;break}case"image":{e.type="IMAGE";let r=t,s={file:h.fromPath(r.PicUrl,"binary",G()+".png")};e.content=s;break}case"voice":{let r=t;if(r.Format.toLowerCase()!=="amr"){S.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+r.Format);break}e.type="AUDIO";let n=await this._loadMediaFile(r.MediaId,G()+".amr"),s=await me(await n.asBuffer());await s.asLocalPath();let i={file:s};e.content=i;break}case"video":{let r=t;e.type="VIDEO";let n=await this._loadMediaFile(r.MediaId,G()+".mp4"),s=await this._loadMediaFile(r.ThumbMediaId,G()+".png"),i={file:n,previewImage:s};e.content=i;break}case"link":{e.type="ARTICLE";let r=t,n={url:r.Url,title:r.Title,desc:r.Description,coverFile:h.fromPath(r.PicUrl,"binary",G()+".png")};e.content=n;break}case"location":{e.type="POSITION";let r=t,n={placeName:r.Label,placeDetail:r.Label,lon:r.Location_X,lat:r.Location_Y,mapLevel:r.Scale};e.content=n;break}case"event":{await this._processEventMessage(t,e);break}default:break}if(!e.content){S.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),S.warn(e);return}let o={id:G(),type:"CHAT_MESSAGE",message:e,source:this,me:this._me};this.event.emit(o.type,o)}async _onMessage(t){let e=t.query,{msg_signature:o,timestamp:r,nonce:n}=e;if(t.method.toLowerCase()==="get")return this._checkSignature(o,Number(r),n,e.echostr)?Uo(this._options.aesKey,e.echostr).message:(S.warn("\u6536\u5230\u975E\u6CD5GET\u8BF7\u6C42\uFF01"),S.warn(e),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");let s=t.body.xml;if(!this._checkSignature(o,Number(r),n,s.Encrypt))return S.warn("\u6536\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),S.warn(e),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01";let i=Uo(this._options.aesKey,s.Encrypt),a=new gn().parse(i.message).xml;return a.MsgType==="event"&&a.Event==="kf_msg_or_event"?this._onKfMessage(a):this._processAppMessage(a),""}async _api(t,e,o=void 0,r,n="application/json"){let s=`${this._apiHost}${t}?access_token=${this._token}`;r&&(r=new URLSearchParams(r)),r?.size>0&&(s=s+`&${r.toString()}`);let i;if(e==="get"?i=await(await fetch(s)).json():i=await(await fetch(s,{headers:{"Content-Type":n},method:e,body:JSON.stringify(o)})).json(),i.errcode!==0){S.error(i.errmsg);return}return i}async _sendAppGroupMessage(t){let e=t.toInfo[0],o=e.userId??e.userName;o?.length||(S.warn("chatid\u914D\u7F6E\u5F02\u5E38\uFF01"),S.warn(e));let r={chatid:o,safe:0};switch(t.type){case"TEXT":{r.msgtype="text";let n=t.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.text={content:n};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(t.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=t.content.file,{file:s}=await te(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=t.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s,title:n.title??G()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"FILE":{r.msgtype="file";let n=t.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{let n=t.content;if(n.coverFile||n.thumbFile){r.msgtype="news";let i=await(n.coverFile??n.thumbFile).asUrl();r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]}}else r.msgtype="textcard",r.textcard={title:n.title,description:n.desc??n.title,url:n.url??_.httpUrl,btntxt:n.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case"MUSIC":{r.msgtype="news";let n=t.content;r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);break}r.msgtype&&await this._api("/cgi-bin/appchat/send","post",r)}async _sendRobotMessage(t){let e=t.toInfo[0],o=W(e.userId??e.userName);if(!o?.startsWith("http")){S.warn("\u673A\u5668\u4EBA\u6D88\u606F\u914D\u7F6E\u7684webhook\u5730\u5740\u5F02\u5E38\uFF01"),S.warn(t);return}let n=new URLSearchParams(o.split("?")[1]).get("key"),s={};switch(t.type){case"TEXT":{s.msgtype="markdown";let i=t.content;if(!i?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}if(s.markdown={content:i},t.atList?.length){let a=[];t.atList.forEach(p=>{Ct(p)?a.push(p):s.markdown.content=s.markdown.content+` <@${p}>`}),a.length&&(s.markdown.mentioned_mobile_list=a)}break}case"IMAGE":{s.msgtype="image";let i=t.content.file,a=await i.asBuffer(),p=In(a),l=await i.asBase64();s.image={base64:l,md5:p};break}case"AUDIO":{s.msgtype="voice";let i=t.content.file,{file:a}=await te(i),p=await this._uploadRobotMediaFile(a,"voice",n);if(!p){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:p};break}case"FILE":{s.msgtype="file";let i=t.content,a=await this._uploadRobotMediaFile(i.file,"file",n);s.file={media_id:a};break}case"ARTICLE":{s.msgtype="news";let i=t.content,a=i.coverFile??i.thumbFile,p;a&&(p=await a.asUrl()),s.news={articles:[{title:i.title,description:i.desc??i.title,url:i.url,picurl:p}]};break}case"MUSIC":{s.msgtype="news";let i=t.content;s.news={articles:[{title:i.title,description:i.desc??i.title,url:i.url??await i.file.asUrl(),picurl:i.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);break}s.msgtype&&await(await fetch(o,{headers:{"Content-Type":"application/json"},method:"post",body:JSON.stringify(s)})).json()}async _sendKfMessage(t,e){let o=e?.origin?.data;o||S.warn("fromMesage\u4E2D\u6CA1\u6709origin.data\uFF0C\u65E0\u6CD5\u83B7\u77E5open_kfid\uFF01"),t.toInfo.length>1&&S.warn("\u5F53\u524D\u6D88\u606F\u6E90\u4E0D\u652F\u6301\u540C\u65F6\u53D1\u9001\u591A\u4E2A\u5BF9\u8C61\uFF0C\u5C06\u53EA\u53D1\u9001\u7B2C\u4E00\u4E2A\uFF01");let r={touser:t.toInfo[0].userId,open_kfid:o.open_kfid};switch(t.type){case"TEXT":{r.msgtype="text";let n=t.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.text={content:Z(n)};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(t.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=t.content.file,{file:s}=await te(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=t.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s};break}case"FILE":{r.msgtype="file";let n=t.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{r.msgtype="link";let n=t.content,s=n.coverFile??n.thumbFile??this._app.sharedCover,i=await this._uploadAppMediaFile(s,"image");r.link={title:n.title,desc:n.desc??n.title,url:n.url,thumb_media_id:i};break}case"MP":{r.msgtype="miniprogram";let n=t.content,s=n.cover??this._app.sharedCover,i=await this._uploadAppMediaFile(s,"image");r.miniprogram={appid:n.id,title:n.title,thumb_media_id:i,pagepath:n.openUrl??n.openRelativePath};break}case"POSITION":{r.msgtype="location";let n=t.content;r.location={name:n.placeName,address:n.placeDetail,latitude:n.lat,longitude:n.lon};break}case"CUSTOM":{t.customType==="ca_link"&&(r.msgtype="ca_link",r.ca_link={link_url:t.content});break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);break}r.msgtype&&await this._api("/cgi-bin/kf/send_msg","post",r)}async _sendAppMessage(t,e){let r={touser:t.toInfo.map(n=>n.userId).join("|"),toparty:t.origin?.toparty,totag:t.origin?.totag,agentid:this._options.agentId,safe:t.origin?.safe};switch(t.type){case"TEXT":{r.msgtype="markdown";let n=t.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.markdown={content:n};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(t.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=t.content.file,{file:s}=await te(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=t.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s,title:n.title??G()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"FILE":{r.msgtype="file";let n=t.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{let n=t.content;if(n.coverFile||n.thumbFile){r.msgtype="news";let i=await(n.coverFile??n.thumbFile).asUrl();r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]}}else r.msgtype="textcard",r.textcard={title:n.title,description:n.desc??n.title,url:n.url??_.httpUrl,btntxt:n.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case"MUSIC":{r.msgtype="news";let n=t.content;r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type);break}r.msgtype&&await this._api("/cgi-bin/message/send","post",r)}async me(t){if(this._me&&!t)return this._me;if(!this._token?.length)return{userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};let e=await this._api("/cgi-bin/agent/get","get",void 0,{agentId:this._options.agentId});if(e)return this._me={userId:this._options.agentId,userName:this._options.agentId,nickName:e.name,avatarUrl:e.square_logo_url,signature:e.description,origin:e},this._me}hasLogin(){return!!(this._options.secret&&this._token?.length||!this._options.secret||!this._options.agentId||!this._options.token)}async login(){if(!this._token){if(await this._loadToken()){let t=await this.me(),e={type:"LOGIN",user:t,id:G(),source:this,me:t};this.event.emit(e.type,e)}this._options.appChatGroups?.length&&(await this.createAppGroupChats(this._options.appChatGroups),S.info("\u7FA4\u804A\u521B\u5EFA\u5B8C\u6210\uFF0C\u5982\u679C\u63D0\u793A\u7FA4\u804A\u5DF2\u5B58\u5728\uFF0C\u53EF\u4EE5\u5FFD\u7565"))}}async sendMessage(t,e){let o=e?.origin;return t.isGroupChat||t.toInfo[0].isGroup?t.toInfo[0].app?this._sendAppGroupMessage(t):this._sendRobotMessage(t):o&&o.MsgType==="event"&&o.Event==="kf_msg_or_event"?this._sendKfMessage(t,e):this._sendAppMessage(t,e)}async getContacts(t,e=!1){return[]}async getContactDetail(t){return t}async createAppGroupChats(t){for(let e of t)await this._api("/cgi-bin/appchat/create","post",{...e,owner:e.userlist[0]})}};import yn from"emittery";import{AppType as _n,Client as xn,EventDispatcher as Sn,LoggerLevel as Zt,WSClient as Cn}from"@larksuiteoapi/node-sdk";import{v4 as ge}from"uuid";import{getWavFileInfo as bn}from"wav-file-decoder";var Ye={article:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"img",img_key:"{image_key}",preview:!0,transparent:!1,scale_type:"fit_horizontal",alt:{tag:"plain_text",content:""}},{tag:"column_set",flex_mode:"none",horizontal_spacing:"8px",horizontal_align:"left",columns:[{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{desc}",text_align:"left",text_size:"normal",icon:{tag:"standard_icon",token:"describe_outlined",color:"grey"}}],weight:3},{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{link}",text_align:"left",text_size:"normal"}],weight:1}],margin:"16px 0px 0px 0px"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue"}}},stream:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue",ud_icon:{tag:"standard_icon",token:"reply_filled"}}}},textImage:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"column_set",flex_mode:"none",columns:[{tag:"column",width:"weighted",vertical_align:"top",elements:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}],weight:1},{tag:"column",width:"auto",vertical_align:"top",elements:[{tag:"img",img_key:"{image_key}",preview:!0,scale_type:"crop_center",size:"medium",alt:{tag:"plain_text",content:""}}]}],margin:"16px 0px 0px 0px"}]},i18n_header:{}}};import{fileTypeFromBuffer as vn}from"file-type";var w=y("feishu-source"),Ze=class c{constructor(t,e){this._app=t;this._options=e;this._options.ignoreNoneUserMessage=this._options.ignoreNoneUserMessage??!0,this._options.replayTextMode=this._options.replayTextMode??"rich_text",this._options.richTextTitleTemplate=this._options.richTextTitleTemplate??"RE:{title}",this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,this._options.thinkingTips=this._options.thinkingTips??"\u6B63\u5728\u601D\u8003\u4E2D...",this._options.domain=this._options.domain??"https://open.feishu.cn",this.event=new yn}static params={name:"feishu",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App ID"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App Secret"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},verificationToken:{type:"string",title:"Verification Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Verification Token\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},encryptKey:{type:"string",title:"Encrypt Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Encrypt Key\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},domain:{type:"string",title:"Domain","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://open.feishu.cn"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://open.feishu.cn"},default:"https://open.feishu.cn"},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4 (\u79D2)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60*60,placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},default:24*60*60},contactDepartId:{type:"string",title:"\u8054\u7CFB\u4EBA\u5217\u8868 ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u5217\u8868 ID\uFF0C\u9ED8\u8BA4\u4F7F\u7528\u8DDF\u5217\u8868\u3002"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u5217\u8868\u7684 ID\uFF0C\u5982\u679C\u4EE5 od- \u5F00\u5934\u8868\u793A\u98DE\u4E66\u81EA\u52A8\u751F\u6210\u7684\u5F00\u653E ID\uFF0C\u5426\u5219\u4E3A\u81EA\u5B9A\u4E49 ID"}},ignoreNoneUserMessage:{type:"boolean",title:"\u5FFD\u7565\u975E\u7528\u6237\u6D88\u606F","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5FFD\u7565\u975E\u7528\u6237\u53D1\u9001\u7684\u6D88\u606F\uFF0C\u9ED8\u8BA4 true"},default:!0},replayTextMode:{type:"string",enum:[{label:"\u666E\u901A\u56DE\u590D",value:"text"},{label:"\u56FE\u6587\u6DF7\u6392",value:"rich_text"},{label:"\u6D41\u5F0F\u56DE\u590D",value:"stream"}],title:"\u6D88\u606F\u56DE\u590D\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6D88\u606F\u56DE\u590D\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6D88\u606F\u7684\u56DE\u590D\u65B9\u5F0F\uFF0C\u9ED8\u8BA4\u4F7F\u7528 \u666E\u901A\u56DE\u590D \u6A21\u5F0F\u3002\u56DE\u590D\u65F6\uFF0C\u5982\u679C\u6709\u8BED\u97F3\u5C06\u4F1A\u5355\u72EC\u53D1\u9001\u3002"},default:"text"},cardId:{type:"string",title:"\u5361\u7247\u6A21\u677F ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5361\u7247\u6A21\u677F ID\uFF08\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u914D\u7F6E\u4E3A\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u53EF\u63D0\u4F9B\u81EA\u5B9A\u4E49\u5361\u7247 ID\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F"}},richTextTitle:{type:"boolean",title:"\u542F\u7528\u56FE\u6587\u6DF7\u6392\u6807\u9898","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u5F53\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u56DE\u590D\u65F6\uFF0C\u662F\u5426\u542F\u7528\u6807\u9898\uFF0C\u9ED8\u8BA4 false\u3002\u9700\u8BBE\u7F6E\u4E3A\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u624D\u751F\u6548\u3002"},default:!1},richTextTitleTemplate:{type:"string",title:"\u56FE\u6587\u6DF7\u6392\u6807\u9898\u6A21\u677F","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"RE:{title}"},"x-decorator-props":{tooltip:"\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u6807\u9898\u6A21\u677F\uFF0C\u9ED8\u8BA4\u662F RE:{title} \uFF0C\u5176\u4E2Dtitle\u662F\u6839\u636E\u6A21\u578B\u56DE\u590D\u5185\u5BB9\u751F\u6210\u7684\u6807\u9898\u3002\u9700\u5F00\u542F\u6807\u9898\u624D\u751F\u6548\u3002"},default:"RE:{title}"},thinkingTips:{type:"string",title:"\u601D\u8003\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u601D\u8003\u63D0\u793A\u8BED\uFF0C\u5982 \u6B63\u5728\u601D\u8003\u4E2D..."},"x-decorator-props":{tooltip:"\u542F\u7528\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u6B63\u5728\u601D\u8003\u7684\u63D0\u793A\u8BED\uFF0C\u9ED8\u8BA4\u662F\u201C\u6B63\u5728\u601D\u8003\u4E2D...\u201D"}},wavChannel:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u901A\u9053\u6570","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[{value:1},{value:2}],default:1},wavSampleRate:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u91C7\u6837\u7387","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],default:16e3}}}},eventNames:["CHAT_MESSAGE","LOGIN"],desc:"\u98DE\u4E66\u5E94\u7528"};_me;_client;_wsClient;_connected;_departCache;_userCache;_trackIdCache={};get params(){return c.params}get options(){return this._options}get actions(){return[]}event;_getResourceFile(t,e,o,r){let n=async()=>{let s=await this._client.im.messageResource.get({params:{type:o},path:{file_key:e,message_id:t}}),i=await wo(s.getReadableStream());if(!r){let a=await vn(i);r=ge()+"."+a.ext}return{data:i,type:"buffer",name:r}};return new h(n,"binary")}async _getRichTextContent(t,e){let o={title:e.title,content:[]};return e.content.forEach(r=>{r.forEach(n=>{switch(n.tag){case"text":o.content.push({type:"text",data:n.text});break;case"a":o.content.push({type:"text",data:n.text});break;case"code_block":o.content.push({type:"text",data:n.text+`(\u4EE3\u7801\u8BED\u8A00\uFF1A${n.language})`});break;case"emotion":{o.content.push({type:"text",data:n.emoji_type});break}case"img":{o.content.push({data:{file:this._getResourceFile(t,n.image_key,"image")},type:"image"});break}case"media":{let s=n;s.image_key?.length&&o.content.push({data:{file:this._getResourceFile(t,s.image_key,"file")},type:"image"});break}default:w.debug("\u65E0\u9700\u5904\u7406\u7684\u5BCC\u6587\u672Ctag\uFF1A"+n.tag);break}})}),o}async _processChatMessage(t,e,o){switch(t){case"text":{let r=e;o.type="TEXT";let n=r.text;o.atList?.length&&o.origin.mentions.forEach(s=>{n=n.replaceAll(s.key,"")}),o.content=n.trim();break}case"post":{o.type="RICH_TEXT",o.content=await this._getRichTextContent(o.messageId,e);break}case"image":{o.type="IMAGE";let r={file:this._getResourceFile(o.messageId,e.image_key,"image")};o.content=r;break}case"file":{o.type="FILE";let r=e,n={file:this._getResourceFile(o.messageId,r.file_key,"file",r.file_name),title:r.file_name};o.content=n;break}case"audio":{o.type="AUDIO";let r=e,n=ge()+".opus",s=this._getResourceFile(o.messageId,r.file_key,"file",n),a={file:await ke(s,"wav",p=>(this._options.wavChannel&&(w.trace("custom wav channel "+this._options.wavChannel),p.withAudioChannels(this._options.wavChannel)),this._options.wavSampleRate&&(w.trace("custom wav sample rate "+this._options.wavSampleRate),p.withAudioFrequency(this._options.wavSampleRate)),p))};o.content=a;break}case"media":{o.type="VIDEO";let r=e,n=this._getResourceFile(o.messageId,r.file_key,"file",ge()+r.file_name),s=r.image_key.length&&this._getResourceFile(o.messageId,r.image_key,"image"),i={file:n,previewImage:s};o.content=i;break}case"interactive":{let r=e,n={content:[],title:r.title};r.elements.forEach(s=>{s.forEach(i=>{i.elements.length?i.elements.forEach(a=>{a.tag==="text"?n.content.push({type:"text",data:a.text}):a.tag==="img"&&n.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,a.image_key,"image")}})}):i.tag==="text"?n.content.push({type:"text",data:i.text}):i.tag==="img"&&n.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,i.image_key,"image")}})})});break}case"hongbao":{o.type="TEXT",o.content="\u6211\u6536\u5230\u4E00\u4E2A\u7EA2\u5305";break}case"calendar":case"general_calendar":case"share_calendar_event":{o.type="TEXT";let r=e;o.content=JSON.stringify({content:"\u6211\u6536\u5230\u4E00\u4E2A\u65E5\u7A0B\u5206\u4EAB\u4FE1\u606F",data:r});break}case"share_chat":{let r=e,n=await this._client.im.chat.get({path:{chat_id:r.chat_id}});o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u7FA4\u7EC4\u5206\u4EAB",data:n.data});break}case"share_user":{let r=e,n=this._userCache.get(r.user_id);if(!n)w.warn("\u5F53\u524D\u5206\u4EAB\u6765\u7684\u7528\u6237\u4E0D\u5728\u7F13\u5B58\u4E2D\uFF0C\u4E0D\u5904\u7406\uFF01");else{o.type="CONTACT_CARD";let s={display:n.nickName??n.userId,smallImageUrl:n.avatarUrl,bigImageUrl:n.bigAvatarUrl,custom:n};o.content=s}break}case"system":{let r=e;o.type="SYSTEM";let n={data:r};o.content=n;break}case"location":{let r=e;o.type="POSITION";let n={placeName:r.name,placeDetail:r.name,lon:Number(r.longitude),lat:Number(r.latitude)};o.content=n;break}case"video_chat":{let r=e;o.type="PHONE";let n={title:r.topic,time:new Date(Number(r.start_time))};o.content=n;break}case"todo":{let r=e;o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u5F85\u529E\u6D88\u606F",data:r});break}case"vote":{let r=e;o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u6295\u7968\u6D88\u606F",data:r});break}default:w.info("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t);return}return o}async _handleChatMessage(t){return this._wsClient.start({eventDispatcher:new Sn({verificationToken:this._options.verificationToken,encryptKey:this._options.encryptKey,loggerLevel:t}).register({"im.message.receive_v1":async e=>{if(e.sender.sender_type!=="user"&&(w.debug("\u6536\u5230\u6765\u81EA\u975E\u7528\u6237\u7684\u4FE1\u606F\uFF01"),this._options.ignoreNoneUserMessage))return;let o=e.sender.sender_id.open_id,r=this._userCache.get(o);r||(w.warn("\u672A\u80FD\u83B7\u53D6\u5230\u5F53\u524D\u53D1\u9001\u6D88\u606F\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F\uFF01"),r={userId:o,userName:o,nickName:o});let n={time:new Date(Number(e.message.create_time)),senderId:e.sender.sender_id.open_id,fromId:e.message.chat_id,isGroupChat:e.message.chat_type==="group",isSender:!1,senderName:r.userName,senderInfo:r,toInfo:[this._me],origin:e.message,messageId:e.message.message_id,type:void 0,content:void 0};if(n.isGroupChat){let s=n;if(s.groupInfo={userId:e.message.chat_id,userName:e.message.chat_id,nickName:e.message.chat_id},e.message.mentions?.length){let i=e.message.mentions.map(a=>a.id.open_id);s.atList=i}}w.debug(e);try{this._processChatMessage(e.message.message_type,JSON.parse(e.message.content),n).then(async s=>{if(!s.content){w.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F");return}if(e.message.parent_id){let a=await this._client.im.message.get({path:{message_id:e.message.parent_id},params:{user_id_type:"open_id"}});if(a.data?.items?.[0].body?.content.length){let p=a.data.items[0],l={time:new Date(Number(p.create_time)),senderId:p.sender.id,fromId:e.message.chat_id,isGroupChat:e.message.chat_type==="group",isSender:!1,senderName:p.sender.id,senderInfo:{userId:p.sender.id,userName:p.sender.id,nickName:p.sender.id},origin:p,messageId:e.message.parent_id,type:void 0,content:void 0,toInfo:[this._me]};if(s.isGroupChat){let u=s;u.groupInfo={userId:e.message.chat_id,userName:e.message.chat_id,nickName:e.message.chat_id}}let m=JSON.parse(a.data.items[0].body?.content);await this._processChatMessage(a.data.items[0].msg_type,m,l),w.debug("ref message content "+a.data.items[0].body?.content),l.content?(s.type="REF",s.content={text:s.content,refMessage:l}):w.debug("\u6682\u4E0D\u652F\u6301\u7684\u5F15\u7528\u6D88\u606F\u5185\u5BB9")}}w.trace("begin send feishu message event");let i={id:ge(),type:"CHAT_MESSAGE",message:s,source:this,me:this._me};w.trace("listener count "+this.event.listenerCount()),this.event.emit(i.type,i)})}catch(s){w.error(s.message)}return""},"im.chat.access_event.bot_p2p_chat_entered_v1":async()=>""})})}async _getDepartList(t){let e=await this._client.contact.department.listWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",parent_department_id:t,page_size:50,fetch_child:!0}}),o=[];for await(let r of e)for(let n of r.items){let s={userId:n.open_department_id,userName:n.department_id,nickName:n.name,origin:n,isGroup:!0};o.push(s),this._departCache.set(s.userId,s)}return o}async _getDepartUsers(t){let e=await this._client.contact.user.findByDepartmentWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",department_id:t,page_size:50}}),o=[];for await(let r of e)for(let n of r.items){let s={...n},i={userId:s.open_id,userName:s.user_id?.length>0?s.user_id:s.open_id,nickName:s.name??s.open_id,avatarUrl:s.avatar?.avatar_240,bigAvatarUrl:s.avatar?.avatar_origin,signature:s.nickname,origin:s};o.push(i),delete s.department_path,this._userCache.set(i.userId,i)}return o}async _uploadImage(t){return(await this._client.im.image.create({data:{image_type:"message",image:await t.asReadStream()}})).image_key}async _uploadFile(t,e,o,r){let n={data:{file_type:e,file_name:o??t.name,file:await t.asReadStream()}};return e==="opus"&&r&&(n.data.duration=r),(await this._client.im.file.create(n)).file_key}async _getSimpleLinkContent(t,e,o,r){let n,s;return r?(n="interactive",s=JSON.stringify(Ye.article).replace("{title}",t).replace("{desc}",o??"").replace("{image_key}",await this._uploadImage(r)).replaceAll("{link}",`[\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5](${e})`)):o?.length?(n="post",s={zh_cn:{title:t??"\u94FE\u63A5",content:[[{tag:"md",text:o},{tag:"a",text:"\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5",href:e}]]}}):(n="text",s={text:`[${t??"\u70B9\u51FB\u6B64\u94FE\u63A5\u67E5\u770B\u8BE6\u60C5"}](${e})`}),{msgType:n,content:s}}async _getSendMessageContent(t,e){let o,r,n=t.atList??[],s=this._options.replayTextMode;switch(t.type){case"TEXT":{let i=t.content;if(!i?.trim().length){w.debug("\u7A7A\u5B57\u7B26\u4E32\uFF0C\u4E0D\u53D1\u9001");return}if(s==="stream"&&e?.origin.trackId?.length){o="interactive";let p=e.origin.trackId;i=(this._trackIdCache[p]??"")+i;let l=we(i,!0);for(let g of l){let d=h.fromPath(g,"binary",ge()+".png");await d.asLocalPath();let I=await this._uploadImage(d);i=i.replace(g,I)}this._trackIdCache[p]=i;let m=(typeof e?.content=="string"?e.content.length>10?e.content.slice(0,10)+"...":e.content:t.toInfo[0].nickName)??"";n.length&&n.forEach(g=>{i=i+`<at id=${g}></at>`});let u={title:m,content:i};this._options.cardId?.length?r={type:"template",data:{template_id:this._options.cardId,template_variable:u}}:r=JSON.stringify(Ye.stream).replace("{title}",u.title).replace("{content}",u.content);break}let a=[];if(s==="rich_text"){o="post";let p=vo(i);for(let l of p){let m=we(l,!0)?.[0];if(!m?.length)continue;let u=i.split(l),g={tag:"md",text:u[0]};a.push(g);let d=h.fromPath(m,"binary",ge()+".png");await d.asLocalPath();let f={tag:"img",image_key:await this._uploadImage(d)};a.push(f),u.length>1?i=u[1]:i=""}if(i?.trim().length){let l={tag:"md",text:i};a.push(l)}if(t.atList?.length&&t.atList.forEach(l=>{a.push({tag:"at",user_id:l})}),r={zh_cn:{title:"",content:[a]}},this._options.richTextTitle&&this._options.richTextTitleTemplate?.length){let l=typeof e?.content=="string"?e.content.length>10?e.content.slice(0,10)+"...":e.content:t.toInfo[0].nickName;r.zh_cn.title=this._options.richTextTitleTemplate.replaceAll("{title}",l)}}else{o="text";let p=/!\[([^]*?)\]\((.*?)\)/g;i=i.replace(p,"[$1]($2)"),n.length&&n.forEach(l=>{i=i+`<at user_id="${l}"></at>`}),r={text:i}}break}case"EMOTION":case"IMAGE":{o="image",r={image_key:await this._uploadImage(t.content.file)};break}case"AUDIO":{o="audio";let i=t.content.file,a=bn((await i.asBuffer()).buffer),p=parseInt(a.chunkInfo[1].dataLength/a.fmt.bytesPerSec*1e3),l=await ke(i,"opus");r={file_key:await this._uploadFile(l,"opus",void 0,p)};break}case"VIDEO":{o="media";let i=t.content;r={file_key:await this._uploadFile(i.file,"mp4",i.title),image_key:i.previewImage?await this._uploadImage(i.previewImage):void 0};break}case"FILE":{o="file";let i=t.content,a=i.title??i.file.name,p=a.slice(a.lastIndexOf(".")+1);["ppt","xls","doc","pdf"].indexOf(p)<0&&(p="stream"),r={file_key:await this._uploadFile(i.file,p,a)};break}case"ARTICLE":{let i=t.content,a=await this._getSimpleLinkContent(i.title,i.url,i.desc,i.coverFile);o=a.msgType,r=a.content;break}case"POSITION":{let i=t.content;o="text",r={text:`\u5730\u540D:${i.placeName}
9
+ `}else t.type==="at"?e+=`@${t.data}`:A.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return e}function Lo(p,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`chat message[id:${p.messageId}] from user id:${p.senderId},name:${p.senderName},nick:${p.senderInfo?.nickName} of source${t} ${p.isGroupChat?"[group id]":"[user id]"}:${p.fromId} with content:${typeof p.content=="string"?p.content:"none text content[type:"+p.type+"]"}`}function Uo(p,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`send message[id:${p.messageId}] to user(s): [${p.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${t} ${p.isGroupChat?"[group id]":"[user id]"}:${p.fromId} with content:${typeof p.content=="string"?p.content:"none text content[type:"+p.type+"]"}`}function $o(p){return{type:"formily",formily:{type:"object",properties:p}}}function To(p,e){return e.type==="startsWith"&&!p.startsWith(e.content)||e.type==="contains"&&p.indexOf(e.content)<0?!1:e.type==="in"?e.content.indexOf(p)<0:p.match(e.content)!==null}async function eo(p){return new Promise(e=>{setTimeout(()=>{e()},p)})}function ge(p,e){if(A.trace("check rule "+p.instanceName),(e.message.type==="TEXT"||e.message.type==="REF")&&e.message.isGroupChat&&p.respondTo){let t=!1;p.respondTo.at&&e.message.atList?.indexOf(e.me[e.source.params.fieldInAtList??"userId"])>=0&&(t=!0);let o=!1,r=((typeof e.message.content=="string"?e.message.content:e.message.content.text)??"").trim();r.length&&p.respondTo.names?.find(s=>r.startsWith(s))&&(o=!0);let n=!1;if(p.respondTo.refered&&e.message.type==="REF"&&e.message.content.refMessage?.senderId===e.me.userId&&(n=!0),!t&&!o&&!n)return A.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),A.debug("at: "+t+";name: "+o+";content: "+n),!1}if(p.messageTypes?.length&&p.messageTypes.indexOf("ALL")<0&&p.messageTypes.indexOf(e.message.type)<0)return A.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+e.message.type),!1;if(e.message.isGroupChat){let t=e.message;if(p.groupMode==="deny")return A.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(p.groupNameRule){let o=t.groupInfo?.nickName??t.groupInfo?.userName??t.groupInfo?.userId??t.fromId,r=To(o,p.groupNameRule);if(p.groupMode==="blacklist"&&r)return A.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(p.groupMode==="whitelist"&&!r)return A.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!e.message.isGroupChat||p.checkUserInGroup){if(p.userMode==="blacklist"&&p.fromUserNames?.length&&p.fromUserNames.indexOf(e.message.senderName??e.message.senderId)>=0)return!1;if(p.userMode!=="all"&&p.fromUserNames?.length&&p.fromUserNames.indexOf(e.message.senderName??e.message.senderId)<0)return!1}if(p.contentFilter&&p.contentFilter.content?.length&&(typeof e.message.content=="string"||typeof e.message.content.text=="string")){let t=typeof e.message.content=="string"?e.message.content:e.message.content.text;if(!To(t,p.contentFilter))return!1}return A.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}async function to(p,e,t,o=!0){t=t??"latest";let r;if(o){let n=await fetch(`${e}/${p}/${t}`);if(n.status!==200)throw new Error(`\u540D\u4E3A ${p} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);if(r=await n.json(),!r.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${p} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`)}return new Promise((n,s)=>{let i=`pnpm add ${p}@${t} ${e?.length?"--registry="+e:""}`;A.debug("RUN "+i),Po(i,(a,c,l)=>{if(a||l&&!l.startsWith("Debug")){A.warn(String(a??l)),s(a);return}A.info(c),n(r)})})}function jo(p){return{author:p.author,homepage:p.homepage,keywords:p.keywords?.join(","),repo:p.repository?.url?.replace(/^git\+/,""),version:p.version,name:p.name,desc:p.description}}async function qo(p,e,t){t=t??h.npmRegistry;let o=await to(p,t,e);return jo(o)}async function Ho(p){let e=await import(`${p}/package.json`);if(!e){A.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+p+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((t,o)=>{let r=`pnpm remove ${p}`;A.debug("RUN "+r),Po(r,{timeout:h.npmTimeout,windowsHide:!0},(n,s,i)=>{if(n||i&&!i.startsWith("Debug")){A.warn(String(n??i)),o(n);return}A.info(s),t(jo(e))})})}function Pt(p){let e=process.env[p];if(e){let t=Number(e);return isNaN(t)?void 0:t}}function Mt(p){return(typeof p=="string"?p:p.text)?.trim()??""}var Ot=f("async-file"),_=class p{constructor(e,t){this.loader=e;this.format=t}tempDir="temp";buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded=!1;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let e=await this.loader();await this.setSource(e)}async setSource({data:e,type:t,name:o,textEncoding:r}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!e||!t)throw new Error("can't initialize async file!");if(t==="buffer")this.buffer=e;else if(t==="base64")this.base64=e;else if(t==="path")this.path=e;else if(t==="text")this.text=e;else throw new Error("erro file type:"+t);this._name||(this._name=o??Rr(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=r}async loadBufferFromPath(e){if(e.startsWith("http"))try{let t=await(await fetch(e)).arrayBuffer();return Pe.from(t)}catch{return Ot.debug("retry to get file "+e),new Promise(t=>{setTimeout(async()=>{let o=await(await fetch(e)).arrayBuffer();t(Pe.from(o))},1e3)})}return new Promise((t,o)=>{Or(e,(r,n)=>{if(r){o(r);return}t(n)})})}async saveFile(e){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),e||(this._name=await Bo(t,this._name))),new Promise((o,r)=>{try{let n=e??X.join(h.publicPath,this.tempDir,this._name),s=Nr(n);Go(s)||Ko(s,{recursive:!0}),Fr(n,t,()=>{o(X.resolve(n))})}catch(n){r(n)}})}saveAs(e,t,o,r){(!e?.length||!t?.length)&&Ot.warn("dir\u548Cbucket\u4E0D\u80FD\u4E3A\u7A7A\uFF01");let n=X.join(e,t);return Go(n)||Ko(n,{recursive:!0}),n=X.join(n,o??this._name),this.saveFile(n).then(()=>{r?.()}),n}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Pe.from(this.text,this.textEncoding):Pe.from(this.text);else if(this.base64)this.buffer=Pe.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{Ot.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let e=await this.asBuffer();return this.base64=e.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let e=await this.asBuffer();if(!e){Ot.warn("load file as buffer failed!");return}return this.text=this.textEncoding?e.toString(this.textEncoding):e.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let e;return this.path&&!this.path.startsWith("http")&&X.dirname(X.resolve(this.path))===X.dirname(X.join(h.publicPath,`${this.tempDir}/`))?e=X.resolve(this.path):e=await this.saveFile(),this.url=h.httpUrl+`${h.publicPathName}/${this.tempDir}/${X.basename(e)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let e=await this.asLocalPath();return Mr(e)}async info(){if(this._info)return this._info;let e=await this.asLocalPath();return new Promise((t,o)=>{Er(e,(r,n)=>{r?o(r):t(n)})})}isAsyncFile(){return!0}toString(){return this.name}static fromPath(e,t="binary",o,r){let n=o??X.basename(e);n.indexOf("?")>0&&(n=n.split("?")[0]);let s=async()=>({data:e,type:"path",name:n,textEncoding:r}),i=new p(s,t);return i._name=n,i}static fromBuffer(e,t,o="binary",r){let n=async()=>({data:e,type:"buffer",name:t,textEncoding:r}),s=new p(n,o);return s._name=t,s}};import{isWav as Lr}from"silk-wasm";var Et=class p{constructor(e){this.options=e;this.options={...p.DefaultOptions,...e}}static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};messages=[];wordsCount=0;addMessage(e,t){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:e,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let r=(typeof t=="string"?t:t?.text)?.trim();if(r?.length&&(this.wordsCount+=r.length,o.wordsCount=r.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let n=this.messages.shift();if(this.wordsCount-=n.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let e=new Date().getTime(),t=-1;for(let o=0;o<this.messages.length;o++){let r=this.messages[o];if(r.expiresAt>e){t=o;break}else this.wordsCount-=r.wordsCount}return t>0&&(this.messages=this.messages.splice(0,t)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import Br from"emittery";var Ft=class extends Br{_queue=Promise.resolve();_logger=f("sorted-promise");add(e){let t=this._queue.then(()=>e);return this._queue=t.catch(o=>{this._logger.error(o.message)}),t}};import{v4 as oo}from"uuid";var Se=class extends Dr{constructor(t,o){super();this.app=t;this._options=o;if(!o.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!o.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=f(o.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=o.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u540E\u7AEF\u6A21\u578B\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u89C4\u5219\u5217\u8868",items:{type:"void","x-component":"Space",properties:{input:{type:"object","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
10
+ \u5982\u679C\u540E\u7AEF\u58F0\u660E\u4E86\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\uFF08\u5982dify\uFF0Ccoze\u7B49\uFF09\uFF0C\u5219\u6B64\u529F\u80FD\u5931\u6548\uFF0C\u6B64\u65F6\u65E0\u9700\u5F00\u542F\uFF0C\u5426\u5219\u4F1A\u6D6A\u8D39\u5185\u5B58\u3002`}},historyOptions:{type:"object",title:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u914D\u7F6E","x-decorator":"FormItem",properties:{expireInSeconds:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:300,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002"}},maxWordsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u4E2A\u5B57\u7B26","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:10240,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002\u4EC5\u5BF9\u6587\u672C\u7C7B\u6D88\u606F\u6709\u6548\u3002"}},maxItemsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u6761\u8BB0\u5F55\uFF08\u5355\u4E2A\u5BF9\u8BDD\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:3},default:30,"x-decorator-props":{tooltip:"\u8D85\u8FC7\u7684\u8BB0\u5F55\u4F1A\u88AB\u8986\u76D6\uFF0C\u9ED8\u8BA430\u6761\u3002\u540C\u4E00\u4E2A\u7FA4\u91CC\u9762\u7684\u804A\u5929\u89C6\u4E3A\u5355\u4E2A\u5BF9\u8BDD\u3002"}}}},sendMode:{type:"string",enum:[{label:"\u76F4\u63A5\u53D1\u9001",value:"now"},{label:"\u6392\u961F\u53D1\u9001\uFF08\u63A8\u8350\uFF09",value:"queue"}],title:"\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"queue","x-decorator-props":{tooltip:"\u53D1\u9001\u6A21\u5F0F\uFF0Cnow\u662F\u6240\u6709\u6D88\u606F\u90FD\u9ED8\u8BA4\u7ACB\u5373\u53D1\u9001\uFF08\u5F53\u4F7F\u7528\u6280\u80FD\u65F6\uFF0C\u4E0D\u540C\u6587\u5B57\u5904\u7406\u7684\u987A\u5E8F\u53EF\u80FD\u4E0D\u540C\uFF0C\u6709\u53EF\u80FD\u5BFC\u81F4\u56DE\u590D\u4E71\u5E8F\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6392\u961F\u53D1\u9001\uFF09\uFF0Cqueue\u662F\u52A0\u5165\u53D1\u9001\u961F\u5217\uFF0C\u786E\u4FDD\u6309\u7167\u540E\u7AEF\u8F93\u51FA\u987A\u5E8F\u8FDB\u884C\u56DE\u590D\uFF0C\u540C\u65F6\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E\u961F\u5217\u95F4\u9694\u6765\u63A7\u5236\u53D1\u9001\u901F\u5EA6\uFF0C\u907F\u514D\u89E6\u53D1\u98CE\u63A7\u3002"}},minSendInterval:{type:"number",title:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:1e3,"x-decorator-props":{tooltip:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2\u3002\u9632\u6B62\u53D1\u9001\u8FC7\u5FEB\u88AB\u8BC6\u522B\u4E3A\u5783\u573E\u6D88\u606F\u3002\u9ED8\u8BA4\u4E3A1000\u3002\u9700\u8981\u53D1\u9001\u6A21\u5F0F\u4E3A\u961F\u5217\uFF08queue\uFF09"}},timeoutInSeconds:{type:"number",title:"\u4F1A\u8BDD\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:20,max:3600},default:60,"x-decorator-props":{tooltip:"\u5355\u4E2A\u4F1A\u8BDD\uFF08\u63D0\u95EE\uFF09\u7B49\u5F85\u7684\u6700\u957F\u65F6\u95F4\uFF0C\u9ED8\u8BA460\u79D2\u3002\u7531\u4E8E\u5927\u90E8\u5206\u667A\u80FD\u4F53\u4E3A\u4E86\u7EF4\u6301\u8FDE\u7EED\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u652F\u6301\u5728\u540C\u4E00\u4E2A\u4E0A\u4E0B\u6587\u4E2D\u540C\u65F6\u6FC0\u6D3B\u591A\u4E2A\u5BF9\u8BDD\uFF0C\u56E0\u6B64\u7CFB\u7EDF\u5728\u51FA\u73B0\u540C\u4E00\u4E2A\u7528\u6237\uFF08\u7FA4\u7EC4\uFF09\u5728\u4E0A\u4E00\u4E2A\u95EE\u9898\u672A\u5B8C\u6210\u7EE7\u7EED\u63D0\u95EE\u65F6\uFF0C\u4F1A\u52A0\u5165\u961F\u5217\u7B49\u5F85\u3002\u8D85\u65F6\u540E\u5C06\u4E0D\u518D\u7B49\u5F85\uFF0C\u76F4\u63A5\u6267\u884C\u4E0B\u4E00\u4E2A\u63D0\u95EE\u3002"}},checkWavAudio:{type:"boolean",title:"\u68C0\u6D4B\u56DE\u590D\u7684\u97F3\u9891\u4E3Awav\u683C\u5F0F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!0,"x-decorator-props":{tooltip:"wav\u662F\u7CFB\u7EDF\u5185\u90E8\u9ED8\u8BA4\u7684\u8BED\u97F3\u683C\u5F0F\uFF0C\u5EFA\u8BAE\u5F00\u542F\uFF0C\u907F\u514D\u540E\u7AEF\u5904\u7406\u65F6\u629B\u51FA\u5F02\u5E38\u3002\u5982\u679C\u6CA1\u6709\u4F7F\u7528\u8BED\u97F3\u6280\u80FD\u53EF\u4EE5\u5173\u95ED\uFF0C\u5F00\u542F\u4E5F\u4E0D\u5F71\u54CD\u6027\u80FD\u3002"}},fallbackAnswer:{type:"string",title:"\u515C\u5E95\u56DE\u590D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u515C\u5E95\u56DE\u590D\u5185\u5BB9"},"x-decorator-props":{tooltip:"\u5F53\u5339\u914D\u5230\u89C4\u5219\uFF0C\u4F46\u662Fbot\u65E0\u6CD5\u56DE\u590D\u7684\u65F6\u5019\u89E6\u53D1\u8BE5\u56DE\u590D\u3002\u5982\u679C\u4E0D\u8BBE\u7F6E\uFF0C\u5219\u4E0D\u56DE\u590D\u3002\u5982\u679C\u6D88\u606F\u88AB\u6280\u80FD\u53D6\u6D88\u56DE\u590D\uFF0C\u4E0D\u4F1A\u89E6\u53D1\u8BE5\u56DE\u590D\u3002"},default:"\u{1F979}\uFF0C\u6211\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u6D88\u606F\u7C7B\u578B\u5462\uFF01"},multiActiveChatInConversationMode:{type:"string",enum:[{label:"\u6392\u961F\u5904\u7406\uFF0C\u4E0D\u63D0\u9192",value:"pool"},{label:"\u63D0\u9192\u540E\u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u5904\u7406",value:"tips"},{label:"\u63D0\u9192\u540E\u6392\u961F\u5904\u7406",value:"pool_tips"}],title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u5904\u7406\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"pool_tips","x-decorator-props":{tooltip:"\u5982\u679C\u4E00\u4E2A\u7528\u6237\u540C\u65F6\u5728\u4E00\u4E2Abot\u8FD8\u6CA1\u6709\u56DE\u7B54\u7ED3\u675F\u65F6\u53C8\u63D0\u95EE\uFF0C\u4E14bot\u4E0D\u652F\u6301\u4E00\u4E2A\u4F1A\u8BDD\u4E2D\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF08\u57FA\u672C\u90FD\u4E0D\u652F\u6301\uFF0C\u5982dify\uFF0Ccoze\uFF09\uFF0C\u8981\u91C7\u53D6\u7684\u63AA\u65BD\uFF0Cpool\u662F\u76F4\u63A5\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u7B49\u4E0A\u4E00\u8F6E\u56DE\u590D\u7ED3\u675F\u540E\u7EE7\u7EED\u5904\u7406\uFF0C\u4E0D\u8F93\u51FA\u63D0\u793A\uFF1Btips\u662F\u7ED9\u51FA\u63D0\u793A\u4E0D\u63D0\u4EA4\u5230\u540E\u7AEF\u76F4\u63A5\u8FD4\u56DE\uFF1Bpool_tips\u662F\u653E\u5165\u7B49\u5F85\u533A\u4E14\u7ED9\u51FA\u63D0\u793A\u3002"}},multiActiveChatInConversationTips:{type:"string",title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF08\u4E0D\u6E05\u695A\u8BF7\u7559\u7A7A\uFF09"},"x-decorator-props":{tooltip:"\u51FA\u73B0\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF0C\u8F93\u51FA\u7684\u56DE\u590D\u3002\u5F53\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u6A21\u5F0F\u914D\u7F6E\u4E3A\u53D1\u9001\u63D0\u793A\u65F6\uFF08tips\u6216\u8005pool_tips\uFF09\u624D\u4F1A\u751F\u6548\u3002"},default:""},sendErrorLog:{type:"boolean",title:"\u53D1\u9001\u5F02\u5E38\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u53D1\u9001\u6D88\u606F\u5904\u7406\u5F02\u5E38\u7684\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF\uFF0C\u9ED8\u8BA4false"}}}}}};_initialized=!1;_logger;_responseRule;_skillRules;_textEndId=oo();_historyManagers={};_sendMessagePool=new Map;_sourceMessagePool=new Map;get options(){return this._options}get name(){return this._options.instanceName}async sendMessage(t,o,r=!1,n){if(this._options.sendMode==="queue"&&!r){let a=this._sendMessagePool.size===0,c=o.options.instanceName;this._sendMessagePool.has(c)||this._sendMessagePool.set(c,[]),this._sendMessagePool.get(c).push({message:t,to:o,fromMessage:n}),a&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval);return}if(t.type==="AUDIO"){this._logger.trace("audio message,check format");let a=t.content.file;if(this._options.checkWavAudio&&!Lr(await a.asBuffer()))return this._logger.warn("\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"),"\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"}if(t.type==="TEXT"&&t.content===this._textEndId){o.afterSend(n);return}let s=[];if(t.type==="TEXT"&&this._options.splitImageFromBotText){let a=t.content,c=Ae(a);if(c?.length)for(let l of c){let m={...t},u={file:_.fromPath(l,"binary",oo()+".png")};m.content=u,m.type="IMAGE",s.push(o.sendMessage(m,n)),this._options.removeImageAfterSplit&&(t.content=a.replace(l,"[\u56FE\u7247\u7A0D\u540E\u53D1\u9001]")),this._logger.trace("image extracted from url:"+l)}}let i=await o.sendMessage(t,n);return await Promise.allSettled(s),this._logger.debug(`message sent to ${t.toInfo[0].nickName??t.toInfo[0].userId} with channel ${o.options.instanceName}`),this._logger.trace(Uo(t,o)),i}async dispose(){for(let t of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(t);o&&(o.event.off("CHAT_MESSAGE",this.processChatMessage),o.event.off("SELF_SEND",this.onSelfChatMessage))}}processChatMessage=async t=>{this._logger.trace("message received"),this._logger.trace(Lo(t.message,t.source));let o,r;try{if(!ge(this._responseRule,t)){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u5728"+this._options.instanceName+"\u56DE\u590D\u7684\u6761\u4EF6\u5185");return}let n=this.app.botManager.getInstance(this._responseRule.instanceName);if(!n){this._logger.warn("\u540D\u4E3A"+this._responseRule.instanceName+"\u7684\u673A\u5668\u4EBA\u5B9E\u4F8B\u4E0D\u5B58\u5728\uFF01");return}if(o=this._wrapEventWithChatReply(t),r=o.source.options.instanceName+"-"+o.message.fromId,!n.params.allowMultiActiveChat)if(this._sourceMessagePool.get(r)?.busy){if(this._options.multiActiveChatInConversationMode==="tips"){o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u540C\u4E00\u4E2A\u540E\u7AEF\u670D\u52A1\u4E0D\u5141\u8BB8\u591A\u4E2A\u6D3B\u52A8\u4E2D\u7684\u5BF9\u8BDD\uFF0C\u8FD4\u56DEtips\uFF1A"+this._options.multiActiveChatInConversationTips);return}this._sourceMessagePool.get(r).pool.push(o),this._options.multiActiveChatInConversationMode==="pool_tips"&&o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u5F53\u524D\u7528\u6237\u5B58\u5728\u6B63\u5728\u6267\u884C\u7684\u4F1A\u8BDD\uFF0C\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u5F85\u6267\u884C\u5B8C\u540E\u7EE7\u7EED\uFF01");return}else this._sourceMessagePool.set(r,{busy:!0,pool:[]});let s=!1,i=setTimeout(()=>{s=!0,this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u4E2A\uFF01"),this._nextQuestion(r)},this._options.timeoutInSeconds*1e3);if(await this.onChatMessage(o),s){this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u5DF2\u88AB\u63D0\u524D\u6267\u884C\uFF0C\u76F4\u63A5\u8FD4\u56DE\uFF01");return}clearTimeout(i),this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u5B8C\u6210"),this._nextQuestion(r)}catch(n){this._logger.warn("\u6D88\u606F\u5904\u7406\u51FA\u9519"),this._logger.error(n.message),r&&this._nextQuestion(r)}};onChatMessage=async t=>{this._logger.debug(`process chat message[id:${t.message.messageId}] of channel ${t.source.options.instanceName}`),this.emit("CHAT_MESSAGE",t);let o=this._findRules(t,this._skillRules,!0);if(await this._applyBeforeSkills(o,t),!t.message){this._logger.info("skill\u8FD4\u56DE\u7684message\u4E3A\u7A7A\uFF0C\u6B64\u6D88\u606F\u65E0\u9700\u4F7F\u7528bot\u54CD\u5E94\uFF01");return}let r=this.app.botManager.getInstance(this._responseRule.instanceName),n=this._getBotMessageManager(t.source.options.instanceName,t.message.fromId);if(t.message.type==="TEXT"){let y=t.message.content?.trim();if(y.startsWith("#reset")||y.startsWith("#\u91CD\u7F6E")){n.clearHistory();let I=await r.clearHistoryRequested(t);I?(t.reply("\u91CD\u7F6E\u5931\u8D25\uFF01","TEXT",void 0,!0),this._logger.error(I)):t.reply("\u91CD\u7F6E\u6210\u529F\uFF01","TEXT",void 0,!0);return}}let s=await r.prepareMessage(t);if(!s?.forSend){this._logger.debug("reply denied by bot"),this._options.fallbackAnswer?.length&&t.reply(this._options.fallbackAnswer,"TEXT",void 0,!0);return}t.source.beforeSend&&(await t.source.beforeSend(t.message),this._logger.debug("before reply hook"));let i=[];r.params.needHistoryMessage&&this._options.historyEnabled&&(i=n.getHistoryMessages(),s.forHistory&&(s.forHistory.type="user",n.addMessage(s.forHistory,t.message.content)));let a=new Ft,c=t.message.isGroupChat&&t.message.type!=="PAT",l=!t.message.isGroupChat,m=!1,u="",g=0,d="";try{let y=await r.getResponse(t,{onContent:async(I,T)=>{if(l&&!m&&(m=!0,t.onGenerating?.()),!I)return;let L=typeof I=="string"?I:I?.text,U="",x;if(typeof L=="string"){L=L.trimStart(),d+=L,u+=L;let F=this._splitWords(u,g);U=F.extract,u=F.remaining,F.extract?.length&&g++,T="TEXT"}else x=I;if(U.trim().length){let F=await a.add(this._applyAfterSkills(o,t,U,"TEXT",void 0,"part"));if(F){let v={};c&&(c=!1,F.messageType==="TEXT"&&t.message.senderInfo?.nickName&&t.source.params.autoAppendAt&&(F.content="@"+t.message.senderInfo.nickName+" "+F.content,v.atList=[t.message.senderInfo?.[t.source.params.fieldInAtList??"userId"]])),await t.reply(F.content,F.messageType,v)}}if(x){this._logger.debug("process none text content,content type:"+T);let F=await a.add(this._applyAfterSkills(o,t,I,T,void 0,"part"));F?.content&&await t.reply(F.content,F.messageType)}},onError:I=>{throw I}},s,i);if(d.trim().length){this._logger.debug("all words:"+d);let I=u,T="TEXT",L=await a.add(this._applyAfterSkills(o,t,u,"TEXT",d,"part"));if(I=L.content,T=L.messageType,I&&T==="TEXT"){let x=await a.add(this._applyAfterSkills(o,t,u,"TEXT",d,"complete"));I=x.content,T=x.messageType}let U=typeof I=="string"?I:I.text;I&&(!U||U.length)&&await t.reply(I,T)}r.params.needHistoryMessage&&this._options.historyEnabled&&y&&(y.type="bot",n.addMessage(y,d))}catch(y){if(this._logger.warn("process message error"),this._logger.error(y.message),await t.reply(`\u5904\u7406\u6D88\u606F\u65F6\u9047\u5230\u5F02\u5E38
11
+ `,"TEXT",void 0,!0),this._options.sendErrorLog&&await t.reply(String(y),"TEXT",void 0,!1),process.env.LOG_LEVEL==="debug")throw y}finally{t.source.afterSend&&await t.reply(this._textEndId,"TEXT",void 0,!1)}};onSelfChatMessage=t=>{this._logger.debug("self send message"),t.message.type==="TEXT"&&this._logger.debug(t.message.content),this.emit("SELF_SEND",this._wrapEventWithChatReply(t))};async _applyAfterSkills(t,o,r,n,s,i){for(let a of t){let c=this.app.skillManager.getInstance(a.instanceName);if(!(c?.options.disabled||a.skillApplyOn==="source"||!ge(a,o))&&(this._logger.warn("status:"+i),!(a.skillWhenReplyStatus?.length&&a.skillWhenReplyStatus!==i)&&(this._logger.warn("status checked"),c?.applyOnReply))){this._logger.trace("apply after skill:"+a.instanceName+" for message from "+o.message.senderInfo.nickName);let l=await c.applyOnReply(a.skillWhenReplyStatus==="complete"?void 0:r,n,o,s);l?.content!==void 0&&l?.messageType!==void 0&&(r=l.content,n=l.messageType)}}return{content:r,messageType:n}}async _applyBeforeSkills(t,o){for(let r of t){let n=this.app.skillManager.getInstance(r.instanceName);if(!(n?.options.disabled||r.skillApplyOn==="reply")&&n?.applyOnSource&&(this._logger.trace("apply before skill:"+r.instanceName+" for message from "+o.message.senderInfo.nickName),await n.applyOnSource(o),!o.message)){this._logger.trace("\u6280\u80FD"+n.options.instanceName+"\u53D6\u6D88\u4E86\u540E\u7EED\u6280\u80FD\u7EE7\u7EED\u6267\u884C!");break}}}async _nextQuestion(t){let o=this._sourceMessagePool.get(t);if(!o){this._logger.trace("\u5F53\u524D\u7B49\u5F85\u6267\u884C\u7684\u5BF9\u8BDD\u5747\u5DF2\u5B8C\u6210\uFF01");return}if(!o.pool.length){this._sourceMessagePool.delete(t),this._logger.debug(t+"\u7528\u6237\u7684\u6240\u6709\u6D88\u606F\u5904\u7406\u5B8C\u6210\uFF01");return}let r=o.pool.shift();this._logger.debug("\u7EE7\u7EED\u56DE\u7B54\u7B49\u5F85\u533A\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898");try{await this.onChatMessage(r)}catch(n){if(this._logger.error("\u5904\u7406\u6D88\u606F\u51FA\u9519"),this._logger.error(n),process.env.LOG_LEVEL==="debug")throw n}finally{this._nextQuestion(t)}}_findRules(t,o,r){if(r){let s=[];return o.forEach(i=>{ge(i,t)&&s.push(i)}),s}return[o.find(s=>ge(s,t))]}_getBotMessageManager(t,o){if(this._historyManagers[t]){if(this._historyManagers[t][o])return this._historyManagers[t][o]}else this._historyManagers[t]={};let r=new Et(this._options.historyOptions??{});return this._historyManagers[t][o]=r,r}_wrapEventWithChatReply(t){return{...t,reply:(r,n="TEXT",s={},i=!1)=>{let a=t.message,c={messageId:oo(),senderName:t.me?.userName,senderId:t.me?.userId,senderInfo:t.me,fromId:a.isGroupChat?a.fromId:t.me?.userId,type:n,content:r,toInfo:[a.isGroupChat?a.groupInfo:a.senderInfo],isGroupChat:a.isGroupChat,...s};return this.sendMessage(c,t.source,i,t.message)}}}async _sendFromPool(){let t=[];for(let o of this._sendMessagePool.keys()){let r=this._sendMessagePool.get(o);if(r?.length){let n=r.shift();t.push(this.sendMessage(n.message,n.to,!0,n.fromMessage))}r.length===0&&this._sendMessagePool.delete(o)}await Promise.allSettled(t),this._sendMessagePool.size>0&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval)}_splitWords(t,o){if(this._options.bufferWordsMinCount<=0||t.length<=this._options.bufferWordsMinCount||o>=this._options.maxSplitCount-1)return{extract:"",remaining:t};let r=t.substring(0,this._options.bufferWordsMinCount),n=t.substring(this._options.bufferWordsMinCount);if(this._options.splitCharacters[0]!=="none"){let s=1/0;for(let i of this._options.splitCharacters){let a=n.indexOf(i);a<0||(s=Math.min(a,s))}if(s===1/0)return{extract:"",remaining:t};r+=n.substring(0,s+1),n=n.substring(s+1)}return{extract:r,remaining:n}}_initAgent(){if(this._initialized){this._logger.error("current source is defined,can't reinit!");return}if(this._logger.trace("agent init"),this._initialized=!0,this._options.skillRules?.length){let t=[...this._options.skillRules];this._skillRules=t.sort((o,r)=>(o.order??100)-(r.order??100))}else this._skillRules=[];for(let t of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(t);if(!o){this._logger.error(`can't find source instance of key ${t},please create in admin page first!`);continue}o.event.on("CHAT_MESSAGE",this.processChatMessage),o.event.on("SELF_SEND",this.onSelfChatMessage)}}};import{readItems as jr}from"@directus/sdk";import Ur from"emittery";import{v4 as $r}from"uuid";var Me=(r=>(r.APP_STARTED="APP_STARED",r.APP_RELOAD="APP_REALOD",r.APP_RESTARTED="APP_RESTARTED",r.APP_NOTIFY="APP_NOTIFY",r))(Me||{}),Nt=class extends Ur{constructor(e){super(),this._logger=f(e+"-global-trigger")}_logger;_eventNames=["APP_REALOD","APP_STARED","APP_RESTARTED","APP_NOTIFY"];get eventNames(){return[...this._eventNames]}async emit(e,t){return t=t??{},t.id=t.id??$r(),t.time=t.time??new Date,super.emit(e,t)}registerGlobalEventNames(e){if(this._eventNames.indexOf(e)>=0){this._logger.error("\u91CD\u590D\u7684\u6D88\u606F\u540D\u79F0\u6CE8\u518C\uFF1A"+e);return}this._eventNames.push(e)}};var O=f("agent-service"),Rt=class{constructor(e,t={}){this._app=e;this._options=t;this._options.maxRecords=this._options.maxRecords??1e3,this._options.models=this._options.models??{},this._options.models.agents=this._options.models.agents??[],this._options.models.bots=this._options.models.bots??[],this._options.models.skills=this._options.models.skills??[],this._options.models.sources=this._options.models.sources??[]}_initialized=!1;_agents=[];_tableNames={SOURCES:"sources",BOTS:"bots",SKILLS:"skills",AGENTS:"agents"};_resourceCount={agents:0,bots:0,sources:0,skills:0};get resourceCount(){return this._resourceCount}get agents(){return[...this._agents]}async init(){if(this._initialized){O.warn("agent service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,O.trace("agent service initializing..."),this._loadInstances()}getAgentByName(e){return this._agents?.find(t=>t.name===e)}async reload(){return O.trace("dispose agents,bots,skills,sources"),await this.dispose(),this._agents=[],O.trace("reinit instances"),this._loadInstances()}async _loadConfig(){let e=await this._loadTableConfig(this._tableNames.AGENTS),t=[...this._options.models.agents,...e.map(c=>({...c.options}))??[]],o=await this._loadTableConfig(this._tableNames.BOTS),r=[...this._options.models.bots,...o.map(c=>({name:c.name,options:c.options}))??[]],n=await this._loadTableConfig(this._tableNames.SKILLS),s=[...this._options.models.skills,...n.map(c=>({name:c.name,options:c.options}))??[]],i=await this._loadTableConfig(this._tableNames.SOURCES),a=[...this._options.models.sources,...i.map(c=>({name:c.name,options:c.options}))??[]];return{agents:t,bots:r,skills:s,sources:a}}async _loadTableConfig(e){if(this._app.offlineMode)return[];let t=await this._app.client.request(jr(e,{limit:this._options.maxRecords,filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));return t?.length?t:(O.warn("\u6CA1\u6709\u4ECE\u5728\u7EBF"+e+"\u83B7\u53D6\u5230\u6570\u636E\uFF01"),O.warn(t),[])}async _loadInstances(){let e=await this._loadConfig(),t=[];this._loadSkills(e.skills,t),this._loadBots(e.bots,t),this._loadSources(e.sources),O.info(`${e.sources.length}\u4E2Asource\u5B9E\u4F8B\uFF0C${e.bots.length}\u4E2Abot\u5B9E\u4F8B\uFF0C${e.skills.length}\u4E2Askill\u5B9E\u4F8B\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),await Promise.allSettled(t),t=[],this._loadAgents(e.agents),await Promise.allSettled(t),O.info(`${e.agents.length}\u4E2Aagent\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),this._resourceCount.agents=e.agents.length,this._resourceCount.bots=e.bots.length,this._resourceCount.skills=e.skills.length,this._resourceCount.sources=e.sources.length}_loadSources(e){let t=[];for(let o of e){o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.sourceManager.createInstance(o.name,o.options);if(!r){O.info("\u6CA1\u6709\u627E\u5230\u540D\u4E3A"+o.name+"\u7684\u6D88\u606F\u6E90");return}O.trace("source "+r.options.instanceName+"created");let n=o.options.instanceName,s=r.actions;s&&s.forEach(i=>{i.type==="api"?this._app.registerRoutes(n,i):i.type==="ws"?this._app.registerWSHandler(n,i):O.warn("\u4E0D\u80FD\u8BC6\u522B\u7684action\u7C7B\u578B\uFF1A"+i.type)}),t.push(r)}this._app.running?t.forEach(o=>o.login()):this._app.globalEvent.once("APP_STARED").then(()=>{t.forEach(o=>o.login())})}_loadBots(e,t){e.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.botManager.createInstance(o.name,o.options);if(!r){O.info("load bot failed:"+o.options.instanceName);return}O.trace("bot "+o.options.instanceName+" created"),t.push(r.init())})}_loadSkills(e,t){e.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.skillManager.createInstance(o.name,o.options);if(!r){O.info("load skill failed:"+o.options.instanceName);return}O.trace("skill "+r.options.instanceName+" created"),t.push(r.init())})}_loadAgents(e){O.trace(e),this._agents=e.map(t=>(t.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210agent\u7684\u5B9E\u4F8BID"),t.instanceName=ae(10)),new Se(this._app,t)))}async dispose(){await ie(this._agents),await this._app.botManager.clearInstances(),await this._app.skillManager.clearInstances(),await this._app.sourceManager.clearInstances()}};import qr from"emittery";var w=class extends qr{constructor(t){super();this._options=t;this.logger=f(this._options.instanceName),this._options.historyExipresInSeconds=this._options.historyExipresInSeconds??30*60,this._options.attachSendMode=this._options.attachSendMode??"later",this._options.maxAttachCount=this._options.maxAttachCount??3,this._options.subscribeWelcome=this._options.subscribeWelcome??"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002",this.chatIdCache=Tt(this._options.instanceName),this._options.onlyText=this._options.onlyText??!1}static params={name:"basic bot",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1},historyExipresInSeconds:{type:"number",title:"\u540E\u7AEF\u7BA1\u7406\u7684\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09"},"x-decorator-props":{min:60,tooltip:"\u5F53\u7531\u540E\u7AEF\u7BA1\u7406\u5386\u53F2\u6D88\u606F\u65F6\u5019\uFF08\u975E\u81EA\u5EFA\u5BA2\u6237\u7AEF\u7BA1\u7406\uFF09\uFF0C\u591A\u4E45\u540E\u91CD\u65B0\u5F00\u542F\u65B0\u7684\u5BF9\u8BDDsession\u3002\u9ED8\u8BA41800\u79D2\uFF0C\u537330\u5206\u949F\u3002\u5F53\u4F7F\u7528\u81EA\u5EFA\u540E\u7AEF\u5E26\u7684\u5386\u53F2\u6D88\u606F\u65F6\uFF0C\u8FC7\u671F\u76F8\u5173\u9009\u9879\u5728agent\u4E2D\u914D\u7F6E\u3002"},default:1800},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later"},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3},subscribeWelcome:{type:"string",title:"\u8BA2\u9605\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6B22\u8FCE\u8BED\uFF08\u4E3B\u8981\u7528\u4E8E\u516C\u4F17\u53F7\u8BA2\u9605\u540E\u7684\u81EA\u52A8\u56DE\u590D\uFF09"},"x-decorator-props":{tooltip:`\u5F53\u6536\u5230\u8BA2\u9605\u6D88\u606F\u65F6\uFF0C\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B22\u8FCE\u8BCD\uFF0C\u5982\u679C\u6B22\u8FCE\u8BCD\u4EE5\u53CC\u4E0B\u5212\u7EBF__\u5F00\u5934\uFF0C\u8868\u793A\u4F7F\u7528\u56FA\u5B9A\u8BCD\u8BED\uFF0C\u5982 __\u6B22\u8FCE\u5173\u6CE8\uFF01\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u914D\u7F6E\u7684\u8BCD\u4F5C\u4E3A\u63D0\u793A\u8BCD\u8BA9\u540E\u7AEF\u7ED9\u51FA\u6B22\u8FCE\u8BCD
12
+ \u53EF\u4EE5\u4F7F\u7528\u8BE5\u529F\u80FD\u63D0\u4F9B\u5BF9\u6A21\u578B\u80FD\u529B\u7684\u4ECB\u7ECD\u3002`},default:"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002"}}}}};commandText={attach:"_command_attach",position:"_command_position",article:"_command_article",subscribe:"_command_subscribe"};chatIdCache;chatAttachCache={};logger;get options(){return this._options}checkCommand(t,o,r){return t===this.commandText.attach?(this.chatAttachCache[o]||this.logger.warn("\u6709\u6536\u5230\u56FE\u7247\u6D88\u606F\uFF0C\u4F46\u662F\u6CA1\u6709\u7F13\u5B58\u6210\u529F\uFF01"),!1):t===this.commandText.position||t===this.commandText.article?!1:t===this.commandText.subscribe?(r.reply(this._options.subscribeWelcome.slice(2),"TEXT"),!1):!0}async getLastInfo(t){let o=await this.chatIdCache.get(t);if(!o&&this.supportConversationOnline){let r=await this.getLatestConversationId(t);if(r?.length&&this._options.historyExipresInSeconds>0){let n=await this.getLatestChatTime(r,t);if(this.logger.debug("server time hours "+new Date().getHours()),n){let s=(n+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>s?(await this.deleteConversation(r,t),this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u8FC7\u671F\uFF0C\u5220\u9664")):o={conversationId:r,timeInSeconds:n}}else o={conversationId:r,timeInSeconds:void 0}}else o={conversationId:r,timeInSeconds:void 0}}else if(this._options.historyExipresInSeconds>0&&o?.timeInSeconds){let r=(o.timeInSeconds+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>r&&(this.supportConversationOnline&&await this.deleteConversation(o.conversationId,t),await this.chatIdCache.delete(t),o=void 0,this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u7F13\u5B58\u8FC7\u671F\uFF0C\u5220\u9664"))}return o}async clearHistoryRequested(t){try{let o=t.source.options.instanceName+"-"+t.message.fromId;delete this.chatAttachCache[o];let r=(await this.chatIdCache.get(o))?.conversationId;if(r?await this.chatIdCache.delete(o):r=await this.getLatestConversationId(o),!r){this.logger.debug("\u6CA1\u6709\u5386\u53F2\u6D88\u606F\u8981\u5220\u9664\uFF01");return}await this.deleteConversation(r,o)}catch(o){return String(o)}}async prepareMessage(t){let o=t.source.options.instanceName+"-"+t.message.fromId;try{let r=t.message,n=[],s;switch(r.type){case"RECALL":case"FRIEND_REQUEST":case"SYSTEM":case"CUSTOM":case"PHONE":return;case"TEXT":s=r.content;break;case"REF":{let a=r.content;if(s=a.text,a.refMessage?.type==="TEXT"||a.refMessage?.type==="REF"||a.refMessage?.type==="AUDIO"){let c=typeof a.refMessage.content=="string"?a.refMessage.content:a.refMessage.content.text;c?.length&&(s=`\u6839\u636E\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u5E76\u91CD\u70B9\u9488\u5BF9\u201C${c}\u201D\u8FD9\u6BB5\u8BDD\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\uFF1A${s}`)}else if(a.refMessage?.type==="POSITION"){let c=Zt(a.refMessage.content);c.length&&(s=`\u6839\u636E\u4EE5\u4E0B\u4F4D\u7F6E\u4FE1\u606F\u3010${c}\u3011\u9488\u5BF9\u8BE5\u95EE\u9898\u8FDB\u884C\u56DE\u590D\uFF1A${s}`)}else a.refMessage?.type==="ARTICLE"?s=`\u6839\u636E\u8BE5\u6587\u7AE0\u7684\u4FE1\u606F\uFF08${No(a.refMessage.content)}\uFF09,\u6293\u53D6\u5176\u8BE6\u7EC6\u5185\u5BB9\uFF0C\u7136\u540E\u56DE\u7B54\u4EE5\u4E0B\u95EE\u9898\uFF08\u6CE8\u610F\u5982\u679C\u662F\u603B\u7ED3\u5185\u5BB9\uFF0C\u5219\u5148\u6982\u8FF0\uFF0C\u518D\u5206\u51E0\u4E2A\u91CD\u70B9\u8BE6\u7EC6\u63CF\u8FF0\uFF09\uFF1A${s}`:s="\u8BF7\u56DE\u590D\u4E00\u6BB5\u8BDD\u53CB\u597D\u7684\u8868\u8FBE\u4F60\u6682\u65F6\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u529F\u80FD\uFF01";this.logger.debug("ref message"),this.logger.debug(s);break}case"AUDIO":{let a=t.message.content;a.text?.length?s=a.text:this.logger.info("\u5F53\u524D\u8BED\u97F3\u6CA1\u6709\u88AB\u8F6C\u6362\u4E3A\u6587\u672C\uFF0C\u65E0\u6CD5\u53D1\u9001\u5230dify\u540E\u7AEF\uFF01\u8BF7\u8003\u8651\u4F7F\u7528skill\u8FDB\u884C\u8F6C\u6362\uFF01");break}case"POSITION":{if(t.message.isGroupChat)s=this.commandText.position;else{let a=Zt(t.message.content);a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u4F4D\u7F6E\u4FE1\u606F\uFF1A\u3010${a}\u3011\uFF0C\u6211\u7A0D\u540E\u53EF\u80FD\u4F1A\u95EE\u4F60\u5173\u4E8E\u8FD9\u4E2A\u4F4D\u7F6E\u7684\u95EE\u9898\u3002`)}break}case"PAT":{let a=t.message.content;t.message.isGroupChat?s="\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u7684\u62CD\u4E86\u62CD\u4F60\uFF0C\u7ED9\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01":s=`\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u5730\u62CD\u4E86\u62CD\u4F60\uFF0C\u5177\u4F53\u6D88\u606F\u5185\u5BB9\u662F\uFF1A\u3010${a.text}\u3011\u3002\u6765\u4E00\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01`;break}case"ARTICLE":{if(t.message.isGroupChat)s=this.commandText.article;else{let a=t.message.content.url;a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u7F51\u5740\uFF1A${a}\uFF0C\u8BF7\u7B49\u5F85\u6211\u7684\u63D0\u95EE\uFF08\u5982\u679C\u540E\u7EED\u8981\u6C42\u603B\u7ED3\uFF0C\u5219\u5148\u6982\u62EC\u6574\u4F53\u63CF\u8FF0\uFF0C\u7136\u540E\u52063-5\u70B9\u5C55\u5F00\u63CF\u8FF0\u91CD\u70B9\u5185\u5BB9\uFF0C\u53EF\u4EE5\u4F7F\u7528\u4E00\u4E9B\u8868\u60C5\u7B26\u53F7\u6765\u589E\u5F3A\u63CF\u8FF0\u7684\u8DA3\u5473\u6027\uFF0C\u4E0D\u7528\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u8981\u6C42\uFF09\u3002`)}break}case"UNSUBSCRIBE":{this.logger.debug("\u7528\u6237\u53D6\u6D88\u8BA2\u9605\uFF0C\u65E0\u9700\u56DE\u590D\uFF01");break}case"SUBSCRIBE":{this._options.subscribeWelcome.startsWith("__")?s=this.commandText.subscribe:s=this._options.subscribeWelcome;break}}if(!this._options.onlyText)switch(r.type){case"RICH_TEXT":{let a=r.content;s="";for(let c of a.content)c.type==="text"?s+=c.data+`
13
+ `:c.type==="image"||c.type==="file"?n.push({file:c.data.file,messageId:t.message.messageId,type:c.type}):(this.logger.warn("\u65E0\u6CD5\u8BC6\u522B\u7684rich text content\u7C7B\u578B"),this.logger.warn(c));break}case"REF":{let a=r.content;if(a.refMessage?.type==="IMAGE"||a.refMessage?.type==="EMOTION"||a.refMessage?.type==="FILE"||a.refMessage?.type==="VIDEO"){s=a.text;let c=a.refMessage.content,l=await t.source.me();if(!this.chatAttachCache[o]?.some(u=>u.messageId===a.refMessage.messageId)||a.refMessage.senderId===l.userId&&c?.file){this.logger.info("update file now");let u="image";a.refMessage?.type==="VIDEO"?u="video":a.refMessage?.type==="FILE"&&(u="file"),n.push({file:c.file,messageId:a.refMessage.messageId,type:u})}else a.refMessage?.messageId&&(s=`\u6309\u6B64\u8981\u6C42\u5206\u6790\u7F16\u53F7\u4E3A${a.refMessage.messageId}\u7684\u9644\u4EF6\uFF08\u56DE\u590D\u4E2D\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\uFF09\uFF1A${s}`);this.logger.debug("ref mutil model message"),this.logger.debug(s)}break}case"FILE":case"VIDEO":case"IMAGE":case"EMOTION":{let a={file:r.content.file,messageId:t.message.messageId,type:"image"};r.type==="VIDEO"?a.type="video":r.type==="FILE"&&(a.type="file"),this._options.attachSendMode==="now"?n.push(a):(this.chatAttachCache[o]=this.chatAttachCache[o]??[],this.chatAttachCache[o].push(a),this.chatAttachCache[o].length>this._options.maxAttachCount&&(this.chatAttachCache[o].shift(),this.logger.debug("\u7F13\u5B58\u7684\u5185\u5BB9\u6570\u91CF\u5927\u4E8E\u4E86\u8BBE\u7F6E\u7684"+this._options.maxAttachCount+"\u4EFD\uFF0C\u65E7\u7684\u88AB\u79FB\u9664\uFF01")),s=this.commandText.attach),this.logger.debug(s);break}}if(!s){this.logger.debug("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+r.type);return}if(s.startsWith("_command_"))return{forSend:{},forHistory:void 0,chatId:o,plainText:s};let i=[...n??[]];if(this.chatAttachCache[o]?.length&&i.push(...this.chatAttachCache[o]),n.length){let a="\u8FD9\u51E0\u4E2A\u6587\u4EF6\u7684\u7F16\u53F7\u5206\u522B\u662F";for(let c of i)a+=c.messageId+"\uFF0C";s=a+`\u540E\u7EED\u5982\u679C\u6211\u63D0\u5230\u8FD9\u4E9B\u7F16\u53F7\uFF0C\u4E5F\u9700\u8981\u9488\u5BF9\u6307\u5B9A\u7F16\u53F7\u7684\u6587\u4EF6\u8FDB\u884C\u56DE\u7B54\uFF0C\u5982\u679C\u540E\u7EED\u63D0\u5230\u5206\u6790\u6587\u4EF6\uFF0C\u4E00\u822C\u6307\u5206\u6790\u6700\u8FD1\u4E00\u6761\u6D88\u606F\u7684\u6587\u4EF6\uFF0C\u6CE8\u610F\u6240\u6709\u7684\u56DE\u7B54\u90FD\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\u4FE1\u606F\uFF0C\u53EF\u4EE5\u7528\u7B2C\u51E0\u4E2A\u6587\u4EF6\u6765\u4EE3\u66FF\u3002\u73B0\u5728\u8BF7\u6839\u636E\u5982\u4E0B\u63D0\u95EE\u5BF9\u6587\u4EF6\u8FDB\u884C\u5206\u6790\u5E76\u56DE\u7B54\uFF1A${s}\uFF08\u76F4\u63A5\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u8981\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u89C4\u5219\u4E86\uFF09`}return n=i,this.generateReadyMessage(o,s,n,t)}catch(r){throw delete this.chatAttachCache[o],r}}async getResponse(t,o,r,n){let s=r.forSend,i=r.chatId;if(!this.checkCommand(r.plainText,i,t))return;let a;n?.length&&(a=n.map(m=>m.data)),this.chatAttachCache[i]=[];let c=await this.getLastInfo(i),l=await this.sendMessageBody(s,a,{onContent:(m,u)=>{o.onContent(m,u)},onCompleted:(m,u)=>{this.supportConversationOnline&&this.chatIdCache.set(i,{conversationId:m,timeInSeconds:u})},onError:m=>{throw m}},c,t);return this.logger.debug(this._options.instanceName+" reply completed"),l}};var ro=f("instance-manager"),J=class{constructor(e){this.options=e;this.options=this.options??{},this.options.cacheInstance=this.options.cacheInstance??!0}_instances={};_creators={};_params={};registerInstanceCreator(e,t){this._creators[t.name]&&ro.warn(`\u540D\u4E3A${t.name}\u7684bot\u5DF2\u7ECF\u88AB\u6CE8\u518C\uFF0C\u5C06\u88AB\u66F4\u65B0\u4E3A\u6700\u65B0\u503C\uFF01`),this._creators[t.name]=e,this._params[t.name]=t}getParams(e){return this._params[e]}getAllParams(){return this._params}getAllParamsArray(){return Object.values(this._params)}getInstance(e){return this._instances[e]}getInstances(e){return e?.length?Object.values(this._instances).filter(t=>t.params.name===e):Object.values(this._instances)}createInstance(e,t){let o=t.instanceName;if(!o?.length){ro.error("instanceKey\u672A\u8BBE\u7F6E\uFF1A"+e+"\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5B9E\u4F8B\uFF01");return}if(this.options.cacheInstance&&this._instances[o])return this._instances[o];if(typeof this._creators[e]!="function"){ro.error("\u672A\u80FD\u627E\u5230\u540D\u4E3A"+e+"\u7684\u5B9E\u4F8B\u6784\u5EFA\u5668\uFF01");return}let r=this._creators[e](t);return this.options.cacheInstance&&(this._instances[o]=r),r}async clearInstances(){await ie(Object.values(this._instances)),this._instances={}}};var Bt=class extends J{};import{RoleType as Vr}from"@coze/api";import{existsSync as Hr}from"fs";import{v4 as Gr}from"uuid";import Kr from"jsonwebtoken";import{ChatEventType as Oe,CozeAPI as Wr}from"@coze/api";var no=f("coze-service"),Dt=class{constructor(e){this._options=e;this._options.apiBase=this._options.apiBase??"https://api.coze.cn",this._options.apiBase.endsWith("/")&&(this._options.apiBase=this._options.apiBase.slice(0,this._options.apiBase.length-1))}_token;_client;get client(){return this._client}async _loadToken(){let e=V(this._options.privateKeyPath),t;Hr(e)?t=await _.fromPath(e,"text").asText():(no.warn("coze\u79C1\u94A5\u8DEF\u5F84\u4E0D\u5B58\u5728\uFF0C\u5C1D\u8BD5\u5C06\u5185\u5BB9\u76F4\u63A5\u4F5C\u4E3A\u79C1\u94A5\u4F7F\u7528\u3002"),t=e);let o=parseInt(new Date().getTime()/1e3),r={iss:V(this._options.appId),aud:this._options.apiBase.replace("https://","").replace("http://",""),iat:o,exp:o+86399,jti:Gr()},n={alg:"RS256",typ:"JWT",kid:V(this._options.publicKey)},s=Kr.sign(r,t,{algorithm:"RS256",header:n}),i=await(await fetch(this._options.apiBase+"/api/permission/oauth2/token",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${s}`},body:JSON.stringify({duration_seconds:86399,grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer"})})).json();this._token=i.access_token;let a=i.expires_in;no.trace("\u6210\u529F\u83B7\u53D6coze\u5E94\u7528token\uFF1A"+this._token),this._client=new Wr({baseURL:this._options.apiBase,token:this._token});let c=(a-o)*1e3;setTimeout(()=>{this._loadToken()},c/1.2)}async init(){await this._loadToken()}async conversations(e){return await this._get("/v1/conversations",{bot_id:e})}async createConversation(e,t){let o=await this._post("/v1/conversation/create",{messages:e,meta_data:t});return no.debug(o),o}async streamChat(e,t){let o=await this._client.chat.stream(e),r;for await(let n of o)switch(n.event){case Oe.CONVERSATION_CHAT_CREATED:{t.onStart?.(n.data);break}case Oe.CONVERSATION_MESSAGE_DELTA:{t.onReply(n.data.content,n);break}case Oe.CONVERSATION_MESSAGE_COMPLETED:{r||(r=n.data.content,t.onReplyCompleted?.(r,n));break}case Oe.CONVERSATION_CHAT_COMPLETED:{t.onCompleted?.(r,n.data);break}case Oe.CONVERSATION_CHAT_FAILED:throw new Error(JSON.stringify(n.data));default:t.others?.(n);break}}async _post(e,t,o){return o&&(e=e+"?"+new URLSearchParams(o).toString()),(await fetch(this._options.apiBase+e,{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._token}`},body:JSON.stringify(t)})).json()}async _get(e,t){return t&&(e=e+"?"+new URLSearchParams(t).toString()),(await fetch(this._options.apiBase+e,{method:"get",headers:{authorization:`Bearer ${this._token}`}})).json()}};var Ee=class p extends w{constructor(t){super(t);this._options=t}static params={name:"coze-bot",desc:"\u5B57\u8282\u6263\u5B50\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.coze.cn"},"x-validator":{format:"url"}},appId:{type:"string",title:"Coze\u5E73\u53F0\u5E94\u7528ID","x-index":30,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684\u5E94\u7528ID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u4ECEOAuth\u9009\u9879\u5361\u4E2D\u83B7\u5F97"},required:!0},botId:{type:"string",title:"Coze\u5E73\u53F0\u7684BotID","x-index":35,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684BotID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u7F16\u8F91\u9875\u9762\uFF0C\u6D4F\u89C8\u5668\u5730\u5740bot/xxx\uFF0Cxxx\u5C31\u662FbotId\u3002"},required:!0},apiKey:{type:"string",title:"\u5E94\u7528\u516C\u94A5","x-index":40,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u516C\u94A5"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97"},required:!0},privateKey:{type:"string",title:"\u5E94\u7528\u79C1\u94A5","x-index":50,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u79C1\u94A5",rows:4},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97\uFF0C\u76F4\u63A5\u586B\u5165pem\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u5185\u5BB9\u5373\u53EF"},required:!0},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};_service;async init(){let t=new Dt({privateKeyPath:this._options.privateKey,publicKey:this._options.apiKey,appId:this._options.appId,apiBase:this._options.apiBase});await t.init(),this._service=t}get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!0}async _loadFileInfo(t,o){let r;if(h.httpUrl&&this._options.preferLocalAttach)r={file_url:await t.asUrl(),type:o};else{let n=await this._service.client.files.upload({file:await t.asReadStream()});if(n)r={file_id:n.id,type:o};else return}return r}async generateReadyMessage(t,o,r){let n={role:Vr.User,type:"question",content_type:"text"},s=[],i={bot_id:this._options.botId,user_id:t,auto_save_history:!0,additional_messages:[n],custom_variables:this._options.customVars};if(r.length){for(let a of r){if(a.type!=="image"&&a.type!=="file")continue;let c=await this._loadFileInfo(a.file,a.type);s.push(c)}o.length&&(s.push({type:"text",text:o}),o=JSON.stringify(s)),n.content_type="object_string"}return n.content=o,{forSend:i,chatId:t,plainText:o}}async getLatestChatTime(){}async getLatestConversationId(){}async deleteConversation(){}async sendMessageBody(t,o,r,n){n?.conversationId?.length&&(t.conversation_id=n.conversationId),await this._service.streamChat(t,{onReply:s=>{r.onContent(s,"TEXT")},onCompleted:(s,i)=>{r.onCompleted(i.conversation_id,i.completed_at)}})}};import zr from"axios";import Xr from"form-data";var Jr=1e5,Wo={json:"application/json",stream:"text/event-stream",form:"application/x-www-form-urlencoded; charset=UTF-8",download:"application/octet-stream"};function Qr(p){return p.replace(/\\u[0-9a-f]{4}/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}var Lt=class{constructor(e){this._options=e;let t=this._options.appKey;t&&this._baseOptions.headers.append("Authorization",`Bearer ${t}`),this._options.appServiceBase.endsWith("/")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-1)),this._options.appServiceBase.endsWith("/v1")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-3)),this._apiUrl=this._options.appServiceBase+"/v1"}_apiUrl;_baseOptions={method:"GET",mode:"cors",headers:new Headers({"Content-Type":Wo.json}),redirect:"follow"};_handleStream=async(e,t,o,r,n,s,i,a,c,l,m,u,g,d,y,I)=>{if(!e.ok)throw new Error("Network response was not ok");let T=e.body?.getReader(),L=new TextDecoder("utf-8"),U="",x,F=!0;async function v(){let Y=!1;return T?.read().then(he=>{if(he.done){o&&o();return}U+=L.decode(he.value,{stream:!0});let Te=U.split(`
14
+ `);try{Te.forEach(Z=>{Z.startsWith("data: ")&&(Z=Z.substring(6));try{x=JSON.parse(Z)}catch{t("",F,{conversationId:x?.conversation_id,messageId:x?.message_id,sourceBuffer:x});return}if(x.status===400||!x.event){t("",!1,{conversationId:void 0,messageId:"",errorMessage:x?.message,errorCode:x?.code,sourceBuffer:x}),Y=!0,o?.(!0);return}x.event==="message"||x.event==="agent_message"?(t(Qr(x.answer),F,{conversationId:x.conversation_id,taskId:x.task_id,messageId:x.id,sourceBuffer:x}),F=!1):x.event==="agent_thought"?r?.(x):x.event==="message_file"?i?.(x):x.event==="message_end"?n?.(x):x.event==="message_replace"?s?.(x):x.event==="workflow_started"?a?.(x):x.event==="workflow_finished"?c?.(x):x.event==="node_started"?l?.(x):x.event==="node_finished"?m?.(x):x.event==="iteration_started"?u?.(x):x.event==="iteration_next"?g?.(x):x.event==="iteration_completed"?d?.(x):x.event==="text_chunk"?y?.(x):x.event==="text_replace"&&I?.(x)}),U=Te[Te.length-1]}catch(Z){t("",!1,{conversationId:void 0,messageId:"",errorMessage:`${Z}`,sourceBuffer:x}),Y=!0,o?.(!0);return}if(!Y)return v()})}return v()};_baseFetch=(e,t,{needAllResponseContent:o})=>{let r=Object.assign({},this._baseOptions,t),s=`${this._apiUrl}${e.startsWith("/")?e:`/${e}`}`,{params:i,body:a}=r;if(i=i??{},i){let c=[];Object.keys(i).forEach(l=>c.push(`${l}=${encodeURIComponent(i[l])}`)),s.search(/\?/)===-1?s+=`?${c.join("&")}`:s+=`&${c.join("&")}`,delete r.params}return a&&(r.body=JSON.stringify(a)),Promise.race([new Promise((c,l)=>{setTimeout(()=>{l(new Error("request timeout"))},Jr)}),new Promise((c,l)=>{globalThis.fetch(s,r).then(m=>{let u=m.clone();if(!/^(2|3)\d{2}$/.test(m.status)){try{let d=m.json();switch(m.status){case 401:{this._options.onError?.("Invalid token");return}default:new Promise(()=>{d.then(y=>{this._options.onError?.(y.message)})})}}catch(d){this._options.onError?.(String(d))}return Promise.reject(u)}if(m.status===204){c({result:"success"});return}let g=r.headers.get("Content-type")===Wo.download?m.blob():m.json();c(o?u:g)}).catch(m=>{this._options.onError?.(String(m)),l(m)})})])};_upload=async e=>{let n={...{method:"POST",url:`${`${this._apiUrl}/files/upload`}`,data:{}},...e},s=n.data;s.append("user",e.user),this.options.appKey&&(n.headers=n.headers??{},n.headers.Authorization=`Bearer ${this.options.appKey}`),n.headers={...s.getHeaders(),...n.headers};let i=await zr({method:n.method,url:n.url,headers:n.headers,data:n.data,responseType:"json",withCredentials:!0,onUploadProgress:n.onprogress});if(i.status===201)return i.data;throw new Error(`Request failed with status ${i.status}`)};_ssePost=async(e,t,{onData:o,onCompleted:r,onThought:n,onFile:s,onMessageEnd:i,onMessageReplace:a,onWorkflowStarted:c,onWorkflowFinished:l,onNodeStarted:m,onNodeFinished:u,onError:g,onIterationStart:d,onIterationNext:y,onIterationFinish:I,onTextChunk:T,onTextReplace:L})=>{let U=Object.assign({},this._baseOptions,{method:"POST"},t),F=`${this._apiUrl}${e.startsWith("/")?e:`/${e}`}`,{body:v}=U;return v&&(U.body=JSON.stringify(v)),U.credentials="omit",fetch(F,U).then(Y=>{if(!/^(2|3)\d{2}$/.test(Y.status)){new Promise(()=>{Y.json().then(he=>{this._options.onError?.(he.message||"Server Error")})}),g?.("Server Error");return}return this._handleStream(Y,(he,Te,Z)=>{if(Z.errorMessage){this._options.onError?.(Z.errorMessage);return}o?.(he,Te,Z)},()=>{r?.()},n,i,a,s,c,l,m,u,d,y,I,T,L)}).catch(Y=>{this._options.onError?.(String(Y)),g?.(Y)})};_request=(e,t={},o)=>this._baseFetch(e,t,o||{});_get=(e,t={},o)=>this._request(e,Object.assign({},t,{method:"GET"}),o);_patch=(e,t={},o)=>this._request(e,Object.assign({},t,{method:"PATCH"}),o);_post=(e,t={},o)=>this._request(e,Object.assign({},t,{method:"POST"}),o);_put=(e,t={},o)=>this._request(e,Object.assign({},t,{method:"PUT"}),o);_del=(e,t={},o)=>this._request(e,Object.assign({},t,{method:"DELETE"}),o);get options(){return this._options}imageUpload=({file:e,onProgressCallback:t,user:o,fileName:r})=>{let n=new Xr;r?n.append("file",e,r):n.append("file",e);let s=i=>{if(i.lengthComputable){let a=Math.floor(i.loaded/i.total*100);t?.(a)}};return this._upload({data:n,onprogress:s,user:o})};sendChatMessage=async(e,{onData:t,onCompleted:o,onThought:r,onFile:n,onError:s,getAbortController:i,onMessageEnd:a,onMessageReplace:c,onWorkflowStarted:l,onNodeStarted:m,onNodeFinished:u,onWorkflowFinished:g})=>this._ssePost("chat-messages",{body:{...e,response_mode:e.response_mode??"streaming",user:e.user}},{onData:t,onCompleted:o,onThought:r,onFile:n,onError:s,getAbortController:i,onMessageEnd:a,onMessageReplace:c,onNodeStarted:m,onWorkflowStarted:l,onWorkflowFinished:g,onNodeFinished:u});sendWorkflowMessage=async(e,{onWorkflowStarted:t,onNodeStarted:o,onNodeFinished:r,onWorkflowFinished:n,onIterationStart:s,onIterationNext:i,onIterationFinish:a,onTextChunk:c,onTextReplace:l})=>this._ssePost("workflows/run",{body:{...e,response_mode:"streaming",user:e.user}},{onNodeStarted:o,onWorkflowStarted:t,onWorkflowFinished:n,onNodeFinished:r,onIterationStart:s,onIterationNext:i,onIterationFinish:a,onTextChunk:c,onTextReplace:l});stopChatMessageResponding=(e,t)=>this._post(`chat-messages/${e}/stop`,{body:{user:t}});fetchSuggestedQuestions=(e,t)=>this._get(`messages/${e}/suggested`,{params:{user:t}});fetchConversations=async(e,t=!1,o=100)=>this._get("conversations",{params:{limit:o,first_id:"",pinned:t,user:e}});fetchChatList=async(e,t,o=20)=>this._get("messages",{params:{conversation_id:e,limit:o,last_id:"",user:t}});fetchAppParams=async e=>this._get("parameters",{params:{user:e}});updateFeedback=async({url:e,body:t,user:o})=>this._post(e,{body:{...t,user:o}});generationConversationName=async(e,t,o)=>this._post(`conversations/${e}/name`,{body:{auto_generate:!o,name:o,user:t}});deleteConversation=async(e,t)=>this._del(`conversations/${e}`,{body:{user:t}});pinConversation=async(e,t)=>this._patch(`conversations/${e}/pin`,{params:{user:t}});unpinConversation=async(e,t)=>this._patch(`conversations/${e}/unpin`,{params:{user:t}});getFilesUrl(e){return e.startsWith("/")?this._options.appServiceBase+e:e}};var Fe=class p extends w{constructor(t){super(t);this._options=t;this._options.apiBase||(this.logger.warn("\u5F53\u524D\u6CA1\u6709\u914D\u7F6Edify\u670D\u52A1\u5668\u5730\u5740\uFF0C\u5C06\u4F7F\u7528\u5B98\u7F51\u5730\u5740\uFF1Ahttps://api.dify.ai"),this._options.apiBase="https://api.dify.ai")}static params={name:"dify-agent-bot",desc:"Dify\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u4E0D\u5E26/v1\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.dify.ai"},"x-validator":{format:"url"}},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};_service;get params(){return p.params}get options(){return this._options}get supportConversationOnline(){return!0}async _uploadImage(t,o){let r=await t.asReadStream();try{return(await this._service.imageUpload({file:r,user:o})).id}catch(n){this.logger.error(n);return}}async _loadFileInfo(t,o){let r;if(h.httpUrl&&this._options.preferLocalAttach)r={transfer_method:"remote_url",url:await t.asUrl(),type:"image"};else{let n=await this._uploadImage(t,o);if(n)r={transfer_method:"local_file",upload_file_id:n,type:"image"};else return}return r}async init(){this._service=new Lt({appKey:this._options.apiKey,appServiceBase:this._options.apiBase})}async generateReadyMessage(t,o,r){let n={query:o,inputs:this._options.customVars??{},user:t};if(r.length){n.files=[];for(let s of r){if(s.type!=="image"){this.logger.warn("dify\u5F53\u524D\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6\uFF01");continue}n.files.push(await this._loadFileInfo(s.file,t))}}return{forSend:n,chatId:t,plainText:o}}async getLatestConversationId(t){this.logger.debug("get conversation id "+t);let o=await this._service.fetchConversations(t,!1,1);if(o.data?.length)return o.data[0].id}async getLatestChatTime(t,o){return(await this._service.fetchChatList(t,o,1)).data?.[0]?.created_at}async deleteConversation(t,o){await this._service.deleteConversation(t,o)}async sendMessageBody(t,o,r,n){t.conversation_id=n?.conversationId,await this._service.sendChatMessage(t,{onData:s=>{r.onContent(s,"TEXT")},onMessageEnd:s=>{r.onCompleted(s.conversation_id,s.created_at)},onThought:s=>{this.logger.debug(s.tool_input)},onError:s=>{throw s}})}};import Yr from"openai";var N=class p extends w{constructor(t){super(t);this._options=t;this._options.clientOptions=this._options.clientOptions??{},this._options.chatOptions?.model?.length||this.logger.warn("\u5F53\u524D\u672A\u8BBE\u7F6E\u4F7F\u7528\u7684\u6A21\u578B\u540D\u79F0\uFF0C\u8BE5bot\u6267\u884C\u53EF\u80FD\u4F1A\u5F02\u5E38:"+this._options.instanceName),this._options.apiBase?.length||this.logger.warn("\u5F53\u524D\u4F7F\u7528\u7684open ai\u5B98\u65B9\u5730\u5740\uFF0C\u8BF7\u786E\u4FDD\u7F51\u7EDC\u80FD\u591F\u8BBF\u95EE\uFF01"),this._options.apiBase?.length&&!this._options.apiBase.endsWith("/v1")&&this.logger.warn("openai\u7684\u63A5\u53E3\u5730\u5740\u4E00\u822C\u4EE5/V1\u7ED3\u5C3E\uFF0C\u5F53\u524D\u662F\uFF1A"+this._options.apiBase)}static params={name:"openai-bot",desc:"OpenAI\u517C\u5BB9\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://your.domain.com/v1 \u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u8BF7\u7559\u7A7A\u3002"},"x-validator":{format:"url"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 gtp4o-mini"},required:!0}},required:!0},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":10,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};client;get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!1}async _loadFileInfo(t,o){let r=await t.asUrl();if(this.logger.debug("\u9644\u4EF6\u5730\u5740\uFF1A"+r),o==="image")return{type:"image_url",image_url:{url:r}};if(o==="video")return{type:"video_url",video_url:{url:r}}}async generateReadyMessage(t,o,r){let n;if(this._options.onlyText)n={role:"user",content:o};else{let i=[];if(n={role:"user",content:i},r.length)for(let a of r){let c=await this._loadFileInfo(a.file,a.type);if(!c){this.logger.debug("\u4E0D\u652F\u6301\u7684\u9644\u4EF6\u7C7B\u578B\uFF1A"+a.type);continue}i.push(c)}o?.length&&i.push({type:"text",text:o})}let s={...this._options.chatOptions,stream:!0,messages:[n]};return s.user=t,{forHistory:{type:"user",data:n},forSend:s,chatId:t,plainText:o}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r){o?.length&&(t.messages=[...o,...t.messages]),this._options.systemPrompt?.length&&(t.messages=[{role:"system",content:this._options.systemPrompt},...t.messages]);let n=await this.client.chat.completions.create(t),s=!1,i="";for await(let a of n){let c="";for(let l of a.choices)if(l.delta.content?.length&&(c+=l.delta.content),l.finish_reason?.length){l.finish_reason==="content_filter"?c+="\u3010\u56DE\u590D\u4E2D\u65AD\uFF1A\u60A8\u7684\u5185\u5BB9\u88AB\u68C0\u6D4B\u4E3A\u4E0D\u5408\u89C4\u3002\u3011":l.finish_reason!=="stop"&&this.logger.warn("\u9047\u5230\u672A\u77E5\u7684\u539F\u56E0\u56DE\u590D\u7ED3\u675F\uFF1A"+l.finish_reason),s=!0;break}if(i+=c,c.length&&r.onContent(c,"TEXT"),s)break}return{type:"bot",data:{role:"assistant",content:i}}}async init(){this.client=new Yr({...this._options.clientOptions,baseURL:this._options.apiBase,apiKey:this._options.apiKey})}};var Ne=class extends N{constructor(t){let o;t.apiBase?.length||(t.apiBase="https://cloud.fastgpt.cn/api"),t.apiBase.endsWith("/v1")?o=t.apiBase.slice(0,t.apiBase.length-3):(o=t.apiBase,t.apiBase=t.apiBase+"/v1"),t.chatOptions?.model?.length&&(t.chatOptions=t.chatOptions??{},t.chatOptions.model="gpt-4");super(t);this._options=t;this._options.disableHistory=this._options.disableHistory??!1,this._commonApiBase=o}static params={name:"fastgpt-bot",desc:"fastgpt\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...N.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://cloud.fastgpt.cn/api"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u680F\u53EF\u4EE5\u770B\u5230\u6240\u9009\u5E94\u7528\u7684appId"}},disableHistory:{type:"string",title:"\u662F\u5426\u7981\u7528\u5728\u7EBF\u5386\u53F2\u6D88\u606F","x-index":4,"x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u7981\u7528\u540E\u6BCF\u6B21\u5BF9\u8BDD\u90FD\u662F\u65B0\u7684\uFF0C\u6CA1\u6709\u4E0A\u4E0B\u6587"},default:!1},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E",properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0\uFF08\u65E0\u9700\u586B\u5199\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u65E0\u9700\u586B\u5199"},"x-disabled":!0}},"x-display":!1}}}}};_commonApiBase;get options(){return this._options}get supportConversationOnline(){return!0}async generateReadyMessage(t,o,r){let n=await super.generateReadyMessage(t,o,r);return this._options.disableHistory||(n.forSend.chatId=t),n}async getLatestConversationId(t){return t}async getLatestChatTime(t,o){let n=((await(await fetch(this._commonApiBase+"/core/chat/getHistories",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({appId:this._options.appId,offset:0,pageSize:1e3,source:"api"})})).json()).data?.list).find(s=>s.chatId===o);if(n)return new Date(n.updateTime).getTime()/1e3}async deleteConversation(t,o){let r=await await fetch(this._commonApiBase+`/core/chat/delHistory?chatId=${o}&appId=${this._options.appId}`,{method:"delete",headers:{authorization:`Bearer ${this._options.apiKey}`}});this.logger.debug(r)}};var Re=class p extends w{constructor(t){super(t);this._options=t;if(!this._options.apiBase)throw new Error("\u6CA1\u6709\u914D\u7F6EapiBase!")}static params={name:"ollama-bot",desc:"Ollama\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://your.domain.com"},"x-validator":{format:"url"},required:!0},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"},"x-visible":!1},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 qwen2"},required:!0},authType:{type:"string",enum:["basic","token","none"],title:"\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F","x-index":5,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F"},"x-decorator-props":{tooltip:"basic\u8BA4\u8BC1\u65F6\u9700\u8981\u914D\u7F6E\u57FA\u7840\u6388\u6743\u4FE1\u606F\uFF0Ctoken\u65F6\u5019\u9700\u8981\u914D\u7F6Etoken\u6388\u6743\u4FE1\u606F\u3002none\u65F6\u65E0\u9700\u586B\u5199\u3002"},default:"basic"},basicOptions:{type:"object",title:"\u57FA\u7840\u6388\u6743\u4FE1\u606F","x-index":6,properties:{name:{type:"string",title:"Basic\u7528\u6237\u540D","x-index":7,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u540D"}},password:{type:"string",title:"Basic\u5BC6\u7801","x-index":8,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"}}}},tokenOptions:{type:"object",title:"Token\u6388\u6743\u4FE1\u606F","x-index":9,properties:{in:{type:"string",enum:["header","query"],title:"Token\u4FE1\u606F\u4F4D\u7F6E","x-index":10,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u4FE1\u606F\u4F4D\u7F6E"},"x-decorator-props":{tooltip:"\u6388\u6743\u4FE1\u606F\u5B58\u5728\u4E8Eheader\u8FD8\u662Furl\u7684query\u4E32\u4E2D\u3002"},default:"header"},key:{type:"string",title:"Token Key","x-index":11,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165TokenKey"},"x-decorator-props":{tooltip:"\u6BD4\u5982Header\u4E2D\u7684Key\u901A\u5E38\u4E3AAuthorization\uFF0CUrl\u4E2D\u7684\u53EF\u80FD\u4E3Atoken\uFF0C\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u586B\u5199\u3002"},default:"Authorization"},token:{type:"string",title:"Token Value","x-index":12,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Token\u503C"}}}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0},options:{type:"object",title:"Ollama\u7684\u53EF\u9009\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94Ollama\u4E2D\u6E29\u5EA6\uFF0CTop P\u7B49\u914D\u7F6E\u53C2\u6570\u3002"}},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":3,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!1}async generateReadyMessage(t,o,r){let n={model:this._options.model,messages:[],options:this._options.options},s=[];if(r.length)for(let a of r)if(a.type==="image"){let c=await a.file.asBase64();s.push(c)}else this.logger.debug("\u4E0D\u652F\u6301\u7684\u6587\u4EF6");let i={role:"user",content:o,images:s};return n.messages.push(i),{forSend:n,chatId:t,plainText:o,forHistory:{type:"user",data:i}}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r){o?.length&&(t.messages=[...o,t.messages[0]]),this._options.systemPrompt?.length&&(t.messages=[{role:"system",content:this._options.systemPrompt},...t.messages]);let n=this._options.apiBase+"/api/chat";this._options.authType==="token"&&this._options.tokenOptions.in==="query"&&(n+=`?${this._options.tokenOptions.key}=${this._options.tokenOptions.token}`);let s={"Content-Type":"application/json"};if(this._options.authType==="token"&&this._options.tokenOptions.in==="header")s.Authorization=this._options.tokenOptions.token;else if(this._options.authType==="basic"){let c=`${this._options.basicOptions.name}:${this._options.basicOptions.password}`;s.Authorization=`Basic ${btoa(c)}`}let i=await fetch(n,{method:"post",keepalive:!0,headers:s,body:JSON.stringify(t)}),a="";if(await te(i.body,c=>{let l=c.message?.content;l?.length&&(a+=l,r.onContent(l,"TEXT"))}),a?.length)return this.logger.debug(a),{type:"bot",data:{role:"assistant",content:a}}}async init(){}};var Be=class extends N{static params={name:"openrouter-bot",desc:"OpenRouter\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://openrouter.ai/api/v1 \u4F7F\u7528OpenRouter\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528OpenRouter\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"meta-llama/llama-3.1-70b-instruct:free"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://openrouter.ai/api/v1"),super(e)}};var De=class p extends w{constructor(t){t.onlyText=t.onlyText??!0;super(t);this._options=t;this._options.apiBase||(this.logger.warn("\u6CA1\u6709\u914D\u7F6EapiBase\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u7684https://openapi.youdao.com/q_anything/api"),this._options.apiBase="https://openapi.youdao.com/q_anything/api")}static params={name:"qanything-bot",desc:"\u7F51\u6613\u6709\u9053\u77E5\u8BC6\u5E93\u667A\u80FD\u4F53",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://openapi.youdao.com/q_anything/api"},"x-validator":{format:"url"}},botId:{type:"string",title:"botId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165bot\u7684id"},required:!0,"x-decorator-props":{tooltip:"\u5728Agents\u9875\u9762\u7684\u53F3\u4E0A\u89D2\u6216\u8005\u6D4F\u89C8\u5668\u7684URL\u4E2D\u90FD\u53EF\u4EE5\u770B\u5230botId"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},"x-display":!1}}}}};get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!1}async generateReadyMessage(t,o){return{forSend:{uuid:this._options.botId,question:o,sourceNeeded:!1},chatId:t,plainText:o}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r){o?.length?t.history=[...o]:t.history=[];let n=await fetch(this._options.apiBase+"/bot/chat_stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:this._options.apiKey},body:JSON.stringify(t)}),s;if(await te(n.body,i=>{let a=i.result.response;i.result.singleQAId!==null?s=a:a?.length&&r.onContent(a,"TEXT")}),s?.length)return this.logger.debug(s),{type:"bot",data:{question:t.question,response:s}}}async init(){}};import{v4 as Zr}from"uuid";var Le=class p extends w{constructor(t){t.apiBase=t.apiBase??"https://agentapi.baidu.com";super(t);this._options=t}static params={name:"wenxin-agent-bot",desc:"\u767E\u5EA6\u6587\u5FC3\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://agentapi.baidu.com"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u8BE6\u60C5\u9875\u9762\u53EF\u4EE5\u770B\u5230\u5E94\u7528\u7684appId\u3002"}}}}}};get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!0}async _loadFileInfo(t,o){let r=await t.asUrl(),n=t.name.substring(t.name.lastIndexOf(".")+1);if(o==="image")return{imageName:t.name,imageType:n,imageUrl:r};{let s=await t.info();return{fileId:Zr(),fileName:t.name,fileSize:s.size,fileType:n,fileUrl:r}}}async generateReadyMessage(t,o,r){let n={},s={openId:t,message:{content:n},source:this._options.appId,from:"openapi"};if(r.length){n.type="multimodal",n.value=[];for(let i of r)n.value.push({type:i.type,value:await this._loadFileInfo(i.file,i.type)});n.value.push({type:"text",value:{showText:o,text:o}})}else n.type="text",n.value={showText:o,text:o};return{forSend:s,chatId:t,plainText:o}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r,n){t.threadId=n?.conversationId;let s=await fetch(this._options.apiBase+`/assistant/conversation?appId=${this._options.appId}&secretKey=${this._options.apiKey}`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),i="";await te(s.body,a=>{let c=a.data?.message?.content[0]?.data?.text;c?.length&&(i+=c,r.onContent(c,"TEXT")),a.data?.message?.endTurn&&r.onCompleted(a.data.message.threadId,new Date().getTime()/1e3)}),this.logger.debug(i)}async init(){}};var Ue=class p extends w{constructor(t){t.apiBase=t.apiBase??"https://yuanqi.tencent.com";super(t);this._options=t}static params={name:"yuanqi-bot",needHistoryMessage:!0,desc:"\u817E\u8BAF\u5143\u5668\u667A\u80FD\u4F53",optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://open.hunyuan.tencent.com"},"x-validator":{format:"url"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}}}}}};get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!1}async _loadFileInfo(t,o){let r=await t.asUrl(),n=t.name.substring(t.name.lastIndexOf(".")+1);return o==="image"?{type:"image",url:r}:(this.logger.info("\u5F53\u524D\u5E73\u53F0\u53EF\u80FD\u4E0D\u652F\u6301\u8BE5\u7C7B\u578B\u6570\u636E\u89E3\u6790\uFF1A"+n),{type:n,url:r})}async generateReadyMessage(t,o,r){let n=[],s={role:"user",content:n},i={assistant_id:this._options.appId,user_id:t,stream:!0,messages:[s]};if(o?.length&&n.push({type:"text",text:o}),r.length)for(let a of r)n.push({type:"file_url",file_url:await this._loadFileInfo(a.file,a.type)});return{forSend:i,chatId:t,plainText:o,forHistory:s}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r){let n=await fetch(this._options.apiBase+"/openapi/v1/agent/chat/completions",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json","X-Source":"openapi",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(t)}),s="";return await te(n.body,i=>{if(i.choices?.[0]?.delta.role!=="assistant")return;let a=i.choices?.[0]?.delta.content;a?.length&&(s+=a,r.onContent(a,"TEXT"))}),this.logger.debug(s),{type:"bot",data:{role:"assistant",content:[{type:"text",text:s}]}}}async init(){}};import en from"form-data";import tn from"axios";var $e=class p extends w{constructor(t){t.apiBase||(t.apiBase="https://chatglm.cn/chatglm/assistant-api/v1");super(t);this._options=t}static params={name:"zhipu-qingyan-agent",desc:"\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...w.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u7559\u7A7A\u4F7F\u7528 https://chatglm.cn/chatglm/assistant-api/v1"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u53EF\u7559\u7A7A\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1Key","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1key"},"x-validator":{required:!0,message:"\u670D\u52A1Key\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},apiSecret:{type:"string",title:"\u670D\u52A1Secret","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u79C1\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},assistantId:{type:"string",title:"assistantId","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u667A\u80FD\u4F53\u7684\u5BF9\u8BDD\u6216\u8005\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u4E0A\u53EF\u4EE5\u770B\u5230\uFF0Cid=xxx\uFF0Cxxx\u5C31\u662Fid\u3002"}}}}}};_token;get options(){return this._options}get params(){return p.params}get supportConversationOnline(){return!0}async _loadToken(){let t=await(await fetch(`${this._options.apiBase}/get_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:this._options.apiKey,api_secret:this._options.apiSecret})})).json();this._token=t.result?.access_token,this.logger.trace("\u5DF2\u83B7\u53D6\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53token\uFF1A"+this._token);let o=parseInt(t.result?.expires_in??24*60*60);setTimeout(()=>{this._loadToken()},o*1e3/1.1)}async _loadFileInfo(t){let o=new en,r=await t.asReadStream();o.append("file",r);let n={...o.getHeaders(),Authorization:`Bearer ${this._token}`},s=await tn({method:"post",url:this._options.apiBase+"/file_upload",headers:n,data:o,responseType:"json"});if(s.status!==200)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25:"+s.statusText);return{file_id:s.data.result.file_id}}async generateReadyMessage(t,o,r){let n=[],s={assistant_id:this._options.assistantId,prompt:o,file_list:n,meta_data:this._options.metaData};if(r.length)for(let i of r)n.push(await this._loadFileInfo(i.file));return{forSend:s,chatId:t,plainText:o}}getLatestConversationId(t){}getLatestChatTime(t,o){}deleteConversation(t,o){}async sendMessageBody(t,o,r,n){t.conversation_id=n?.conversationId;let s=await fetch(this._options.apiBase+"/stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._token}`},body:JSON.stringify(t)}),i="";await te(s.body,a=>{if(a.status==="init")return;let c=a.message.content,l="";switch(c.type){case"text":l=c.text;break;case"image":{let m=0;for(let u of c.image)l+=`![\u56FE\u7247${m++}](${u.image_url})`;break}case"code":{l=c.code;break}}if(l?.length){let m=i;i=l,l=l.replace(m,""),r.onContent(l,"TEXT")}if((a.status==="finish"||a.status==="error")&&(r.onCompleted(a.conversation_id,new Date().getTime()/1e3),a.status==="error"))throw new Error(a.last_error)}),this.logger.debug(i)}async init(){await this._loadToken()}};var je=class extends N{static params={name:"siliconflow-bot",desc:"\u7845\u57FA\u6D41\u52A8",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.siliconflow.cn/v1 \u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"Qwen/Qwen2.5-7B-Instruct"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.siliconflow.cn/v1"),super(e)}};var qe=class extends N{static params={name:"xunfei-bot",desc:"\u8BAF\u98DE\u661F\u706B\u8BA4\u77E5\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://spark-api-open.xf-yun.com/v1 \u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"lite(Spark Lite)",value:"lite"},{label:"generalv3(Spark Pro)",value:"generalv3"},{label:"pro-128k(Spark Pro-128K)",value:"pro-128k"},{label:"generalv3.5(Spark Max)",value:"generalv3.5"},{label:"max-32k(Spark Max-32K)",value:"max-32k"},{label:"4.0Ultr(Spark4.0 Ultra)",value:"4.0Ultra"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"lite","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003\u8BAF\u98DE\u63A7\u5236\u53F0-\u661F\u706B\u8C03\u8BD5\u4E2D\u5FC3-\uFF08\u53F3\u4FA7\uFF09\u8F6C\u6362\u6A21\u7248\u4E3A\u4EE3\u7801\u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u8BAF\u98DE\u5B98\u7F51"},required:!1},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1,"x-display":!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://spark-api-open.xf-yun.com/v1"),e.onlyText=!0,e.chatOptions.model=e.modelName??e.chatOptions.model??"lite",super(e),this.logger.trace("\u5F53\u524D\u8BAF\u98DE\u661F\u706B\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var He=class extends N{static params={name:"zhipu-bot",desc:"\u667A\u666EAI\u5927\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://open.bigmodel.cn/api/paas/v4 \u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"glm-4-flash",label:"glm-4-flash(free)"},{value:"glm-4v-flash",label:"glm-4v-flash(free)"},{value:"glm-4-0520",label:"glm-4-0520"},{value:"glm-4",label:"glm-4"},{value:"glm-4-air",label:"glm-4-air"},{value:"glm-4-airx",label:"glm-4-airx"},{value:"glm-4-long",label:"glm-4-long"},{value:"glm-4-flashx",label:"glm-4-flashx"},{value:"glm-4v-plus",label:"glm-4v-plus"},{value:"glm-4v",label:"glm-4v"},{value:"charglm-4",label:"charglm-4"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"glm-4-flash","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://bigmodel.cn/dev/api/normal-model/glm-4 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u667A\u666EAI\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://open.bigmodel.cn/api/paas/v4"),e.chatOptions.model=e.modelName??e.chatOptions.model??"glm-4-flash",super(e),this.logger.trace("\u5F53\u524D\u667A\u666EAI\u6A21\u578B\uFF1A"+e.chatOptions.model)}};import{createItem as on,deleteItem as rn,readItems as Vo,updateItem as nn}from"@directus/sdk";var B=f("api-plugin",!0);function E(p,e){return{data:p,err:e}}var Sc=async(p,e)=>{e=e||{},e.checkNotifyFequencySeconds=Math.max(e.checkNotifyFequencySeconds??Pt("PLUGIN_API_CHECK_NOTIFY_FEQ_SECONDS")??20,0),e.expiresInSeconds=Math.max(e.expiresInSeconds??Pt("PLUGIN_API_NOTIFY_EXPIRES_SECONDS")??3600,0),e.maxNotifyCount=Math.max(e.maxNotifyCount??Pt("PLUGIN_API_MAX_NOTIFY_COUNT")??100,5);let t=p.options.name,o=[],r,n=7*24*3600,s=()=>{r!==void 0&&(clearInterval(r),r=void 0),r=setInterval(()=>{let a=o.filter(c=>{let m=Math.min(c.info?.expireInSeconds??e.expiresInSeconds,n)*1e3+c.time.getTime();return new Date().getTime()<=m});if(a.length>e.maxNotifyCount){let c=a.length-e.maxNotifyCount;o=a.slice(c,c+e.maxNotifyCount)}else o=a;o.length===0&&(clearInterval(r),r=void 0)},e.checkNotifyFequencySeconds*1e3)},i=a=>{if(!(a.time instanceof Date)||!a.id){B.warn("\u6536\u5230\u6CA1\u6709id\u6216\u8005time\u7684\u901A\u77E5\uFF0C\u5C06\u4E0D\u4F1A\u53D1\u9001\u5230\u5BA2\u6237\u7AEF\uFF01"),B.warn(a);return}o.length===0&&s(),o.push(a)};return p.globalEvent.on("APP_NOTIFY",i),{name:"\u901A\u7528API\u670D\u52A1\u63D2\u4EF6",needOnline:!1,schema:{type:"object",properties:{}},init:async()=>({}),beforeStart:async()=>{B.debug("api\u63D2\u4EF6\u5F00\u59CB\u6CE8\u518C"),p.registerRoutes(t,{actionName:"ping",action:{type:"normal",handler:async l=>{let m={status:"ok"},u=l.body.needNotify==="true",g=parseInt(l.body.notifyCursor);return E(u?{...m,notifies:{data:isNaN(g)?o:o.filter(d=>d.time.getTime()>g),cursor:new Date().getTime()}}:m)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"resource-summary",action:{type:"normal",handler:async()=>{let l=p.botManager.getAllParamsArray().length,m=p.sourceManager.getAllParamsArray().length,u=p.skillManager.getAllParamsArray().length;return E({sources:{count:m,created:p.agentService.resourceCount.sources},bots:{count:l,created:p.agentService.resourceCount.bots},agents:{running:p.agentService.resourceCount.agents},skills:{count:u,created:p.agentService.resourceCount.skills},tasks:{running:p.taskService.onlineCount}})}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"bot-creators",action:{type:"normal",handler:async()=>{let l=p.botManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"source-creators",action:{type:"normal",handler:async()=>{let l=p.sourceManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"skill-creators",action:{type:"normal",handler:async()=>{let l=p.skillManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"agent-creators",action:{type:"normal",handler:async()=>E([Se.params])},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"task-runner-creators",action:{type:"normal",handler:async()=>{let l=p.taskRunnerManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"task-trigger-creators",action:{type:"normal",handler:async()=>{let l=p.taskTriggerManager.getAllParamsArray();return E(l)}},type:"api",needAuth:!0}),p.registerRoutes(t,{actionName:"users",action:{type:"normal",handler:async l=>{let m=l.body,u=m.instanceName,g=p.sourceManager.getInstance(u);if(!g)return E([],"\u6D88\u606F\u6E90"+u+"\u4E0D\u5B58\u5728\uFF01");let d=m.type??"user";return B.trace("get "+u+" contacts"),E(await g.getContacts(d))}},type:"api",needAuth:!0});let a=new TextDecoder("utf-8"),c=l=>m=>{l.readyState===l.OPEN&&(typeof m.message=="object"&&(m={...m,message:JSON.stringify(m.message)}),l.send(JSON.stringify(m)))};p.registerWSHandler(t,{actionName:"logs",action:{onMessage:async(l,m,u)=>{if(l instanceof Buffer&&(l=a.decode(l)),typeof l!="string"){B.warn("\u65E0\u6CD5\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),u.send("error message format");return}if(l==="ping"){u.send("pong"),B.trace("ping received");return}if(["fatal","error","warn","info","debug","trace"].includes(l)){B.emitter.setLevel(l),u.send("log level set to "+l),u.send(l);return}B.trace("ws log - client message received:"+l)},onOpen:async(l,m)=>{let u=c(m);B.emitter.on("log",u),m.handler=u,m.send(B.emitter.level)},onClose:async(l,m)=>{m.handler?B.emitter.off("log",m.handler):B.emitter.clearListeners("log")}},type:"ws",needAuth:!0}),p.registerRoutes(t,{actionName:"sync-config",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>(await p.reload(),E("success"))}}),p.registerRoutes(t,{actionName:"restart",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>(p.globalEvent.emit("restart",void 0),E("success"))}}),p.registerRoutes(t,{actionName:"using",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body,u=m.instanceName,g=m.type,d=p.agentService.agents,y=!1;return g==="bots"?y=d.some(I=>I.options.botResponseRule.instanceName===u):g==="sources"?y=d.some(I=>I.options.sourceInstanceNames.includes(u)):g==="skills"&&(y=d.some(I=>I.options.skillRules?.some(T=>T.instanceName===u))),E(y)}}}),p.registerRoutes(t,{actionName:"install-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body;if(!m.name)return E(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");m.name=m.name.trim();try{m=await qo(m.name,m.version?.trim(),m.registry),m.options=m.options??{},m.displayName=m.displayName??m.name,B.trace(m);let u=await p.client.request(Vo("plugins",{filter:{name:{_eq:m.name}}}));if(u?.length>0){let g=await p.client.request(nn("plugins",u[0].id,m));B.debug("update plugin res:"+JSON.stringify(g))}else{let g=await p.client.request(on("plugins",m));B.debug("create plugin res:"+JSON.stringify(g))}return E({type:u?.length?"update":"create",info:m})}catch(u){let g=JSON.stringify(u);return B.error("\u5B89\u88C5\u63D2\u4EF6\u5931\u8D25\uFF1A"+u),E(void 0,g)}}}}),p.registerRoutes(t,{actionName:"uninstall-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:async l=>{let m=l.body;if(!m.name)return E(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");m.name=m.name.trim();let u=await p.client.request(Vo("plugins",{filter:{name:{_eq:m.name}}}));if(!u?.length)return E(void 0,`\u672A\u80FD\u5728\u5B89\u88C5\u8BB0\u5F55\u4E2D\u627E\u5230\u63D2\u4EF6 ${m.name} \uFF0C\u5982\u679C\u786E\u5B9A\u5DF2\u7ECF\u5B89\u88C5\uFF0C\u53EF\u4EE5\u767B\u5F55\u670D\u52A1\u5668\u624B\u52A8\u5378\u8F7D\uFF01`);m=u[0];let g=await p.client.request(rn("plugins",u[0].id));B.debug("delete plugin res:"+JSON.stringify(g));try{return await Ho(m.name),E({type:"delete",info:m})}catch(d){let y=JSON.stringify(d);return B.error("\u5378\u8F7D\u63D2\u4EF6\u5931\u8D25\uFF08\u914D\u7F6E\u5DF2\u5220\u9664\uFF09\uFF1A"+y),E(void 0,y)}}}}),p.registerRoutes(t,{actionName:"plugins",type:"api",needAuth:!0,action:{type:"normal",handler:async()=>{let l=[];for(let m of p.onlinePlugins)m.schecma&&l.push({name:m.name,optionsSchema:{type:"formily",formily:m.schecma}});return E(l)}}})},dispose:async()=>{r!==void 0&&(clearInterval(r),r=void 0),p.globalEvent.off("APP_NOTIFY",i),B.trace("api plugin desposed")}}};import{readItems as sn}from"@directus/sdk";var $t={disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\uFF0C\u4EFB\u52A1\u4E0D\u4F1A\u88AB\u8FD0\u884C\uFF0C\u4F46\u4ECD\u4F1A\u88AB\u89E6\u53D1\u3002"},default:!1,required:!1}},be=class{constructor(e,t){this.app=e;this._options=t}},Q=f("task-service"),Ut=class{constructor(e,t={}){this._app=e;this._options=t;this._options.maxRecords=this._options.maxRecords??1e3}_initialized=!1;_taskTriggers=[];_onlineCount=0;get onlineCount(){return this._onlineCount}async init(){if(this._initialized){Q.warn("task service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,this._loadTasks()}async reload(){return Q.trace("dispose tasks"),await this.dispose(),this._taskTriggers=[],Q.trace("create tasks"),this._loadTasks()}async _loadTasks(){if(this._app.offlineMode)return;let e=await this._app.client.request(sn("tasks",{filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));e?.length?this._onlineCount=e.length:(Q.warn("\u5F53\u524D\u6CA1\u6709\u5728\u7EBF\u914D\u7F6E\u7684\u4EFB\u52A1\uFF01"),Q.warn(e));let t=[...e??[],...this._options.tasks??[]];t.forEach(o=>{o.runnerOptions.instanceName||(Q.trace("\u81EA\u52A8\u751F\u6210"+o.runnerName+"\u7684\u5B9E\u4F8BID"),o.runnerOptions.instanceName=ae(10));let r=this._app.taskRunnerManager.createInstance(o.runnerName,o.runnerOptions);o.triggerOptions.instanceName||(Q.trace("\u81EA\u52A8\u751F\u6210"+o.triggerName+"\u7684\u5B9E\u4F8BID"),o.triggerOptions.instanceName=ae(10));let n={...o.triggerOptions,onTask:async i=>{if(r.options.disabled){Q.trace("\u5F53\u524D\u4EFB\u52A1\u5DF2\u88AB\u7981\u7528\uFF0C\u7EC8\u6B62\u8FD0\u884C\uFF01");return}let a=new Date,c=await r.run(i);c.startTime=a,c.endTime=new Date,Q.trace("task "+n.instanceName+" run by "+r.options.instanceName+",costs "+(c.endTime.getTime()-c.startTime.getTime())+" ms")}},s=this._app.taskTriggerManager.createInstance(o.triggerName,n);Q.trace("create task trigger instance "+n.instanceName),this._taskTriggers.push(s)}),Q.info(t.length+" tasks loaded!")}async dispose(){await ie(this._taskTriggers),await this._app.taskTriggerManager.clearInstances(),await this._app.taskRunnerManager.clearInstances()}};var jt=class extends be{constructor(t,o){super(t,o);this.app=t;this._options=o;this._options.eventNames=this._options.eventNames??[],this.init()}_initialized=!1;_logger;_disposers=[];get logger(){return this._logger?this._logger:this._logger=f(this.loggerName)}async dispose(){this._disposers?.forEach(t=>t()),this._disposers=void 0}init(){if(!this._disposers){this._logger.error("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u88AB\u91CA\u653E\uFF0C\u65E0\u6CD5\u91CD\u65B0\u521D\u59CB\u5316\uFF01\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B");return}if(this._initialized){this.logger.warn("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}this._initialized=!0,this.getEventTriggers()?.forEach(o=>{let r=o.name;this._options.eventNames.forEach(n=>{let s=i=>{let a={triggerName:r,eventName:n,data:i,from:r};this.options.onTask(a)};o.trigger.on(n,s),this._disposers.push(()=>{o.trigger.off(n,s)})})})}},Ge=class p extends jt{constructor(t,o){super(t,o);this.app=t;this._options=o;let r=this._options.onTask;if(!r)throw new Error("\u5F53\u524Dtrigger\u6CA1\u6709\u7ED1\u5B9A\u4EFB\u52A1\uFF01");let n=s=>{let i=s.data;if(i&&i.type==="CHAT_MESSAGE"&&this._options.messageRule&&!ge(this._options.messageRule,i)){this.logger.debug("\u6D88\u606F\u4E0D\u5339\u914D\u4EFB\u52A1\u89C4\u5219\uFF01");return}r(s)};this._options.onTask=n}static params={name:"source-trigger",desc:"\u804A\u5929\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u804A\u5929\u63A5\u6536\u7684\u6D88\u606F",value:"CHAT_MESSAGE"},{label:"\u804A\u5929\u53D1\u9001\u7684\u6D88\u606F",value:"RESPONSE_MESSAGE"},{label:"\u65B0\u7528\u6237\u8FDB\u7FA4",value:"GROUP_NEW_USER"},{label:"\u81EA\u5B9A\u4E49\u4E8B\u4EF6",value:"CUSTOM"}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5B9E\u9645\u54CD\u5E94\u54EA\u4E9B\u7C7B\u578B\uFF0C\u53D6\u51B3\u4E8E\u6D88\u606F\u6E90\u80FD\u5426\u652F\u6301\u8FD9\u4E9B\u7C7B\u578B\u7684\u6D88\u606F\u53D1\u5E03\u3002\u5373\u8FD9\u91CC\u914D\u7F6E\u7684\u662F\u9488\u5BF9\u6D88\u606F\u6E90\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\u7684\u4E8C\u6B21\u8FC7\u6EE4\u3002\u8981\u8FC7\u6EE4\u524D\u8BF7\u5148\u53D6\u6D88\u9009\u62E9\u6240\u6709\u3002"},"x-component-props":{mode:"multiple",allowClear:!0},default:["CHAT_MESSAGE","RESPONSE_MESSAGE"],required:!0},sourceNames:{type:"string",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u6A21\u677F\uFF09","x-decorator":"FormItem","x-component":"CNameSelector","x-component-props":{resourceType:"sources",size:"small"},"x-decorator-props":{tooltip:"\u6240\u9009\u7684\u6A21\u677F\u4E0B\u7684\u6240\u6709\u7684\u6D88\u606F\u6E90\u90FD\u4F1A\u88AB\u76D1\u542C\uFF0C\u4E0E\u5B9E\u4F8B\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},sourceInstanceNames:{type:"array",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u5B9E\u4F8B\uFF09","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u6240\u9009\u5B9E\u4F8B\u7684\u6D88\u606F\u4F1A\u88AB\u76D1\u542C\uFF0C\u652F\u6301\u591A\u9009\u3002\u4E0E\u6A21\u677F\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},messageRule:{type:"object",title:"\u6D88\u606F\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},"x-decorator-props":{tooltip:"\u53EA\u6709\u9009\u62E9\u7C7B\u578B\u4E3A\u804A\u5929\u63A5\u6536\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u8FC7\u6EE4\u624D\u4F1A\u751F\u6548\uFF0C\u4E0D\u7B26\u5408\u8FC7\u6EE4\u6761\u4EF6\u7684\u6D88\u606F\u4E0D\u4F1A\u89E6\u53D1\u6267\u884C\u5668\u6267\u884C\u3002"}}}}}};get loggerName(){return"source-event-task-trigger"}get options(){return this._options}get params(){return p.params}getEventTriggers(){let t=this.app.sourceManager,o=[],r=this.options.sourceNames;return typeof r=="string"&&(r=[r]),r?.forEach(n=>{o.push(...t.getInstances(n)??[])}),this.options.sourceInstanceNames?.forEach(n=>{let s=t.getInstance(n);s?o.push(s):this.logger.error(`\u672A\u627E\u5230\u540D\u4E3A${n}\u7684\u6D88\u606F\u6E90\u5B9E\u4F8B\uFF01`)}),o.map(n=>({name:n.params.name,trigger:n.event}))}},Ke=class p extends jt{constructor(t,o){super(t,o);this.app=t;this._options=o}static params={name:"global-trigger",desc:"\u5168\u5C40\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u5E94\u7528\u901A\u77E5",value:"APP_NOTIFY"},{label:"\u914D\u7F6E\u91CD\u8F7D",value:"APP_REALOD"},{label:"\u5E94\u7528\u91CD\u542F",value:"APP_RESTARTED"},{label:"\u5E94\u7528\u542F\u52A8",value:"APP_STARED"}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u652F\u6301\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7C7B\u578B\uFF0C\u76F4\u63A5\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u540D\u79F0\u5373\u53EF\u3002"},"x-component-props":{mode:"tags",allowClear:!0,placeholder:"\u652F\u6301\u624B\u52A8\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6"},required:!0}}}}};get loggerName(){return"global-event-task-trigger"}get options(){return this._options}get params(){return p.params}getEventTriggers(){return[{name:p.params.name,trigger:this.app.globalEvent}]}};import an from"axios";import pn from"form-data";var Ce={...D,disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\u8BE5\u6280\u80FD\u5B9E\u4F8B\u5C06\u4F1A\u4E0D\u53EF\u7528"}}};var $=class p{constructor(e){this._options=e;this._logger=f(this._options.instanceName),this._options.ensureAudioFormat=this._options.ensureAudioFormat??!0}static params={name:"base-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,ensureAudioFormat:{type:"boolean","x-index":10,title:"\u68C0\u67E5\u5E76\u8F6C\u6362\u975E\u6807\u51C6\u97F3\u9891","x-component":"Switch",default:!0,"x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5927\u90E8\u5206\u8BC6\u522B\u5F15\u64CE\u8BED\u97F3\u652F\u63018k\u548C16k\u7684\u5355\u58F0\u9053\u97F3\u9891\uFF0C\u5982\u679C\u5F00\u542F\u68C0\u67E5\uFF0C\u6240\u6709\u4E0D\u662F\u8BE5\u7C7B\u578B\u7684\u97F3\u9891\u5C06\u88AB\u8F6C\u6362\uFF0C\u68C0\u67E5\u4F1A\u589E\u52A0\u7CFB\u7EDF\u5904\u7406\u65F6\u95F4\uFF0C\u5982\u679C\u5DF2\u7ECF\u786E\u5B9A\u97F3\u9891\u662F\u652F\u6301\uFF0C\u5EFA\u8BAE\u5173\u95ED\u68C0\u67E5\u3002"}}}}},desc:"\u8BED\u97F3\u8BC6\u522B\u57FA\u7840\u7C7B"};_logger;_targetFormat="wav";get options(){return this._options}get params(){return p.params}init(){return Promise.resolve()}async _transpileContent(e){let t=e;if(t?.text?.length){this._logger.debug("\u5F53\u524D\u8BED\u97F3\u6D88\u606F\u5DF2\u7ECF\u88AB\u8F6C\u4E3A\u6587\u672C\uFF0C\u5C06\u53D6\u6D88\u672C\u6B21\u8F6C\u6362\uFF01");return}let o=t?.file;if(!o){this._logger.warn("\u672A\u68C0\u6D4B\u5230\u97F3\u9891\u6587\u4EF6\uFF01");return}if(this._options.ensureAudioFormat&&(this._logger.trace("\u8F6C\u6362\u97F3\u9891\u683C\u5F0F\u4E3A\u5355\u901A\u905316k\u7684"+this._targetFormat),o=await we(o,this._targetFormat,n=>(n.audioFrequency(16e3),n.audioChannels(1),n))),t.text=await this._getText(o),!t.text?.length){this._logger.warn("\u8F6C\u6362\u5931\u8D25\uFF01");return}this._logger.debug("\u8F6C\u6362\u5B8C\u6210\uFF1A"+t.text)}async applyOnSource(e){if(e.message.type!=="AUDIO"){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01");return}await this._transpileContent(e.message.content)}async applyOnReply(e,t){return t!=="AUDIO"?(this._logger.debug("\u5F53\u524D\u54CD\u5E94\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01"),{content:e,messageType:t}):(await this._transpileContent(e),{content:e,messageType:t})}};var We=class p extends ${constructor(t){super(t);this._options=t;if(this._headers={"content-type":"multipart/form-data"},this._options.authType.toLowerCase()==="basic"){let o=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(o)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`);this._options.apiHost.indexOf("extract_text")>0&&this._logger.warn("api\u5730\u5740\u65E0\u9700\u5305\u542Bextract_text\uFF0C\u5982\u679C\u662F\u6709\u610F\u4E3A\u4E4B\uFF0C\u8BF7\u5FFD\u7565\uFF01"),this._options.apiHost.endsWith("/")||(this._options.apiHost+="/")}static params={name:"sensevoice-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com \u65E0\u9700\u5E26 extract_text"},"x-decorator-props":{tooltip:"API \u6765\u81EAhttps://github.com/HG-ha/SenseVoice-Api"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"jwt"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}}}}},desc:"SenseVoice\u8BED\u97F3\u8BC6\u522B"};_headers;get options(){return this._options}get params(){return p.params}async _getText(t){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");let o=new pn;return o.append("file",await t.asReadStream()),(await an({method:"post",url:this._options.apiHost+"extract_text",headers:{...this._headers,...o.getHeaders()},data:o,responseType:"json"})).data?.results}};import{v4 as cn}from"uuid";var R=class p{constructor(e){this._options=e;this._options.probability=this._options.probability??.5,this._logger=f(this._options.instanceName)}static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,probability:{type:"number","x-index":100,title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean","x-index":110,title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1}}}}};_logger;get options(){return this._options}get params(){return p.params}init(){return Promise.resolve()}async applyOnReply(e,t,o,r){this._logger.debug("check whether apply tts skill");let n=Mt(e);if(!n?.length){if(this._logger.warn("\u6CA1\u6709\u4ECEcontent\u4E2D\u68C0\u6D4B\u5230\u5185\u5BB9"),!r?.length)return{content:e,messageType:t};this._logger.debug("\u4F7F\u7528allContent"),this._logger.debug("allContent:"+r),this._logger.debug("content"+e)}if(!n?.length||n.length<3||this._options.probability<=0)return{content:e,messageType:t};if(n.length>=this._maxToken)return this._logger.warn(`\u6587\u672C\u957F\u5EA6\u4E3A${n.length}\uFF0C\u8D85\u8FC7\u4E86\u5141\u8BB8\u7684\u6700\u5927\u957F\u5EA6\uFF1A${this._maxToken}`),{content:e,messageType:t};if(this._options.probability<1&&Math.random()>this._options.probability)return{content:e,messageType:t};if(Eo(n)||Fo(n))if(this._logger.trace("\u68C0\u6D4B\u5230\u5185\u5BB9\u4E2D\u53EF\u80FD\u542B\u6709emoji\u6216\u8005Markdown\u7B49\u65E0\u6CD5\u8F6C\u6362\u4E3A\u8BED\u97F3\u7684\u5185\u5BB9"),this._options.deleteUnreadableText)this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u6B63\u5728\u79FB\u9664\u76F8\u5173\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9"),n=Mo(n),n=Oo(n);else return this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u53D6\u6D88\u8BED\u97F3\u8F6C\u6362"),{content:e,messageType:t};this._logger.debug("tts skill need apply"),this._logger.debug("text:"+n);let s=await this.getAudioBuffer(n,o);if(s?.length){let i={file:_.fromBuffer(s,cn()+".wav"),text:n};return this._logger.debug("tts skill applyed"),await i.file.asLocalPath(),{content:i,messageType:"AUDIO"}}return this._logger.warn("tts skill apply failed"),{content:e,messageType:t}}};var Ve=class p extends R{constructor(t){super(t);this._options=t;if(this._headers={"Content-Type":"application/json"},this._options.authType.toLowerCase()==="basic"){let o=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(o)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`)}static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com"},"x-decorator-props":{tooltip:"\u542F\u52A8\u5B98\u65B9docker-compose\u4E4B\u540E\uFF0C\u8FDB\u5165\u5BB9\u5668\u6309api.py\u63D0\u793A\uFF0C\u542F\u52A8api.py\u811A\u672C\uFF0C\u5E76\u6620\u5C04\u51FA\u5916\u7F51\u7AEF\u53E3\u57DF\u540D\u5373\u53EF\u3002"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"JWT"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}},probability:{type:"number",title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean",title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1},customReqOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5982\u8BED\u8A00\uFF08\u9ED8\u8BA4\u4E3A\u4E2D\u6587\uFF09\uFF0Ctop_k\u7B49\u3002"}}}}},desc:"Sovits\u8BED\u97F3\u5408\u6210"};_headers;get _maxToken(){return 10240}get options(){return this._options}get params(){return p.params}init(){return Promise.resolve()}async getAudioBuffer(t){let o=this._options.customReqOptions??{},r={text:t,...o,text_language:o.text_language??"zh"},s=await(await fetch(this._options.apiHost,{body:JSON.stringify(r),headers:this._headers,method:"post"})).arrayBuffer();return Buffer.from(s)}};import ln from"emittery";import{v4 as ze}from"uuid";var q=f("worktool"),Xe=class p{constructor(e){this._options=e;if(!this._options.robotId)throw new Error("\u673A\u5668\u4EBAID\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u542F\u52A8\u8BE5\u6D88\u606F\u6E90\uFF01");if(!this._options.me.nickName)throw new Error("\u673A\u5668\u4EBA\u8D26\u53F7\u81EA\u8EAB\u7684\u4FE1\u606F\u672A\u914D\u7F6E\uFF01");this._options.me.userId=this._options.me.userId??this._options.me.nickName,this._options.me.userName=this._options.me.userName??this._options.me.nickName,this._options.apiHost=this._options.apiHost??"https://api.worktool.ymdyes.cn",this._options.apiHost.endsWith("/")&&(this._options.apiHost=this._options.apiHost.slice(0,this._options.apiHost.length-1)),this.event=new ln,this._init()}static params={name:"worktool",optionsSchema:{type:"formily",formily:{type:"object",properties:{robotId:{type:"string",title:"Robot ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Robot ID"},"x-decorator-props":{tooltip:"\u5728worktool\u7AD9\u70B9\u53EF\u4EE5\u770B\u5230"}},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"\u9ED8\u8BA4 https://api.worktool.ymdyes.cn\uFF0C\u65E0\u9700 / \u7ED3\u5C3E"},default:"https://api.worktool.ymdyes.cn"},me:{type:"object",title:"\u4E2A\u4EBA\u4FE1\u606F","x-decorator":"FormItem","x-component":"Object","x-decorator-props":{tooltip:"\u8BE5\u6D88\u606F\u6E90\u65E0\u6CD5\u901A\u8FC7 API \u83B7\u53D6\u4E2A\u4EBA\u4FE1\u606F\uFF0C\u9700\u8981\u624B\u52A8\u586B\u5165\uFF0CuserId \u548C userName \u5747\u914D\u7F6E\u4E3A nickName"},properties:{nickName:{type:"string",title:"Nick Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6635\u79F0\uFF0C\u9700\u8981\u4E0E\u5FAE\u4FE1\u4E2D\u81EA\u5DF1\u7684\u6635\u79F0\u5B8C\u5168\u4E00\u81F4"},"x-decorator-props":{tooltip:"\u6D88\u606F\u6E90\u7528\u6237\u7684\u6635\u79F0"},required:!0},userId:{type:"string",title:"User ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0},userName:{type:"string",title:"User Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0}},required:!0},commandCallback:{type:"boolean",title:"\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u662F\u5426\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03\uFF0C\u9ED8\u8BA4 false\u3002\u5F00\u542F\u540E\u53EF\u4EE5\u5B9E\u73B0\u4E00\u4E9B\u8C03\u8BD5\u4FE1\u606F\u8BB0\u5F55\uFF0C\u65E0\u5176\u4ED6\u5B9E\u9645\u7528\u9014\u3002"},default:!1}}}},fieldInAtList:"nickName",autoAppendAt:!0,eventNames:["CHAT_MESSAGE","LOGIN","LOGOUT","SELF_SEND"],desc:"WorkTool\u65E0\u969C\u788D\u670D\u52A1"};_actionNames={CHAT_CALLBACK_ACTION:"chat",COMMAND_CALLBACK_ACTION:"command",LOGIN_CALLBACK_ACTION:"login",LOGOUT_CALLBACK_ACTION:"logout"};_online=!1;get params(){return p.params}get options(){return this._options}get actions(){return[{type:"api",actionName:this._actionNames.CHAT_CALLBACK_ACTION,action:{type:"normal",handler:e=>this._onChatMessage(e)}},{type:"api",actionName:this._actionNames.COMMAND_CALLBACK_ACTION,action:{type:"normal",handler:e=>this._onCommandMessage(e)}},{type:"api",actionName:this._actionNames.LOGIN_CALLBACK_ACTION,action:{type:"normal",handler:e=>this._onLoginMessage(e)}},{type:"api",actionName:this._actionNames.LOGOUT_CALLBACK_ACTION,action:{type:"normal",handler:e=>this._onLogoutMessage(e)}}]}event;async me(){if(this._online)return this._options.me}hasLogin(){return this._online}async login(){if(!this._online&&(await this._get("/robot/robotInfo/online")).data?.data===!0){this._fireLogin();return}}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:ze(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._options.me});let o;switch(e.type){case"TEXT":case"AUDIO":case"REF":{let r=typeof e.content=="string"?e.content:e.content.text;if(!r?.length){q.debug("text is empty");break}r.indexOf("(http")>=0&&(r=se(r)),o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:203,titleList:[...e.toInfo.map(n=>n.nickName?.length?n.nickName:n.userName)],receivedContent:r}]});break}case"IMAGE":case"EMOTION":case"MUSIC":case"VIDEO":case"FILE":{let r=e.content.file,n=await r.asUrl();q.debug(n);let s=e.type==="IMAGE"?"image":e.type==="VIDEO"?"video":e.type==="MUSIC"?"audio":"*";o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:218,titleList:[...e.toInfo.map(i=>i.nickName)],objectName:r.name,fileUrl:n,fileType:s}]});break}default:return q.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),q.warn(e),"\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"}q.debug(o)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async _init(){this._post("/robot/robotInfo/update",{openCallback:1,callbackUrl:`${h.httpUrl}/api/${this._options.instanceName}/${this._actionNames.CHAT_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:5,callBackUrl:`${h.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGIN_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:6,callBackUrl:`${h.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGOUT_CALLBACK_ACTION}`}),this._options.commandCallback&&this._post("/robot/robotInfo/callBack/bind",{type:1,callBackUrl:`${h.httpUrl}/api/${this._options.instanceName}/${this._actionNames.COMMAND_CALLBACK_ACTION}`})}_getUrl(e){return this._options.apiHost+e+"?robotId="+this._options.robotId}async _get(e){let t=await fetch(this._getUrl(e));return{data:await t.json(),status:t.status}}async _post(e,t){try{return await(await fetch(this._getUrl(e),{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json()}catch(o){q.error(o);return}}async _processChatMessage(e){let t,o;switch(e.textType){case 0:case 1:case 15:case 3:{if(e.spoken==="\u4E2A\u4EBA\u540D\u7247"&&e.rawSpoken==="\u4E2A\u4EBA\u540D\u7247")return;t=e.spoken,o="TEXT";break}default:{q.debug("unsupported message"),q.debug(e);return}}q.debug(e);let r=e.roomType===1||e.roomType===3,n={content:t,type:o,time:new Date,isGroupChat:r,atList:e.atMe==="true"?[this._options.me.nickName]:[],fromId:r?e.groupRemark.length?e.groupRemark:e.groupName:e.receivedName,senderId:e.receivedName,senderName:e.receivedName,senderInfo:{userId:e.receivedName,userName:e.receivedName,nickName:e.receivedName},toInfo:[this._options.me],messageId:ze(),origin:e};if(r){let a=n;a.groupInfo={userId:e.groupName,userName:e.groupName,nickName:e.groupRemark?.length?e.groupRemark:e.groupName,isGroup:!0},a.toInfo=[e.atMe?this._options.me:a.groupInfo]}let s=e.receivedName===this._options.me.nickName,i={id:ze(),type:"CHAT_MESSAGE",message:n,source:this,me:this._options.me};s?(i.type="SELF_SEND",this.event.emit(i.type,i)):this.event.emit(i.type,i)}async _onChatMessage(e){let t=e.body;return t.receivedName==="WorkTool"?(q.debug("received system test chat message"),{code:0,message:"success"}):(this._processChatMessage(t),{code:0,message:"success"})}async _onCommandMessage(e){return q.debug("command message"),q.debug(e.body),{code:0,message:"success"}}async _onLoginMessage(e){return q.debug("login message"),q.debug(e.body),this._fireLogin(),{code:0,message:"success"}}async _onLogoutMessage(e){q.debug("logout message"),q.debug(e.body);let t={type:"LOGOUT",user:this._options.me,id:ze(),source:this,me:this._options.me};return this.event.emit(t.type,t),{code:0,message:"success"}}_fireLogin(){let e={type:"LOGIN",user:this._options.me,id:ze(),source:this,me:this._options.me};this.event.emit(e.type,e)}};var zo=f("echo-runner"),Je=class p{constructor(e,t){this._app=e;this._options=t}static params={name:"test-echo-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...$t}}},desc:"\u6D4B\u8BD5\u8F93\u51FA\u6267\u884C\u5668"};get options(){return this._options}get params(){return p.params}async run(e){let t=e.data;return t.me?zo.debug(t.me.nickName+"\u767B\u9646"):zo.debug("\u6536\u5230echo\u6D88\u606F\uFF1A"+e.from),{}}};import{scheduleJob as mn}from"node-schedule";var Qe=class p extends be{constructor(t,o){super(t,o);this.app=t;this._options=o;this._logger=f(this._options.instanceName);let r=this._options.cron,n=this._options.cron?.trim().split(/\s+/);if(!n||n.length<5||n.length>7)throw new Error("cron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5\u3002");n.length===7&&(n.splice(6,1),r=n.join(" "),this._logger.debug("cron\u8868\u8FBE\u5F0F\u5DF2\u5FFD\u7565\u5E74\u4EFD\uFF1A"+r)),this._job=mn(r,()=>this._options.onTask({from:p.params.name,data:this}))}static params={name:"cron-task-trigger",desc:"\u5B9A\u65F6\u4EFB\u52A1",optionsSchema:{type:"formily",formily:{type:"object",properties:{cron:{type:"string",title:"Cron\u8868\u8FBE\u5F0F","x-decorator":"FormItem","x-component":"CronEditor","x-component-props":{placeholder:"\u8BF7\u70B9\u51FB\u7F16\u8F91\u6309\u94AE\u8FDB\u884C\u7F16\u8F91"}},context:{type:"object",title:"\u81EA\u5B9A\u4E49JSON Context","x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"trigger\u53EF\u4EE5\u62FF\u5230\u8FD9\u91CC\u81EA\u5B9A\u4E49\u7684\u5185\u5BB9\uFF0C\u4E0D\u6E05\u695A\u5219\u65E0\u9700\u8BBE\u7F6E\u3002"}}}}}};_job;_logger;get options(){return this._options}get params(){return p.params}async dispose(){this._job.cancel()}};import un from"emittery";import{createHash as dn}from"node:crypto";import{v4 as pe}from"uuid";import"recorder-core/src/engine/beta-amr.js";import"recorder-core/src/engine/beta-amr-engine.js";import"recorder-core/src/engine/wav.js";import gn from"form-data";import hn from"axios";var K=f("wcoa"),Ye=class p{constructor(e){this._options=e;if(!this._options.token||!this._options.appId)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this.options.apiBase=this._options.apiBase??"https://api.weixin.qq.com",this.event=new un}static params={name:"wcoa",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,appId:{type:"string",title:"\u5F00\u53D1\u8005ID\uFF08App ID\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u7684\u5F00\u53D1\u8005ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002"},required:!0},appSecret:{type:"string",title:"\u5F00\u53D1\u8005\u5BC6\u7801\uFF08App Secret\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002\u53EF\u4EE5\u4F7F\u7528__\u53D8\u91CF\uFF0C \u5982\uFF1A __wechat_oa_secret\u3002\u53EA\u9700\u5728\u5BA2\u6237\u7AEF\u7684.secret.json\u4E2D\u914D\u7F6E\u5BF9\u5E94\u7684\u53D8\u91CF\u5373\u53EF\u3002"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406-\u670D\u52A1\u5668\u914D\u7F6E\u4E2D\u67E5\u770B\u3002"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key\uFF08\u5F53\u524D\u4EC5\u652F\u6301\u660E\u6587\u6A21\u5F0F\uFF0C\u65E0\u9700\u8F93\u5165\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u524D\u5C1A\u672A\u652F\u6301\u52A0\u5BC6\u6A21\u5F0F\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u540E\u53F0\u8BBE\u7F6E\u670D\u52A1\u5668\u914D\u7F6E\u4E3A\u660E\u6587\u6A21\u5F0F\u3002"},required:!1,"x-disabled":!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://api.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://api.weixin.qq.com"}}}},eventNames:["CHAT_MESSAGE"],desc:"\u5FAE\u4FE1\u516C\u4F17\u5E73\u53F0"};_token;_sendMessageUrl;_me;get params(){return p.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:e=>this._onChatMessage(e)}}]}event;async _onCheckSignature(e){let t=e.query,o=t.signature,r=this._options.token,n=t.echostr,s=t.timestamp,i=t.nonce,a=[r,s,i].sort().join(""),c=dn("sha1");if(c.update(a),c.digest("hex")==o)return n}async _loadToken(){let e=`${this._options.apiBase}/cgi-bin/token?grant_type=client_credential&appid=${this._options.appId}&secret=${V(this._options.appSecret)}`,t=await(await fetch(e)).json();if(t.errmsg?.length){K.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,this._sendMessageUrl=`${this._options.apiBase}/cgi-bin/message/custom/send?access_token=${this._token}`,K.trace("\u6210\u529F\u83B7\u53D6\u516C\u4F17\u53F7token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}async _loadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,r=await fetch(o),n;if(r.headers.get("Content-Type").indexOf("json")>=0){let s=await r.json();if(s.errcode!==0){K.error(s.errmsg);return}n=_.fromPath(s.video_url,"binary",t)}else{let s=await r.arrayBuffer();n=_.fromBuffer(Buffer.from(s),t,"binary")}return n}async _uploadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`,r=new gn,n=await e.asReadStream();r.append("media",n);let s={...r.getHeaders()};return(await hn({method:"post",url:o,headers:s,data:r,responseType:"json"})).data?.media_id}async _processMessage(e){this._me={userId:e.ToUserName,userName:e.ToUserName,nickName:e.ToUserName};let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let r=e;t.type="TEXT",t.content=r.Content;break}case"image":{t.type="IMAGE";let r=e,s={file:_.fromPath(r.PicUrl,"binary",pe()+".png")};t.content=s;break}case"voice":{let r=e;if(r.Format.toLowerCase()!=="amr"){K.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+r.Format);break}t.type="AUDIO";let n=await this._loadMediaFile(r.MediaId,pe()+".amr"),s=await de(await n.asBuffer());await s.asLocalPath();let i={file:s};t.content=i;break}case"video":case"shortvideo":{let r=e;t.type="VIDEO";let n=await this._loadMediaFile(r.MediaId,pe()+".mp4"),s=await this._loadMediaFile(r.ThumbMediaId,pe()+".png"),i={file:n,previewImage:s};t.content=i;break}case"link":{t.type="ARTICLE";let r=e,n={url:r.Url,title:r.Title,desc:r.Description};t.content=n;break}case"location":{t.type="POSITION";let r=e,n={placeName:r.Label,placeDetail:r.Label,lon:r.Location_X,lat:r.Location_Y,mapLevel:r.Scale};t.content=n;break}case"event":{let r=e;switch(r.Event){case"subscribe":t.type="SUBSCRIBE",t.content={isSubscribe:!0};break;case"unsubscribe":t.type="UNSUBSCRIBE",t.content={isSubscribe:!1};break;default:K.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B\uFF1A"+r.Event);return}break}default:{K.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.MsgType);return}}let o={id:pe(),type:"CHAT_MESSAGE",message:t,source:this,me:this._me,onGenerating:()=>this._setTyping(t.fromId)};this.event.emit(o.type,o)}async _onChatMessage(e){if(this._onCheckSignature(e)){if(e.method.toLowerCase()==="get")return e.query.echostr}else return K.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),K.debug(e.body),"error";return this._processMessage(e.body.xml),"success"}async _setTyping(e){try{let t=`${this._options.apiBase}/cgi-bin/message/custom/typing?access_token=${this._token}`,o=await(await fetch(t,{method:"post",body:JSON.stringify({touser:e,command:"Typing"})})).json()}catch{K.info("\u8BBE\u7F6Etyping\u72B6\u6001\u5931\u8D25\uFF01")}}async me(){return this._me??{userId:"gh",userName:"gh",nickName:"gh-\u6536\u5230\u6D88\u606F\u540E\u624D\u80FD\u66F4\u65B0"}}hasLogin(){return!!this._token?.length}async login(){if(await this._loadToken()){let e={type:"LOGIN",user:this._me,id:pe(),source:this,me:this._me};this.event.emit(e.type,e)}}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:pe(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._me});let o={touser:e.toInfo[0].userId};switch(e.type){case"TEXT":{o.msgtype="text";let n=e.content;n.indexOf("(http")>=0&&(n=se(n)),o.text={content:n};break}case"IMAGE":{o.msgtype="image";let n=await this._uploadMediaFile(e.content.file,"image");if(!n){K.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}o.image={media_id:n};break}case"AUDIO":{o.msgtype="voice";let n=e.content.file,{file:s}=await re(n),i=await this._uploadMediaFile(s,"voice");if(!i){K.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}o.voice={media_id:i};break}case"VIDEO":{o.msgtype="video";let n=e.content;if(!n.previewImage){K.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadMediaFile(n.file,"video"),i=await this._uploadMediaFile(n.previewImage,"image");o.video={media_id:s,thumb_media_id:i,title:n.title??pe()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"ARTICLE":{o.msgtype="news";let n=e.content,s=n.coverFile??n.thumbFile,i;s&&(i=await s.asUrl()),o.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]};break}default:K.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}let r=await(await fetch(this._sendMessageUrl,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})).json();r.errcode!==0&&K.error(r.errmsg)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import fn from"emittery";import{DWClient as In,TOPIC_ROBOT as Xo}from"dingtalk-stream";import{v4 as oe}from"uuid";import yn from"form-data";import _n from"axios";import{getWavFileInfo as xn}from"wav-file-decoder";import Sn from"node-video-lib";var C=f("ding-robot"),Ze=class p{constructor(e,t){this._app=e;this._options=t;this._options.apiHost=this._options.apiHost??"https://api.dingtalk.com",this._options.oldApiHost=this._options.oldApiHost??"https://oapi.dingtalk.com",this._options.sendAudioFormat=this._options.sendAudioFormat??"amr",this._options.streamTemplateId?.length||C.info("\u60A8\u53EF\u4EE5\u53C2\u8003\u4EE5\u4E0B\u94FE\u63A5\uFF0C\u521B\u5EFA\u5361\u7247\u6A21\u677F\u540E\uFF0C\u5C06\u6A21\u677FID\u914D\u7F6E\u5230source\u9009\u9879\u4E2D\uFF0C\u652F\u6301\u6D41\u5F0F\u56DE\u590D\uFF1Ahttps://open.dingtalk.com/document/orgapp/typewriter-effect-streaming-ai-card"),this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,C.trace("\u8054\u7CFB\u4EBA\u7F13\u5B58\u6709\u6548\u671F\uFF1A"+this._options.contactsCacheTime/60/60+"\u5C0F\u65F6"),this._options.contactDepartId=this._options.contactDepartId??1,this._options.contactSleepMS=this._options.contactSleepMS??30,this._options.contactAutoloadOnStart=this._options.contactAutoloadOnStart??!0,this.event=new fn}static params={name:"dingbot",optionsSchema:$o({...D,clientId:{type:"string",title:"\u5BA2\u6237\u7AEFID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEFID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client ID\uFF0C\u975EApp ID"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},clientSecret:{type:"string",title:"\u5BA2\u6237\u7AEF\u5BC6\u94A5","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEF\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client Secret"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u4F01\u4E1AID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Corp ID"},"x-decorator-props":{tooltip:"\u4F01\u4E1AID\uFF0C\u53EF\u4EE5\u5728\u9489\u9489\u5F00\u653E\u5E73\u53F0\u9996\u9875\u770B\u5230\u3002\u4E00\u822C\u4EE5ding\u5F00\u5934\u3002"}},apiHost:{type:"string",title:"API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u4E3B\u673A\u5730\u5740"},default:"https://api.dingtalk.com"},oldApiHost:{type:"string",title:"\u65E7API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u65E7API\u4E3B\u673A\u5730\u5740"},default:"https://oapi.dingtalk.com"},agentId:{type:"number",title:"Agent ID","x-decorator":"FormItem","x-component":"NumberPicker","x-validator":{required:!0,message:"Agent ID\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\uFF0C\u540D\u4E3A \u539F\u4F01\u4E1A\u5185\u90E8\u5E94\u7528AgentId \u3002"}},robotCode:{type:"string",title:"\u673A\u5668\u4EBA\u4EE3\u7801","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u673A\u5668\u4EBA\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u673A\u5668\u4EBA\u7684\u4EE3\u7801"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u5E94\u7528\u80FD\u529B-\u673A\u5668\u4EBA\u9875\u9762\uFF0C\u70B9\u51FB\u590D\u5236 RobotCode \u5373\u53EF\u3002"}},markdownMsgTitle:{type:"string",title:"Markdown\u6D88\u606F\u6807\u9898","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5F53\u53D1\u9001\u6587\u672C\u7C7B\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u9489\u9489\u652F\u6301\u63D0\u4F9B\u4E00\u4E2A\u6807\u9898\uFF0C\u6807\u9898\u4F1A\u5728\u5217\u8868\u4E2D\u5C55\u793A\u3002\u9ED8\u8BA4\u662FAI\u56DE\u590D\u7684\u524D16\u4E2A\u5B57\u3002\u5982\u679C\u914D\u7F6E\u8FD9\u4E2A\u53C2\u6570\uFF0C\u5219\u4F1A\u56FA\u5B9A\u7528\u8FD9\u4E2A\u6807\u9898\u3002\u9ED8\u8BA4\u6536\u5230\u7684\u6D88\u606F\u5185\u5BB9\u7684\u524D16\u4E2A\u5B57\u3002"}},sendAudioFormat:{type:"string",enum:["wav","amr"],title:"\u53D1\u9001\u97F3\u9891\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u53D1\u9001\u97F3\u9891\u65F6\u7684\u683C\u5F0F\uFF0C\u9ED8\u8BA4amr\uFF0C\u53EF\u9009wav\uFF0Camr\u6587\u4EF6\u5C3A\u5BF8\u5C0F\uFF0C\u6548\u679C\u7565\u4F4E\u4E8Ewav\u3002"},default:"amr"},streamTemplateId:{type:"string",title:"\u6D41\u5F0F\u6A21\u677FID","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5982\u679C\u914D\u7F6E\u4E86\u8BE5\u53C2\u6570\uFF0C\u5219\u5F00\u542F\u6D41\u5F0F\u56DE\u590D\u3002\u9700\u8981\u5F00\u653E\u5E94\u7528\u7684\u5361\u7247\u76F8\u5173\u6743\u9650\u3002\u5361\u7247\u521B\u5EFA\u5730\u5740\uFF1Ahttps://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33e01934gUydw0"}},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},"x-component-props":{min:60*60},default:24*60*60},contactDepartId:{type:"number",title:"\u8054\u7CFB\u4EBA\u5217\u8868ID","x-decorator":"FormItem","x-component":"InputNumber","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7684\u5217\u8868ID\uFF0C\u53EF\u4EE5\u4ECE\u9489\u9489API Explorer\u76F8\u5173\u63A5\u53E3\u83B7\u53D6\uFF08\u4ECE\u6839\u8DEF\u5F84\u5F00\u59CB\u4E00\u5C42\u5C42\u83B7\u53D6\uFF09\u3002\u9ED8\u8BA41\uFF0C\u8868\u793A\u6839\u8DEF\u5F84\u3002\u5982\u679C\u5E0C\u671B\u53EA\u6709\u90E8\u5206\u90E8\u95E8\u7684\u7528\u6237\u53EF\u88AB\u524D\u7AEF\u9009\u53D6\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E0A\u7EA7\u90E8\u95E8ID\u3002"},default:1},contactAutoloadOnStart:{type:"boolean",title:"\u542F\u52A8\u65F6\u81EA\u52A8\u52A0\u8F7D\u8054\u7CFB\u4EBA","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5728\u7CFB\u7EDF\u542F\u52A8\u7684\u65F6\u5019\u5C31\u81EA\u52A8\u83B7\u53D6\u8054\u7CFB\u4EBA\u3002\u9ED8\u8BA4true\u3002\u5982\u679C\u5458\u5DE5\u8F83\u591A\uFF0C\u5EFA\u8BAE\u542F\u52A8\u65F6\u83B7\u53D6\uFF0C\u907F\u514D\u7B2C\u4E00\u6B21\u4F7F\u7528\u7B49\u5F85\u65F6\u95F4\u8FC7\u957F\u3002"},default:!0},contactSleepMS:{type:"number",title:"\u8054\u7CFB\u4EBA\u83B7\u53D6\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u9012\u5F52\u8C03\u7528\u83B7\u53D6\u7528\u6237\u63A5\u53E3\u53EF\u80FD\u89E6\u53D1\u9650\u6D41\uFF0C\u6B64\u65F6\u53EF\u4EE5\u8BBE\u7F6E\u83B7\u53D6\u95F4\u9694\uFF0C\u9ED8\u8BA4\u662F30ms\u4E00\u6B21\uFF0C\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u53EF\u4EE5\u8C03\u5927\u3002"},default:30}}),eventNames:["CHAT_MESSAGE"],supportedFileExts:["xlsx","pdf","zip","rar","doc","docx"],desc:"\u9489\u9489\u5E94\u7528"};_token;_oldToken;_talkClient;_me;_trackIdCache={};_contacts=[];_contactLoadingPromise;_departIdNameMap=new Map;get params(){return p.params}get options(){return this._options}get actions(){return[]}event;async _loadToken(){try{let e=`${this._options.apiHost}/v1.0/oauth2/${this._options.corpId}/token`,t=await(await fetch(e,{method:"post",body:JSON.stringify({client_id:this._options.clientId,client_secret:this._options.clientSecret,grant_type:"client_credentials"}),headers:{"Content-Type":"application/json"}})).json();if(!t.access_token){C.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+t.message),setTimeout(()=>{this._loadToken()},10*60*1e3);return}let o=Number(t.expires_in);this._token=t.access_token,C.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5E94\u7528token\uFF1A"+this._token),e=`${this._options.oldApiHost}/gettoken?appkey=${this._options.clientId}&appsecret=${this._options.clientSecret}`;let r=await(await fetch(e)).json();if(!r.access_token){C.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+r.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._oldToken=r.access_token,C.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5F15\u7528\u65E7\u7248token\uFF1A"+this._oldToken),o=Math.min(Number(t.expires_in),o),setTimeout(()=>{this._loadToken()},o/2*1e3)}catch(e){C.error(e),setTimeout(()=>{this._loadToken()},10*60*1e3)}}async _api(e,t,o=void 0){let r=`${this._options.apiHost}${e}`,n;return t==="get"?n=await(await fetch(r,{headers:{"x-acs-dingtalk-access-token":this._token}})).json():n=await(await fetch(r,{headers:{"x-acs-dingtalk-access-token":this._token,"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),n}async _oldApi(e,t,o=void 0){let r=`${this._options.oldApiHost}${e}?access_token=${this._oldToken}`,n;return t==="get"?n=await(await fetch(r)).json():n=await(await fetch(r,{headers:{"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),n.errcode!==0&&C.error(n.errmsg),n.result}async _downloadMedia(e,t){let o=await this._api("/v1.0/robot/messageFiles/download","post",{robotCode:this._options.robotCode,downloadCode:e});if(o.downloadUrl?.length)return _.fromPath(o.downloadUrl,"binary",t)}async _onChatMessage(e){let t={time:new Date(e.createAt),senderId:e.senderStaffId,fromId:e.senderStaffId,isGroupChat:!1,isSender:!1,senderName:e.senderStaffId,senderInfo:{userId:e.senderStaffId,userName:e.senderStaffId,nickName:e.senderNick},toInfo:[this._me],origin:e,messageId:e.msgId,type:void 0,content:void 0};switch(e.conversationType==="2"&&(t.fromId=e.conversationId,t.isGroupChat=!0,t.atList=[this._me.userId],t.groupInfo={userId:e.conversationId,userName:e.conversationId,nickName:e.conversationTitle}),e.msgtype){case"text":{t.type="TEXT",t.content=e.text.content;break}case"audio":{let o=e.content,n={file:await this._downloadMedia(o.downloadCode,oe()+".ogg"),text:o.recognition};t.type="AUDIO",t.content=n;break}case"richText":{let o={content:[]},r=e.content;for(let n of r.richText)if(n.downloadCode?.length){let s=n,a={file:await this._downloadMedia(s.downloadCode,oe()+".png")};o.content.push({type:"image",data:a})}else if(typeof n.text=="string"){let s=n;o.content.push({type:"text",data:s.text})}else C.warn("\u4E0D\u80FD\u8BC6\u522B\u7684rich text content"),C.warn(n);t.type="RICH_TEXT",t.content=o;break}case"file":{let o=e.content,n={file:await this._downloadMedia(o.downloadCode,o.fileName),title:o.fileName,desc:o.fileName};t.type="FILE",t.content=n;break}case"picture":{let o=e.content,n={file:await this._downloadMedia(o.downloadCode,oe()+".png")};t.type="IMAGE",t.content=n;break}case"video":{let o=e.content,n={file:await this._downloadMedia(o.downloadCode,oe()+"."+o.videoType)};t.type="VIDEO",t.content=n;break}default:C.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.msgtype),C.debug(e);return}if(t.content){let o={id:oe(),type:"CHAT_MESSAGE",message:t,source:this,me:this._me};this.event.emit(o.type,o)}}async _sendByWebhook(e){let t=V(e.toInfo[0].userId??e.toInfo[0].userName);if(!t.startsWith("http")){C.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o={at:{}};if(e.atList?.length)if(e.atList[0]==="@all")o.at.isAtAll=!0;else{let r=[],n=[];e.atList.forEach(s=>{wt(s)?r.push(s):n.push(s)}),o.at.atMobiles=r,o.at.atUserIds=n}switch(e.type){case"TEXT":{o.msgtype="markdown";let r=e.content;o.markdown={text:r,title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16))};break}case"AUDIO":{let r=e.content;if(!r.text?.length){C.warn("\u5F53\u524D\u97F3\u9891\u6CA1\u6709\u5BF9\u5E94\u7684\u6587\u5B57\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u9489\u9489\u673A\u5668\u4EBA\u53D1\u9001\uFF01");return}o.msgtype="markdown",o.markdown={text:r.text,title:this._options.markdownMsgTitle??r.text.slice(0,Math.min(r.text.length,16))};break}case"IMAGE":{let r=e.content,n=await this._getPublicUrl(r.file);o.msgtype="markdown",o.markdown={text:`![\u56FE\u7247](${n})`,title:"\u6536\u5230\u4E00\u5F20\u56FE\u7247"};break}case"ARTICLE":{let r=e.content;o.msgtype="link",o.link={title:r.title,messageUrl:r.url,text:r.desc??r.title,picUrl:await(r.coverFile??r.thumbFile??this._app.sharedLogo).asUrl()};break}}o.msgtype&&await fetch(t,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})}async _getPublicUrl(e){if(e)return await e.asUrl()}async _uploadMediaFile(e,t){let o=`${this._options.oldApiHost}/media/upload?access_token=${this._oldToken}`,r=new yn,n=await e.asReadStream();r.append("media",n),r.append("type",t);let s={...r.getHeaders()},i=await _n({method:"post",url:o,headers:s,data:r,responseType:"json"});if(i.data?.errcode!==0){C.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF01");return}return i.data?.media_id}async _sendByAPI(e,t){let o={robotCode:this._options.robotCode},r;if(e.isGroupChat)r="/v1.0/robot/groupMessages/send",o.openConversationId=e.toInfo[0].userId;else{let n=e.toInfo.map(s=>s.userId);o.userIds=n,r="/v1.0/robot/oToMessages/batchSend"}switch(e.type){case"TEXT":if(this._options.streamTemplateId?.length&&t?.origin?.outTrackId?.length){let n=t.origin.outTrackId,s=(this._trackIdCache[n]??"")+e.content;this._trackIdCache[n]=s,await this._api("/v1.0/card/streaming","put",{outTrackId:n,guid:oe(),key:"content",content:s,isFull:!0,isFinalize:!1,isError:!1});return}else{o.msgKey="sampleMarkdown",o.msgParam={title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16)),text:`${e.content}`};break}case"IMAGE":{o.msgKey="sampleImageMsg";let n=e.content;o.msgParam={photoURL:await this._getPublicUrl(n.file)};break}case"ARTICLE":{o.msgKey="sampleLink";let n=e.content,s=await this._getPublicUrl(n.coverFile??this._app.sharedCover);o.msgParam={text:n.desc??n.title,title:n.title,picUrl:s,messageUrl:n.url};break}case"AUDIO":{let n=e.content,s,i;if(this._options.sendAudioFormat==="amr"){let a=await re(n.file);s=await this._uploadMediaFile(a.file,"voice"),i=a.duration}else{s=await this._uploadMediaFile(n.file,"voice");let a=xn((await n.file.asBuffer()).buffer);i=parseInt(a.chunkInfo[1].dataLength/a.fmt.bytesPerSec*1e3)}o.msgKey="sampleAudio",o.msgParam={mediaId:s,duration:i};break}case"FILE":{let n=e.content,s=n.file.name.slice(n.file.name.lastIndexOf(".")+1);p.params.supportedFileExts.indexOf(s)<0&&(s=n.title?.slice(n.title.lastIndexOf(".")+1),p.params.supportedFileExts.indexOf(s)<0&&(C.warn("\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B\uFF1A"+s+",\u6765\u81EA\u6587\u4EF6\uFF1A"+n.file.name),C.warn("\u6587\u4EF6\u6807\u9898\uFF1A"+n.title),C.warn("\u76EE\u524D\u652F\u6301\u7684\u7C7B\u578B\uFF1A"+p.params.supportedFileExts.join(","))));let i=await this._uploadMediaFile(n.file,"file");o.msgKey="sampleFile",o.msgParam={mediaId:i,fileName:n.title??n.file.name,fileType:s};break}case"VIDEO":{let n=e.content;if(!n.file.name.endsWith(".mp4")&&!n.title?.endsWith(".mp4")){C.warn("\u5F53\u524D\u9489\u9489\u4EC5\u652F\u6301mp4\u6587\u4EF6\u4E0A\u4F20\uFF01");return}n.previewImage?.name||C.info("mp4\u6587\u4EF6\u5EFA\u8BAE\u63D0\u4F9B\u9884\u89C8\u56FE\uFF01");let s=Sn.MovieParser.parse(await n.file.asBuffer()),i=await this._uploadMediaFile(n.file,"video");if(o.msgKey="sampleVideo",o.msgParam={duration:String(s.duration/1e3),videoMediaId:i,videoType:"mp4"},n.previewImage?.name){let a=await this._uploadMediaFile(n.previewImage,"image");o.msgParam.picMediaId=a}break}default:{C.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);return}}o.msgParam&&(o.msgParam=JSON.stringify(o.msgParam),this._api(r,"post",o))}async _getDepartList(e,t){this._options.contactSleepMS>0&&await eo(this._options.contactSleepMS),C.debug("get depart of "+e);let o=await this._oldApi("/topapi/v2/department/listsub","post",{dept_id:e});if(t.push(e),o?.length)for(let r of o)this._departIdNameMap.set(r.dept_id,r.name),await this._getDepartList(r.dept_id,t)}async _getDepartUsers(e,t){this._options.contactSleepMS>0&&await eo(this._options.contactSleepMS);let o=await this._oldApi("/topapi/v2/user/list","post",{dept_id:e,cursor:t,size:100}),r=[];if(o?.list.length){for(let n of o.list)r.push({userId:n.userid,userName:n.userid,nickName:n.name,avatarUrl:n.avatar,bigAvatarUrl:n.avatar,signature:n.remark,origin:n});o.has_more&&r.push(...await this._getDepartUsers(e,o.next_cursor))}return C.debug("\u90E8\u95E8 id "+e+",name "+this._departIdNameMap.get(e)+" \u4E0B\u5171\u6709"+r.length+"\u4E2A\u8054\u7CFB\u4EBA"),r}async me(){if(this._me)return this._me;if(!this._options.clientId||!this._options.clientSecret)return this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"},this._me;let t=(await this._api("/v1.0/microApp/allInnerApps","get")).appList.find(o=>o.agentId===Number(this._options.agentId));return t?(this._me={userId:t.agentId,userName:t.name,avatarUrl:t.icon,bigAvatarUrl:t.icon,nickName:t.name,origin:t},this._me):(C.warn("\u6CA1\u6709\u627E\u5230agentId\u4E3A"+this._options.agentId+"\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5F00\u901A\u4E86\u5E94\u7528\u7BA1\u7406\u76F8\u5173\u6743\u9650\u6216\u8005id\u662F\u5426\u6B63\u786E\uFF01"),{userId:this._options.agentId.toString(),userName:this._options.agentId.toString(),nickName:"\u9489\u9489\u5E94\u7528-"+this._options.agentId})}hasLogin(){return!!(this._options.clientId&&this._options.clientSecret&&this._talkClient?.connected||!this._options.clientId||!this._options.clientSecret)}async login(){if(this._talkClient?.connected){C.warn("\u5F53\u524D\u8FDE\u63A5\u5DF2\u7ECF\u5F00\u542F\uFF0C\u65E0\u9700\u91CD\u590D\u767B\u5F55\uFF01");return}this._options.clientId&&this._options.clientSecret?(this._talkClient?this._talkClient.removeAllListeners(Xo):(await this._loadToken(),this._talkClient=new In({clientId:this._options.clientId,clientSecret:this._options.clientSecret,debug:this._options.debug??process.env.LOG_LEVEL==="debug"})),this._talkClient.registerCallbackListener(Xo,o=>{this._talkClient.socketCallBackResponse(o.headers.messageId,"success");let r=JSON.parse(o.data);this._onChatMessage(r)}),await this._talkClient.connect()):C.info("\u6CA1\u6709\u914D\u7F6E\u9489\u9489\u5E94\u7528\u7684client\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528\u7FA4\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01");let e=await this.me();this._options.contactAutoloadOnStart&&!this._contacts.length&&(C.debug("get contacts from login method"),await this.getContacts("all"));let t={id:oe(),source:this,me:e,user:e,type:"LOGIN"};!this._talkClient||this._talkClient.connected?this.event.emit(t.type,t):this._talkClient.socket.on("open",()=>{this.event.emit(t.type,t)})}async beforeSend(e){if((e.type==="TEXT"||e.type==="RICH_TEXT"||e.type==="AUDIO"||e.type==="REF")&&this._options.streamTemplateId?.length){let t=oe(),o;e.isGroupChat?o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imGroupOpenSpaceModel:{supportForward:!1},imGroupOpenDeliverModel:{robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_GROUP.${e.fromId}`}:o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imRobotOpenSpaceModel:{supportForward:!1},imRobotOpenDeliverModel:{spaceType:"IM_ROBOT",robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_ROBOT.${e.fromId}`},(await this._api("/v1.0/card/instances/createAndDeliver","post",o)).success&&(e.origin.outTrackId=t)}}async afterSend(e){let t=e.origin?.outTrackId;if(!t?.length)return;let o=this._trackIdCache[t]??"";await this._api("/v1.0/card/streaming","put",{outTrackId:t,guid:oe(),key:"content",content:o,isFull:!0,isFinalize:!0,isError:!1}),delete this._trackIdCache[t]}sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:oe(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0];return(o.userId??o.userName).startsWith("http")||o.userId.startsWith("__")?this._sendByWebhook(e):this._sendByAPI(e,t)}async getContacts(e,t=!1){return C.trace("=========================================================="),e==="group"?(C.warn("\u9489\u9489\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[]):this._contacts.length&&!t?(C.trace("get contacts from cache"),this._contacts):this._contactLoadingPromise?this._contactLoadingPromise:(this._contactLoadingPromise=(async()=>{C.trace("loading ding contacts");let o=[];await this._getDepartList(this._options.contactDepartId,o);let r=new Set;for(let n of o)(await this._getDepartUsers(n,0)).forEach(i=>{r.add(i)});return this._contacts=Array.from(r),this._contactLoadingPromise=void 0,C.debug("\u5171\u83B7\u53D6\u5230"+this._contacts.length+"\u4E2A\u9489\u9489\u8054\u7CFB\u4EBA"),this._contacts})(),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3),this._contactLoadingPromise)}async getContactDetail(e){return e}dispose(){this._talkClient?.connected&&this._talkClient.disconnect()}};import bn from"emittery";import{decrypt as Jo,getSignature as Cn}from"@wecom/crypto";import{v4 as G}from"uuid";import{XMLParser as vn}from"fast-xml-parser";import kn from"form-data";import Tn from"axios";import wn from"md5";var S=f("wework-app"),et=class p{constructor(e,t){this._app=e;this._options=t;this._apiHost=this._options.apiHost??"https://qyapi.weixin.qq.com",this._cacheManager=Tt(this._options.instanceName),this.event=new bn}static params={name:"wework-app",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u4F01\u4E1AID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u6211\u7684\u4F01\u4E1A \u6700\u4E0B\u65B9\u67E5\u770B"},required:!0},agentId:{type:"string",title:"Agent ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Agent ID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},secret:{type:"string",title:"Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Secret"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u53E3\u6D88\u606F\u7684 Token"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u6536\u6D88\u606F\u7684 AES Key"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"API \u5730\u5740"},default:"https://qyapi.weixin.qq.com"},welcomeInKfMode:{type:"boolean",title:"\u5BA2\u670D\u6A21\u5F0F\u63A5\u5165\u7684\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u5BA2\u670D\u6A21\u5F0F\u4E0B\uFF0C\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u65F6\u662F\u5426\u53D1\u9001\u6B22\u8FCE\u8BED\uFF0C\u9ED8\u8BA4 false"},default:!1},welcomePrompt:{type:"string",title:"\u5BA2\u670D\u6A21\u5F0F\u751F\u6210\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u5982 __\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2"},"x-decorator-props":{tooltip:"\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED\uFF0C\u53EF\u4EE5\u4F7F\u7528 {nickName} \u5BF9\u7528\u6237\u7684\u6635\u79F0\u8FDB\u884C\u5360\u4F4D\uFF0C\u5982\u679C\u4EE5 __\u5F00\u5934\uFF0C\u8868\u793A\u76F4\u63A5\u53D1\u9001\u8BE5\u6B22\u8FCE\u8BCD\uFF0C\u800C\u4E0D\u662F\u9001\u5230\u540E\u7AEF\u8FDB\u884C\u751F\u6210\u3002"}},appChatGroups:{type:"array",title:"\u8981\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A","x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u4EC5\u4F7F\u7528\u5E94\u7528\u5355\u804A\u5BF9\u8BDD\uFF0C\u65E0\u9700\u8BBE\u7F6E\u3002\u9700\u8981\u8BE5\u5E94\u7528\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A\uFF08\u5DF2\u5B58\u5728\u65F6\u4E0D\u4F1A\u91CD\u590D\u521B\u5EFA\uFF09\u3002\u7531\u4E8E\u53EA\u6709\u5E94\u7528\u521B\u5EFA\u7684\u7FA4\u804A\u624D\u80FD\u4E3B\u52A8\u63A8\u9001\u6D88\u606F\uFF0C\u56E0\u6B64\u9700\u8981\u5148\u521B\u5EFA\u7FA4\u804A\u3002\u5F80\u7FA4\u91CC\u63A8\u6D88\u606F\u5EFA\u8BAE\u4F7F\u7528webhook\u673A\u5668\u4EBA\uFF0C\u800C\u4E0D\u662F\u5E94\u7528\u673A\u5668\u4EBA\uFF0Cwebhook\u652F\u6301Markdown\u6D88\u606F\u3002"},items:{type:"object","x-component":"ArrayItems.Item",properties:{userlist:{type:"array",title:"\u7FA4\u6210\u5458\u5217\u8868","x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6210\u5458\u7684ID\uFF0C\u53EF\u5728\u540E\u53F0\u901A\u8BAF\u5F55\u67E5\u770B"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u6210\u5458","x-component":"ArrayItems.Addition"}}},chatid:{type:"string",title:"\u7FA4\u804A ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u804A ID\uFF0C\u5EFA\u8BAE\u968F\u673A\u751F\u6210\u4E00\u4E2A"}},name:{type:"string",title:"\u7FA4\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u540D\u79F0"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u7FA4","x-component":"ArrayItems.Addition"}}}}}},eventNames:["CHAT_MESSAGE","LOGIN"],desc:"\u4F01\u4E1A\u5FAE\u4FE1\u5E94\u7528/\u5BA2\u670D"};_apiHost;_token;_me;_cacheManager;get params(){return p.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:e=>this._onMessage(e)}}]}event;async _loadToken(){if(!this._options.corpId||!this._options.secret)return S.info("\u5F53\u524D\u4F01\u5FAE\u6E90\u672A\u914D\u7F6E\u4F01\u4E1A\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528webhook\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01"),!0;let e=`${this._apiHost}/cgi-bin/gettoken?corpid=${this._options.corpId}&corpsecret=${this._options.secret}`,t=await(await fetch(e)).json();if(t.errcode!==0){S.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,S.debug("\u6210\u529F\u83B7\u53D6\u4F01\u5FAE\u5E94\u7528token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}_checkSignature(e,t,o,r){let n=Cn(this._options.token,t,o,r);return e===n}async _loadMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,r=await fetch(o),n;if(r.headers.get("Content-Type").indexOf("json")>=0){let s=await r.json();if(s.errcode!==0){S.error(s.errmsg);return}n=_.fromPath(s.video_url,"binary",t)}else{let s=await r.arrayBuffer();n=_.fromBuffer(Buffer.from(s),t,"binary")}return n}async _uploadMediaFile(e,t){let o=new kn,r=await t.asReadStream();o.append("media",r);let n={...o.getHeaders()},s=await Tn({method:"post",url:e,headers:n,data:o,responseType:"json"});return s.data?.errcode!==0&&S.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u5927\u5C0F\u548C\u7C7B\u578B\u662F\u5426\u652F\u6301\uFF01"),s.data?.media_id}async _uploadAppMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`;return this._uploadMediaFile(o,e)}async _uploadRobotMediaFile(e,t,o){let r=`${this._apiHost}/cgi-bin/webhook/upload_media?key=${o}&type=${t}`;return this._uploadMediaFile(r,e)}async _processKfMessage(e,t){let o=e.external_userid??e.event?.external_userid;if(!o?.length){S.warn("\u8BE5\u6D88\u606F\u6CA1\u6709userid\uFF0C\u65E0\u6CD5\u56DE\u590D\uFF01"),S.warn(e);return}e.external_userid=o,e.open_kfid=e.open_kfid??e.event?.open_kfid;let r=await this._cacheManager.get(o);if(!r){let i=await this._api("/cgi-bin/kf/customer/batchget","post",{external_userid_list:[o],need_enter_session_context:0});if(i?.customer_list?.length){let a=i.customer_list[0];r={userId:o,userName:o,avatarUrl:a.avatar,bigAvatarUrl:a.avatar,nickName:a.nicname,origin:a},this._cacheManager.set(o,r)}}r||(S.warn("\u672A\u80FD\u83B7\u53D6\u5230\u8BE5\u7528\u6237\u7684\u4FE1\u606F\uFF0C\u53EF\u80FD\u8BE5\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u5BA2\u670D\u5DF2\u7ECF\u8D85\u8FC748\u5C0F\u65F6\uFF01"),r={userId:o,userName:o,nickName:o});let n={atList:[],time:new Date(e.send_time*1e3),senderId:e.external_userid,fromId:e.external_userid,isGroupChat:!1,isSender:!1,senderName:r.userName,senderInfo:r,toInfo:[this._me],messageId:e.msgid,origin:{...t,data:{...e}},type:void 0,content:void 0};switch(e.msgtype){case"text":{let i=e.text;n.type="TEXT",n.content=i.content;break}case"image":{n.type="IMAGE";let i=e.image,c={file:await this._loadMediaFile(i.media_id,G()+".png")};n.content=c;break}case"voice":{let i=e.voice;n.type="AUDIO";let a=await this._loadMediaFile(i.media_id,G()+".amr"),c=await de(await a.asBuffer());await c.asLocalPath();let l={file:c};n.content=l;break}case"video":{let i=e.video;n.type="VIDEO";let a=await this._loadMediaFile(i.media_id,G()+".mp4"),c=await this._app.sharedCover,l={file:a,previewImage:c};n.content=l;break}case"link":{n.type="ARTICLE";let i=e.link,a={url:i.url,title:i.title,desc:i.desc,coverFile:i.pic_url?.length?_.fromPath(i.pic_url,"binary",G()+".png"):this._app.sharedCover};n.content=a;break}case"location":{n.type="POSITION";let i=e.location,a={placeName:i.name,placeDetail:i.address,lon:i.longitude,lat:i.latitude,mapLevel:void 0};n.content=a;break}case"event":{e.event.external_userid?.length&&await this._processKfUserEventMessage(e,n);break}default:break}if(!n.content){S.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),S.warn(n);return}let s={id:G(),type:"CHAT_MESSAGE",message:n,source:this,me:this._me};this.event.emit(s.type,s)}async _processKfUserEventMessage(e,t){switch(e.event.event_type){case"enter_session":{if(this._options.welcomeInKfMode){let o=this._options.welcomePrompt??"__\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2";if(o=o.replaceAll("{nickName}",t.senderInfo.nickName),t.type="TEXT",t.content=o,o.startsWith("__")){let r={type:"TEXT",content:o,toInfo:[t.senderInfo],isGroupChat:!1};await this._sendKfMessage(r,t),t.type=void 0,t.content=void 0}}break}}}async _onKfMessage(e){let t=await this._cacheManager.get("cursor"),o;if(t?.length)o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:t});else for(o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId});o.has_more===1;){let s=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:o.next_cursor});if(s.msg_list?.length){let i=o.msg_list;i.push(...s.msg_list),s.msg_list=i,o=s}else break}if(!o?.next_cursor){S.warn("\u83B7\u53D6\u6700\u65B0\u6D88\u606F\u5931\u8D25\uFF01");return}if(await this._cacheManager.get("cursor")!==t){S.info("\u6709\u65B0\u7684\u6D88\u606F\u8986\u76D6\u4E86\u672C\u6B21\u8FDE\u63A5\uFF0C\u5185\u5BB9\u5C06\u5728\u65B0\u7684\u8BF7\u6C42\u4E2D\u5904\u7406");return}if(await this._cacheManager.set("cursor",t),!o.msg_list.length)return;let n=o.msg_list.toReversed();if(!t?.length)this._processKfMessage(n[0],e);else{let s=[];for(let i of n)if(i.msgtype==="event"){if(i.event.external_userid?.length){let a=i.event.external_userid;s.indexOf(a)<0&&(s.push(a),this._processKfMessage(i,e))}}else s.indexOf(i.external_userid)<0&&(s.push(i.external_userid),this._processKfMessage(i,e))}}async _processEventMessage(e,t){switch(e.Event){case"subscribe":t.type="SUBSCRIBE",t.content={isSubscribe:!0};break;case"unsubscribe":t.type="UNSUBSCRIBE",t.content={isSubscribe:!1};break;case"LOCATION":break;default:break}}async _processAppMessage(e){let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let r=e;t.type="TEXT",t.content=r.Content;break}case"image":{t.type="IMAGE";let r=e,s={file:_.fromPath(r.PicUrl,"binary",G()+".png")};t.content=s;break}case"voice":{let r=e;if(r.Format.toLowerCase()!=="amr"){S.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+r.Format);break}t.type="AUDIO";let n=await this._loadMediaFile(r.MediaId,G()+".amr"),s=await de(await n.asBuffer());await s.asLocalPath();let i={file:s};t.content=i;break}case"video":{let r=e;t.type="VIDEO";let n=await this._loadMediaFile(r.MediaId,G()+".mp4"),s=await this._loadMediaFile(r.ThumbMediaId,G()+".png"),i={file:n,previewImage:s};t.content=i;break}case"link":{t.type="ARTICLE";let r=e,n={url:r.Url,title:r.Title,desc:r.Description,coverFile:_.fromPath(r.PicUrl,"binary",G()+".png")};t.content=n;break}case"location":{t.type="POSITION";let r=e,n={placeName:r.Label,placeDetail:r.Label,lon:r.Location_X,lat:r.Location_Y,mapLevel:r.Scale};t.content=n;break}case"event":{await this._processEventMessage(e,t);break}default:break}if(!t.content){S.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),S.warn(t);return}let o={id:G(),type:"CHAT_MESSAGE",message:t,source:this,me:this._me};this.event.emit(o.type,o)}async _onMessage(e){let t=e.query,{msg_signature:o,timestamp:r,nonce:n}=t;if(e.method.toLowerCase()==="get")return this._checkSignature(o,Number(r),n,t.echostr)?Jo(this._options.aesKey,t.echostr).message:(S.warn("\u6536\u5230\u975E\u6CD5GET\u8BF7\u6C42\uFF01"),S.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");let s=e.body.xml;if(!this._checkSignature(o,Number(r),n,s.Encrypt))return S.warn("\u6536\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),S.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01";let i=Jo(this._options.aesKey,s.Encrypt),a=new vn().parse(i.message).xml;return a.MsgType==="event"&&a.Event==="kf_msg_or_event"?this._onKfMessage(a):this._processAppMessage(a),""}async _api(e,t,o=void 0,r,n="application/json"){let s=`${this._apiHost}${e}?access_token=${this._token}`;r&&(r=new URLSearchParams(r)),r?.size>0&&(s=s+`&${r.toString()}`);let i;if(t==="get"?i=await(await fetch(s)).json():i=await(await fetch(s,{headers:{"Content-Type":n},method:t,body:JSON.stringify(o)})).json(),i.errcode!==0){S.error(i.errmsg);return}return i}async _sendAppGroupMessage(e){let t=e.toInfo[0],o=t.userId??t.userName;o?.length||(S.warn("chatid\u914D\u7F6E\u5F02\u5E38\uFF01"),S.warn(t));let r={chatid:o,safe:0};switch(e.type){case"TEXT":{r.msgtype="text";let n=e.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.text={content:n};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(e.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=e.content.file,{file:s}=await re(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=e.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s,title:n.title??G()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"FILE":{r.msgtype="file";let n=e.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{let n=e.content;if(n.coverFile||n.thumbFile){r.msgtype="news";let i=await(n.coverFile??n.thumbFile).asUrl();r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]}}else r.msgtype="textcard",r.textcard={title:n.title,description:n.desc??n.title,url:n.url??h.httpUrl,btntxt:n.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case"MUSIC":{r.msgtype="news";let n=e.content;r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}r.msgtype&&await this._api("/cgi-bin/appchat/send","post",r)}async _sendRobotMessage(e){let t=e.toInfo[0],o=V(t.userId??t.userName);if(!o?.startsWith("http")){S.warn("\u673A\u5668\u4EBA\u6D88\u606F\u914D\u7F6E\u7684webhook\u5730\u5740\u5F02\u5E38\uFF01"),S.warn(e);return}let n=new URLSearchParams(o.split("?")[1]).get("key"),s={};switch(e.type){case"TEXT":{s.msgtype="markdown";let i=e.content;if(!i?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}if(s.markdown={content:i},e.atList?.length){let a=[];e.atList.forEach(c=>{wt(c)?a.push(c):s.markdown.content=s.markdown.content+` <@${c}>`}),a.length&&(s.markdown.mentioned_mobile_list=a)}break}case"IMAGE":{s.msgtype="image";let i=e.content.file,a=await i.asBuffer(),c=wn(a),l=await i.asBase64();s.image={base64:l,md5:c};break}case"AUDIO":{s.msgtype="voice";let i=e.content.file,{file:a}=await re(i),c=await this._uploadRobotMediaFile(a,"voice",n);if(!c){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:c};break}case"FILE":{s.msgtype="file";let i=e.content,a=await this._uploadRobotMediaFile(i.file,"file",n);s.file={media_id:a};break}case"ARTICLE":{s.msgtype="news";let i=e.content,a=i.coverFile??i.thumbFile,c;a&&(c=await a.asUrl()),s.news={articles:[{title:i.title,description:i.desc??i.title,url:i.url,picurl:c}]};break}case"MUSIC":{s.msgtype="news";let i=e.content;s.news={articles:[{title:i.title,description:i.desc??i.title,url:i.url??await i.file.asUrl(),picurl:i.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await(await fetch(o,{headers:{"Content-Type":"application/json"},method:"post",body:JSON.stringify(s)})).json()}async _sendKfMessage(e,t){let o=t?.origin?.data;o||S.warn("fromMesage\u4E2D\u6CA1\u6709origin.data\uFF0C\u65E0\u6CD5\u83B7\u77E5open_kfid\uFF01"),e.toInfo.length>1&&S.warn("\u5F53\u524D\u6D88\u606F\u6E90\u4E0D\u652F\u6301\u540C\u65F6\u53D1\u9001\u591A\u4E2A\u5BF9\u8C61\uFF0C\u5C06\u53EA\u53D1\u9001\u7B2C\u4E00\u4E2A\uFF01");let r={touser:e.toInfo[0].userId,open_kfid:o.open_kfid};switch(e.type){case"TEXT":{r.msgtype="text";let n=e.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.text={content:se(n)};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(e.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=e.content.file,{file:s}=await re(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=e.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s};break}case"FILE":{r.msgtype="file";let n=e.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{r.msgtype="link";let n=e.content,s=n.coverFile??n.thumbFile??this._app.sharedCover,i=await this._uploadAppMediaFile(s,"image");r.link={title:n.title,desc:n.desc??n.title,url:n.url,thumb_media_id:i};break}case"MP":{r.msgtype="miniprogram";let n=e.content,s=n.cover??this._app.sharedCover,i=await this._uploadAppMediaFile(s,"image");r.miniprogram={appid:n.id,title:n.title,thumb_media_id:i,pagepath:n.openUrl??n.openRelativePath};break}case"POSITION":{r.msgtype="location";let n=e.content;r.location={name:n.placeName,address:n.placeDetail,latitude:n.lat,longitude:n.lon};break}case"CUSTOM":{e.customType==="ca_link"&&(r.msgtype="ca_link",r.ca_link={link_url:e.content});break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}r.msgtype&&await this._api("/cgi-bin/kf/send_msg","post",r)}async _sendAppMessage(e,t){let r={touser:e.toInfo.map(n=>n.userId).join("|"),toparty:e.origin?.toparty,totag:e.origin?.totag,agentid:this._options.agentId,safe:e.origin?.safe};switch(e.type){case"TEXT":{r.msgtype="markdown";let n=e.content;if(!n?.length){S.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}r.markdown={content:n};break}case"IMAGE":{r.msgtype="image";let n=await this._uploadAppMediaFile(e.content.file,"image");if(!n){S.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}r.image={media_id:n};break}case"AUDIO":{r.msgtype="voice";let n=e.content.file,{file:s}=await re(n),i=await this._uploadAppMediaFile(s,"voice");if(!i){S.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}r.voice={media_id:i};break}case"VIDEO":{r.msgtype="video";let n=e.content;if(!n.previewImage){S.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let s=await this._uploadAppMediaFile(n.file,"video");r.video={media_id:s,title:n.title??G()+".mp4",description:n.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case"FILE":{r.msgtype="file";let n=e.content,s=await this._uploadAppMediaFile(n.file,"file");r.file={media_id:s};break}case"ARTICLE":{let n=e.content;if(n.coverFile||n.thumbFile){r.msgtype="news";let i=await(n.coverFile??n.thumbFile).asUrl();r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:i}]}}else r.msgtype="textcard",r.textcard={title:n.title,description:n.desc??n.title,url:n.url??h.httpUrl,btntxt:n.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case"MUSIC":{r.msgtype="news";let n=e.content;r.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:S.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}r.msgtype&&await this._api("/cgi-bin/message/send","post",r)}async me(e){if(this._me&&!e)return this._me;if(!this._token?.length)return{userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};let t=await this._api("/cgi-bin/agent/get","get",void 0,{agentId:this._options.agentId});if(t)return this._me={userId:this._options.agentId,userName:this._options.agentId,nickName:t.name,avatarUrl:t.square_logo_url,signature:t.description,origin:t},this._me}hasLogin(){return!!(this._options.secret&&this._token?.length||!this._options.secret||!this._options.agentId||!this._options.token)}async login(){if(!this._token){if(await this._loadToken()){let e=await this.me(),t={type:"LOGIN",user:e,id:G(),source:this,me:e};this.event.emit(t.type,t)}this._options.appChatGroups?.length&&(await this.createAppGroupChats(this._options.appChatGroups),S.info("\u7FA4\u804A\u521B\u5EFA\u5B8C\u6210\uFF0C\u5982\u679C\u63D0\u793A\u7FA4\u804A\u5DF2\u5B58\u5728\uFF0C\u53EF\u4EE5\u5FFD\u7565"))}}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:G(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._me});let o=t?.origin;return e.isGroupChat||e.toInfo[0].isGroup?e.toInfo[0].app?this._sendAppGroupMessage(e):this._sendRobotMessage(e):o&&o.MsgType==="event"&&o.Event==="kf_msg_or_event"?this._sendKfMessage(e,t):this._sendAppMessage(e,t)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async createAppGroupChats(e){for(let t of e)await this._api("/cgi-bin/appchat/create","post",{...t,owner:t.userlist[0]})}};import An from"emittery";import{AppType as Pn,Client as Mn,EventDispatcher as On,LoggerLevel as so,WSClient as En}from"@larksuiteoapi/node-sdk";import{v4 as ce}from"uuid";import{getWavFileInfo as Fn}from"wav-file-decoder";var tt={article:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"img",img_key:"{image_key}",preview:!0,transparent:!1,scale_type:"fit_horizontal",alt:{tag:"plain_text",content:""}},{tag:"column_set",flex_mode:"none",horizontal_spacing:"8px",horizontal_align:"left",columns:[{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{desc}",text_align:"left",text_size:"normal",icon:{tag:"standard_icon",token:"describe_outlined",color:"grey"}}],weight:3},{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{link}",text_align:"left",text_size:"normal"}],weight:1}],margin:"16px 0px 0px 0px"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue"}}},stream:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue",ud_icon:{tag:"standard_icon",token:"reply_filled"}}}},textImage:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"column_set",flex_mode:"none",columns:[{tag:"column",width:"weighted",vertical_align:"top",elements:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}],weight:1},{tag:"column",width:"auto",vertical_align:"top",elements:[{tag:"img",img_key:"{image_key}",preview:!0,scale_type:"crop_center",size:"medium",alt:{tag:"plain_text",content:""}}]}],margin:"16px 0px 0px 0px"}]},i18n_header:{}}};import{fileTypeFromBuffer as Nn}from"file-type";var k=f("feishu-source"),ot=class p{constructor(e,t){this._app=e;this._options=t;this._options.ignoreNoneUserMessage=this._options.ignoreNoneUserMessage??!0,this._options.replayTextMode=this._options.replayTextMode??"rich_text",this._options.richTextTitleTemplate=this._options.richTextTitleTemplate??"RE:{title}",this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,this._options.thinkingTips=this._options.thinkingTips??"\u6B63\u5728\u601D\u8003\u4E2D...",this._options.domain=this._options.domain??"https://open.feishu.cn",this.event=new An}static params={name:"feishu",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App ID"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App Secret"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},verificationToken:{type:"string",title:"Verification Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Verification Token\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},encryptKey:{type:"string",title:"Encrypt Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Encrypt Key\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},domain:{type:"string",title:"Domain","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://open.feishu.cn"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://open.feishu.cn"},default:"https://open.feishu.cn"},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4 (\u79D2)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60*60,placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},default:24*60*60},contactDepartId:{type:"string",title:"\u8054\u7CFB\u4EBA\u5217\u8868 ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u5217\u8868 ID\uFF0C\u9ED8\u8BA4\u4F7F\u7528\u8DDF\u5217\u8868\u3002"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u5217\u8868\u7684 ID\uFF0C\u5982\u679C\u4EE5 od- \u5F00\u5934\u8868\u793A\u98DE\u4E66\u81EA\u52A8\u751F\u6210\u7684\u5F00\u653E ID\uFF0C\u5426\u5219\u4E3A\u81EA\u5B9A\u4E49 ID"}},ignoreNoneUserMessage:{type:"boolean",title:"\u5FFD\u7565\u975E\u7528\u6237\u6D88\u606F","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5FFD\u7565\u975E\u7528\u6237\u53D1\u9001\u7684\u6D88\u606F\uFF0C\u9ED8\u8BA4 true"},default:!0},replayTextMode:{type:"string",enum:[{label:"\u666E\u901A\u56DE\u590D",value:"text"},{label:"\u56FE\u6587\u6DF7\u6392",value:"rich_text"},{label:"\u6D41\u5F0F\u56DE\u590D",value:"stream"}],title:"\u6D88\u606F\u56DE\u590D\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6D88\u606F\u56DE\u590D\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6D88\u606F\u7684\u56DE\u590D\u65B9\u5F0F\uFF0C\u9ED8\u8BA4\u4F7F\u7528 \u666E\u901A\u56DE\u590D \u6A21\u5F0F\u3002\u56DE\u590D\u65F6\uFF0C\u5982\u679C\u6709\u8BED\u97F3\u5C06\u4F1A\u5355\u72EC\u53D1\u9001\u3002"},default:"text"},cardId:{type:"string",title:"\u5361\u7247\u6A21\u677F ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5361\u7247\u6A21\u677F ID\uFF08\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u914D\u7F6E\u4E3A\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u53EF\u63D0\u4F9B\u81EA\u5B9A\u4E49\u5361\u7247 ID\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F"}},richTextTitle:{type:"boolean",title:"\u542F\u7528\u56FE\u6587\u6DF7\u6392\u6807\u9898","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u5F53\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u56DE\u590D\u65F6\uFF0C\u662F\u5426\u542F\u7528\u6807\u9898\uFF0C\u9ED8\u8BA4 false\u3002\u9700\u8BBE\u7F6E\u4E3A\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u624D\u751F\u6548\u3002"},default:!1},richTextTitleTemplate:{type:"string",title:"\u56FE\u6587\u6DF7\u6392\u6807\u9898\u6A21\u677F","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"RE:{title}"},"x-decorator-props":{tooltip:"\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u6807\u9898\u6A21\u677F\uFF0C\u9ED8\u8BA4\u662F RE:{title} \uFF0C\u5176\u4E2Dtitle\u662F\u6839\u636E\u6A21\u578B\u56DE\u590D\u5185\u5BB9\u751F\u6210\u7684\u6807\u9898\u3002\u9700\u5F00\u542F\u6807\u9898\u624D\u751F\u6548\u3002"},default:"RE:{title}"},thinkingTips:{type:"string",title:"\u601D\u8003\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u601D\u8003\u63D0\u793A\u8BED\uFF0C\u5982 \u6B63\u5728\u601D\u8003\u4E2D..."},"x-decorator-props":{tooltip:"\u542F\u7528\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u6B63\u5728\u601D\u8003\u7684\u63D0\u793A\u8BED\uFF0C\u9ED8\u8BA4\u662F\u201C\u6B63\u5728\u601D\u8003\u4E2D...\u201D"}},wavChannel:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u901A\u9053\u6570","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[{value:1},{value:2}],default:1},wavSampleRate:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u91C7\u6837\u7387","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],default:16e3}}}},eventNames:["CHAT_MESSAGE","LOGIN"],desc:"\u98DE\u4E66\u5E94\u7528"};_me;_client;_wsClient;_connected;_departCache;_userCache;_trackIdCache={};get params(){return p.params}get options(){return this._options}get actions(){return[]}event;_getResourceFile(e,t,o,r){let n=async()=>{let s=await this._client.im.messageResource.get({params:{type:o},path:{file_key:t,message_id:e}}),i=await Do(s.getReadableStream());if(!r){let a=await Nn(i);r=ce()+"."+a.ext}return{data:i,type:"buffer",name:r}};return new _(n,"binary")}async _getRichTextContent(e,t){let o={title:t.title,content:[]};return t.content.forEach(r=>{r.forEach(n=>{switch(n.tag){case"text":o.content.push({type:"text",data:n.text});break;case"a":o.content.push({type:"text",data:n.text});break;case"code_block":o.content.push({type:"text",data:n.text+`(\u4EE3\u7801\u8BED\u8A00\uFF1A${n.language})`});break;case"emotion":{o.content.push({type:"text",data:n.emoji_type});break}case"img":{o.content.push({data:{file:this._getResourceFile(e,n.image_key,"image")},type:"image"});break}case"media":{let s=n;s.image_key?.length&&o.content.push({data:{file:this._getResourceFile(e,s.image_key,"file")},type:"image"});break}default:k.debug("\u65E0\u9700\u5904\u7406\u7684\u5BCC\u6587\u672Ctag\uFF1A"+n.tag);break}})}),o}async _processChatMessage(e,t,o){switch(e){case"text":{let r=t;o.type="TEXT";let n=r.text;o.atList?.length&&o.origin.mentions.forEach(s=>{n=n.replaceAll(s.key,"")}),o.content=n.trim();break}case"post":{o.type="RICH_TEXT",o.content=await this._getRichTextContent(o.messageId,t);break}case"image":{o.type="IMAGE";let r={file:this._getResourceFile(o.messageId,t.image_key,"image")};o.content=r;break}case"file":{o.type="FILE";let r=t,n={file:this._getResourceFile(o.messageId,r.file_key,"file",r.file_name),title:r.file_name};o.content=n;break}case"audio":{o.type="AUDIO";let r=t,n=ce()+".opus",s=this._getResourceFile(o.messageId,r.file_key,"file",n),a={file:await we(s,"wav",c=>(this._options.wavChannel&&(k.trace("custom wav channel "+this._options.wavChannel),c.withAudioChannels(this._options.wavChannel)),this._options.wavSampleRate&&(k.trace("custom wav sample rate "+this._options.wavSampleRate),c.withAudioFrequency(this._options.wavSampleRate)),c))};o.content=a;break}case"media":{o.type="VIDEO";let r=t,n=this._getResourceFile(o.messageId,r.file_key,"file",ce()+r.file_name),s=r.image_key.length&&this._getResourceFile(o.messageId,r.image_key,"image"),i={file:n,previewImage:s};o.content=i;break}case"interactive":{let r=t,n={content:[],title:r.title};r.elements.forEach(s=>{s.forEach(i=>{i.elements.length?i.elements.forEach(a=>{a.tag==="text"?n.content.push({type:"text",data:a.text}):a.tag==="img"&&n.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,a.image_key,"image")}})}):i.tag==="text"?n.content.push({type:"text",data:i.text}):i.tag==="img"&&n.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,i.image_key,"image")}})})});break}case"hongbao":{o.type="TEXT",o.content="\u6211\u6536\u5230\u4E00\u4E2A\u7EA2\u5305";break}case"calendar":case"general_calendar":case"share_calendar_event":{o.type="TEXT";let r=t;o.content=JSON.stringify({content:"\u6211\u6536\u5230\u4E00\u4E2A\u65E5\u7A0B\u5206\u4EAB\u4FE1\u606F",data:r});break}case"share_chat":{let r=t,n=await this._client.im.chat.get({path:{chat_id:r.chat_id}});o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u7FA4\u7EC4\u5206\u4EAB",data:n.data});break}case"share_user":{let r=t,n=this._userCache.get(r.user_id);if(!n)k.warn("\u5F53\u524D\u5206\u4EAB\u6765\u7684\u7528\u6237\u4E0D\u5728\u7F13\u5B58\u4E2D\uFF0C\u4E0D\u5904\u7406\uFF01");else{o.type="CONTACT_CARD";let s={display:n.nickName??n.userId,smallImageUrl:n.avatarUrl,bigImageUrl:n.bigAvatarUrl,custom:n};o.content=s}break}case"system":{let r=t;o.type="SYSTEM";let n={data:r};o.content=n;break}case"location":{let r=t;o.type="POSITION";let n={placeName:r.name,placeDetail:r.name,lon:Number(r.longitude),lat:Number(r.latitude)};o.content=n;break}case"video_chat":{let r=t;o.type="PHONE";let n={title:r.topic,time:new Date(Number(r.start_time))};o.content=n;break}case"todo":{let r=t;o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u5F85\u529E\u6D88\u606F",data:r});break}case"vote":{let r=t;o.type="TEXT",o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u6295\u7968\u6D88\u606F",data:r});break}default:k.info("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e);return}return o}async _handleChatMessage(e){return this._wsClient.start({eventDispatcher:new On({verificationToken:this._options.verificationToken,encryptKey:this._options.encryptKey,loggerLevel:e}).register({"im.message.receive_v1":async t=>{if(t.sender.sender_type!=="user"&&(k.debug("\u6536\u5230\u6765\u81EA\u975E\u7528\u6237\u7684\u4FE1\u606F\uFF01"),this._options.ignoreNoneUserMessage))return;let o=t.sender.sender_id.open_id,r=this._userCache.get(o);r||(k.warn("\u672A\u80FD\u83B7\u53D6\u5230\u5F53\u524D\u53D1\u9001\u6D88\u606F\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F\uFF01"),r={userId:o,userName:o,nickName:o});let n={time:new Date(Number(t.message.create_time)),senderId:t.sender.sender_id.open_id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:r.userName,senderInfo:r,toInfo:[this._me],origin:t.message,messageId:t.message.message_id,type:void 0,content:void 0};if(n.isGroupChat){let s=n;if(s.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id},t.message.mentions?.length){let i=t.message.mentions.map(a=>a.id.open_id);s.atList=i}}k.debug(t);try{this._processChatMessage(t.message.message_type,JSON.parse(t.message.content),n).then(async s=>{if(!s.content){k.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F");return}if(t.message.parent_id){let a=await this._client.im.message.get({path:{message_id:t.message.parent_id},params:{user_id_type:"open_id"}});if(a.data?.items?.[0].body?.content.length){let c=a.data.items[0],l={time:new Date(Number(c.create_time)),senderId:c.sender.id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:c.sender.id,senderInfo:{userId:c.sender.id,userName:c.sender.id,nickName:c.sender.id},origin:c,messageId:t.message.parent_id,type:void 0,content:void 0,toInfo:[this._me]};if(s.isGroupChat){let u=s;u.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id}}let m=JSON.parse(a.data.items[0].body?.content);await this._processChatMessage(a.data.items[0].msg_type,m,l),k.debug("ref message content "+a.data.items[0].body?.content),l.content?(s.type="REF",s.content={text:s.content,refMessage:l}):k.debug("\u6682\u4E0D\u652F\u6301\u7684\u5F15\u7528\u6D88\u606F\u5185\u5BB9")}}k.trace("begin send feishu message event");let i={id:ce(),type:"CHAT_MESSAGE",message:s,source:this,me:this._me};k.trace("listener count "+this.event.listenerCount()),this.event.emit(i.type,i)})}catch(s){k.error(s.message)}return""},"im.chat.access_event.bot_p2p_chat_entered_v1":async()=>""})})}async _getDepartList(e){let t=await this._client.contact.department.listWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",parent_department_id:e,page_size:50,fetch_child:!0}}),o=[];for await(let r of t)for(let n of r.items){let s={userId:n.open_department_id,userName:n.department_id,nickName:n.name,origin:n,isGroup:!0};o.push(s),this._departCache.set(s.userId,s)}return o}async _getDepartUsers(e){let t=await this._client.contact.user.findByDepartmentWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",department_id:e,page_size:50}}),o=[];for await(let r of t)for(let n of r.items){let s={...n},i={userId:s.open_id,userName:s.user_id?.length>0?s.user_id:s.open_id,nickName:s.name??s.open_id,avatarUrl:s.avatar?.avatar_240,bigAvatarUrl:s.avatar?.avatar_origin,signature:s.nickname,origin:s};o.push(i),delete s.department_path,this._userCache.set(i.userId,i)}return o}async _uploadImage(e){return(await this._client.im.image.create({data:{image_type:"message",image:await e.asReadStream()}})).image_key}async _uploadFile(e,t,o,r){let n={data:{file_type:t,file_name:o??e.name,file:await e.asReadStream()}};return t==="opus"&&r&&(n.data.duration=r),(await this._client.im.file.create(n)).file_key}async _getSimpleLinkContent(e,t,o,r){let n,s;return r?(n="interactive",s=JSON.stringify(tt.article).replace("{title}",e).replace("{desc}",o??"").replace("{image_key}",await this._uploadImage(r)).replaceAll("{link}",`[\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5](${t})`)):o?.length?(n="post",s={zh_cn:{title:e??"\u94FE\u63A5",content:[[{tag:"md",text:o},{tag:"a",text:"\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5",href:t}]]}}):(n="text",s={text:`[${e??"\u70B9\u51FB\u6B64\u94FE\u63A5\u67E5\u770B\u8BE6\u60C5"}](${t})`}),{msgType:n,content:s}}async _getSendMessageContent(e,t){let o,r,n=e.atList??[],s=this._options.replayTextMode;switch(e.type){case"TEXT":{let i=e.content;if(!i?.trim().length){k.debug("\u7A7A\u5B57\u7B26\u4E32\uFF0C\u4E0D\u53D1\u9001");return}if(s==="stream"&&t?.origin.trackId?.length){o="interactive";let c=t.origin.trackId;i=(this._trackIdCache[c]??"")+i;let l=Ae(i,!0);for(let g of l){let d=_.fromPath(g,"binary",ce()+".png");await d.asLocalPath();let y=await this._uploadImage(d);i=i.replace(g,y)}this._trackIdCache[c]=i;let m=(typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName)??"";n.length&&n.forEach(g=>{i=i+`<at id=${g}></at>`});let u={title:m,content:i};this._options.cardId?.length?r={type:"template",data:{template_id:this._options.cardId,template_variable:u}}:r=JSON.stringify(tt.stream).replace("{title}",u.title).replace("{content}",u.content);break}let a=[];if(s==="rich_text"){o="post";let c=Ro(i);for(let l of c){let m=Ae(l,!0)?.[0];if(!m?.length)continue;let u=i.split(l),g={tag:"md",text:u[0]};a.push(g);let d=_.fromPath(m,"binary",ce()+".png");await d.asLocalPath();let I={tag:"img",image_key:await this._uploadImage(d)};a.push(I),u.length>1?i=u[1]:i=""}if(i?.trim().length){let l={tag:"md",text:i};a.push(l)}if(e.atList?.length&&e.atList.forEach(l=>{a.push({tag:"at",user_id:l})}),r={zh_cn:{title:"",content:[a]}},this._options.richTextTitle&&this._options.richTextTitleTemplate?.length){let l=typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName;r.zh_cn.title=this._options.richTextTitleTemplate.replaceAll("{title}",l)}}else{o="text";let c=/!\[([^]*?)\]\((.*?)\)/g;i=i.replace(c,"[$1]($2)"),n.length&&n.forEach(l=>{i=i+`<at user_id="${l}"></at>`}),r={text:i}}break}case"EMOTION":case"IMAGE":{o="image",r={image_key:await this._uploadImage(e.content.file)};break}case"AUDIO":{o="audio";let i=e.content.file,a=Fn((await i.asBuffer()).buffer),c=parseInt(a.chunkInfo[1].dataLength/a.fmt.bytesPerSec*1e3),l=await we(i,"opus");r={file_key:await this._uploadFile(l,"opus",void 0,c)};break}case"VIDEO":{o="media";let i=e.content;r={file_key:await this._uploadFile(i.file,"mp4",i.title),image_key:i.previewImage?await this._uploadImage(i.previewImage):void 0};break}case"FILE":{o="file";let i=e.content,a=i.title??i.file.name,c=a.slice(a.lastIndexOf(".")+1);["ppt","xls","doc","pdf"].indexOf(c)<0&&(c="stream"),r={file_key:await this._uploadFile(i.file,c,a)};break}case"ARTICLE":{let i=e.content,a=await this._getSimpleLinkContent(i.title,i.url,i.desc,i.coverFile);o=a.msgType,r=a.content;break}case"POSITION":{let i=e.content;o="text",r={text:`\u5730\u540D:${i.placeName}
17
15
  \u8BE6\u60C5:${i.placeDetail??""}
18
16
  \u7ECF\u5EA6:${i.lon.toFixed(4)}
19
- \u7EAC\u5EA6:${i.lat.toFixed(4)}`};break}case"MUSIC":{let i=t.content,a=i.url?.length?i.url:await i.file.asUrl(),p=await this._getSimpleLinkContent(i.title,a,i.desc,i.coverUrl&&h.fromPath(i.coverUrl));o=p.msgType,r=p.content;break}case"RICH_TEXT":{let i=t.content,a=[];for(let p of i.content)if(p.type==="text")a.push({tag:"text",text:p.data});else if(p.type==="image"){let l=p.data,m=await this._uploadImage(l.file);a.push({tag:"img",image_key:m})}else if(p.type==="video"){let l=p.data,u={tag:"media",file_key:await this._uploadFile(l.file,"mp4",l.title??l.file.name)};l.previewImage&&(u.image_key=await this._uploadImage(l.previewImage)),a.push(u)}else if(p.type==="at"){let l=p.data;a.push({tag:"at",user_id:l})}else w.warn("\u6682\u4E0D\u652F\u6301\u7684\u5BCC\u6587\u672C\u6807\u7B7E\uFF1A"+p.type);n.length&&n.forEach(p=>{a.push({tag:"at",user_id:p})}),o="post",r={zh_cn:{title:i.title??"",content:[a]}};break}case"CONTACT_CARD":{let i=t.content;o="interactive";let a=await this._uploadImage(h.fromPath(i.bigImageUrl??i.smallImageUrl));r=JSON.stringify(Ye.textImage).replace("{content}",i.display).replace("{image_key}",a);break}case"CARD":{let i=t.content;if(o="interactive",i.type==="templateId")r={type:"template",data:{template_id:i.template,template_variable:i.content}};else if(i.type==="template"){let a=i.template;for(let p in i.content)a=a.replaceAll(`{${p}}`,i.content[p]);r=a}else i.type==="content"&&(r=i.content);break}default:break}return r&&typeof r!="string"&&(r=JSON.stringify(r)),{msg_type:o,content:r}}async _sendWebhookMessage(t){if(!W(t.toInfo[0].userId??t.toInfo[0].userName).startsWith("http")){w.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o,r;switch(t.type){case"AUDIO":case"TEXT":{let a=typeof t.content=="string"?t.content:t.content.text;if(!a?.trim().length){w.debug("\u7A7A\u5B57\u7B26\u4E32\u6216\u8005\u8BED\u97F3\u672A\u8F6C\u6587\u5B57\uFF0C\u4E0D\u53D1\u9001");return}o="text";let p=/!\[([^]*?)\]\((.*?)\)/g;a=a.replace(p,"[$1]($2)"),r={text:a};break}case"ARTICLE":{let a=t.content,p=await this._getSimpleLinkContent(a.title,a.url,a.desc);o=p.msgType,r=p.content;break}case"POSITION":{let a=t.content;o="text",r={text:`\u5730\u540D:${a.placeName}
17
+ \u7EAC\u5EA6:${i.lat.toFixed(4)}`};break}case"MUSIC":{let i=e.content,a=i.url?.length?i.url:await i.file.asUrl(),c=await this._getSimpleLinkContent(i.title,a,i.desc,i.coverUrl&&_.fromPath(i.coverUrl));o=c.msgType,r=c.content;break}case"RICH_TEXT":{let i=e.content,a=[];for(let c of i.content)if(c.type==="text")a.push({tag:"text",text:c.data});else if(c.type==="image"){let l=c.data,m=await this._uploadImage(l.file);a.push({tag:"img",image_key:m})}else if(c.type==="video"){let l=c.data,u={tag:"media",file_key:await this._uploadFile(l.file,"mp4",l.title??l.file.name)};l.previewImage&&(u.image_key=await this._uploadImage(l.previewImage)),a.push(u)}else if(c.type==="at"){let l=c.data;a.push({tag:"at",user_id:l})}else k.warn("\u6682\u4E0D\u652F\u6301\u7684\u5BCC\u6587\u672C\u6807\u7B7E\uFF1A"+c.type);n.length&&n.forEach(c=>{a.push({tag:"at",user_id:c})}),o="post",r={zh_cn:{title:i.title??"",content:[a]}};break}case"CONTACT_CARD":{let i=e.content;o="interactive";let a=await this._uploadImage(_.fromPath(i.bigImageUrl??i.smallImageUrl));r=JSON.stringify(tt.textImage).replace("{content}",i.display).replace("{image_key}",a);break}case"CARD":{let i=e.content;if(o="interactive",i.type==="templateId")r={type:"template",data:{template_id:i.template,template_variable:i.content}};else if(i.type==="template"){let a=i.template;for(let c in i.content)a=a.replaceAll(`{${c}}`,i.content[c]);r=a}else i.type==="content"&&(r=i.content);break}default:break}return r&&typeof r!="string"&&(r=JSON.stringify(r)),{msg_type:o,content:r}}async _sendWebhookMessage(e){if(!V(e.toInfo[0].userId??e.toInfo[0].userName).startsWith("http")){k.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o,r;switch(e.type){case"AUDIO":case"TEXT":{let a=typeof e.content=="string"?e.content:e.content.text;if(!a?.trim().length){k.debug("\u7A7A\u5B57\u7B26\u4E32\u6216\u8005\u8BED\u97F3\u672A\u8F6C\u6587\u5B57\uFF0C\u4E0D\u53D1\u9001");return}o="text";let c=/!\[([^]*?)\]\((.*?)\)/g;a=a.replace(c,"[$1]($2)"),r={text:a};break}case"ARTICLE":{let a=e.content,c=await this._getSimpleLinkContent(a.title,a.url,a.desc);o=c.msgType,r=c.content;break}case"POSITION":{let a=e.content;o="text",r={text:`\u5730\u540D:${a.placeName}
20
18
  \u8BE6\u60C5:${a.placeDetail??""}
21
19
  \u7ECF\u5EA6:${a.lon.toFixed(4)}
22
- \u7EAC\u5EA6:${a.lat.toFixed(4)}`};break}case"MUSIC":{let a=t.content,p=a.url?.length?a.url:await a.file.asUrl(),l=await this._getSimpleLinkContent(a.title,p,a.desc);o=l.msgType,r=l.content;break}case"RICH_TEXT":{let a=t.content,p=[];for(let l of a.content)if(l.type==="text")p.push({tag:"text",text:l.data});else if(l.type==="image")w.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u56FE\u7247\u4E0A\u4F20\uFF01");else if(l.type==="video")w.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u89C6\u9891\u4E0A\u4F20\uFF01");else if(l.type==="at"){let m=l.data;p.push({tag:"at",user_id:m})}else w.info("webhook\u4E0D\u652F\u6301\u7684\u6807\u7B7E\u7C7B\u578B\uFF1A"+l.type);t.atList?.length&&t.atList.forEach(l=>{p.push({tag:"at",user_id:l})}),o="post",r={post:{zh_cn:{title:a.title??"",content:[p]}}};break}case"CARD":{let a=t.content;if(o="interactive",a.type==="content")r=a.content;else if(a.type==="template"){let p=a.template;for(let l in a.content)p=p.replaceAll(`{${l}}`,a.content[l]);r=p}else{w.warn("\u81EA\u5B9A\u4E49\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u6A21\u677F\u5361\u7247\uFF0C\u8BF7\u4F7F\u7528\u5B8C\u6574\u7684\u5361\u7247\u5B9A\u4E49\u53D1\u9001\uFF01"),w.warn("https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot#4996824a");return}break}default:break}let n={msg_type:o};o==="interactive"?n.card=r:n.content=r;let s=t.toInfo[0].userId??t.toInfo[0].userName;if(!s.startsWith("http")){w.warn("\u9519\u8BEF\u7684webhook\u5730\u5740\uFF1A"+s);return}let i=await(await fetch(s,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(n)})).json();w.debug(i)}async me(t){if(this._me&&!t)return this._me;if(!this._options.appId||!this._options.appSecret)this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};else{let e=await this._client.request({method:"get",url:"/open-apis/bot/v3/info"});e.code!==0?(w.error("\u8BF7\u6C42\u5E94\u7528\u673A\u5668\u4EBA\u4FE1\u606F\u5931\u8D25\uFF01"),this._me={userId:this._options.appId,userName:this._options.appId,nickName:"\u533F\u540D\u673A\u5668\u4EBA"}):this._me={userId:e.bot.open_id,userName:e.bot.open_id,nickName:e.bot.app_name,avatarUrl:e.bot.avatar_url,bigAvatarUrl:e.bot.avatar_url}}return this._me}hasLogin(){return!!(this._connected||!this._options.appId||!this._options.appSecret)}async login(){if(this._wsClient&&this._connected)return;if(this._options.appId&&this._options.appSecret){let o={fatal:0,error:1,warn:2,info:3,debug:4,trace:5},r=process.env.LOG_LEVEL,n=o[r]??Zt.warn;n===Zt.trace&&(n=Zt.debug);let s={appId:this._options.appId,appSecret:this._options.appSecret,loggerLevel:n,domain:this._options.domain,appType:_n.SelfBuild};this._client=new xn(s),this._wsClient=new Cn(s),await this._handleChatMessage(n),this._connected=!0}let t=await this.me();await this.getContacts("all");let e={id:ge(),source:this,me:t,user:t,type:"LOGIN"};this.event.emit(e.type,e)}async beforeSend(t){if(this._options.replayTextMode==="stream"&&(t.type==="TEXT"||t.type==="RICH_TEXT"||t.type==="AUDIO"||t.type==="REF")){let e=t.fromId,o="chat_id",n={title:(typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:t.senderInfo?.nickName)??"",content:this._options.thinkingTips},s;this._options.cardId?.length?s=JSON.stringify({type:"template",data:{template_id:this._options.cardId,template_variable:n}}):s=JSON.stringify(Ye.stream).replace("{title}",n.title).replace("{content}",n.content);let i=await this._client.im.message.create({params:{receive_id_type:o},data:{receive_id:e,content:s,msg_type:"interactive"}});i.data?.message_id?.length&&(t.origin.trackId=i.data.message_id)}}async afterSend(t){t.origin?.trackId?.length&&delete this._trackIdCache[t.origin?.trackId]}async sendMessage(t,e){let o=t.toInfo[0].userId,r=t.isGroupChat?"chat_id":"open_id",n=t.toInfo[0];if((n.userId??n.userName).startsWith("http")||n.userId.startsWith("__"))return this._sendWebhookMessage(t);{let s=await this._getSendMessageContent(t,e);s.content?.length?s.msg_type==="interactive"&&e?.origin?.trackId?.length&&this._options.replayTextMode==="stream"?await this._client.im.message.patch({data:{content:s.content},path:{message_id:e.origin.trackId}}):await this._client.im.message.create({params:{receive_id_type:r},data:{receive_id:o,content:s.content,msg_type:s.msg_type}}):w.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+t.type)}}async getContacts(t,e=!1){if(t==="group")return w.warn("\u98DE\u4E66\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[];if(!this._userCache||e){this._departCache=new Map,this._userCache=new Map;let r=await this._getDepartList(this._options.contactDepartId??"0"),n=[];for(let s of r)n.push(this._getDepartUsers(s.userId));await Promise.allSettled(n),w.trace("\u8054\u7CFB\u4EBA\u4FE1\u606F\u83B7\u53D6\u5B8C\u6BD5\uFF0C\u5171\u6709"+this._userCache.size+"\u4E2A\u7528\u6237\u3002"),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3)}let o=[];return this._userCache.forEach(r=>o.push(r)),o}async getContactDetail(t){return t}async dispose(){this._wsClient&&delete this._wsClient}};import kn from"emittery";import et from"tweetnacl";import{v4 as eo}from"uuid";import{decode as wn,encode as Tn,getWavFileInfo as An,isSilk as Pn}from"silk-wasm";import Mn from"remove-markdown";var tt=class c{constructor(t,e){this._app=t;this._options=e;e.apiBase||(e.apiBase=process.env.NODE_ENV==="development"?"https://sandbox.api.sgroup.qq.com":"https://api.sgroup.qq.com");let o=this._options.appSecret;for(;o.length<et.sign.seedLength;)o=o.repeat(2);o=o.slice(0,et.sign.seedLength);let r=Buffer.from(o,"utf-8");this._signKeyPair=et.sign.keyPair.fromSeed(r),this._options.audioEncodeRate=this._options.audioEncodeRate??32e3,this._options.audioDecodeRate=this._options.audioDecodeRate??32e3,this._options.tokenBase=this._options.tokenBase??"https://bots.qq.com",this._options.messageIdCacheHourPeriod=this._options.messageIdCacheHourPeriod??20,this.event=new kn,setTimeout(()=>{this._msgIdCache.clear()},this._options.messageIdCacheHourPeriod*60*60*1e3)}static params={name:"qq",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App ID"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App Secret"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u6CE8\u610F\u6C99\u7BB1\u73AF\u5883\u548C\u6B63\u5F0F\u73AF\u5883\u6709\u533A\u522B\uFF0C\u9ED8\u8BA4\u6839\u636E\u73AF\u5883\u53D8\u91CF\u81EA\u52A8\u8BBE\u7F6E\u3002\u5982\u679C\u662F\u6C99\u7BB1\u6A21\u5F0F\u7684\u673A\u5668\u4EBA\uFF0C\u5EFA\u8BAE\u624B\u52A8\u6307\u5B9A\u4E3Ahttps://sandbox.api.sgroup.qq.com\u3002"},"x-decorator-props":{tooltip:"\u5F53\u73AF\u5883\u53D8\u91CF\u7684NODE_ENV\u662Fdevelopment\u65F6\u5019\uFF0C\u4F7F\u7528\u6C99\u7BB1\u5730\u5740\u3002\u5982\u679C\u662Fprod\u6A21\u5F0F\u76F4\u63A5\u8FD0\u884C\u7684\u6846\u67B6\uFF0C\u5728\u6C99\u7BB1\u8FD0\u884C\u65F6\uFF0C\u9700\u8981\u8FD9\u91CC\u624B\u52A8\u914D\u7F6E\u5730\u5740\u4E3A\uFF1Ahttps://sandbox.api.sgroup.qq.com \uFF0C\u6B63\u5F0F\u73AF\u5883\u5730\u5740\u4E3A\uFF1Ahttps://api.sgroup.qq.com"}},tokenBase:{type:"string",title:"Token API \u57DF\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://bots.qq.com"},"x-decorator-props":{tooltip:"\u7528\u4E8E\u83B7\u53D6 token \u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://bots.qq.com"},default:"https://bots.qq.com"},audioEncodeRate:{type:"number",title:"\u97F3\u9891\u7F16\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-decorator-props":{tooltip:"\u97F3\u9891\u7F16\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},audioDecodeRate:{type:"number",title:"\u97F3\u9891\u89E3\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u97F3\u9891\u89E3\u7801\u7801\u7387"},"x-decorator-props":{tooltip:"\u97F3\u9891\u89E3\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},canUseMarkdown:{type:"boolean",title:"\u542F\u7528 Markdown","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u83B7\u9080\u4F7F\u7528 Markdown \u529F\u80FD\uFF0C\u9ED8\u8BA4\u4E3A false\uFF0CMarkdown\u76EE\u524D\u53EA\u6709\u5185\u6D4B\u7528\u6237\u80FD\u53D1\u9001\u3002"}},messageIdCacheHourPeriod:{type:"number",title:"\u6D88\u606F ID \u7F13\u5B58\u6709\u6548\u671F (\u5C0F\u65F6)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u7F13\u5B58\u6709\u6548\u671F"},"x-decorator-props":{tooltip:"\u6D88\u606F ID \u7F13\u5B58\u7684\u6709\u6548\u671F\uFF0C\u9ED8\u8BA4\u662F 20 \u5C0F\u65F6\uFF0C\u5355\u4F4D\u662F\u5C0F\u65F6"},default:20}}}},eventNames:["CHAT_MESSAGE","LOGIN"],fieldInAtList:"userId",desc:"QQ\u7FA4\u673A\u5668\u4EBA"};_logger=y("qq-source");_accessToken;_signKeyPair;_msgIdCache=new Set;event;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:t=>this._onMessage(t)}}]}_checkSignature(t){let e=t.headers["x-signature-timestamp"]??t.headers["X-Signature-Timestamp"];if(!e)return!1;let o=t.headers["x-signature-ed25519"]??t.headers["X-Signature-Ed25519"];if(!o)return!1;let r=Buffer.from(e,"utf-8"),n=JSON.stringify(t.body),s=Buffer.from(n,"utf-8"),i=Buffer.concat([r,s]),a=Buffer.from(et.sign.detached(i,this._signKeyPair.secretKey)).toString("hex");return o===a?!0:n.indexOf("multimedia.nt.qq.com.cn")>0}_verifyCallback(t,e){try{let o=e+t,r=Buffer.from(o,"utf-8"),n=et.sign.detached(r,this._signKeyPair.secretKey);return{plain_token:t,signature:Buffer.from(n).toString("hex")}}catch(o){this._logger.error(o)}}async _processChatMessage(t,e){let o=e==="GROUP_AT_MESSAGE_CREATE",r=o?t.author.member_openid:t.author.user_openid,n={time:new Date(t.timestamp),senderId:r,fromId:o?t.group_openid:t.author.user_openid,isGroupChat:o,isSender:!1,senderName:r,senderInfo:{userId:r,userName:r,nickName:r},toInfo:[this._options.me],origin:t,messageId:t.id,type:void 0,content:void 0};if(n.isGroupChat){let s=n;s.groupInfo={userId:t.group_openid,userName:t.group_openid,nickName:t.group_openid},s.atList=[this._options.me.userId]}if(t.attachments?.length)if(t.content?.trim().length||t.attachments.length>1){let s=t.content?.trim().length?t.content?.trim():"\u8BF7\u5206\u6790\u6B64\u5185\u5BB9";n.type="RICH_TEXT";let i={content:[{type:"text",data:s}]};for(let a of t.attachments){let p,l;a.content_type.startsWith("image")?(p="image",l={file:h.fromPath(a.url,"binary",a.filename)}):a.content_type!=="voice"?(p="file",l={file:h.fromPath(a.url,"binary",a.filename),title:a.filename,sizeInBytes:a.size}):this._logger.info("\u6682\u4E0D\u652F\u6301voice\u7C7B\u578B\u7684richtext"),i.content.push({type:p,data:l})}}else{let s=t.attachments[0];if(s.content_type.startsWith("image"))n.type="IMAGE",n.content={file:h.fromPath(s.url,"binary",s.filename)};else if(s.content_type==="voice"){n.type="AUDIO";let i=h.fromPath(s.url,"binary",s.filename),a=await i.asBuffer();if(Pn(a)){let p=await wn(a,this._options.audioDecodeRate),l=se(p.data.buffer,this._options.audioEncodeRate,16,1),m=h.fromBuffer(Buffer.from(l),i.name.replace(".silk","")+".wav");n.content={file:m}}else{this._logger.warn("\u5F53\u524D\u97F3\u9891\u6587\u4EF6\u4E0D\u662Fsilk\u683C\u5F0F\uFF0C\u65E0\u6CD5\u5904\u7406");return}}else n.type="FILE",n.content={file:h.fromPath(s.url,"binary",s.filename),title:s.filename,sizeInBytes:s.size}}else if(t.content?.trim().length)n.type="TEXT",n.content=t.content;else{this._logger.info("\u6536\u5230\u7A7A\u767D\u6D88\u606F");return}if(n.content){let s={id:eo(),type:"CHAT_MESSAGE",message:n,source:this,me:this._options.me};this.event.emit(s.type,s)}else this._logger.warn("\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F"),this._logger.warn(t)}async _onMessage(t){let e=t.body;if(e.op===13){this._logger.debug("receive verify callback request"),this._logger.debug(e);let o=this._verifyCallback(e.d.plain_token,e.d.event_ts);return this._logger.debug(o),o}else if(e.op===0){if(!this._checkSignature(t))return this._logger.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),this._logger.debug(t.body),"error";if(this._logger.debug("\u7B7E\u540D\u9A8C\u8BC1\u901A\u8FC7"),this._msgIdCache.has(e.d.id)){this._logger.info("\u91CD\u590D\u7684\u6D88\u606FID");return}return this._msgIdCache.add(e.d.id),e.t==="GROUP_AT_MESSAGE_CREATE"||e.t==="C2C_MESSAGE_CREATE"?this._processChatMessage(e.d,e.t):(this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u4E8B\u4EF6\u7C7B\u578B"),this._logger.debug(e)),{op:12}}else this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684op\u7C7B\u578B"),this._logger.debug(t.body);return{op:12}}async _initToken(){try{let e=await(await fetch(`${this._options.tokenBase}/app/getAppAccessToken`,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appId:this._options.appId,clientSecret:this._options.appSecret})})).json();if(e.access_token?.length){this._accessToken=e.access_token;let o=Number(e.expires_in)/1.1;setTimeout(()=>{this._initToken()},o*1e3),this._logger.trace("\u6210\u529F\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\uFF1A"+this._accessToken)}else this._logger.warn("\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\u5931\u8D25\uFF01")}catch(t){this._logger.error(t)}}async _uploadFile(t,e,o){let r,n=t.name.toLowerCase();if(n.endsWith("png")||n.endsWith("jpg"))r=1;else if(n.endsWith("mp4"))r=2;else if(n.endsWith("wav")){let p=await t.asBuffer(),l=An(p);await t.asLocalPath();let m=await Tn(p,l.fmt.sampleRate);t=h.fromBuffer(Buffer.from(m.data),eo()+".silk"),r=3}else{this._logger.warn("\u4E0D\u652F\u6301\u4E0A\u4F20\u5230QQ\u673A\u5668\u4EBA\u7684\u6587\u4EF6\uFF1A"+t.name);return}let s=await t.asUrl(),i=o?`${this._options.apiBase}/v2/groups/${e}/files`:`${this._options.apiBase}/v2/users/${e}/files`;return await(await fetch(i,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify({file_type:r,url:s,srv_send_msg:!1})})).json()}_getArkContent(t,e,o,r,n,s){let i={template_id:void 0,kv:void 0};return r?.length?(i.template_id=37,i.kv=[{key:"#PROMPT#",value:t?.slice(0,8)??"\u901A\u77E5"},{key:"#METATITLE#",value:t??" "},{key:"#METASUBTITLE#",value:e??" "},{key:"#METACOVER#",value:r},{key:"#METAURL#",vale:o??""}]):n?.length?(i.template_id=24,i.kv=[{key:"#DESC#",value:e??" "},{key:"#PROMPT#",value:t?.slice(0,8)??"\u901A\u77E5"},{key:"#TITLE#",value:t??" "},{key:"#METADESC#",value:e??" "},{key:"#IMG#",value:n},{key:"#LINK#",value:o??""},{key:"#SUBTITLE#",value:s??" "}]):(i.template_id=23,i.kv=[{key:"#DESC#",value:e??" "},{key:"#PROMPT#",value:t?.slice(0,8)??" "},{key:"#LIST#",obj:[{obj_kv:{key:"desc",value:t}}]}]),i}hasLogin(){return this._accessToken!==void 0}async me(){return this._options.me}async login(){await this._initToken();let t={id:eo(),source:this,me:this._options.me,user:this._options.me,type:"LOGIN"};this._accessToken||this.event.emit(t.type,t)}async sendMessage(t,e){e.origin=e.origin??{},e.origin.seq=e.origin.seq??0,e.origin.seq++;let o={msg_id:e.messageId,msg_seq:e.origin.seq},r=t.toInfo[0].userId;switch(t.type){case"TEXT":{this._options.canUseMarkdown?(o.markdown={content:t.content},o.msg_type=2):(o.content=t.content,o.msg_type=0);break}case"EMOTION":case"IMAGE":case"VIDEO":case"AUDIO":{o.msg_type=7,o.content=" ",o.media=await this._uploadFile(t.content.file,r,t.isGroupChat);break}case"FILE":{let n=t.content,s=n.title??n.file.name,i=await n.file.asUrl();this._options.canUseMarkdown?(o.markdown={content:`### \u6536\u5230\u6587\u4EF6
23
- \u8BF7\u70B9\u51FB\u4E0B\u8F7D[${s}](${i})`},o.msg_type=2):(o.content=`\u60A8\u6536\u5230\u4E00\u4E2A\u6587\u4EF6(${s})\uFF0C\u8BF7\u70B9\u51FB\u4E0B\u8F7D\uFF1A${i}`,o.msg_type=0);break}case"ARTICLE":{let n=t.content;o.msg_type=3,o.ark=this._getArkContent(n.title,n.desc,n.url,await n.coverFile?.asUrl(),await n.thumbFile?.asUrl(),n.source);break}case"POSITION":{let n=t.content;o.msg_type=0,o.content=`\u5730\u540D:${n.placeName}
20
+ \u7EAC\u5EA6:${a.lat.toFixed(4)}`};break}case"MUSIC":{let a=e.content,c=a.url?.length?a.url:await a.file.asUrl(),l=await this._getSimpleLinkContent(a.title,c,a.desc);o=l.msgType,r=l.content;break}case"RICH_TEXT":{let a=e.content,c=[];for(let l of a.content)if(l.type==="text")c.push({tag:"text",text:l.data});else if(l.type==="image")k.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u56FE\u7247\u4E0A\u4F20\uFF01");else if(l.type==="video")k.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u89C6\u9891\u4E0A\u4F20\uFF01");else if(l.type==="at"){let m=l.data;c.push({tag:"at",user_id:m})}else k.info("webhook\u4E0D\u652F\u6301\u7684\u6807\u7B7E\u7C7B\u578B\uFF1A"+l.type);e.atList?.length&&e.atList.forEach(l=>{c.push({tag:"at",user_id:l})}),o="post",r={post:{zh_cn:{title:a.title??"",content:[c]}}};break}case"CARD":{let a=e.content;if(o="interactive",a.type==="content")r=a.content;else if(a.type==="template"){let c=a.template;for(let l in a.content)c=c.replaceAll(`{${l}}`,a.content[l]);r=c}else{k.warn("\u81EA\u5B9A\u4E49\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u6A21\u677F\u5361\u7247\uFF0C\u8BF7\u4F7F\u7528\u5B8C\u6574\u7684\u5361\u7247\u5B9A\u4E49\u53D1\u9001\uFF01"),k.warn("https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot#4996824a");return}break}default:break}let n={msg_type:o};o==="interactive"?n.card=r:n.content=r;let s=e.toInfo[0].userId??e.toInfo[0].userName;if(!s.startsWith("http")){k.warn("\u9519\u8BEF\u7684webhook\u5730\u5740\uFF1A"+s);return}let i=await(await fetch(s,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(n)})).json();k.debug(i)}async me(e){if(this._me&&!e)return this._me;if(!this._options.appId||!this._options.appSecret)this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};else{let t=await this._client.request({method:"get",url:"/open-apis/bot/v3/info"});t.code!==0?(k.error("\u8BF7\u6C42\u5E94\u7528\u673A\u5668\u4EBA\u4FE1\u606F\u5931\u8D25\uFF01"),this._me={userId:this._options.appId,userName:this._options.appId,nickName:"\u533F\u540D\u673A\u5668\u4EBA"}):this._me={userId:t.bot.open_id,userName:t.bot.open_id,nickName:t.bot.app_name,avatarUrl:t.bot.avatar_url,bigAvatarUrl:t.bot.avatar_url}}return this._me}hasLogin(){return!!(this._connected||!this._options.appId||!this._options.appSecret)}async login(){if(this._wsClient&&this._connected)return;if(this._options.appId&&this._options.appSecret){let o={fatal:0,error:1,warn:2,info:3,debug:4,trace:5},r=process.env.LOG_LEVEL,n=o[r]??so.warn;n===so.trace&&(n=so.debug);let s={appId:this._options.appId,appSecret:this._options.appSecret,loggerLevel:n,domain:this._options.domain,appType:Pn.SelfBuild};this._client=new Mn(s),this._wsClient=new En(s),await this._handleChatMessage(n),this._connected=!0}let e=await this.me();await this.getContacts("all");let t={id:ce(),source:this,me:e,user:e,type:"LOGIN"};this.event.emit(t.type,t)}async beforeSend(e){if(this._options.replayTextMode==="stream"&&(e.type==="TEXT"||e.type==="RICH_TEXT"||e.type==="AUDIO"||e.type==="REF")){let t=e.fromId,o="chat_id",n={title:(typeof e?.content=="string"?e.content.length>10?e.content.slice(0,10)+"...":e.content:e.senderInfo?.nickName)??"",content:this._options.thinkingTips},s;this._options.cardId?.length?s=JSON.stringify({type:"template",data:{template_id:this._options.cardId,template_variable:n}}):s=JSON.stringify(tt.stream).replace("{title}",n.title).replace("{content}",n.content);let i=await this._client.im.message.create({params:{receive_id_type:o},data:{receive_id:t,content:s,msg_type:"interactive"}});i.data?.message_id?.length&&(e.origin.trackId=i.data.message_id)}}async afterSend(e){e.origin?.trackId?.length&&delete this._trackIdCache[e.origin?.trackId]}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:ce(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0].userId,r=e.isGroupChat?"chat_id":"open_id",n=e.toInfo[0];if((n.userId??n.userName).startsWith("http")||n.userId.startsWith("__"))return this._sendWebhookMessage(e);{let s=await this._getSendMessageContent(e,t);s.content?.length?s.msg_type==="interactive"&&t?.origin?.trackId?.length&&this._options.replayTextMode==="stream"?await this._client.im.message.patch({data:{content:s.content},path:{message_id:t.origin.trackId}}):await this._client.im.message.create({params:{receive_id_type:r},data:{receive_id:o,content:s.content,msg_type:s.msg_type}}):k.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type)}}async getContacts(e,t=!1){if(e==="group")return k.warn("\u98DE\u4E66\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[];if(!this._userCache||t){this._departCache=new Map,this._userCache=new Map;let r=await this._getDepartList(this._options.contactDepartId??"0"),n=[];for(let s of r)n.push(this._getDepartUsers(s.userId));await Promise.allSettled(n),k.trace("\u8054\u7CFB\u4EBA\u4FE1\u606F\u83B7\u53D6\u5B8C\u6BD5\uFF0C\u5171\u6709"+this._userCache.size+"\u4E2A\u7528\u6237\u3002"),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3)}let o=[];return this._userCache.forEach(r=>o.push(r)),o}async getContactDetail(e){return e}async dispose(){this._wsClient&&delete this._wsClient}};import Rn from"emittery";import rt from"tweetnacl";import{v4 as qt}from"uuid";import{decode as Bn,encode as Dn,getWavFileInfo as Ln,isSilk as Un}from"silk-wasm";import $n from"remove-markdown";var nt=class p{constructor(e,t){this._app=e;this._options=t;t.apiBase||(t.apiBase=process.env.NODE_ENV==="development"?"https://sandbox.api.sgroup.qq.com":"https://api.sgroup.qq.com");let o=this._options.appSecret;for(;o.length<rt.sign.seedLength;)o=o.repeat(2);o=o.slice(0,rt.sign.seedLength);let r=Buffer.from(o,"utf-8");this._signKeyPair=rt.sign.keyPair.fromSeed(r),this._options.audioEncodeRate=this._options.audioEncodeRate??32e3,this._options.audioDecodeRate=this._options.audioDecodeRate??32e3,this._options.tokenBase=this._options.tokenBase??"https://bots.qq.com",this._options.messageIdCacheHourPeriod=this._options.messageIdCacheHourPeriod??20,this.event=new Rn,setTimeout(()=>{this._msgIdCache.clear()},this._options.messageIdCacheHourPeriod*60*60*1e3)}static params={name:"qq",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App ID"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App Secret"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u6CE8\u610F\u6C99\u7BB1\u73AF\u5883\u548C\u6B63\u5F0F\u73AF\u5883\u6709\u533A\u522B\uFF0C\u9ED8\u8BA4\u6839\u636E\u73AF\u5883\u53D8\u91CF\u81EA\u52A8\u8BBE\u7F6E\u3002\u5982\u679C\u662F\u6C99\u7BB1\u6A21\u5F0F\u7684\u673A\u5668\u4EBA\uFF0C\u5EFA\u8BAE\u624B\u52A8\u6307\u5B9A\u4E3Ahttps://sandbox.api.sgroup.qq.com\u3002"},"x-decorator-props":{tooltip:"\u5F53\u73AF\u5883\u53D8\u91CF\u7684NODE_ENV\u662Fdevelopment\u65F6\u5019\uFF0C\u4F7F\u7528\u6C99\u7BB1\u5730\u5740\u3002\u5982\u679C\u662Fprod\u6A21\u5F0F\u76F4\u63A5\u8FD0\u884C\u7684\u6846\u67B6\uFF0C\u5728\u6C99\u7BB1\u8FD0\u884C\u65F6\uFF0C\u9700\u8981\u8FD9\u91CC\u624B\u52A8\u914D\u7F6E\u5730\u5740\u4E3A\uFF1Ahttps://sandbox.api.sgroup.qq.com \uFF0C\u6B63\u5F0F\u73AF\u5883\u5730\u5740\u4E3A\uFF1Ahttps://api.sgroup.qq.com"}},tokenBase:{type:"string",title:"Token API \u57DF\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://bots.qq.com"},"x-decorator-props":{tooltip:"\u7528\u4E8E\u83B7\u53D6 token \u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://bots.qq.com"},default:"https://bots.qq.com"},audioEncodeRate:{type:"number",title:"\u97F3\u9891\u7F16\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-decorator-props":{tooltip:"\u97F3\u9891\u7F16\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},audioDecodeRate:{type:"number",title:"\u97F3\u9891\u89E3\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u97F3\u9891\u89E3\u7801\u7801\u7387"},"x-decorator-props":{tooltip:"\u97F3\u9891\u89E3\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},canUseMarkdown:{type:"boolean",title:"\u542F\u7528 Markdown","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u83B7\u9080\u4F7F\u7528 Markdown \u529F\u80FD\uFF0C\u9ED8\u8BA4\u4E3A false\uFF0CMarkdown\u76EE\u524D\u53EA\u6709\u5185\u6D4B\u7528\u6237\u80FD\u53D1\u9001\u3002"}},messageIdCacheHourPeriod:{type:"number",title:"\u6D88\u606F ID \u7F13\u5B58\u6709\u6548\u671F (\u5C0F\u65F6)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u7F13\u5B58\u6709\u6548\u671F"},"x-decorator-props":{tooltip:"\u6D88\u606F ID \u7F13\u5B58\u7684\u6709\u6548\u671F\uFF0C\u9ED8\u8BA4\u662F 20 \u5C0F\u65F6\uFF0C\u5355\u4F4D\u662F\u5C0F\u65F6"},default:20}}}},eventNames:["CHAT_MESSAGE","LOGIN"],fieldInAtList:"userId",desc:"QQ\u7FA4\u673A\u5668\u4EBA"};_logger=f("qq-source");_accessToken;_signKeyPair;_msgIdCache=new Set;event;get params(){return p.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:e=>this._onMessage(e)}}]}_checkSignature(e){let t=e.headers["x-signature-timestamp"]??e.headers["X-Signature-Timestamp"];if(!t)return!1;let o=e.headers["x-signature-ed25519"]??e.headers["X-Signature-Ed25519"];if(!o)return!1;let r=Buffer.from(t,"utf-8"),n=JSON.stringify(e.body),s=Buffer.from(n,"utf-8"),i=Buffer.concat([r,s]),a=Buffer.from(rt.sign.detached(i,this._signKeyPair.secretKey)).toString("hex");return o===a?!0:n.indexOf("multimedia.nt.qq.com.cn")>0}_verifyCallback(e,t){try{let o=t+e,r=Buffer.from(o,"utf-8"),n=rt.sign.detached(r,this._signKeyPair.secretKey);return{plain_token:e,signature:Buffer.from(n).toString("hex")}}catch(o){this._logger.error(o)}}async _processChatMessage(e,t){let o=t==="GROUP_AT_MESSAGE_CREATE",r=o?e.author.member_openid:e.author.user_openid,n={time:new Date(e.timestamp),senderId:r,fromId:o?e.group_openid:e.author.user_openid,isGroupChat:o,isSender:!1,senderName:r,senderInfo:{userId:r,userName:r,nickName:r},toInfo:[this._options.me],origin:e,messageId:e.id,type:void 0,content:void 0};if(n.isGroupChat){let s=n;s.groupInfo={userId:e.group_openid,userName:e.group_openid,nickName:e.group_openid},s.atList=[this._options.me.userId]}if(e.attachments?.length)if(e.content?.trim().length||e.attachments.length>1){let s=e.content?.trim().length?e.content?.trim():"\u8BF7\u5206\u6790\u6B64\u5185\u5BB9";n.type="RICH_TEXT";let i={content:[{type:"text",data:s}]};for(let a of e.attachments){let c,l;a.content_type.startsWith("image")?(c="image",l={file:_.fromPath(a.url,"binary",a.filename)}):a.content_type!=="voice"?(c="file",l={file:_.fromPath(a.url,"binary",a.filename),title:a.filename,sizeInBytes:a.size}):this._logger.info("\u6682\u4E0D\u652F\u6301voice\u7C7B\u578B\u7684richtext"),i.content.push({type:c,data:l})}}else{let s=e.attachments[0];if(s.content_type.startsWith("image"))n.type="IMAGE",n.content={file:_.fromPath(s.url,"binary",s.filename)};else if(s.content_type==="voice"){n.type="AUDIO";let i=_.fromPath(s.url,"binary",s.filename),a=await i.asBuffer();if(Un(a)){let c=await Bn(a,this._options.audioDecodeRate),l=xe(c.data.buffer,this._options.audioEncodeRate,16,1),m=_.fromBuffer(Buffer.from(l),i.name.replace(".silk","")+".wav");n.content={file:m}}else{this._logger.warn("\u5F53\u524D\u97F3\u9891\u6587\u4EF6\u4E0D\u662Fsilk\u683C\u5F0F\uFF0C\u65E0\u6CD5\u5904\u7406");return}}else n.type="FILE",n.content={file:_.fromPath(s.url,"binary",s.filename),title:s.filename,sizeInBytes:s.size}}else if(e.content?.trim().length)n.type="TEXT",n.content=e.content;else{this._logger.info("\u6536\u5230\u7A7A\u767D\u6D88\u606F");return}if(n.content){let s={id:qt(),type:"CHAT_MESSAGE",message:n,source:this,me:this._options.me};this.event.emit(s.type,s)}else this._logger.warn("\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F"),this._logger.warn(e)}async _onMessage(e){let t=e.body;if(t.op===13){this._logger.debug("receive verify callback request"),this._logger.debug(t);let o=this._verifyCallback(t.d.plain_token,t.d.event_ts);return this._logger.debug(o),o}else if(t.op===0){if(!this._checkSignature(e))return this._logger.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),this._logger.debug(e.body),"error";if(this._logger.debug("\u7B7E\u540D\u9A8C\u8BC1\u901A\u8FC7"),this._msgIdCache.has(t.d.id)){this._logger.info("\u91CD\u590D\u7684\u6D88\u606FID");return}return this._msgIdCache.add(t.d.id),t.t==="GROUP_AT_MESSAGE_CREATE"||t.t==="C2C_MESSAGE_CREATE"?this._processChatMessage(t.d,t.t):(this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u4E8B\u4EF6\u7C7B\u578B"),this._logger.debug(t)),{op:12}}else this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684op\u7C7B\u578B"),this._logger.debug(e.body);return{op:12}}async _initToken(){try{let t=await(await fetch(`${this._options.tokenBase}/app/getAppAccessToken`,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appId:this._options.appId,clientSecret:this._options.appSecret})})).json();if(t.access_token?.length){this._accessToken=t.access_token;let o=Number(t.expires_in)/1.1;setTimeout(()=>{this._initToken()},o*1e3),this._logger.trace("\u6210\u529F\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\uFF1A"+this._accessToken)}else this._logger.warn("\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\u5931\u8D25\uFF01")}catch(e){this._logger.error(e)}}async _uploadFile(e,t,o){let r,n=e.name.toLowerCase();if(n.endsWith("png")||n.endsWith("jpg"))r=1;else if(n.endsWith("mp4"))r=2;else if(n.endsWith("wav")){let c=await e.asBuffer(),l=Ln(c);await e.asLocalPath();let m=await Dn(c,l.fmt.sampleRate);e=_.fromBuffer(Buffer.from(m.data),qt()+".silk"),r=3}else{this._logger.warn("\u4E0D\u652F\u6301\u4E0A\u4F20\u5230QQ\u673A\u5668\u4EBA\u7684\u6587\u4EF6\uFF1A"+e.name);return}let s=await e.asUrl(),i=o?`${this._options.apiBase}/v2/groups/${t}/files`:`${this._options.apiBase}/v2/users/${t}/files`;return await(await fetch(i,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify({file_type:r,url:s,srv_send_msg:!1})})).json()}_getArkContent(e,t,o,r,n,s){let i={template_id:void 0,kv:void 0};return r?.length?(i.template_id=37,i.kv=[{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#METATITLE#",value:e??" "},{key:"#METASUBTITLE#",value:t??" "},{key:"#METACOVER#",value:r},{key:"#METAURL#",vale:o??""}]):n?.length?(i.template_id=24,i.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#TITLE#",value:e??" "},{key:"#METADESC#",value:t??" "},{key:"#IMG#",value:n},{key:"#LINK#",value:o??""},{key:"#SUBTITLE#",value:s??" "}]):(i.template_id=23,i.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??" "},{key:"#LIST#",obj:[{obj_kv:{key:"desc",value:e}}]}]),i}hasLogin(){return this._accessToken!==void 0}async me(){return this._options.me}async login(){await this._initToken();let e={id:qt(),source:this,me:this._options.me,user:this._options.me,type:"LOGIN"};this._accessToken||this.event.emit(e.type,e)}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:qt(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._options.me}),t.origin=t.origin??{},t.origin.seq=t.origin.seq??0,t.origin.seq++;let o={msg_id:t.messageId,msg_seq:t.origin.seq},r=e.toInfo[0].userId;switch(e.type){case"TEXT":{this._options.canUseMarkdown?(o.markdown={content:e.content},o.msg_type=2):(o.content=e.content,o.msg_type=0);break}case"EMOTION":case"IMAGE":case"VIDEO":case"AUDIO":{o.msg_type=7,o.content=" ",o.media=await this._uploadFile(e.content.file,r,e.isGroupChat);break}case"FILE":{let n=e.content,s=n.title??n.file.name,i=await n.file.asUrl();this._options.canUseMarkdown?(o.markdown={content:`### \u6536\u5230\u6587\u4EF6
21
+ \u8BF7\u70B9\u51FB\u4E0B\u8F7D[${s}](${i})`},o.msg_type=2):(o.content=`\u60A8\u6536\u5230\u4E00\u4E2A\u6587\u4EF6(${s})\uFF0C\u8BF7\u70B9\u51FB\u4E0B\u8F7D\uFF1A${i}`,o.msg_type=0);break}case"ARTICLE":{let n=e.content;o.msg_type=3,o.ark=this._getArkContent(n.title,n.desc,n.url,await n.coverFile?.asUrl(),await n.thumbFile?.asUrl(),n.source);break}case"POSITION":{let n=e.content;o.msg_type=0,o.content=`\u5730\u540D:${n.placeName}
24
22
  \u8BE6\u60C5:${n.placeDetail??""}
25
23
  \u7ECF\u5EA6:${n.lon.toFixed(4)}
26
- \u7EAC\u5EA6:${n.lat.toFixed(4)}`;break}case"MUSIC":{let n=t.content,s=n.url?.length?n.url:await n.file.asUrl();o.msg_type=3,o.ark=this._getArkContent(n.title,n.desc,s,n.coverUrl,n.album,n.signer);break}case"RICH_TEXT":{this._options.canUseMarkdown?(o.msg_type=2,o.markdown=await bt(t.content)):(this._logger.warn("QQ\u673A\u5668\u4EBA\u6682\u4E0D\u652F\u6301rich text\u56DE\u590D\uFF0C\u5982\u679C\u60A8\u6709markdown\u6743\u9650\uFF0C\u8BF7\u5728\u914D\u7F6E\u4E2D\u5F00\u542F\uFF01"),o.msg_type=0,o.content="\u60A8\u6536\u5230\u4E86\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF0C\u8BE6\u60C5\u53EF\u4EE5\u8054\u7CFB\u7BA1\u7406\u5458\u5728\u63A7\u5236\u53F0\u4E2D\u67E5\u770B\uFF01");break}case"CONTACT_CARD":{let n=t.content;o.msg_type=3,o.ark=await this._getArkContent("\u60A8\u6536\u5230\u4E00\u4E2A\u8054\u7CFB\u4EBA\u63A8\u9001",String(n.custom??""),void 0,n.bigImageUrl,n.smallImageUrl,"");break}default:break}if(o.content?.length||o.ark||o.markdown||o.media){o.content?.length&&(o.content=Mn(o.content));let n=t.isGroupChat?`${this._options.apiBase}/v2/groups/${r}/messages`:`${this._options.apiBase}/v2/users/${r}/messages`,i=await(await fetch(n,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify(o)})).json();this._logger.trace(i)}}async getContacts(){return this._logger.info("QQ\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u83B7\u53D6\u7528\u6237\u63A5\u53E3\uFF01"),[]}async getContactDetail(t){return t}};import On from"emittery";import{XMLBuilder as En,XMLParser as Fn}from"fast-xml-parser";import{v4 as $o}from"uuid";import Nn from"remove-markdown";import{decrypt as Rn,encrypt as Bn}from"@wecom/crypto";var ot=class c{constructor(t,e){this._app=t;this._options=e;if(!this._options.token||!this._options.aesKey)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this._options.apiBase=this._options.apiBase??"https://chatbot.weixin.qq.com",this._logger=y(this._options.instanceName),this.event=new On}static params={name:"wcai",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 App ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},me:{type:"object",title:"\u673A\u5668\u4EBA\u4FE1\u606F\uFF08\u53EF\u4EFB\u610F\u586B\u5199\uFF09","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u7528\u6765\u7ED9\u6280\u80FD\u7B49\u8BC6\u522B\u516C\u4F17\u5E73\u53F0\u6D88\u606F\u6E90\uFF08\u673A\u5668\u4EBA\uFF09\u7684\u4FE1\u606F\uFF0C\u7531\u4E8E\u5FAE\u4FE1\u5BF9\u8BDD\u673A\u5668\u4EBA\u4E0D\u5B58\u5728\u7FA4\u804A\uFF0C\u65E0\u9700\u5224\u65AD@me\u80FD\u529B\uFF0C\u56E0\u6B64\u6B64\u5904\u53EF\u4EE5\u586B\u5199\u4EFB\u610F\u503C\u5373\u53EF\u3002"},properties:{userId:{type:"string",title:"\u673A\u5668\u4EBAID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49ID"},required:!0},userName:{type:"string",title:"\u673A\u5668\u4EBA\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u540D\u79F0"},required:!0},nickName:{type:"string",title:"\u673A\u5668\u4EBA\u6635\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u6635\u79F0"},required:!0}},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://chatbot.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://chatbot.weixin.qq.com"}}}},eventNames:["CHAT_MESSAGE"],desc:"\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0"};_logger;get params(){return c.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"api",action:{type:"normal",handler:t=>this._onChatMessage(t)}}]}event;async _processMessage(t){let e=t.userid,o={time:new Date(t.createtime),senderId:e,fromId:e,isGroupChat:!1,isSender:!1,senderName:e,senderInfo:{userId:e,userName:e,nickName:e},toInfo:[this._options.me],origin:t,messageId:$o(),type:void 0,content:void 0};switch(t.msgtype){case"text":{if(t.content.msg==="location"){this._logger.info("\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u4E0D\u652F\u6301\u4F20\u8F93\u4F4D\u7F6E\u6D88\u606F\uFF01");return}if(typeof t.content.msg=="string")o.type="TEXT",o.content=t.content.msg;else if(t.content.msg){let r=t.content.msg;o.type="ARTICLE";let n={title:r.link.title,desc:r.link.description,url:r.link.url};o.content=n}break}case"image":{o.type="IMAGE";let r=t.content.msg,n={file:h.fromPath(r.image.url)};o.content=n;break}case"voice":{let r=t.content.msg;if(!r.voice.url?.length){this._logger.warn("\u97F3\u9891\u6587\u4EF6\u4E2D\u6CA1\u6709\u97F3\u9891\u4E0B\u8F7D\u5730\u5740\uFF0C\u65E0\u6CD5\u5904\u7406\uFF01");return}let s=await h.fromPath(r.voice.url).asBuffer(),a={file:await me(s),text:r.voice.recognition};o.type="AUDIO",o.content=a;break}}if(o.content){let r={id:$o(),type:"CHAT_MESSAGE",message:o,source:this,me:this._options.me};this.event.emit(r.type,r)}else this._logger.info("\u65E0\u6CD5\u5904\u7406\u7684\u6D88\u606F"),this._logger.info(t)}async _onChatMessage(t){if(t.method.toLowerCase()==="get")return this._logger.debug("wechat get request"),"success";let e=Rn(this._options.aesKey,t.body.encrypted),o=new Fn().parse(e.message),r=o.xml;return r.from!==0&&(this._logger.debug("\u6536\u5230\u975E\u987E\u5BA2\u6D88\u606F"),this._logger.debug(r)),r.msgtype?.length?(this._processMessage(o.xml),"success"):(this._logger.debug("\u6682\u4E0D\u5904\u7406\u7684\u6D88\u606F"),this._logger.debug(r),"success")}async me(){return this._options.me}hasLogin(){return!1}async login(){}async sendMessage(t,e){let o={appid:e.origin?.appid,openid:t.toInfo[0].userId,msg:void 0,channel:e.origin?.channel};switch(t.type){case"TEXT":{o.msg=Z(t.content);break}case"EMOTION":case"IMAGE":{let n=await t.content.file.asUrl();o.msg={image:{url:n}};break}case"VIDEO":{let r=t.content,n=await r.file.asUrl(),s=await r.previewImage?.asUrl();o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u4E2A\u89C6\u9891",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:n,picurl:s??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"AUDIO":{let r=t.content;r.text?.length?(this._logger.debug("\u4F7F\u7528\u97F3\u9891\u7684\u6587\u5B57\u8FDB\u884C\u53D1\u9001"),o.msg=r.text):o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u6BB5\u97F3\u9891",description:"\u70B9\u51FB\u6536\u542C",url:await r.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"FILE":{let r=t.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u4E2A\u6587\u4EF6",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:await r.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"ARTICLE":{let r=t.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u7BC7\u6587\u7AE0",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:r.url,picurl:await(r.coverFile??r.thumbFile??this._app.sharedCover).asUrl(),type:"h5"}]}};break}case"POSITION":{let r=t.content;o.msg=`\u5730\u540D:${r.placeName}
24
+ \u7EAC\u5EA6:${n.lat.toFixed(4)}`;break}case"MUSIC":{let n=e.content,s=n.url?.length?n.url:await n.file.asUrl();o.msg_type=3,o.ark=this._getArkContent(n.title,n.desc,s,n.coverUrl,n.album,n.signer);break}case"RICH_TEXT":{this._options.canUseMarkdown?(o.msg_type=2,o.markdown=await At(e.content)):(this._logger.warn("QQ\u673A\u5668\u4EBA\u6682\u4E0D\u652F\u6301rich text\u56DE\u590D\uFF0C\u5982\u679C\u60A8\u6709markdown\u6743\u9650\uFF0C\u8BF7\u5728\u914D\u7F6E\u4E2D\u5F00\u542F\uFF01"),o.msg_type=0,o.content="\u60A8\u6536\u5230\u4E86\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF0C\u8BE6\u60C5\u53EF\u4EE5\u8054\u7CFB\u7BA1\u7406\u5458\u5728\u63A7\u5236\u53F0\u4E2D\u67E5\u770B\uFF01");break}case"CONTACT_CARD":{let n=e.content;o.msg_type=3,o.ark=await this._getArkContent("\u60A8\u6536\u5230\u4E00\u4E2A\u8054\u7CFB\u4EBA\u63A8\u9001",String(n.custom??""),void 0,n.bigImageUrl,n.smallImageUrl,"");break}default:break}if(o.content?.length||o.ark||o.markdown||o.media){o.content?.length&&(o.content=$n(o.content));let n=e.isGroupChat?`${this._options.apiBase}/v2/groups/${r}/messages`:`${this._options.apiBase}/v2/users/${r}/messages`,i=await(await fetch(n,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify(o)})).json();this._logger.trace(i)}}async getContacts(){return this._logger.info("QQ\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u83B7\u53D6\u7528\u6237\u63A5\u53E3\uFF01"),[]}async getContactDetail(e){return e}};import jn from"emittery";import{XMLBuilder as qn,XMLParser as Hn}from"fast-xml-parser";import{v4 as io}from"uuid";import Gn from"remove-markdown";import{decrypt as Kn,encrypt as Wn}from"@wecom/crypto";var st=class p{constructor(e,t){this._app=e;this._options=t;if(!this._options.token||!this._options.aesKey)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this._options.apiBase=this._options.apiBase??"https://chatbot.weixin.qq.com",this._logger=f(this._options.instanceName),this.event=new jn}static params={name:"wcai",optionsSchema:{type:"formily",formily:{type:"object",properties:{...D,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 App ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},me:{type:"object",title:"\u673A\u5668\u4EBA\u4FE1\u606F\uFF08\u53EF\u4EFB\u610F\u586B\u5199\uFF09","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u7528\u6765\u7ED9\u6280\u80FD\u7B49\u8BC6\u522B\u516C\u4F17\u5E73\u53F0\u6D88\u606F\u6E90\uFF08\u673A\u5668\u4EBA\uFF09\u7684\u4FE1\u606F\uFF0C\u7531\u4E8E\u5FAE\u4FE1\u5BF9\u8BDD\u673A\u5668\u4EBA\u4E0D\u5B58\u5728\u7FA4\u804A\uFF0C\u65E0\u9700\u5224\u65AD@me\u80FD\u529B\uFF0C\u56E0\u6B64\u6B64\u5904\u53EF\u4EE5\u586B\u5199\u4EFB\u610F\u503C\u5373\u53EF\u3002"},properties:{userId:{type:"string",title:"\u673A\u5668\u4EBAID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49ID"},required:!0},userName:{type:"string",title:"\u673A\u5668\u4EBA\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u540D\u79F0"},required:!0},nickName:{type:"string",title:"\u673A\u5668\u4EBA\u6635\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u6635\u79F0"},required:!0}},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://chatbot.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://chatbot.weixin.qq.com"}}}},eventNames:["CHAT_MESSAGE"],desc:"\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0"};_logger;get params(){return p.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"api",action:{type:"normal",handler:e=>this._onChatMessage(e)}}]}event;async _processMessage(e){let t=e.userid,o={time:new Date(e.createtime),senderId:t,fromId:t,isGroupChat:!1,isSender:!1,senderName:t,senderInfo:{userId:t,userName:t,nickName:t},toInfo:[this._options.me],origin:e,messageId:io(),type:void 0,content:void 0};switch(e.msgtype){case"text":{if(e.content.msg==="location"){this._logger.info("\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u4E0D\u652F\u6301\u4F20\u8F93\u4F4D\u7F6E\u6D88\u606F\uFF01");return}if(typeof e.content.msg=="string")o.type="TEXT",o.content=e.content.msg;else if(e.content.msg){let r=e.content.msg;o.type="ARTICLE";let n={title:r.link.title,desc:r.link.description,url:r.link.url};o.content=n}break}case"image":{o.type="IMAGE";let r=e.content.msg,n={file:_.fromPath(r.image.url)};o.content=n;break}case"voice":{let r=e.content.msg;if(!r.voice.url?.length){this._logger.warn("\u97F3\u9891\u6587\u4EF6\u4E2D\u6CA1\u6709\u97F3\u9891\u4E0B\u8F7D\u5730\u5740\uFF0C\u65E0\u6CD5\u5904\u7406\uFF01");return}let s=await _.fromPath(r.voice.url).asBuffer(),a={file:await de(s),text:r.voice.recognition};o.type="AUDIO",o.content=a;break}}if(o.content){let r={id:io(),type:"CHAT_MESSAGE",message:o,source:this,me:this._options.me};this.event.emit(r.type,r)}else this._logger.info("\u65E0\u6CD5\u5904\u7406\u7684\u6D88\u606F"),this._logger.info(e)}async _onChatMessage(e){if(e.method.toLowerCase()==="get")return this._logger.debug("wechat get request"),"success";let t=Kn(this._options.aesKey,e.body.encrypted),o=new Hn().parse(t.message),r=o.xml;return r.from!==0&&(this._logger.debug("\u6536\u5230\u975E\u987E\u5BA2\u6D88\u606F"),this._logger.debug(r)),r.msgtype?.length?(this._processMessage(o.xml),"success"):(this._logger.debug("\u6682\u4E0D\u5904\u7406\u7684\u6D88\u606F"),this._logger.debug(r),"success")}async me(){return this._options.me}hasLogin(){return!1}async login(){}async sendMessage(e,t){this.event.emit("RESPONSE_MESSAGE",{id:io(),type:"CHAT_MESSAGE",message:e,fromMessage:t,source:this,me:this._options.me});let o={appid:t.origin?.appid,openid:e.toInfo[0].userId,msg:void 0,channel:t.origin?.channel};switch(e.type){case"TEXT":{o.msg=se(e.content);break}case"EMOTION":case"IMAGE":{let n=await e.content.file.asUrl();o.msg={image:{url:n}};break}case"VIDEO":{let r=e.content,n=await r.file.asUrl(),s=await r.previewImage?.asUrl();o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u4E2A\u89C6\u9891",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:n,picurl:s??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"AUDIO":{let r=e.content;r.text?.length?(this._logger.debug("\u4F7F\u7528\u97F3\u9891\u7684\u6587\u5B57\u8FDB\u884C\u53D1\u9001"),o.msg=r.text):o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u6BB5\u97F3\u9891",description:"\u70B9\u51FB\u6536\u542C",url:await r.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"FILE":{let r=e.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u4E2A\u6587\u4EF6",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:await r.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"ARTICLE":{let r=e.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u7BC7\u6587\u7AE0",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:r.url,picurl:await(r.coverFile??r.thumbFile??this._app.sharedCover).asUrl(),type:"h5"}]}};break}case"POSITION":{let r=e.content;o.msg=`\u5730\u540D:${r.placeName}
27
25
  \u8BE6\u60C5:${r.placeDetail??""}
28
26
  \u7ECF\u5EA6:${r.lon.toFixed(4)}
29
- \u7EAC\u5EA6:${r.lat.toFixed(4)}`;break}case"MUSIC":{let r=t.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u9996\u6B4C",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:r.url??await r.file?.asUrl(),picurl:r.coverUrl??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"RICH_TEXT":{let r=await bt(t.content);o.msg=Nn(r);break}case"CONTACT_CARD":{let r=t.content;o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u4E2A\u540D\u7247",description:r.display??"\u70B9\u51FB\u67E5\u770B",url:r.bigImageUrl,picurl:r.bigImageUrl??r.smallImageUrl,type:"h5"}]}};break}default:break}if(o.msg){let r=typeof o.msg=="string"?o.msg:JSON.stringify(o.msg),n=`<xml>
27
+ \u7EAC\u5EA6:${r.lat.toFixed(4)}`;break}case"MUSIC":{let r=e.content;o.msg={news:{articles:[{title:r.title??"\u6536\u5230\u4E00\u9996\u6B4C",description:r.desc??"\u70B9\u51FB\u67E5\u770B",url:r.url??await r.file?.asUrl(),picurl:r.coverUrl??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case"RICH_TEXT":{let r=await At(e.content);o.msg=Gn(r);break}case"CONTACT_CARD":{let r=e.content;o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u4E2A\u540D\u7247",description:r.display??"\u70B9\u51FB\u67E5\u770B",url:r.bigImageUrl,picurl:r.bigImageUrl??r.smallImageUrl,type:"h5"}]}};break}default:break}if(o.msg){let r=typeof o.msg=="string"?o.msg:JSON.stringify(o.msg),n=`<xml>
30
28
  <appid><![CDATA[${o.appid}]]></appid>
31
29
  <openid><![CDATA[${o.openid}]]></openid>
32
30
  <msg><![CDATA[${r}]]></msg>
@@ -35,11 +33,11 @@ ${e.data}
35
33
  <kefuavatar></kefuavatar>
36
34
  <ans_node_name></ans_node_name>
37
35
  </xml>`,s=`<xml>
38
- ${new En().build(o)}
39
- </xml>`,i=Bn(this._options.aesKey,n,this._options.appId),a=`${this._options.apiBase}/openapi/sendmsg/${this._options.token}`;try{let p=await fetch(a,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({encrypt:i})});this._logger.debug(await p.text())}catch(p){this._logger.error(p)}}else this._logger.info("\u5185\u5BB9\u4E3A\u7A7A\u6216\u8005\u65E0\u6CD5\u53D1\u9001\u7684\u6D88\u606F"),this._logger.info(t)}async getContacts(t,e=!1){return[]}async getContactDetail(t){return t}};import Dn from"baidu-aip-sdk";var rt=class c extends B{constructor(e,o){if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");o.aue=o.aue??6,o.per=o.per??0,o.spd=o.spd??5,o.pit=o.pit??5,o.vol=o.vol??5;super(o);this._app=e;this._options=o;this._client=new Dn.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}static params={name:"baidu-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},per:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u57FA\u7840-\u5EA6\u5C0F\u7F8E-\u6807\u51C6\u5973\u4E3B\u64AD",value:0},{label:"\u57FA\u7840-\u5EA6\u5C0F\u5B87-\u4EB2\u5207\u7537\u58F0",value:1},{label:"\u57FA\u7840-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:3},{label:"\u57FA\u7840-\u5EA6\u4E2B\u4E2B-\u7AE5\u58F0",value:4},{label:"\u7CBE\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:5003},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:5118},{label:"\u7CBE\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:106},{label:"\u7CBE\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u7AE5\u58F0",value:103},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u7AE5-\u7AE5\u58F0\u4E3B\u64AD",value:110},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u840C-\u8F6F\u840C\u59B9\u5B50",value:111},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u5A07-\u6210\u719F\u5973\u4E3B\u64AD",value:5},{label:"\u81FB\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:4003},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:4106},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D24-\u7535\u53F0\u7537\u4E3B\u64AD",value:4115},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:4119},{label:"\u81FB\u54C1-\u5EA6\u7075\u513F-\u6E05\u6FC0\u5973\u58F0",value:4105},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u4E54-\u6D3B\u6CFC\u5973\u58F0",value:4117},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u96EF-\u6D3B\u529B\u5973\u4E3B\u64AD",value:4100},{label:"\u81FB\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u5973\u58F0",value:4103},{label:"\u81FB\u54C1-\u5EA6\u59D7\u59D7-\u5A31\u4E50\u5973\u58F0",value:4144},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D1D-\u77E5\u8BC6\u5973\u4E3B\u64AD",value:4278},{label:"\u81FB\u54C1-\u5EA6\u6E05\u98CE-\u914D\u97F3\u7537\u58F0",value:4143},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u65B0-\u4E13\u4E1A\u5973\u4E3B\u64AD",value:4140},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u5F66-\u77E5\u8BC6\u7537\u4E3B\u64AD",value:4129},{label:"\u81FB\u54C1-\u5EA6\u661F\u6CB3-\u5E7F\u544A\u7537\u58F0",value:4149},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u6E05-\u5E7F\u544A\u5973\u58F0",value:4254},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u7EFC\u827A\u7537\u58F0",value:4206},{label:"\u81FB\u54C1-\u5357\u65B9-\u7535\u53F0\u5973\u4E3B\u64AD",value:4226}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u901F"}},pit:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u8C03"}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:5,"x-component-props":{min:0,max:15},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-15\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u97F3\u91CF\u3002\u6CE8\u610F\u7CBE\u54C1\u5E93\u624D\u652F\u630110-15\u7684\u97F3\u91CF\uFF0C\u5176\u4ED6\u53EA\u80FD\u8BBE\u7F6E0-9\u3002"}},aue:{type:"string",title:"\u8BED\u97F3\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{value:3,label:"mp3"},{value:4,label:"pcm-16k"},{value:5,label:"pcm-8k"},{value:6,label:"wav(default)"}],default:6,"x-decorator-props":{tooltip:"\u5982\u679C\u4E3A\u7279\u5B9A\u7A0B\u5E8F\u5F00\u542F\uFF0C\u9700\u8981\u6307\u5B9A\u5408\u6210\u540E\u7684\u97F3\u9891\u683C\u5F0F\uFF0C\u53EF\u4EE5\u5728\u6B64\u9009\u62E9\u3002"}}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u5408\u6210"};_client;get _maxToken(){return 1024}get options(){return this._options}get params(){return c.params}async getAudioBuffer(e,o){let r={aue:this._options.aue,per:this._options.per,spd:this._options.spd,pit:this._options.pit,vol:this._options.vol,cuid:`${o.source.options.instanceName}-${o.message.fromId}`},n=await this._client.text2audio(e,r);if(n.data)return n.data;this._logger.error(n?.err_msg??n)}};import Ln from"baidu-aip-sdk";var nt=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu STT skill need appId,apiKey,secretKey to work.");this._client=new Ln.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}static params={name:"baidu-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u8BC6\u522B"};_client;get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=await e.asBuffer(),r=await this._client.recognize(o,"wav",16e3,{len:o.length,cuid:"ppagent-baidu-stt",channel:1});if(r.err_no!==0){this._logger.error(r.err_msg);return}if(!r.result?.length){this._logger.warn("\u8F6C\u6362\u7ED3\u679C\u4E3A\u7A7A\uFF01");return}return r.result[0]}catch(o){this._logger.error(o.message);return}}};import Un from"crypto-js/hmac-sha256";import Ho from"crypto-js/enc-base64";import $n from"crypto-js/enc-utf8";import{WebSocket as Hn}from"ws";var st=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Xunfei STT skill need appId,apiKey,secretKey to work.");this._targetFormat="s16le"}static params={name:"xunfei-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u8BC6\u522B"};_hostUrl="wss://iat-api.xfyun.cn/v2/iat";_host="iat-api.xfyun.cn";_uri="/v2/iat";_frame={STATUS_FIRST_FRAME:0,STATUS_CONTINUE_FRAME:1,STATUS_LAST_FRAME:2};get options(){return this._options}get params(){return c.params}_getAuthStr(e){let o=`host: ${this._host}
40
- date: ${e}
41
- GET ${this._uri} HTTP/1.1`,r=Un(o,this._options.secretKey),n=Ho.stringify(r),s=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${n}"`;return Ho.stringify($n.parse(s))}_getFrame(e,o){let r,n={status:o,format:"audio/L16;rate=16000",audio:e.toString("base64"),encoding:"raw"};switch(o){case this._frame.STATUS_FIRST_FRAME:r={common:{app_id:this._options.appId},business:{language:"zh_cn",domain:"iat",accent:"mandarin",dwa:"wpgs"},data:n},o=this._frame.STATUS_CONTINUE_FRAME;break;case this._frame.STATUS_CONTINUE_FRAME:case this._frame.STATUS_LAST_FRAME:r={data:n};break}return r}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=new Date().toUTCString(),r=this._frame.STATUS_FIRST_FRAME,n="",s=[],i=this._hostUrl+"?authorization="+this._getAuthStr(o)+"&date="+o+"&host="+this._host,a=new Hn(i),p=await e.asBuffer();return new Promise(l=>{a.on("open",()=>{this._logger.trace("xunfei websocket connect!");let u=this._getFrame(p,r);a.send(JSON.stringify(u)),r=this._frame.STATUS_LAST_FRAME,u=this._getFrame("",r),a.send(JSON.stringify(u))});let m;a.on("message",(u,g)=>{if(g){this._logger.error(`err:${g}`),a.close();return}let d=JSON.parse(u);if(d.code!=0){this._logger.error(`error code ${d.code}, reason ${d.message}`),a.close();return}let I="",f=!1;d.data.status==2?(n=d.sid,f=!0):I+="\u4E2D\u95F4\u8BC6\u522B\u7ED3\u679C\uFF1A",s[d.data.result.sn]=d.data.result,d.data.result.pgs=="rpl"&&d.data.result.rg.forEach(T=>{s[T]=null}),s.forEach(T=>{T?.ws.forEach(L=>{L.cw.forEach(U=>{I+=U.w})})}),f?(m=I,a.close()):this._logger.debug(I)}),a.on("close",()=>{this._logger.trace(`\u672C\u6B21\u8BC6\u522Bsid\uFF1A${n}`),this._logger.trace("connect close!"),l(m)}),a.on("error",u=>{this._logger.warn("websocket connect err: "+u),l(void 0)})})}catch(o){this._logger.error(o.message);return}}};import jn from"crypto-js/hmac-sha256";import jo from"crypto-js/enc-base64";import qn from"crypto-js/enc-utf8";import{WebSocket as Gn}from"ws";var it=class c extends B{constructor(e,o){if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");o.vcn=o.vcn??"xiaoyan",o.speed=o.speed??50,o.pitch=o.pitch??50,o.volume=o.volume??50;super(o);this._app=e;this._options=o}static params={name:"xunfei-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},vcn:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u5C0F\u71D5",value:"xiaoyan"},{label:"\u8BB8\u4E45",value:"aisjiuxu"},{label:"\u5C0F\u840D",value:"aisxping"},{label:"\u5C0F\u5A67",value:"aisjinger"},{label:"\u8BB8\u5C0F\u5B9D",value:"aisbabyxu"}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:"xiaoyan","x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1\u8BAF\u98DE\u63A7\u5236\u53F0 https://console.xfyun.cn/services/tts \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u901F"}},pitch:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:100},default:50,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u8C03"}},volume:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u5408\u6210"};_hostUrl="wss://tts-api.xfyun.cn/v2/tts";_host="iat-api.xfyun.cn";_uri="/v2/tts";get options(){return this._options}get params(){return c.params}get _maxToken(){return 2e3}_getAuthStr(e){let o=`host: ${this._host}
42
- date: ${e}
43
- GET ${this._uri} HTTP/1.1`,r=jn(o,this._options.secretKey),n=jo.stringify(r),s=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${n}"`;return jo.stringify(qn.parse(s))}async getAudioBuffer(e){let o=new Date().toUTCString(),r=this._hostUrl+"?authorization="+this._getAuthStr(o)+"&date="+o+"&host="+this._host,n=new Gn(r);return new Promise(s=>{let i;n.on("open",()=>{this._logger.trace("websocket connect!");let a={common:{app_id:this._options.appId},business:{aue:"raw",auf:"audio/L16;rate=16000",vcn:this._options.vcn,speed:this._options.speed,volume:this._options.volume,pitch:this._options.pitch,tte:"UTF8"},data:{text:Buffer.from(e).toString("base64"),status:2}};n.send(JSON.stringify(a))}),n.on("message",(a,p)=>{if(p){this._logger.error("message error: "+p),n.close();return}let l=JSON.parse(a);if(l.code!=0){this._logger.error(`${l.code}: ${l.message}`),n.close();return}let m=l.data.audio,u=Buffer.from(m,"base64");i?i=Buffer.concat([i,u]):i=u,l.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(se(i.buffer,16e3,16,1)),n.close())}),n.on("close",()=>{this._logger.trace("connect close!"),s(i)}),n.on("error",a=>{this._logger.trace("websocket connect err: "+a),s(void 0)})})}};import Kn from"tencentcloud-sdk-nodejs-asr";var Wn=Kn.asr.v20190614.Client,at=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent STT skill need appId,apiKey,secretKey to work.")}static params={name:"tencent-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u8BC6\u522B"};_client;async init(){this._client=new Wn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=await e.asBase64(),r=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);r==="ogg"&&(r="ogg-opus");let n={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:r,Data:o},s=await this._client.SentenceRecognition(n);if(!s.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return s.Result}catch(o){this._logger.error(o.message);return}}};import Vn from"tencentcloud-sdk-nodejs-tts";import{v4 as zn}from"uuid";var Xn=Vn.tts.v20190823.Client,ct=class c extends B{constructor(e,o){if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent TTS skill need appId,apiKey,secretKey to work.");o.spd=o.spd??0,o.vol=o.vol??0,o.voice=o.voice??0;super(o);this._app=e;this._options=o}static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0},voice:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u6807\u51C6\u97F3\u8272-\u7075\u60A6(\u901A\u7528\u5973\u58F0)",value:0},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u97F3(\u901A\u7528\u5973\u58F0)",value:1},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u5747(\u901A\u7528\u7537\u58F0)",value:2},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u5BA2\u670D\u5973\u58F0)",value:3},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6167(\u5BA2\u670D\u5973\u58F0)",value:4},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6717(\u901A\u7528\u7537\u58F0)",value:5},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6E05(\u901A\u7528\u5973\u58F0)",value:6},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u667A(\u901A\u7528\u5973\u58F0)",value:7},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u777F(\u901A\u7528\u7537\u58F0)",value:8},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6653(\u901A\u7528\u5973\u58F0)",value:9},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u7CA4\u8BED\u5973\u58F0)",value:10},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u900D\u9065(\u9605\u8BFB\u7537\u58F0)",value:10051e4},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745C(\u60C5\u611F\u5973\u58F0)",value:101001},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8046(\u901A\u7528\u5973\u58F0)",value:101002},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7F8E(\u5BA2\u670D\u5973\u58F0)",value:101003},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E91(\u901A\u7528\u7537\u58F0)",value:101004},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8389(\u901A\u7528\u5973\u58F0)",value:101005},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u742A(\u5BA2\u670D\u5973\u58F0)",value:101008},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B8(\u77E5\u6027\u5973\u58F0)",value:101009},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u534E(\u901A\u7528\u7537\u58F0)",value:101010},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u71D5(\u65B0\u95FB\u5973\u58F0)",value:101011},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E39(\u65B0\u95FB\u5973\u58F0)",value:101012},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8F89(\u65B0\u95FB\u7537\u58F0)",value:101013},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5B81(\u65B0\u95FB\u7537\u58F0)",value:101014},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u840C(\u7537\u7AE5\u58F0)",value:101015},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u751C(\u5973\u7AE5\u58F0)",value:101016},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84C9(\u60C5\u611F\u5973\u58F0)",value:101017},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u9756(\u60C5\u611F\u7537\u58F0)",value:101018},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5F64(\u7CA4\u8BED\u5973\u58F0)",value:101019},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u521A(\u65B0\u95FB\u7537\u58F0)",value:101020},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745E(\u65B0\u95FB\u7537\u58F0)",value:101021},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8679(\u65B0\u95FB\u5973\u58F0)",value:101022},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8431(\u804A\u5929\u5973\u58F0)",value:101023},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7693(\u804A\u5929\u7537\u58F0)",value:101024},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8587(\u804A\u5929\u5973\u58F0)",value:101025},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5E0C(\u901A\u7528\u5973\u58F0)",value:101026},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6885(\u901A\u7528\u5973\u58F0)",value:101027},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6D01(\u901A\u7528\u5973\u58F0)",value:101028},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u51EF(\u901A\u7528\u7537\u58F0)",value:101029},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u67EF(\u901A\u7528\u7537\u58F0)",value:101030},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u594E(\u901A\u7528\u7537\u58F0)",value:101031},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B3(\u901A\u7528\u5973\u58F0)",value:101032},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84D3(\u5BA2\u670D\u5973\u58F0)",value:101033},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4F73(\u5BA2\u670D\u5973\u58F0)",value:101081},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82F1(\u5BA2\u670D\u5973\u58F0)",value:101080}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://cloud.tencent.com/document/product/1073/92668#55924b56-1a73-4663-a7a1-a8dd82d6e823 \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-2,6]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u8BED\u901F\uFF0C\u652F\u6301\u5C0F\u6570\u70B9\u4E24\u4F4D"},"x-component-props":{min:-2,max:6}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-component-props":{min:-10,max:10},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C[-10,10]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u5408\u6210"};_client;get _maxToken(){return 150}async init(){let e=new Xn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"tts.tencentcloudapi.com"}}});this._client=e}get options(){return this._options}get params(){return c.params}async getAudioBuffer(e){try{let o=await this._client.TextToVoice({Text:e,SessionId:zn(),Volume:this._options.vol,Speed:this._options.spd,VoiceType:this._options.voice,SampleRate:16e3,Codec:"wav"});if(o?.Audio?.length)return Buffer.from(o.Audio,"base64");this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};import Jn from"openai";var ce=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.apiKey?.length)throw new Error("OpenAI STT skill need api key to work.");if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"openai-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 whisper-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u8BC6\u522B"};_client;async init(){this._client=new Jn({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(o.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+o);return}let r=await this._client.audio.transcriptions.create({file:await e.asReadStream(),model:this._options.model});if(!r.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.text}catch(o){this._logger.error(o.message);return}}};var pt=class c extends ce{constructor(e,o){if(!o.apiKey?.length)throw new Error("Silicon Flow STT skill need api key to work.");o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o;if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...ce.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 FunAudioLLM/SenseVoiceSmall"},"x-decorator":"FormItem",default:"FunAudioLLM/SenseVoiceSmall",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u8BC6\u522B"};get options(){return this._options}get params(){return c.params}};var pe=class c extends B{constructor(e,o){if(!o.apiKey?.length||!o.model?.length||!o.voice?.length)throw new Error("OpenAI TTS skill need API KEY,model and voice to work.");super(o);this._app=e;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 tts-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:["alloy","ash","coral","echo","fable","onyx","nova","sage","shimmer"],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u6216\u8005\u9009\u62E9\u53D1\u97F3\u4EBA\u7684\u540D\u79F0"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://platform.openai.com/docs/api-reference/audio/createSpeech \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:1,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-0.25,4]\uFF0C\u9ED8\u8BA4\u4E3A1\u4E2D\u8BED\u901F"},"x-component-props":{min:.25,max:4}}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u5408\u6210"};_format="wav";get _maxToken(){return 10240}get options(){return this._options}get params(){return c.params}_updateBody(e){return e}async getAudioBuffer(e){try{let o=await fetch(`${this._options.baseUrl}/audio/speech`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(this._updateBody({model:this._options.model,input:e,voice:this._options.voice,response_format:this._format,speed:this._options.speed}))});if(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};var lt=class c extends pe{constructor(e,o){o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o}static params={name:"silicon-flow-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...pe.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 fishaudio/fish-speech-1.5"},"x-decorator":"FormItem",required:!0,default:"fishaudio/fish-speech-1.5"},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528SiliconFlow\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\uFF0C\u53EF\u4EE5\u5728\u5B98\u7F51\u6587\u6863\u67E5\u770B\u3002"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://docs.siliconflow.cn/api-reference/audio/create-speech#body-sample-rate \u3002"},required:!0}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u5408\u6210"};_format="pcm";get options(){return this._options}get params(){return c.params}_updateBody(e){return e.sample_rate=16e3,e.stream=!1,e}async getAudioBuffer(e){try{let o=await super.getAudioBuffer(e);return o?Buffer.from(se(o.buffer,16e3,16,1)):void 0}catch(o){this._logger.error(o.message);return}}};var mt=class c extends B{constructor(e,o){if(!o.apiKey?.length||!o.referenceId?.length)throw new Error("Fish Audio TTS skill need API KEY,reference id voice to work.");o.baseUrl=o.baseUrl??"https://api.fish.audio";super(o);this._app=e;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://api.fish.audio\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528FishAudio\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.fish.audio"},referenceId:{type:"string",title:"\u53D1\u97F3\u4EBAID","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u53C2\u8003ID\uFF0C\u5B98\u65B9API\u53EF\u4ECE\u5B98\u7F51\u67E5\u770B"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://fish.audio/zh-CN/discovery/ \uFF0C\u9009\u62E9\u9700\u8981\u7684\u58F0\u97F3\u540E\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5\uFF0C\u6D4F\u89C8\u5668\u5730\u5740\u4E2D\u7684\u4E00\u957F\u4E32MD5\u5C31\u662FID\uFF0C\u6216\u8005\u70B9\u51FB\u4E09\u4E2A\u5C0F\u70B9\u540E\u70B9\u51FB\u590D\u5236ID \u3002"}}}}},desc:"FishAudio\u8BED\u97F3\u5408\u6210"};get _maxToken(){return 10240}get options(){return this._options}get params(){return c.params}async getAudioBuffer(e){try{let o=await fetch(`${this._options.baseUrl}/v1/tts`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({reference_id:this._options.referenceId,text:e,format:"wav",sample_rate:16e3})});if(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var K=class c{constructor(t,e){this._app=t;this._options=e;this._logger=y(this._options.instanceName)}static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,apiKey:{type:"string",title:"API Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684ApiKey"},"x-decorator-props":{tooltip:"\u8BF7\u786E\u8BA4\u60A8\u7684ApiKey\u5177\u5907\u76F8\u5173\u6743\u9650"},required:!0},apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165\u60A8\u7684API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740\u3002"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"}},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8","x-decorator":"FormItem","x-component":"Input"},triggerWords:{type:"string",title:"\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u753B\u56FE \u753B\u4E2A\u56FE \u753B\u753B \u753B\u5F20\u56FE \u7ED8\u56FE \u753B\u4E2A\u753B \u753B draw",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u56FE\u7247",value:"IMAGE"},{label:"MarkDown",value:"TEXT"}],"x-decorator-props":{tooltip:"\u652F\u6301Markdown\u7684\u6D88\u606F\u6E90\u5EFA\u8BAE\u4F7F\u7528\u6587\u5B57"},default:"TEXT"},useLLM:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u5927\u6A21\u578B\u8FDB\u884C\u63D0\u793A\u8BCD\u4F18\u5316","x-decorator":"FormItem","x-component":"Switch",default:!1,"x-decorator-props":{tooltip:"\u5982\u679C\u9009\u62E9\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\uFF0C\u4F46\u662F\u6CA1\u6709\u9009\u62E9\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF0C\u5219\u4E5F\u4E0D\u4F1A\u751F\u6548\u3002"}},optimizer:{type:"string",title:"\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B","x-decorator":"FormItem","x-component":"BotSelector","x-decorator-props":{tooltip:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u7528\u6765\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u540E\u7AEF\u5927\u6A21\u578B\u5B9E\u4F8B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u5355\u72EC\u4E3A\u6B64\u529F\u80FD\u521B\u5EFA\u72EC\u7ACB\u5927\u6A21\u578B\u7684\u5B9E\u4F8B\uFF0C\u4EE5\u907F\u514D\u4E0A\u4E0B\u6587\u5E72\u6270\u3002\u4F18\u5316\u7684\u63D0\u793A\u8BCD\u7B49\u5185\u5BB9\u5728\u540E\u7AEF\u6A21\u578B\u521B\u5EFA\u7684\u65F6\u5019\u53EF\u4EE5\u8BBE\u5B9A\uFF0C\u5982\u679C\u662F\u667A\u80FD\u4F53\u6A21\u578B\uFF0C\u53EF\u4EE5\u5728\u667A\u80FD\u4F53\u5E73\u53F0\u8FDB\u884C\u8BBE\u5B9A\u3002"}}}}},desc:"\u57FA\u7840\u7ED8\u56FE\u6280\u80FD"};_logger;get options(){return this._options}get params(){return c.params}async init(){}async applyOnSource(t){let e=kt(t.message.content);if(!e?.trim().length){this._logger.trace("\u5F53\u524D\u7ED8\u56FE\u6307\u4EE4\u4E3A\u7A7A");return}e=e.trim(),e.startsWith(t.me?.nickName)&&(e=e.slice(t.me.nickName.length+1),this._logger.trace("remove nick name:"+t.me.nickName));let o=e.split(/\s+/),r=this._options.triggerWords.split(/\s+/);if(this._options.triggerWords?.indexOf(o[0])>=0||r.some(n=>e.startsWith(n))){let n=o.length>1?o.slice(1).join(","):e;if(!n?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}if(this._options.useLLM)if(this._options.optimizer?.length){this._logger.debug("\u6B63\u5728\u4F18\u5316\u63D0\u793A\u8BCD");let a="\u8BF7\u5BF9\u4EE5\u4E0B\u7ED8\u56FE\u6216\u8005\u89C6\u9891\u751F\u6210\u7684\u63D0\u793A\u8BCD\u8FDB\u884C\u4F18\u5316\uFF1A"+n,p=this._app.botManager.getInstance(this._options.optimizer);if(!p)this._logger.error("\u7528\u4E8E\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u5927\u6A21\u578B"+this._options.optimizer+"\u4E0D\u5B58\u5728!");else{let l=t.message,m={...l,type:"TEXT",content:a,origin:void 0};t.message=m;try{let u=await p.prepareMessage(t),g="";await p.getResponse(t,{onContent:(d,I)=>{I==="TEXT"&&(g+=d)},onError:d=>{this._logger.error(d)}},u,[]),n=g,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+n)}catch(u){this._logger.error(u.message)}finally{t.message=l}}}else this._logger.warn("\u60A8\u8BBE\u7F6E\u4E86\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\u63D0\u793A\u8BCD\uFF0C\u4F46\u662F\u6CA1\u6709\u8BBE\u5B9A\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF01");this._logger.trace("draw with prompt "+n);let s=t.message.senderId,i=await this._draw(n,s,t);if(i?.url.length)if(t.message=void 0,this._options.replyFormat==="IMAGE"){let a={file:h.fromPath(i.url)};t.reply(a,"IMAGE",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="FILE"){let a={file:h.fromPath(i.url)};t.reply(a,"FILE",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let a={file:h.fromPath(i.url),previewImage:i.coverUrl?h.fromPath(i.coverUrl):void 0};t.reply(a,"VIDEO",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else this._options.replyFormat==="URL"?t.reply(i.url+`
44
- `+(i.text??""),"TEXT",void 0,!0):t.reply(`![\u70B9\u6211\u67E5\u770B\u7ED8\u56FE\u7ED3\u679C](${i})
45
- ${i.text??""}`,"TEXT",void 0,!0);else this._logger.warn("\u56FE\u7247\u6216\u89C6\u9891\u751F\u6210\u5931\u8D25\uFF01")}else this._logger.trace("\u63D0\u793A\u8BCD\u6CA1\u6709\u4EE5\u6307\u5B9A\u7684\u89E6\u53D1\u8BCD\u5F00\u5934")}};var ut=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn";super(e,o);this._app=e;this._options=o}static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogview-3-plus","cogview-3"],default:"cogview-3-plus","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024"}}}}};async _draw(e,o){if(!e?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let r=await(await fetch(`${this._options.apiBase}/api/paas/v4/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user_id:o})})).json();return this._logger.debug(r),{url:r?.data?.[0].url}}};var dt=class extends K{constructor(e,o){super(e,o);this._app=e;this._options=o}static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3AOpenAI\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0"},default:"dall-e-3","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","1792x1024","1024x1792"],default:"1024x1024"},quality:{type:"string",title:"\u7ED8\u56FE\u8D28\u91CF\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["standard","hd"],default:"standard"}}}}};async _draw(e,o){let r=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user:o})})).json();return this._logger.debug(r),{url:r.data?.[0].url}}};var gt=class extends K{constructor(e,o){o.apiBase=o?.apiBase?.length?o.apiBase:"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o}static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u7845\u57FA\u6D41\u52A8\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://api.siliconflow.cn/v1"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["stabilityai/stable-diffusion-3-5-large","stabilityai/stable-diffusion-3-5-large-turbo","black-forest-labs/FLUX.1-schnell","Pro/black-forest-labs/FLUX.1-schnell","black-forest-labs/FLUX.1-dev","black-forest-labs/FLUX.1-pro","stabilityai/stable-diffusion-3-medium","stabilityai/stable-diffusion-xl-base-1.0","stabilityai/stable-diffusion-2-1"],default:"stabilityai/stable-diffusion-3-5-large","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4E0D\u540C\u6A21\u578B\u652F\u6301\u4E0D\u540C\uFF09","x-decorator":"FormItem","x-component":"AutoComplete",enum:["1024x1024","512x1024","1024x512","768x512","768x1024","1024x576","576x1024"],default:"1024x1024","x-decorator-props":{tooltip:"\u4E0D\u540C\u6A21\u578B\u4E0D\u76F8\u540C\uFF0C\u5177\u4F53\u8BF7\u67E5\u770B\u5B98\u7F51\u3002"}},customOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u914D\u7F6E","x-decorator":"FormItem","x-component":"Code",default:"{}"}}}}};async _draw(e){let o=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(o),o.images?.length)return{url:o.images?.[0].url};this._logger.error(o)}};import{v4 as Qn}from"uuid";var ht=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn",o.timeout=Math.max(o.timeout??180,30);super(e,o);this._app=e;this._options=o}static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u89C6\u9891\u751F\u6210\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u89C6\u9891\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogvideox-flash","cogvideox"],default:"cogvideox-flash","x-decorator-props":{tooltip:"\u89C6\u9891\u7ED8\u5236\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},triggerWords:{type:"string",title:"\u89C6\u9891\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u751F\u6210\u89C6\u9891 \u89C6\u9891 video",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u89C6\u9891",value:"VIDEO"},{label:"\u6587\u4EF6",value:"FILE"},{label:"Url",value:"URL"}],"x-decorator-props":{tooltip:"\u4E0D\u652F\u6301\u89C6\u9891\u53D1\u9001\u7684\u5EFA\u8BAE\u4F7F\u7528URL"},default:"VIDEO"},withAudo:{type:"boolean",title:"\u662F\u5426\u751F\u6210\u97F3\u9891","x-decorator":"FormItem","x-component":"Switch",default:!1},size:{type:"string",title:"\u89C6\u9891\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024","x-display":!1},timeout:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker",default:180}}}}};async _draw(e,o){let r=await(await fetch(`${this._options.apiBase}/api/paas/v4/videos/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,user_id:o,with_audio:this._options.withAudio??!1,request_id:Qn()})})).json();if(this._logger.debug(r),r?.id)return new Promise(n=>{try{let s=new Date().getTime(),i=async()=>{let a=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${r.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(a.task_status==="SUCCESS"){n({url:a.video_result?.[0].url,coverUrl:a.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(a));if((new Date().getTime()-s)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),n(void 0);return}setTimeout(i,3e3)};i()}catch(s){this._logger.error(s.message),n(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(r)}};var HI=async c=>({init:async()=>({skills:[{creator:t=>new Ge(t),params:Ge.params},{creator:t=>new qe(t),params:qe.params},{creator:t=>new rt(c,t),params:rt.params},{creator:t=>new nt(c,t),params:nt.params},{creator:t=>new st(c,t),params:st.params},{creator:t=>new it(c,t),params:it.params},{creator:t=>new at(c,t),params:at.params},{creator:t=>new ct(c,t),params:ct.params},{creator:t=>new ce(c,t),params:ce.params},{creator:t=>new pt(c,t),params:pt.params},{creator:t=>new pe(c,t),params:pe.params},{creator:t=>new lt(c,t),params:lt.params},{creator:t=>new mt(c,t),params:mt.params},{creator:t=>new ut(c,t),params:ut.params},{creator:t=>new dt(c,t),params:dt.params},{creator:t=>new gt(c,t),params:gt.params},{creator:t=>new ht(c,t),params:ht.params}],bots:[{creator:t=>new Me(t),params:Me.params},{creator:t=>new Pe(t),params:Pe.params},{creator:t=>new R(t),params:R.params},{creator:t=>new Oe(t),params:Oe.params},{creator:t=>new Ne(t),params:Ne.params},{creator:t=>new Re(t),params:Re.params},{creator:t=>new Be(t),params:Be.params},{creator:t=>new De(t),params:De.params},{creator:t=>new Ee(t),params:Ee.params},{creator:t=>new Fe(t),params:Fe.params},{creator:t=>new Ue(t),params:Ue.params},{creator:t=>new $e(t),params:$e.params},{creator:t=>new Le(t),params:Le.params}],sources:[{creator:t=>new Xe(t),params:Xe.params},{creator:t=>new Ke(c,t),params:Ke.params},{creator:t=>new We(t),params:We.params},{creator:t=>new Je(c,t),params:Je.params},{creator:t=>new Qe(c,t),params:Qe.params},{creator:t=>new Ze(c,t),params:Ze.params},{creator:t=>new tt(c,t),params:tt.params},{creator:t=>new ot(c,t),params:ot.params}],taskTriggers:[{creator:t=>new He(c,t),params:He.params},{creator:t=>new je(c,t),params:je.params},{creator:t=>new ze(c,t),params:ze.params}],taskRunners:[{creator:t=>new Ve(c,t),params:Ve.params}]}),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:async()=>{}});var Bt=class extends z{};var Dt=class extends z{};var Lt=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}},Ut=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}};import Yn from"fastify";import Zn from"@fastify/websocket";import es from"@fastify/static";import be from"node:process";import ts from"@fastify/formbody";import os from"emittery";import{XMLParser as rs}from"fast-xml-parser";import qo from"fs";import to from"node:path";import{createReadStream as ns,existsSync as ss}from"node:fs";import{authentication as is,createDirectus as as,readItems as cs,readMe as ps,rest as ls}from"@directus/sdk";import ms from"@fastify/cors";import{v4 as Go}from"uuid";import us from"@fastify/compress";var Ko=class c extends os{constructor(e={name:"default"}){super();this._options=e;this._logger=y("app-"+this._options.name),this._globalEvent=new At(this._options.name)}static EventNames={ERROR:"error"};_server;_pluginHandlers=[];_wsRoutes={};_httpRoutes=new Map;_starting=!1;_stopping=!1;_stopped=!1;_running=!1;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser=new rs;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos=new Map;_services=new Map;get server(){return this._server}get skillManager(){return this._skillManager}get sourceManager(){return this._sourceManager}get botManager(){return this._botManager}get taskTriggerManager(){return this._taskTriggerManager}get taskRunnerManager(){return this._taskRunnerManager}get agentService(){return this._agentService}get offlineMode(){return this._options.offline??!1}get sharedCover(){return this._sharedCover}get sharedLogo(){return this._sharedLogo}get client(){return this._client||this._logger.warn("\u914D\u7F6E\u670D\u52A1client\u5C1A\u672A\u521B\u5EFA\uFF0C\u8BF7\u7B49\u5F85\u670D\u52A1\u521D\u59CB\u5316\u4E4B\u540E\u518D\u8C03\u7528\uFF01"),this._client}get options(){return JSON.parse(JSON.stringify(this._options))}get taskService(){return this._taskService}get globalEvent(){return this._globalEvent}get plugins(){return[...this._pluginHandlers]}get me(){return this._me}get onlinePlugins(){return this._onlinePluginInfos.values()}get running(){return this._running}get services(){return this._services}async _createServer(){this._logger.trace("create fastify server"),this._server=Yn({logger:{level:"warn"}}),await this._server.register(Zn),await this._server.register(ts),await this._server.register(ms,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(us,{global:!0,threshold:_.serverCompressMinSize,customTypes:e=>_.serverCompressMime.includes(e)})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,o,r)=>{let n=[];o.on("data",s=>{n.push(s)}),o.on("end",()=>{try{let s=Buffer.concat(n).toString(),i=this._xmlParser.parse(s);r(null,i)}catch(s){r(s)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async e=>{e.get("/ws/*",{websocket:!0},(o,r)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+r.ip+",host:"+r.hostname+",path:"+r.url);let s=(r.query.token??r.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(r.url),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=r.params["*"],a,p,l,m=new TextDecoder("utf-8");if(i==="normal")a=async u=>{u instanceof Buffer&&(u=m.decode(u));try{let g=JSON.parse(u),d=`${g?.instanceName}-${g?.action}`,I=this._wsRoutes[d];if(I.needAuth&&!s)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let f=I.action;if(!f){this._logger.warn("unhandled message:"+u);return}let T=await f(g.data);if(T!=null){let L={id:g.id,data:T};return JSON.stringify(L)}}catch(g){return String(g)}};else{let u=i.replaceAll("/","-"),g=()=>{let d=this._wsRoutes[u];if(!d){o.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(d.needAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return d};a=async(d,I,f)=>{let T=g();if(!T)return;T.action.onMessage(d,I,f)},p=async(d,I)=>{let f=g();if(!f)return;f.action.onOpen(d,I)},l=async(d,I)=>{let f=g();if(!f)return;f.action.onClose(d,I)}}o.on("message",async u=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let g=await a(u,r,o);g!=null&&o.send(g)}catch(g){this._logger.error(g)}}),p&&p(r,o),l&&o.on("close",()=>{l(r,o),this._logger.trace("ws closed,from "+r.hostname)}),o.on("error",u=>{this._logger.error(u)})})}),this._server.all("/api/*",async(e,o)=>{_.traceHttpRequest&&this._logger.trace("api request,ip"+e.ip+",host:"+e.hostname+",path:"+e.url);let r=e.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(r)){o.send("success");return}let n=this._httpRoutes.get(r);if((n.needAuth||_.publicForceAuth)&&(e.query.token??e.headers.authorization?.replace("Bearer","").trim())!==_.publicToken){this._logger.warn("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.warn(e.url),o.status(401),o.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let s=n.action;try{return s.type==="normal"?o.send(await s.handler(e)):(s.handler(e,o),o)}catch(i){i instanceof xt?(o.status(401),o.send(i.message)):i instanceof _t?(o.status(400),o.send(i.message)):i instanceof yt?(o.status(404),o.send(i.message)):(o.status(500),o.send(String(i)))}}),await this._server.register(es,{root:_.publicPath,prefix:_.publicPathName}),be.env.VERIFY_FILE?.length){let e=to.resolve("."+be.env.VERIFY_FILE);ss(e)?this._server.get(be.env.VERIFY_FILE,(o,r)=>{this._logger.trace("verify service requested from "+o.url),r.send(ns(e))}):this._logger.warn("\u8DEF\u5F84"+e+"\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA\u7528\u4E8E\u9A8C\u8BC1\u7AD9\u70B9\u5F52\u5C5E\u7684\u8DEF\u7531\uFF01")}await this._server.ready(),await this._server.listen({host:_.host,port:_.port}),this._logger.info("http server started on port "+_.port)}_checkRegister(){return this._stopped?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF01"),!1):this._running?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u7ECF\u542F\u52A8\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF0C\u8BF7\u5728\u8C03\u7528start\u65B9\u6CD5\u4E4B\u524D\u6CE8\u518C\uFF01"),!1):!0}async _initResources(){let e=this._options.sharedCoverPath??to.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||qo.existsSync(e))&&(this._sharedCover=h.fromPath(e,"binary","shared-cover.png"));let o=this._options.sharedLogoPath??to.resolve(_.publicPath,"images","logo-default.png");(o.startsWith("http")||qo.existsSync(o))&&(this._sharedLogo=h.fromPath(o,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let e=await this._client.request(cs("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(e);let o=0;for(let r of e)try{let n=await import(r.name);n=n.default??n.plugin??n,await this.use(n,r),o++}catch(n){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${r.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(n)}this._logger.info(`${o} online plugin(s) loaded`)}async use(e,o){if(typeof e!="function"){this._logger.warn("\u63D2\u4EF6\u9700\u8981\u5B9E\u73B0\u6307\u5B9A\u63A5\u53E3\uFF0C\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\uFF1A"),this._logger.warn(e);return}let r=await e(this,o?.options);if(typeof r?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(r);return}if(r.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+r.name+"\u9700\u8981\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u65E0\u6CD5\u79BB\u7EBF\u6A21\u5F0F\u542F\u52A8\uFF0C\u8BE5\u63D2\u4EF6\u5C06\u88AB\u5FFD\u7565\uFF01");return}return o?.name&&r.name!==o.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+r.name+"\u7684\u4EE3\u7801\u4E0E\u63D2\u4EF6\u5305\u4E2D\u7684\u540D\u79F0\u4E0D\u5339\u914D\uFF0C\u5DF2\u81EA\u52A8\u8986\u76D6\u4E3Anpm\u5305\u4E2D\u7684\u540D\u79F0\uFF01"),r.name=o.name),o?.id&&(o.schecma=r.schema,o.options=o.options??{},this._onlinePluginInfos.set(o.name,o)),this._pluginHandlers.push(r),this._logger.trace("plugin "+r.name+" registered"),r}async start(){if(this._stopped){this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u5982\u9700\u542F\u52A8\uFF0C\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\uFF01");return}if(this._starting||this._running){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}if(this._starting=!0,!this._options.offline){this._logger.debug("\u5F53\u524D\u670D\u52A1\u5C06\u542F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u8BF7\u786E\u4FDD\u60A8\u6CE8\u518C\u4E86\u914D\u7F6E\u670D\u52A1\u5668\u7684\u8D26\u53F7\uFF01\u5426\u5219\u8BF7\u5173\u95ED\u5728\u7EBF\u914D\u7F6E\u670D\u52A1\uFF08\u8BBE\u7F6EOFFLINE=true\uFF09"),this._client=as(_.configServerUrl).with(is("json")).with(ls()),await this.client.login(_.configServerEmail,_.configServerPassword);let r=await this._client.request(ps());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${r.email}`),this._me=r,await this._loadOnlinePlugins()}this._botManager=new Mt,this._skillManager=new Bt,this._sourceManager=new Dt,this._taskTriggerManager=new Ut({cacheInstance:!1}),this._taskRunnerManager=new Lt({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let r of this._pluginHandlers)if(r.init){let n=await r.init();n&&(n.bots?.forEach(s=>this._botManager.registerInstanceCreator(s.creator,s.params)),n.sources?.forEach(s=>this._sourceManager.registerInstanceCreator(s.creator,s.params)),n.skills?.forEach(s=>this._skillManager.registerInstanceCreator(s.creator,s.params)),n.taskTriggers?.forEach(s=>this._taskTriggerManager.registerInstanceCreator(s.creator,s.params)),n.taskRunners?.forEach(s=>this._taskRunnerManager.registerInstanceCreator(s.creator,s.params))),this._logger.trace("plugin "+r.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Pt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ft(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let r of this._pluginHandlers)r.beforeStart&&(await r.beforeStart(),this._logger.trace(`plugin ${r.name} beforeStart`));await this._initServer(),this._running=!0;for(let r of this._pluginHandlers)r.afterStart&&(await r.afterStart(),this._logger.trace(`plugin ${r.name} afterStart`));this._starting=!1,be.on("unhandledRejection",r=>{this._logger.error(r),this.emit(c.EventNames.ERROR,r)});for(let r of["SIGINT","SIGTERM"])this._logger.info("break signal received"),be.once(r,async()=>await this.stop(r));this._globalEvent.emit("APP_STARED",{title:"\u670D\u52A1\u542F\u52A8",id:Go()})}async reload(){this._logger.info("agent and task service is reloading,service may unavailable for a while..."),await this._agentService.reload(),await this._taskService.reload(),this._logger.info("agent and task service reload completed"),this._logger.info("if you want to reload plugins,please restart server"),this._globalEvent.emit("APP_REALOD",{title:"\u670D\u52A1\u91CD\u8F7D",id:Go()})}async stop(e){if(this._logger.trace("stop server"),this._stopping){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}this._stopping=!0;for(let o of this._pluginHandlers)o.beforeClose&&await o.beforeClose();await ie(this._pluginHandlers),this._pluginHandlers=[],await this._agentService.dispose(),await this._taskService.dispose(),await this._server.close(),this._stopping=!1,this._stopped=!0,this._running=!1,this._logger.trace("server stopped"),e?.length&&(this._logger.warn(`close application on ${e??"stop call"}`),be.exit(0))}registerRoutes(e,o){let r=`${e}-${o.actionName}`;this._httpRoutes.has(r)&&this._logger.warn("\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${_.httpUrl}/api/${e}/${o.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(r,o)}registerWSHandler(e,o){let r=`${e}-${o.actionName}`;this._wsRoutes[r]&&this._logger.warn("ws\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[r]=o}};export{_e as Agent,Pt as AgentService,h as AsyncFile,nt as BaiduSTTSkill,rt as BaiduTTSSkill,K as BaseDrawSkill,$ as BaseSTTSkill,B as BaseTTSSkill,A as BasicBot,Mt as BotManager,ht as CogVideoDrawSkill,ut as CogviewDrawSkill,Pe as CozeBot,Ot as CozeService,ze as CronTaskTrigger,Me as DifyAgentBot,Je as DingRobotSource,Ve as EchoTaskRunner,Nt as EventTaskTrigger,Oe as FastGPTBot,Ze as FeishuSource,mt as FishAudioTTSSkill,At as GlobalEvent,xe as GlobalEventNames,je as GlobalEventTaskTrigger,wt as HistoryMessageManager,z as InstanceBaseManager,Ee as OllamaBot,R as OpenAIBot,dt as OpenAIDrawSkill,ce as OpenAISTTSkill,pe as OpenAITTSSkill,Fe as OpenRouterBot,Ko as PPAgent,Ne as QAnythingBot,tt as QQSource,N as SchemaBaseProperties,qe as SenseVoiceSTTSkill,Le as SiliconFlowBot,gt as SiliconFlowDrawSkill,pt as SiliconFlowSTTSkill,lt as SiliconFlowTTSSkill,Yo as SimpleSchemaType,Bt as SkillManager,Ce as SkillSchemaBaseProperties,Tt as SortedPromise,_t as SourceApiMissingParamsError,yt as SourceApiNotFoundError,xt as SourceApiUnAuthorizedError,M as SourceChatMessageType,He as SourceEventTaskTrigger,V as SourceEventType,Dt as SourceManager,Ge as SoviteTTSSkill,Lt as TaskRunnerManager,Ro as TaskRunnerSchemaBaseProperties,Ft as TaskService,Se as TaskTrigger,Ut as TaskTriggerManager,at as TencentSTTSkill,ct as TencentTTSSkill,ot as WCAISource,Xe as WCOASource,Qe as WeWorkSource,Re as WenxinAgentBot,Ue as XunfeiBot,st as XunfeiSTTSkill,it as XunfeiTTSSkill,Be as YuanQiBot,$e as ZhipuBot,De as ZhipuQingyanBot,se as addWavHeader,op as apiPlugin,me as arm2wav,Z as betterMarkdown,ue as checkMessageRule,_ as config,St as createCacheManager,Po as createFormilySchema,HI as defaultPlugin,ko as detectName,ie as disposeObjects,bo as extractArticleInfo,we as extractImageUrls,vo as extractMarkdownImageTags,kt as extractMessageContentText,Kt as extractPositionInfo,ho as filterContentRule,ae as generateRandomString,vt as getEnvNumber,To as getFromMessageSummary,y as getLogger,W as getSecret,Ao as getToMessageSummary,So as hasEmoji,Co as hasMarkdown,Oo as installAndGetPluginInfo,Ct as isPhoneNumber,_o as removeEmoji,xo as removeMarkdown,bt as richText2Markdown,Wt as sleep,ee as sse,wo as stream2buffer,ke as transFileFormat,pr as transFormat,Eo as uninstallDep,te as wav2amr};
36
+ ${new qn().build(o)}
37
+ </xml>`,i=Wn(this._options.aesKey,n,this._options.appId),a=`${this._options.apiBase}/openapi/sendmsg/${this._options.token}`;try{let c=await fetch(a,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({encrypt:i})});this._logger.debug(await c.text())}catch(c){this._logger.error(c)}}else this._logger.info("\u5185\u5BB9\u4E3A\u7A7A\u6216\u8005\u65E0\u6CD5\u53D1\u9001\u7684\u6D88\u606F"),this._logger.info(e)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import Vn from"baidu-aip-sdk";var it=class p extends R{constructor(t,o){if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");o.aue=o.aue??6,o.per=o.per??0,o.spd=o.spd??5,o.pit=o.pit??5,o.vol=o.vol??5;super(o);this._app=t;this._options=o;this._client=new Vn.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}static params={name:"baidu-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},per:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u57FA\u7840-\u5EA6\u5C0F\u7F8E-\u6807\u51C6\u5973\u4E3B\u64AD",value:0},{label:"\u57FA\u7840-\u5EA6\u5C0F\u5B87-\u4EB2\u5207\u7537\u58F0",value:1},{label:"\u57FA\u7840-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:3},{label:"\u57FA\u7840-\u5EA6\u4E2B\u4E2B-\u7AE5\u58F0",value:4},{label:"\u7CBE\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:5003},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:5118},{label:"\u7CBE\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:106},{label:"\u7CBE\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u7AE5\u58F0",value:103},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u7AE5-\u7AE5\u58F0\u4E3B\u64AD",value:110},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u840C-\u8F6F\u840C\u59B9\u5B50",value:111},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u5A07-\u6210\u719F\u5973\u4E3B\u64AD",value:5},{label:"\u81FB\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:4003},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:4106},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D24-\u7535\u53F0\u7537\u4E3B\u64AD",value:4115},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:4119},{label:"\u81FB\u54C1-\u5EA6\u7075\u513F-\u6E05\u6FC0\u5973\u58F0",value:4105},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u4E54-\u6D3B\u6CFC\u5973\u58F0",value:4117},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u96EF-\u6D3B\u529B\u5973\u4E3B\u64AD",value:4100},{label:"\u81FB\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u5973\u58F0",value:4103},{label:"\u81FB\u54C1-\u5EA6\u59D7\u59D7-\u5A31\u4E50\u5973\u58F0",value:4144},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D1D-\u77E5\u8BC6\u5973\u4E3B\u64AD",value:4278},{label:"\u81FB\u54C1-\u5EA6\u6E05\u98CE-\u914D\u97F3\u7537\u58F0",value:4143},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u65B0-\u4E13\u4E1A\u5973\u4E3B\u64AD",value:4140},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u5F66-\u77E5\u8BC6\u7537\u4E3B\u64AD",value:4129},{label:"\u81FB\u54C1-\u5EA6\u661F\u6CB3-\u5E7F\u544A\u7537\u58F0",value:4149},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u6E05-\u5E7F\u544A\u5973\u58F0",value:4254},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u7EFC\u827A\u7537\u58F0",value:4206},{label:"\u81FB\u54C1-\u5357\u65B9-\u7535\u53F0\u5973\u4E3B\u64AD",value:4226}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u901F"}},pit:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u8C03"}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:5,"x-component-props":{min:0,max:15},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-15\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u97F3\u91CF\u3002\u6CE8\u610F\u7CBE\u54C1\u5E93\u624D\u652F\u630110-15\u7684\u97F3\u91CF\uFF0C\u5176\u4ED6\u53EA\u80FD\u8BBE\u7F6E0-9\u3002"}},aue:{type:"string",title:"\u8BED\u97F3\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{value:3,label:"mp3"},{value:4,label:"pcm-16k"},{value:5,label:"pcm-8k"},{value:6,label:"wav(default)"}],default:6,"x-decorator-props":{tooltip:"\u5982\u679C\u4E3A\u7279\u5B9A\u7A0B\u5E8F\u5F00\u542F\uFF0C\u9700\u8981\u6307\u5B9A\u5408\u6210\u540E\u7684\u97F3\u9891\u683C\u5F0F\uFF0C\u53EF\u4EE5\u5728\u6B64\u9009\u62E9\u3002"}}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u5408\u6210"};_client;get _maxToken(){return 1024}get options(){return this._options}get params(){return p.params}async getAudioBuffer(t,o){let r={aue:this._options.aue,per:this._options.per,spd:this._options.spd,pit:this._options.pit,vol:this._options.vol,cuid:`${o.source.options.instanceName}-${o.message.fromId}`},n=await this._client.text2audio(t,r);if(n.data)return n.data;this._logger.error(n?.err_msg??n)}};import zn from"baidu-aip-sdk";var at=class p extends ${constructor(t,o){super(o);this._app=t;this._options=o;if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu STT skill need appId,apiKey,secretKey to work.");this._client=new zn.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}static params={name:"baidu-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u8BC6\u522B"};_client;get options(){return this._options}get params(){return p.params}async _getText(t){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=await t.asBuffer(),r=await this._client.recognize(o,"wav",16e3,{len:o.length,cuid:"ppagent-baidu-stt",channel:1});if(r.err_no!==0){this._logger.error(r.err_msg);return}if(!r.result?.length){this._logger.warn("\u8F6C\u6362\u7ED3\u679C\u4E3A\u7A7A\uFF01");return}return r.result[0]}catch(o){this._logger.error(o.message);return}}};import Xn from"crypto-js/hmac-sha256";import Qo from"crypto-js/enc-base64";import Jn from"crypto-js/enc-utf8";import{WebSocket as Qn}from"ws";var pt=class p extends ${constructor(t,o){super(o);this._app=t;this._options=o;if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Xunfei STT skill need appId,apiKey,secretKey to work.");this._targetFormat="s16le"}static params={name:"xunfei-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u8BC6\u522B"};_hostUrl="wss://iat-api.xfyun.cn/v2/iat";_host="iat-api.xfyun.cn";_uri="/v2/iat";_frame={STATUS_FIRST_FRAME:0,STATUS_CONTINUE_FRAME:1,STATUS_LAST_FRAME:2};get options(){return this._options}get params(){return p.params}_getAuthStr(t){let o=`host: ${this._host}
38
+ date: ${t}
39
+ GET ${this._uri} HTTP/1.1`,r=Xn(o,this._options.secretKey),n=Qo.stringify(r),s=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${n}"`;return Qo.stringify(Jn.parse(s))}_getFrame(t,o){let r,n={status:o,format:"audio/L16;rate=16000",audio:t.toString("base64"),encoding:"raw"};switch(o){case this._frame.STATUS_FIRST_FRAME:r={common:{app_id:this._options.appId},business:{language:"zh_cn",domain:"iat",accent:"mandarin",dwa:"wpgs"},data:n},o=this._frame.STATUS_CONTINUE_FRAME;break;case this._frame.STATUS_CONTINUE_FRAME:case this._frame.STATUS_LAST_FRAME:r={data:n};break}return r}async _getText(t){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=new Date().toUTCString(),r=this._frame.STATUS_FIRST_FRAME,n="",s=[],i=this._hostUrl+"?authorization="+this._getAuthStr(o)+"&date="+o+"&host="+this._host,a=new Qn(i),c=await t.asBuffer();return new Promise(l=>{a.on("open",()=>{this._logger.trace("xunfei websocket connect!");let u=this._getFrame(c,r);a.send(JSON.stringify(u)),r=this._frame.STATUS_LAST_FRAME,u=this._getFrame("",r),a.send(JSON.stringify(u))});let m;a.on("message",(u,g)=>{if(g){this._logger.error(`err:${g}`),a.close();return}let d=JSON.parse(u);if(d.code!=0){this._logger.error(`error code ${d.code}, reason ${d.message}`),a.close();return}let y="",I=!1;d.data.status==2?(n=d.sid,I=!0):y+="\u4E2D\u95F4\u8BC6\u522B\u7ED3\u679C\uFF1A",s[d.data.result.sn]=d.data.result,d.data.result.pgs=="rpl"&&d.data.result.rg.forEach(T=>{s[T]=null}),s.forEach(T=>{T?.ws.forEach(L=>{L.cw.forEach(U=>{y+=U.w})})}),I?(m=y,a.close()):this._logger.debug(y)}),a.on("close",()=>{this._logger.trace(`\u672C\u6B21\u8BC6\u522Bsid\uFF1A${n}`),this._logger.trace("connect close!"),l(m)}),a.on("error",u=>{this._logger.warn("websocket connect err: "+u),l(void 0)})})}catch(o){this._logger.error(o.message);return}}};import Yn from"crypto-js/hmac-sha256";import Yo from"crypto-js/enc-base64";import Zn from"crypto-js/enc-utf8";import{WebSocket as es}from"ws";var ct=class p extends R{constructor(t,o){if(!o.appId?.length||!o.apiKey?.length||!o.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");o.vcn=o.vcn??"xiaoyan",o.speed=o.speed??50,o.pitch=o.pitch??50,o.volume=o.volume??50;super(o);this._app=t;this._options=o}static params={name:"xunfei-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},vcn:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u5C0F\u71D5",value:"xiaoyan"},{label:"\u8BB8\u4E45",value:"aisjiuxu"},{label:"\u5C0F\u840D",value:"aisxping"},{label:"\u5C0F\u5A67",value:"aisjinger"},{label:"\u8BB8\u5C0F\u5B9D",value:"aisbabyxu"}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:"xiaoyan","x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1\u8BAF\u98DE\u63A7\u5236\u53F0 https://console.xfyun.cn/services/tts \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u901F"}},pitch:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:100},default:50,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u8C03"}},volume:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u5408\u6210"};_hostUrl="wss://tts-api.xfyun.cn/v2/tts";_host="iat-api.xfyun.cn";_uri="/v2/tts";get options(){return this._options}get params(){return p.params}get _maxToken(){return 2e3}_getAuthStr(t){let o=`host: ${this._host}
40
+ date: ${t}
41
+ GET ${this._uri} HTTP/1.1`,r=Yn(o,this._options.secretKey),n=Yo.stringify(r),s=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${n}"`;return Yo.stringify(Zn.parse(s))}async getAudioBuffer(t){let o=new Date().toUTCString(),r=this._hostUrl+"?authorization="+this._getAuthStr(o)+"&date="+o+"&host="+this._host,n=new es(r);return new Promise(s=>{let i;n.on("open",()=>{this._logger.trace("websocket connect!");let a={common:{app_id:this._options.appId},business:{aue:"raw",auf:"audio/L16;rate=16000",vcn:this._options.vcn,speed:this._options.speed,volume:this._options.volume,pitch:this._options.pitch,tte:"UTF8"},data:{text:Buffer.from(t).toString("base64"),status:2}};n.send(JSON.stringify(a))}),n.on("message",(a,c)=>{if(c){this._logger.error("message error: "+c),n.close();return}let l=JSON.parse(a);if(l.code!=0){this._logger.error(`${l.code}: ${l.message}`),n.close();return}let m=l.data.audio,u=Buffer.from(m,"base64");i?i=Buffer.concat([i,u]):i=u,l.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(xe(i.buffer,16e3,16,1)),n.close())}),n.on("close",()=>{this._logger.trace("connect close!"),s(i)}),n.on("error",a=>{this._logger.trace("websocket connect err: "+a),s(void 0)})})}};import ts from"tencentcloud-sdk-nodejs-asr";var os=ts.asr.v20190614.Client,lt=class p extends ${constructor(t,o){super(o);this._app=t;this._options=o;if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent STT skill need appId,apiKey,secretKey to work.")}static params={name:"tencent-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u8BC6\u522B"};_client;async init(){this._client=new os({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return p.params}async _getText(t){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=await t.asBase64(),r=this._options.ensureAudioFormat?"wav":t.name.slice(t.name.lastIndexOf(".")+1);r==="ogg"&&(r="ogg-opus");let n={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:r,Data:o},s=await this._client.SentenceRecognition(n);if(!s.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return s.Result}catch(o){this._logger.error(o.message);return}}};import rs from"tencentcloud-sdk-nodejs-tts";import{v4 as ns}from"uuid";var ss=rs.tts.v20190823.Client,mt=class p extends R{constructor(t,o){if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent TTS skill need appId,apiKey,secretKey to work.");o.spd=o.spd??0,o.vol=o.vol??0,o.voice=o.voice??0;super(o);this._app=t;this._options=o}static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0},voice:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u6807\u51C6\u97F3\u8272-\u7075\u60A6(\u901A\u7528\u5973\u58F0)",value:0},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u97F3(\u901A\u7528\u5973\u58F0)",value:1},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u5747(\u901A\u7528\u7537\u58F0)",value:2},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u5BA2\u670D\u5973\u58F0)",value:3},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6167(\u5BA2\u670D\u5973\u58F0)",value:4},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6717(\u901A\u7528\u7537\u58F0)",value:5},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6E05(\u901A\u7528\u5973\u58F0)",value:6},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u667A(\u901A\u7528\u5973\u58F0)",value:7},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u777F(\u901A\u7528\u7537\u58F0)",value:8},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6653(\u901A\u7528\u5973\u58F0)",value:9},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u7CA4\u8BED\u5973\u58F0)",value:10},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u900D\u9065(\u9605\u8BFB\u7537\u58F0)",value:10051e4},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745C(\u60C5\u611F\u5973\u58F0)",value:101001},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8046(\u901A\u7528\u5973\u58F0)",value:101002},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7F8E(\u5BA2\u670D\u5973\u58F0)",value:101003},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E91(\u901A\u7528\u7537\u58F0)",value:101004},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8389(\u901A\u7528\u5973\u58F0)",value:101005},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u742A(\u5BA2\u670D\u5973\u58F0)",value:101008},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B8(\u77E5\u6027\u5973\u58F0)",value:101009},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u534E(\u901A\u7528\u7537\u58F0)",value:101010},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u71D5(\u65B0\u95FB\u5973\u58F0)",value:101011},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E39(\u65B0\u95FB\u5973\u58F0)",value:101012},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8F89(\u65B0\u95FB\u7537\u58F0)",value:101013},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5B81(\u65B0\u95FB\u7537\u58F0)",value:101014},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u840C(\u7537\u7AE5\u58F0)",value:101015},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u751C(\u5973\u7AE5\u58F0)",value:101016},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84C9(\u60C5\u611F\u5973\u58F0)",value:101017},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u9756(\u60C5\u611F\u7537\u58F0)",value:101018},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5F64(\u7CA4\u8BED\u5973\u58F0)",value:101019},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u521A(\u65B0\u95FB\u7537\u58F0)",value:101020},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745E(\u65B0\u95FB\u7537\u58F0)",value:101021},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8679(\u65B0\u95FB\u5973\u58F0)",value:101022},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8431(\u804A\u5929\u5973\u58F0)",value:101023},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7693(\u804A\u5929\u7537\u58F0)",value:101024},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8587(\u804A\u5929\u5973\u58F0)",value:101025},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5E0C(\u901A\u7528\u5973\u58F0)",value:101026},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6885(\u901A\u7528\u5973\u58F0)",value:101027},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6D01(\u901A\u7528\u5973\u58F0)",value:101028},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u51EF(\u901A\u7528\u7537\u58F0)",value:101029},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u67EF(\u901A\u7528\u7537\u58F0)",value:101030},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u594E(\u901A\u7528\u7537\u58F0)",value:101031},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B3(\u901A\u7528\u5973\u58F0)",value:101032},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84D3(\u5BA2\u670D\u5973\u58F0)",value:101033},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4F73(\u5BA2\u670D\u5973\u58F0)",value:101081},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82F1(\u5BA2\u670D\u5973\u58F0)",value:101080}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://cloud.tencent.com/document/product/1073/92668#55924b56-1a73-4663-a7a1-a8dd82d6e823 \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-2,6]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u8BED\u901F\uFF0C\u652F\u6301\u5C0F\u6570\u70B9\u4E24\u4F4D"},"x-component-props":{min:-2,max:6}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-component-props":{min:-10,max:10},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C[-10,10]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u5408\u6210"};_client;get _maxToken(){return 150}async init(){let t=new ss({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"tts.tencentcloudapi.com"}}});this._client=t}get options(){return this._options}get params(){return p.params}async getAudioBuffer(t){try{let o=await this._client.TextToVoice({Text:t,SessionId:ns(),Volume:this._options.vol,Speed:this._options.spd,VoiceType:this._options.voice,SampleRate:16e3,Codec:"wav"});if(o?.Audio?.length)return Buffer.from(o.Audio,"base64");this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};import is from"openai";var le=class p extends ${constructor(t,o){super(o);this._app=t;this._options=o;if(!o.apiKey?.length)throw new Error("OpenAI STT skill need api key to work.");if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"openai-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 whisper-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u8BC6\u522B"};_client;async init(){this._client=new is({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return p.params}async _getText(t){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=this._options.ensureAudioFormat?"wav":t.name.slice(t.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(o.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+o);return}let r=await this._client.audio.transcriptions.create({file:await t.asReadStream(),model:this._options.model});if(!r.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.text}catch(o){this._logger.error(o.message);return}}};var ut=class p extends le{constructor(t,o){if(!o.apiKey?.length)throw new Error("Silicon Flow STT skill need api key to work.");o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(t,o);this._app=t;this._options=o;if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...le.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 FunAudioLLM/SenseVoiceSmall"},"x-decorator":"FormItem",default:"FunAudioLLM/SenseVoiceSmall",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u8BC6\u522B"};get options(){return this._options}get params(){return p.params}};var me=class p extends R{constructor(t,o){if(!o.apiKey?.length||!o.model?.length||!o.voice?.length)throw new Error("OpenAI TTS skill need API KEY,model and voice to work.");super(o);this._app=t;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 tts-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:["alloy","ash","coral","echo","fable","onyx","nova","sage","shimmer"],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u6216\u8005\u9009\u62E9\u53D1\u97F3\u4EBA\u7684\u540D\u79F0"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://platform.openai.com/docs/api-reference/audio/createSpeech \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:1,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-0.25,4]\uFF0C\u9ED8\u8BA4\u4E3A1\u4E2D\u8BED\u901F"},"x-component-props":{min:.25,max:4}}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u5408\u6210"};_format="wav";get _maxToken(){return 10240}get options(){return this._options}get params(){return p.params}_updateBody(t){return t}async getAudioBuffer(t){try{let o=await fetch(`${this._options.baseUrl}/audio/speech`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(this._updateBody({model:this._options.model,input:t,voice:this._options.voice,response_format:this._format,speed:this._options.speed}))});if(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};var dt=class p extends me{constructor(t,o){o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(t,o);this._app=t;this._options=o}static params={name:"silicon-flow-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...me.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 fishaudio/fish-speech-1.5"},"x-decorator":"FormItem",required:!0,default:"fishaudio/fish-speech-1.5"},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528SiliconFlow\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\uFF0C\u53EF\u4EE5\u5728\u5B98\u7F51\u6587\u6863\u67E5\u770B\u3002"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://docs.siliconflow.cn/api-reference/audio/create-speech#body-sample-rate \u3002"},required:!0}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u5408\u6210"};_format="pcm";get options(){return this._options}get params(){return p.params}_updateBody(t){return t.sample_rate=16e3,t.stream=!1,t}async getAudioBuffer(t){try{let o=await super.getAudioBuffer(t);return o?Buffer.from(xe(o.buffer,16e3,16,1)):void 0}catch(o){this._logger.error(o.message);return}}};var gt=class p extends R{constructor(t,o){if(!o.apiKey?.length||!o.referenceId?.length)throw new Error("Fish Audio TTS skill need API KEY,reference id voice to work.");o.baseUrl=o.baseUrl??"https://api.fish.audio";super(o);this._app=t;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://api.fish.audio\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528FishAudio\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.fish.audio"},referenceId:{type:"string",title:"\u53D1\u97F3\u4EBAID","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u53C2\u8003ID\uFF0C\u5B98\u65B9API\u53EF\u4ECE\u5B98\u7F51\u67E5\u770B"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://fish.audio/zh-CN/discovery/ \uFF0C\u9009\u62E9\u9700\u8981\u7684\u58F0\u97F3\u540E\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5\uFF0C\u6D4F\u89C8\u5668\u5730\u5740\u4E2D\u7684\u4E00\u957F\u4E32MD5\u5C31\u662FID\uFF0C\u6216\u8005\u70B9\u51FB\u4E09\u4E2A\u5C0F\u70B9\u540E\u70B9\u51FB\u590D\u5236ID \u3002"}}}}},desc:"FishAudio\u8BED\u97F3\u5408\u6210"};get _maxToken(){return 10240}get options(){return this._options}get params(){return p.params}async getAudioBuffer(t){try{let o=await fetch(`${this._options.baseUrl}/v1/tts`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({reference_id:this._options.referenceId,text:t,format:"wav",sample_rate:16e3})});if(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var W=class p{constructor(e,t){this._app=e;this._options=t;this._logger=f(this._options.instanceName)}static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,apiKey:{type:"string",title:"API Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684ApiKey"},"x-decorator-props":{tooltip:"\u8BF7\u786E\u8BA4\u60A8\u7684ApiKey\u5177\u5907\u76F8\u5173\u6743\u9650"},required:!0},apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165\u60A8\u7684API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740\u3002"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"}},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8","x-decorator":"FormItem","x-component":"Input"},triggerWords:{type:"string",title:"\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u753B\u56FE \u753B\u4E2A\u56FE \u753B\u753B \u753B\u5F20\u56FE \u7ED8\u56FE \u753B\u4E2A\u753B \u753B draw",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u56FE\u7247",value:"IMAGE"},{label:"MarkDown",value:"TEXT"}],"x-decorator-props":{tooltip:"\u652F\u6301Markdown\u7684\u6D88\u606F\u6E90\u5EFA\u8BAE\u4F7F\u7528\u6587\u5B57"},default:"TEXT"},useLLM:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u5927\u6A21\u578B\u8FDB\u884C\u63D0\u793A\u8BCD\u4F18\u5316","x-decorator":"FormItem","x-component":"Switch",default:!1,"x-decorator-props":{tooltip:"\u5982\u679C\u9009\u62E9\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\uFF0C\u4F46\u662F\u6CA1\u6709\u9009\u62E9\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF0C\u5219\u4E5F\u4E0D\u4F1A\u751F\u6548\u3002"}},optimizer:{type:"string",title:"\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B","x-decorator":"FormItem","x-component":"BotSelector","x-decorator-props":{tooltip:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u7528\u6765\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u540E\u7AEF\u5927\u6A21\u578B\u5B9E\u4F8B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u5355\u72EC\u4E3A\u6B64\u529F\u80FD\u521B\u5EFA\u72EC\u7ACB\u5927\u6A21\u578B\u7684\u5B9E\u4F8B\uFF0C\u4EE5\u907F\u514D\u4E0A\u4E0B\u6587\u5E72\u6270\u3002\u4F18\u5316\u7684\u63D0\u793A\u8BCD\u7B49\u5185\u5BB9\u5728\u540E\u7AEF\u6A21\u578B\u521B\u5EFA\u7684\u65F6\u5019\u53EF\u4EE5\u8BBE\u5B9A\uFF0C\u5982\u679C\u662F\u667A\u80FD\u4F53\u6A21\u578B\uFF0C\u53EF\u4EE5\u5728\u667A\u80FD\u4F53\u5E73\u53F0\u8FDB\u884C\u8BBE\u5B9A\u3002"}}}}},desc:"\u57FA\u7840\u7ED8\u56FE\u6280\u80FD"};_logger;get options(){return this._options}get params(){return p.params}async init(){}async applyOnSource(e){let t=Mt(e.message.content);if(!t?.trim().length){this._logger.trace("\u5F53\u524D\u7ED8\u56FE\u6307\u4EE4\u4E3A\u7A7A");return}t=t.trim(),t.startsWith(e.me?.nickName)&&(t=t.slice(e.me.nickName.length+1),this._logger.trace("remove nick name:"+e.me.nickName));let o=t.split(/\s+/),r=this._options.triggerWords.split(/\s+/);if(this._options.triggerWords?.indexOf(o[0])>=0||r.some(n=>t.startsWith(n))){let n=o.length>1?o.slice(1).join(","):t;if(!n?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}if(this._options.useLLM)if(this._options.optimizer?.length){this._logger.debug("\u6B63\u5728\u4F18\u5316\u63D0\u793A\u8BCD");let a="\u8BF7\u5BF9\u4EE5\u4E0B\u7ED8\u56FE\u6216\u8005\u89C6\u9891\u751F\u6210\u7684\u63D0\u793A\u8BCD\u8FDB\u884C\u4F18\u5316\uFF1A"+n,c=this._app.botManager.getInstance(this._options.optimizer);if(!c)this._logger.error("\u7528\u4E8E\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u5927\u6A21\u578B"+this._options.optimizer+"\u4E0D\u5B58\u5728!");else{let l=e.message,m={...l,type:"TEXT",content:a,origin:void 0};e.message=m;try{let u=await c.prepareMessage(e),g="";await c.getResponse(e,{onContent:(d,y)=>{y==="TEXT"&&(g+=d)},onError:d=>{this._logger.error(d)}},u,[]),n=g,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+n)}catch(u){this._logger.error(u.message)}finally{e.message=l}}}else this._logger.warn("\u60A8\u8BBE\u7F6E\u4E86\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\u63D0\u793A\u8BCD\uFF0C\u4F46\u662F\u6CA1\u6709\u8BBE\u5B9A\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF01");this._logger.trace("draw with prompt "+n);let s=e.message.senderId,i=await this._draw(n,s,e);if(i?.url.length)if(e.message=void 0,this._options.replyFormat==="IMAGE"){let a={file:_.fromPath(i.url)};e.reply(a,"IMAGE",void 0,!0),i.text?.length&&e.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="FILE"){let a={file:_.fromPath(i.url)};e.reply(a,"FILE",void 0,!0),i.text?.length&&e.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let a={file:_.fromPath(i.url),previewImage:i.coverUrl?_.fromPath(i.coverUrl):void 0};e.reply(a,"VIDEO",void 0,!0),i.text?.length&&e.reply(i.text,"TEXT",void 0,!0)}else this._options.replyFormat==="URL"?e.reply(i.url+`
42
+ `+(i.text??""),"TEXT",void 0,!0):e.reply(`![\u70B9\u6211\u67E5\u770B\u7ED8\u56FE\u7ED3\u679C](${i})
43
+ ${i.text??""}`,"TEXT",void 0,!0);else this._logger.warn("\u56FE\u7247\u6216\u89C6\u9891\u751F\u6210\u5931\u8D25\uFF01")}else this._logger.trace("\u63D0\u793A\u8BCD\u6CA1\u6709\u4EE5\u6307\u5B9A\u7684\u89E6\u53D1\u8BCD\u5F00\u5934")}};var ht=class extends W{constructor(t,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn";super(t,o);this._app=t;this._options=o}static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogview-3-plus","cogview-3"],default:"cogview-3-plus","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024"}}}}};async _draw(t,o){if(!t?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let r=await(await fetch(`${this._options.apiBase}/api/paas/v4/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:t,model:this._options.model,size:this._options.size,user_id:o})})).json();return this._logger.debug(r),{url:r?.data?.[0].url}}};var ft=class extends W{constructor(t,o){super(t,o);this._app=t;this._options=o}static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3AOpenAI\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0"},default:"dall-e-3","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","1792x1024","1024x1792"],default:"1024x1024"},quality:{type:"string",title:"\u7ED8\u56FE\u8D28\u91CF\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["standard","hd"],default:"standard"}}}}};async _draw(t,o){let r=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:t,model:this._options.model,size:this._options.size,user:o})})).json();return this._logger.debug(r),{url:r.data?.[0].url}}};var It=class extends W{constructor(t,o){o.apiBase=o?.apiBase?.length?o.apiBase:"https://api.siliconflow.cn/v1";super(t,o);this._app=t;this._options=o}static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u7845\u57FA\u6D41\u52A8\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://api.siliconflow.cn/v1"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["stabilityai/stable-diffusion-3-5-large","stabilityai/stable-diffusion-3-5-large-turbo","black-forest-labs/FLUX.1-schnell","Pro/black-forest-labs/FLUX.1-schnell","black-forest-labs/FLUX.1-dev","black-forest-labs/FLUX.1-pro","stabilityai/stable-diffusion-3-medium","stabilityai/stable-diffusion-xl-base-1.0","stabilityai/stable-diffusion-2-1"],default:"stabilityai/stable-diffusion-3-5-large","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4E0D\u540C\u6A21\u578B\u652F\u6301\u4E0D\u540C\uFF09","x-decorator":"FormItem","x-component":"AutoComplete",enum:["1024x1024","512x1024","1024x512","768x512","768x1024","1024x576","576x1024"],default:"1024x1024","x-decorator-props":{tooltip:"\u4E0D\u540C\u6A21\u578B\u4E0D\u76F8\u540C\uFF0C\u5177\u4F53\u8BF7\u67E5\u770B\u5B98\u7F51\u3002"}},customOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u914D\u7F6E","x-decorator":"FormItem","x-component":"Code",default:"{}"}}}}};async _draw(t){let o=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:t,model:this._options.model,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(o),o.images?.length)return{url:o.images?.[0].url};this._logger.error(o)}};import{v4 as as}from"uuid";var yt=class extends W{constructor(t,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn",o.timeout=Math.max(o.timeout??180,30);super(t,o);this._app=t;this._options=o}static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u89C6\u9891\u751F\u6210\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u89C6\u9891\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogvideox-flash","cogvideox"],default:"cogvideox-flash","x-decorator-props":{tooltip:"\u89C6\u9891\u7ED8\u5236\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},triggerWords:{type:"string",title:"\u89C6\u9891\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u751F\u6210\u89C6\u9891 \u89C6\u9891 video",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u89C6\u9891",value:"VIDEO"},{label:"\u6587\u4EF6",value:"FILE"},{label:"Url",value:"URL"}],"x-decorator-props":{tooltip:"\u4E0D\u652F\u6301\u89C6\u9891\u53D1\u9001\u7684\u5EFA\u8BAE\u4F7F\u7528URL"},default:"VIDEO"},withAudo:{type:"boolean",title:"\u662F\u5426\u751F\u6210\u97F3\u9891","x-decorator":"FormItem","x-component":"Switch",default:!1},size:{type:"string",title:"\u89C6\u9891\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024","x-display":!1},timeout:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker",default:180}}}}};async _draw(t,o){let r=await(await fetch(`${this._options.apiBase}/api/paas/v4/videos/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:t,model:this._options.model,user_id:o,with_audio:this._options.withAudio??!1,request_id:as()})})).json();if(this._logger.debug(r),r?.id)return new Promise(n=>{try{let s=new Date().getTime(),i=async()=>{let a=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${r.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(a.task_status==="SUCCESS"){n({url:a.video_result?.[0].url,coverUrl:a.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+t+": "+JSON.stringify(a));if((new Date().getTime()-s)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),n(void 0);return}setTimeout(i,3e3)};i()}catch(s){this._logger.error(s.message),n(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(r)}};import{DataSource as gs}from"typeorm";import{Column as z,Entity as ms,PrimaryGeneratedColumn as us}from"typeorm";import{Client as ps}from"minio";import Zo from"fs/promises";import Ht from"node:path";import{existsSync as cs}from"fs";import{basename as tr}from"path";var ao=class{constructor(e,t){this._basePath=Ht.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Ht.join(this._basePath,e),r=Ht.dirname(o);cs(r)||await Zo.mkdir(r,{recursive:!0}),await Zo.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Ht.join(this._basePath,e);return _.fromPath(t,"binary",tr(t))}},po=class{constructor(e,t){this._minioClient=e;this._bucket=t}async _downloadFileToBuffer(e,t){try{let o=await this._minioClient.getObject(e,t),r=[];return new Promise((n,s)=>{o.on("data",i=>{r.push(i)}),o.on("end",()=>{let i=Buffer.concat(r);n(i)}),o.on("error",i=>{s(i)})})}catch(o){throw console.error("\u83B7\u53D6\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",o),o}}async writeFile(e,t){await this._minioClient.putObject(this._bucket,e,await t.asBuffer())}readFile(e){return new _(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:tr(e)}),"binary")}},ls=f("file-operator"),er,co;process.env.MINIO_ENABLE==="1"?(ls.info("minio enabled"),er=new ps({endPoint:process.env.MINIO_ENDPOINT,port:parseInt(process.env.MINIO_PORT??"9000"),useSSL:process.env.MINIO_SSL==="1",accessKey:process.env.MINIO_ACCESS_KEY,secretKey:process.env.MINIO_SECRET_KEY}),co=p=>new po(er,p)):co=p=>new ao(h.dataPath,p);var or=co;var rr=or(h.minioMessageBucket),ds=f("chat-message-orm"),P=class{id;msgId;type;fromId;createdAt;senderId;senderName;senderNickName;senderAvatar;isGroupChat;isSender;customType;raw;static fromMessage(e){let t=new P;return t.msgId=e.messageId,t.type=e.type,t.fromId=e.fromId,t.createdAt=e.time.getTime(),t.senderId=e.senderId,t.senderName=e.senderName,t.senderNickName=e.senderInfo?.nickName,t.senderAvatar=e.senderInfo?.bigAvatarUrl??e.senderInfo?.avatarUrl,t.isGroupChat=e.isGroupChat,t.isSender=e.isSender,t.customType=e.customType,t.raw=JSON.stringify(e,(o,r)=>{if(r.asBuffer){let n=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return rr.writeFile(n,r).then(()=>{ds.trace("attach saved")}),"attach://"+n}else if(o==="origin")return{};return r}),t}static toMessage(e){return{...JSON.parse(e.raw,(r,n)=>{if(typeof n=="string"&&n.startsWith("attach://")){let s=n.substring(9);return rr.readFile(s)}return n}),time:new Date(e.createdAt)}}};H([us("uuid")],P.prototype,"id",2),H([z("varchar")],P.prototype,"msgId",2),H([z("varchar")],P.prototype,"type",2),H([z("varchar")],P.prototype,"fromId",2),H([z("numeric")],P.prototype,"createdAt",2),H([z("varchar")],P.prototype,"senderId",2),H([z("varchar",{nullable:!0})],P.prototype,"senderName",2),H([z("varchar",{nullable:!0})],P.prototype,"senderNickName",2),H([z("text",{nullable:!0})],P.prototype,"senderAvatar",2),H([z("boolean",{nullable:!0})],P.prototype,"isGroupChat",2),H([z("boolean",{nullable:!0})],P.prototype,"isSender",2),H([z("varchar",{nullable:!0})],P.prototype,"customType",2),H([z("text")],P.prototype,"raw",2),P=H([ms()],P);var nr=f("db-logger"),hs={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},ve=hs[h.dbProvider];if(!ve)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+h.dbProvider);try{await import(ve.npmName)}catch{nr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+h.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await to(ve.npmName,h.npmRegistry,ve.version,!1),nr.info("\u6570\u636E\u5E93\u5F15\u64CE"+ve.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var lo=h.dbProvider==="sqlite"?{database:h.dbConnection,type:"better-sqlite3"}:{url:h.dbConnection,type:ve.ormType??h.dbProvider};lo={maxQueryExecutionTime:5e3,synchronize:!0,entities:[P],...lo};var sr=new gs(lo);await sr.initialize();var ir=sr.getRepository(P);var _t=class p{constructor(e,t){this._app=e;this._options=t;this._logger=f(this._options.instanceName)}static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...$t}}},desc:"\u804A\u5929\u6D88\u606F\u4FDD\u5B58"};_logger;get options(){return this._options}get params(){return p.params}async run(e){try{let t=e.data,o=P.fromMessage(t.message);return ir.save(o),this._logger.trace("message saved"),{detail:"message "+o.msgId+" saved"}}catch(t){return{detail:"message save failed",error:t.message}}}};var ay=async p=>({init:async()=>({skills:[{creator:e=>new Ve(e),params:Ve.params},{creator:e=>new We(e),params:We.params},{creator:e=>new it(p,e),params:it.params},{creator:e=>new at(p,e),params:at.params},{creator:e=>new pt(p,e),params:pt.params},{creator:e=>new ct(p,e),params:ct.params},{creator:e=>new lt(p,e),params:lt.params},{creator:e=>new mt(p,e),params:mt.params},{creator:e=>new le(p,e),params:le.params},{creator:e=>new ut(p,e),params:ut.params},{creator:e=>new me(p,e),params:me.params},{creator:e=>new dt(p,e),params:dt.params},{creator:e=>new gt(p,e),params:gt.params},{creator:e=>new ht(p,e),params:ht.params},{creator:e=>new ft(p,e),params:ft.params},{creator:e=>new It(p,e),params:It.params},{creator:e=>new yt(p,e),params:yt.params}],bots:[{creator:e=>new Fe(e),params:Fe.params},{creator:e=>new Ee(e),params:Ee.params},{creator:e=>new N(e),params:N.params},{creator:e=>new Ne(e),params:Ne.params},{creator:e=>new De(e),params:De.params},{creator:e=>new Le(e),params:Le.params},{creator:e=>new Ue(e),params:Ue.params},{creator:e=>new $e(e),params:$e.params},{creator:e=>new Re(e),params:Re.params},{creator:e=>new Be(e),params:Be.params},{creator:e=>new qe(e),params:qe.params},{creator:e=>new He(e),params:He.params},{creator:e=>new je(e),params:je.params}],sources:[{creator:e=>new Ye(e),params:Ye.params},{creator:e=>new Xe(e),params:Xe.params},{creator:e=>new Ze(p,e),params:Ze.params},{creator:e=>new et(p,e),params:et.params},{creator:e=>new ot(p,e),params:ot.params},{creator:e=>new nt(p,e),params:nt.params},{creator:e=>new st(p,e),params:st.params}],taskTriggers:[{creator:e=>new Ge(p,e),params:Ge.params},{creator:e=>new Ke(p,e),params:Ke.params},{creator:e=>new Qe(p,e),params:Qe.params}],taskRunners:[{creator:e=>new Je(p,e),params:Je.params},{creator:e=>new _t(p,e),params:_t.params}]}),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:async()=>{}});var Gt=class extends J{};var Kt=class extends J{};var Wt=class extends J{constructor(t){t.cacheInstance=!1;super(t);this.options=t}},Vt=class extends J{constructor(t){t.cacheInstance=!1;super(t);this.options=t}};import fs from"fastify";import Is from"@fastify/websocket";import ys from"@fastify/static";import ke from"node:process";import _s from"@fastify/formbody";import xs from"emittery";import{XMLParser as Ss}from"fast-xml-parser";import ar from"fs";import mo from"node:path";import{createReadStream as bs,existsSync as Cs}from"node:fs";import{authentication as vs,createDirectus as ks,readItems as Ts,readMe as ws,rest as As}from"@directus/sdk";import Ps from"@fastify/cors";import{v4 as pr}from"uuid";import Ms from"@fastify/compress";var cr=class p extends xs{constructor(t={name:"default"}){super();this._options=t;this._logger=f("app-"+this._options.name),this._globalEvent=new Nt(this._options.name)}static EventNames={ERROR:"error"};_server;_pluginHandlers=[];_wsRoutes={};_httpRoutes=new Map;_starting=!1;_stopping=!1;_stopped=!1;_running=!1;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser=new Ss;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos=new Map;_services=new Map;get server(){return this._server}get skillManager(){return this._skillManager}get sourceManager(){return this._sourceManager}get botManager(){return this._botManager}get taskTriggerManager(){return this._taskTriggerManager}get taskRunnerManager(){return this._taskRunnerManager}get agentService(){return this._agentService}get offlineMode(){return this._options.offline??!1}get sharedCover(){return this._sharedCover}get sharedLogo(){return this._sharedLogo}get client(){return this._client||this._logger.warn("\u914D\u7F6E\u670D\u52A1client\u5C1A\u672A\u521B\u5EFA\uFF0C\u8BF7\u7B49\u5F85\u670D\u52A1\u521D\u59CB\u5316\u4E4B\u540E\u518D\u8C03\u7528\uFF01"),this._client}get options(){return JSON.parse(JSON.stringify(this._options))}get taskService(){return this._taskService}get globalEvent(){return this._globalEvent}get plugins(){return[...this._pluginHandlers]}get me(){return this._me}get onlinePlugins(){return this._onlinePluginInfos.values()}get running(){return this._running}get services(){return this._services}async _createServer(){this._logger.trace("create fastify server"),this._server=fs({logger:{level:"warn"}}),await this._server.register(Is),await this._server.register(_s),await this._server.register(Ps,{origin:"*"}),h.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(Ms,{global:!0,threshold:h.serverCompressMinSize,customTypes:t=>h.serverCompressMime.includes(t)})),this._server.addContentTypeParser(["text/xml","application/xml"],(t,o,r)=>{let n=[];o.on("data",s=>{n.push(s)}),o.on("end",()=>{try{let s=Buffer.concat(n).toString(),i=this._xmlParser.parse(s);r(null,i)}catch(s){r(s)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async t=>{t.get("/ws/*",{websocket:!0},(o,r)=>{h.traceHttpRequest&&this._logger.trace("ws request,ip"+r.ip+",host:"+r.hostname+",path:"+r.url);let s=(r.query.token??r.headers.authorization?.replace("Bearer","").trim())===h.publicToken;if(h.publicForceAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(r.url),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=r.params["*"],a,c,l,m=new TextDecoder("utf-8");if(i==="normal")a=async u=>{u instanceof Buffer&&(u=m.decode(u));try{let g=JSON.parse(u),d=`${g?.instanceName}-${g?.action}`,y=this._wsRoutes[d];if(y.needAuth&&!s)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let I=y.action;if(!I){this._logger.warn("unhandled message:"+u);return}let T=await I(g.data);if(T!=null){let L={id:g.id,data:T};return JSON.stringify(L)}}catch(g){return String(g)}};else{let u=i.replaceAll("/","-"),g=()=>{let d=this._wsRoutes[u];if(!d){o.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(d.needAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return d};a=async(d,y,I)=>{let T=g();if(!T)return;T.action.onMessage(d,y,I)},c=async(d,y)=>{let I=g();if(!I)return;I.action.onOpen(d,y)},l=async(d,y)=>{let I=g();if(!I)return;I.action.onClose(d,y)}}o.on("message",async u=>{h.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let g=await a(u,r,o);g!=null&&o.send(g)}catch(g){this._logger.error(g)}}),c&&c(r,o),l&&o.on("close",()=>{l(r,o),this._logger.trace("ws closed,from "+r.hostname)}),o.on("error",u=>{this._logger.error(u)})})}),this._server.all("/api/*",async(t,o)=>{h.traceHttpRequest&&this._logger.trace("api request,ip"+t.ip+",host:"+t.hostname+",path:"+t.url);let r=t.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(r)){o.send("success");return}let n=this._httpRoutes.get(r);if((n.needAuth||h.publicForceAuth)&&(t.query.token??t.headers.authorization?.replace("Bearer","").trim())!==h.publicToken){this._logger.warn("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.warn(t.url),o.status(401),o.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let s=n.action;try{return s.type==="normal"?o.send(await s.handler(t)):(s.handler(t,o),o)}catch(i){i instanceof kt?(o.status(401),o.send(i.message)):i instanceof vt?(o.status(400),o.send(i.message)):i instanceof Ct?(o.status(404),o.send(i.message)):(o.status(500),o.send(String(i)))}}),await this._server.register(ys,{root:h.publicPath,prefix:h.publicPathName}),ke.env.VERIFY_FILE?.length){let t=mo.resolve("."+ke.env.VERIFY_FILE);Cs(t)?this._server.get(ke.env.VERIFY_FILE,(o,r)=>{this._logger.trace("verify service requested from "+o.url),r.send(bs(t))}):this._logger.warn("\u8DEF\u5F84"+t+"\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA\u7528\u4E8E\u9A8C\u8BC1\u7AD9\u70B9\u5F52\u5C5E\u7684\u8DEF\u7531\uFF01")}await this._server.ready(),await this._server.listen({host:h.host,port:h.port}),this._logger.info("http server started on port "+h.port)}_checkRegister(){return this._stopped?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF01"),!1):this._running?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u7ECF\u542F\u52A8\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF0C\u8BF7\u5728\u8C03\u7528start\u65B9\u6CD5\u4E4B\u524D\u6CE8\u518C\uFF01"),!1):!0}async _initResources(){let t=this._options.sharedCoverPath??mo.resolve(h.publicPath,"images","cover-default.png");(t.startsWith("http")||ar.existsSync(t))&&(this._sharedCover=_.fromPath(t,"binary","shared-cover.png"));let o=this._options.sharedLogoPath??mo.resolve(h.publicPath,"images","logo-default.png");(o.startsWith("http")||ar.existsSync(o))&&(this._sharedLogo=_.fromPath(o,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let t=await this._client.request(Ts("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(t);let o=0;for(let r of t)try{let n=await import(r.name);n=n.default??n.plugin??n,await this.use(n,r),o++}catch(n){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${r.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(n)}this._logger.info(`${o} online plugin(s) loaded`)}async use(t,o){if(typeof t!="function"){this._logger.warn("\u63D2\u4EF6\u9700\u8981\u5B9E\u73B0\u6307\u5B9A\u63A5\u53E3\uFF0C\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\uFF1A"),this._logger.warn(t);return}let r=await t(this,o?.options);if(typeof r?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(r);return}if(r.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+r.name+"\u9700\u8981\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u65E0\u6CD5\u79BB\u7EBF\u6A21\u5F0F\u542F\u52A8\uFF0C\u8BE5\u63D2\u4EF6\u5C06\u88AB\u5FFD\u7565\uFF01");return}return o?.name&&r.name!==o.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+r.name+"\u7684\u4EE3\u7801\u4E0E\u63D2\u4EF6\u5305\u4E2D\u7684\u540D\u79F0\u4E0D\u5339\u914D\uFF0C\u5DF2\u81EA\u52A8\u8986\u76D6\u4E3Anpm\u5305\u4E2D\u7684\u540D\u79F0\uFF01"),r.name=o.name),o?.id&&(o.schecma=r.schema,o.options=o.options??{},this._onlinePluginInfos.set(o.name,o)),this._pluginHandlers.push(r),this._logger.trace("plugin "+r.name+" registered"),r}async start(){if(this._stopped){this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u5982\u9700\u542F\u52A8\uFF0C\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\uFF01");return}if(this._starting||this._running){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}if(this._starting=!0,!this._options.offline){this._logger.debug("\u5F53\u524D\u670D\u52A1\u5C06\u542F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u8BF7\u786E\u4FDD\u60A8\u6CE8\u518C\u4E86\u914D\u7F6E\u670D\u52A1\u5668\u7684\u8D26\u53F7\uFF01\u5426\u5219\u8BF7\u5173\u95ED\u5728\u7EBF\u914D\u7F6E\u670D\u52A1\uFF08\u8BBE\u7F6EOFFLINE=true\uFF09"),this._client=ks(h.configServerUrl).with(vs("json")).with(As()),await this.client.login(h.configServerEmail,h.configServerPassword);let r=await this._client.request(ws());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${r.email}`),this._me=r,await this._loadOnlinePlugins()}this._botManager=new Bt,this._skillManager=new Gt,this._sourceManager=new Kt,this._taskTriggerManager=new Vt({cacheInstance:!1}),this._taskRunnerManager=new Wt({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let r of this._pluginHandlers)if(r.init){let n=await r.init();n&&(n.bots?.forEach(s=>this._botManager.registerInstanceCreator(s.creator,s.params)),n.sources?.forEach(s=>this._sourceManager.registerInstanceCreator(s.creator,s.params)),n.skills?.forEach(s=>this._skillManager.registerInstanceCreator(s.creator,s.params)),n.taskTriggers?.forEach(s=>this._taskTriggerManager.registerInstanceCreator(s.creator,s.params)),n.taskRunners?.forEach(s=>this._taskRunnerManager.registerInstanceCreator(s.creator,s.params))),this._logger.trace("plugin "+r.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Rt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ut(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let r of this._pluginHandlers)r.beforeStart&&(await r.beforeStart(),this._logger.trace(`plugin ${r.name} beforeStart`));await this._initServer(),this._running=!0;for(let r of this._pluginHandlers)r.afterStart&&(await r.afterStart(),this._logger.trace(`plugin ${r.name} afterStart`));this._starting=!1,ke.on("unhandledRejection",r=>{this._logger.error(r),this.emit(p.EventNames.ERROR,r)});for(let r of["SIGINT","SIGTERM"])ke.once(r,async()=>(this._logger.info("break signal received"),await this.stop(r)));this._globalEvent.emit("APP_STARED",{title:"\u670D\u52A1\u542F\u52A8",id:pr()})}async reload(){this._logger.info("agent and task service is reloading,service may unavailable for a while..."),await this._agentService.reload(),await this._taskService.reload(),this._logger.info("agent and task service reload completed"),this._logger.info("if you want to reload plugins,please restart server"),this._globalEvent.emit("APP_REALOD",{title:"\u670D\u52A1\u91CD\u8F7D",id:pr()})}async stop(t){if(this._logger.trace("stop server"),this._stopping){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}this._stopping=!0;for(let o of this._pluginHandlers)o.beforeClose&&await o.beforeClose();await ie(this._pluginHandlers),this._pluginHandlers=[],await this._agentService.dispose(),await this._taskService.dispose(),await this._server.close(),this._stopping=!1,this._stopped=!0,this._running=!1,this._logger.trace("server stopped"),t?.length&&(this._logger.warn(`close application on ${t??"stop call"}`),ke.exit(0))}registerRoutes(t,o){let r=`${t}-${o.actionName}`;this._httpRoutes.has(r)&&this._logger.warn("\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${h.httpUrl}/api/${t}/${o.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(r,o)}registerWSHandler(t,o){let r=`${t}-${o.actionName}`;this._wsRoutes[r]&&this._logger.warn("ws\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[r]=o}};export{Se as Agent,Rt as AgentService,_ as AsyncFile,at as BaiduSTTSkill,it as BaiduTTSSkill,W as BaseDrawSkill,$ as BaseSTTSkill,R as BaseTTSSkill,w as BasicBot,Bt as BotManager,yt as CogVideoDrawSkill,ht as CogviewDrawSkill,Ee as CozeBot,Dt as CozeService,Qe as CronTaskTrigger,Fe as DifyAgentBot,Ze as DingRobotSource,Je as EchoTaskRunner,jt as EventTaskTrigger,Ne as FastGPTBot,ot as FeishuSource,gt as FishAudioTTSSkill,Nt as GlobalEvent,Me as GlobalEventNames,Ke as GlobalEventTaskTrigger,Et as HistoryMessageManager,J as InstanceBaseManager,Re as OllamaBot,N as OpenAIBot,ft as OpenAIDrawSkill,le as OpenAISTTSkill,me as OpenAITTSSkill,Be as OpenRouterBot,cr as PPAgent,De as QAnythingBot,nt as QQSource,D as SchemaBaseProperties,We as SenseVoiceSTTSkill,je as SiliconFlowBot,It as SiliconFlowDrawSkill,ut as SiliconFlowSTTSkill,dt as SiliconFlowTTSSkill,Ir as SimpleSchemaType,Gt as SkillManager,Ce as SkillSchemaBaseProperties,Ft as SortedPromise,vt as SourceApiMissingParamsError,Ct as SourceApiNotFoundError,kt as SourceApiUnAuthorizedError,M as SourceChatMessageType,Ge as SourceEventTaskTrigger,ee as SourceEventType,Kt as SourceManager,Ve as SoviteTTSSkill,Wt as TaskRunnerManager,$t as TaskRunnerSchemaBaseProperties,Ut as TaskService,be as TaskTrigger,Vt as TaskTriggerManager,lt as TencentSTTSkill,mt as TencentTTSSkill,st as WCAISource,Ye as WCOASource,et as WeWorkSource,Le as WenxinAgentBot,qe as XunfeiBot,pt as XunfeiSTTSkill,ct as XunfeiTTSSkill,Ue as YuanQiBot,He as ZhipuBot,$e as ZhipuQingyanBot,xe as addWavHeader,Sc as apiPlugin,de as arm2wav,se as betterMarkdown,ge as checkMessageRule,h as config,Tt as createCacheManager,$o as createFormilySchema,ay as defaultPlugin,Bo as detectName,ie as disposeObjects,No as extractArticleInfo,Ae as extractImageUrls,Ro as extractMarkdownImageTags,Mt as extractMessageContentText,Zt as extractPositionInfo,To as filterContentRule,ae as generateRandomString,Pt as getEnvNumber,Lo as getFromMessageSummary,f as getLogger,V as getSecret,Uo as getToMessageSummary,Eo as hasEmoji,Fo as hasMarkdown,qo as installAndGetPluginInfo,to as installDep,wt as isPhoneNumber,Mo as removeEmoji,Oo as removeMarkdown,At as richText2Markdown,eo as sleep,te as sse,Do as stream2buffer,we as transFileFormat,Ar as transFormat,Ho as uninstallDep,re as wav2amr};