ppagent 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/lib.js +1 -1
  2. package/package.json +1 -1
package/dist/lib.js CHANGED
@@ -1,4 +1,4 @@
1
- var hr=Object.defineProperty;var c=(a,e)=>hr(a,"name",{value:e,configurable:!0});import"reflect-metadata";import $r from"emittery";import fr from"pino";import Yt from"node:process";import gr from"emittery";var _o={level:Yt.env.LOG_LEVEL??"debug"};Yt.env.NODE_ENV==="development"&&(_o.transport={target:"pino-pretty",options:{colorize:!0}});var go=fr(_o),_r=class extends gr{static{c(this,"LogEmitter")}_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??Yt.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})}},Ie=c((a,e,t,o)=>{typeof t=="string"?(go[a]("[%s] %s",e,t),o.emitString(a,e,t)):(go[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),ge=new _r,y=c((a,e=!1)=>({trace:c(t=>Ie("trace",a,t,ge),"trace"),debug:c(t=>Ie("debug",a,t,ge),"debug"),info:c(t=>Ie("info",a,t,ge),"info"),warn:c(t=>Ie("warn",a,t,ge),"warn"),error:c(t=>Ie("error",a,t,ge),"error"),fatal:c(t=>Ie("fatal",a,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Or,existsSync as Wo,mkdirSync as Xo,readFile as Pr,stat as Rr,writeFile as Br}from"node:fs";import{existsSync as yo,mkdirSync as xo}from"node:fs";import ve from"node:path";import S from"node:process";import{v4 as xr}from"uuid";var Zt="0.0.17";import{forward as Ir}from"@ngrok/ngrok";var Jn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),L={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"}}},D=y("config"),Ct=Number(S.env.PORT??5050),Io=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),wo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:Io),wr="http://"+wo+":"+Ct,br="ws://"+wo+":"+Ct,we,be,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),pe.indexOf("$port")<0?(we=(a?"wss://":"ws://")+pe+":"+e,be=(a?"https://":"http://")+pe+":"+e):(we=(a?"wss://":"ws://")+pe.replace("$port",e.toString()),be=(a?"https://":"http://")+pe.replace("$port",e.toString()))}else{let a=S.env.PUBLIC_TUNNEL_NAME;a?.length||D.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=S.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 Ir({addr:Ct,authtoken:e,domain:a}),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 r of["SIGINT","SIGTERM"])S.once(r,async()=>{D.info("close ngrok tunnel"),t.close()});be=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),we=(s?"wss://":"ws://")+pe,D.debug("auto generated public httpurl "+be),D.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"),D.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"),D.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"),D.debug("auto generated public wsurl "+we)}be?.length||D.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 bo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",vo=ve.resolve(ve.join("./",bo));we.length||D.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var kt=S.env.PUBLIC_TOKEN;kt?.length||(kt=xr(),D.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"),D.warn("\u968F\u673Atoken\u4E3A\uFF1A"+kt));var eo=ve.resolve(vo,"temp");yo(eo)||xo(eo,{recursive:!0});var ko=S.env.CONFIG_SERVER_URL,So=S.env.CONFIG_SERVER_EMAIL,Co=S.env.CONFIG_SERVER_PASSWORD,To=!!(S.env.OFFLINE??!1);(!ko?.length||!Co?.length||!So?.length)&&(D.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),To=!0);var St=ve.resolve(ve.join("./","data"));yo(St)||xo(St,{recursive:!0});var _={port:Ct,host:Io,wsUrl:we,httpUrl:be,privateHttpUrl:wr,privateWsUrl:br,publicPath:vo,publicPathName:bo,tempDir:eo,redisUrl:S.env.REDIS_URL,offline:To,configServerUrl:ko,configServerEmail:So,configServerPassword:Co,publicToken:kt,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:Zt,npmRegistry:S.env.NPM_REGISTRY?.length?S.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(S.env.NPM_TIMEOUT??3e5),serverCompress:S.env.SERVER_COMPRESS==="1",serverCompressMinSize:S.env.SERVER_COMPRESS_MIN_SIZE?Number(S.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(S.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(","),dataPath:St,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:ve.join(St,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};D.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);D.warn("\u8F6F\u4EF6\u7248\u672C "+Zt);D.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");D.trace(_);import Y,{dirname as Lr}from"node:path";import{v4 as Ur}from"uuid";import{Buffer as Pe}from"node:buffer";import No from"recorder-core";var g=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Tt=class extends Error{static{c(this,"SourceApiNotFoundError")}},At=class extends Error{static{c(this,"SourceApiMissingParamsError")}},Et=class extends Error{static{c(this,"SourceApiUnAuthorizedError")}};import{v4 as to}from"uuid";import{decodeWavFile as vr}from"wav-file-decoder";import Ao from"keyv";import kr from"@keyv/redis";import Sr from"ffmpeg-static";import Fo from"fluent-ffmpeg";import{createReadStream as Cr,readFileSync as Tr}from"fs";import{fileTypeFromBuffer as Ar,fileTypeFromStream as Er}from"file-type";import{exec as Mo}from"child_process";Fo.setFfmpegPath(Sr);var N=y("helper"),Nr=JSON.parse(await Tr(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var ke=c(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}c(n,"writeString");let p=0;n(i,p,"RIFF"),p+=4,i.setUint32(p,36+s,!0),p+=4,n(i,p,"WAVE"),p+=4,n(i,p,"fmt "),p+=4,i.setUint32(p,16,!0),p+=4,i.setUint16(p,1,!0),p+=2,i.setUint16(p,o,!0),p+=2,i.setUint32(p,e,!0),p+=4,i.setUint32(p,e*o*(t/8),!0),p+=4,i.setUint16(p,o*(t/8),!0),p+=2,i.setUint16(p,t,!0),p+=2,n(i,p,"data"),p+=4,i.setUint32(p,s,!0),p+=4;function m(h,f,w){let I=new Int32Array(w);for(let b=0;b<I.length;b++,f+=4)h.setInt32(f,I[b],!0)}c(m,"floatTo32BitPCM");function d(h,f,w){let I=new Int16Array(w);for(let b=0;b<I.length;b++,f+=2)h.setInt16(f,I[b],!0)}c(d,"floatTo16BitPCM");function u(h,f,w){let I=new Int8Array(w);for(let b=0;b<I.length;b++,f++)h.setInt8(f,I[b])}return c(u,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?u(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Oo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}c(Oo,"removeEmoji");function Po(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}c(Po,"removeMarkdown");function Ro(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}c(Ro,"hasEmoji");function Bo(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}c(Bo,"hasMarkdown");function Lo(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}c(Lo,"extractArticleInfo");function oo(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}c(oo,"extractPositionInfo");function ce(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}c(ce,"betterMarkdown");async function le(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}c(le,"disposeObjects");async function _e(a){return new Promise((e,t)=>{No.amr2wav(a.buffer,o=>{e(v.fromBuffer(Buffer.from(o),to()+".wav","binary"))},o=>{N.error(o),t(o)})})}c(_e,"arm2wav");async function ie(a){let e=(await a.asBuffer()).buffer,t=vr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{No({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(p,m)=>{let d=v.fromBuffer(Buffer.from(await p.arrayBuffer()),to()+".amr");r({file:d,duration:m})},p=>{i(p)})})}c(ie,"wav2amr");function Nt(a){return _.redisUrl?.length?new Ao(new kr(_.redisUrl),{namespace:a}):new Ao}c(Nt,"createCacheManager");function Q(a){if(!a.startsWith("__"))return a;let e=Nr[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}c(Q,"getSecret");function Ft(a){return/^1[3-9]\d{9}$/.test(a)}c(Ft,"isPhoneNumber");function me(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}c(me,"generateRandomString");async function Fr(a,e,t,o){return new Promise(s=>{let r=Fo(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}c(Fr,"transFormat");async function Me(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Fr(s,r,e,t).then(i=>{if(i){let n=v.fromPath(r);o(n)}else o(void 0)})})})}c(Me,"transFileFormat");function Mr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}c(Mr,"_extractMarkdonwImages");function Oe(a,e=!1){if(a.indexOf("![")>=0)return Mr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}c(Oe,"extractImageUrls");function Uo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}c(Uo,"extractMarkdownImageTags");async function Do(a,e){let t=typeof a=="string"?await Er(Cr(a)):await Ar(a);if(!t)return N.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??to()+"."+t.ext;return e}c(Do,"detectName");async function $o(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}c($o,"stream2buffer");async function se(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=c(async()=>{let{value:i,done:n}=await t.read();if(i){let p=o.decode(i)?.trim();if(p?.length){let m=p.split(`
1
+ var hr=Object.defineProperty;var c=(a,e)=>hr(a,"name",{value:e,configurable:!0});import"reflect-metadata";import $r from"emittery";import fr from"pino";import Yt from"node:process";import gr from"emittery";var _o={level:Yt.env.LOG_LEVEL??"debug"};Yt.env.NODE_ENV==="development"&&(_o.transport={target:"pino-pretty",options:{colorize:!0}});var go=fr(_o),_r=class extends gr{static{c(this,"LogEmitter")}_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??Yt.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})}},Ie=c((a,e,t,o)=>{typeof t=="string"?(go[a]("[%s] %s",e,t),o.emitString(a,e,t)):(go[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),ge=new _r,y=c((a,e=!1)=>({trace:c(t=>Ie("trace",a,t,ge),"trace"),debug:c(t=>Ie("debug",a,t,ge),"debug"),info:c(t=>Ie("info",a,t,ge),"info"),warn:c(t=>Ie("warn",a,t,ge),"warn"),error:c(t=>Ie("error",a,t,ge),"error"),fatal:c(t=>Ie("fatal",a,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Or,existsSync as Wo,mkdirSync as Xo,readFile as Pr,stat as Rr,writeFile as Br}from"node:fs";import{existsSync as yo,mkdirSync as xo}from"node:fs";import ve from"node:path";import S from"node:process";import{v4 as xr}from"uuid";var Zt="0.0.18";import{forward as Ir}from"@ngrok/ngrok";var Jn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),L={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"}}},D=y("config"),Ct=Number(S.env.PORT??5050),Io=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),wo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:Io),wr="http://"+wo+":"+Ct,br="ws://"+wo+":"+Ct,we,be,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),pe.indexOf("$port")<0?(we=(a?"wss://":"ws://")+pe+":"+e,be=(a?"https://":"http://")+pe+":"+e):(we=(a?"wss://":"ws://")+pe.replace("$port",e.toString()),be=(a?"https://":"http://")+pe.replace("$port",e.toString()))}else{let a=S.env.PUBLIC_TUNNEL_NAME;a?.length||D.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=S.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 Ir({addr:Ct,authtoken:e,domain:a}),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 r of["SIGINT","SIGTERM"])S.once(r,async()=>{D.info("close ngrok tunnel"),t.close()});be=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),we=(s?"wss://":"ws://")+pe,D.debug("auto generated public httpurl "+be),D.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"),D.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"),D.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"),D.debug("auto generated public wsurl "+we)}be?.length||D.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 bo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",vo=ve.resolve(ve.join("./",bo));we.length||D.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var kt=S.env.PUBLIC_TOKEN;kt?.length||(kt=xr(),D.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"),D.warn("\u968F\u673Atoken\u4E3A\uFF1A"+kt));var eo=ve.resolve(vo,"temp");yo(eo)||xo(eo,{recursive:!0});var ko=S.env.CONFIG_SERVER_URL,So=S.env.CONFIG_SERVER_EMAIL,Co=S.env.CONFIG_SERVER_PASSWORD,To=!!(S.env.OFFLINE??!1);(!ko?.length||!Co?.length||!So?.length)&&(D.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),To=!0);var St=ve.resolve(ve.join("./","data"));yo(St)||xo(St,{recursive:!0});var _={port:Ct,host:Io,wsUrl:we,httpUrl:be,privateHttpUrl:wr,privateWsUrl:br,publicPath:vo,publicPathName:bo,tempDir:eo,redisUrl:S.env.REDIS_URL,offline:To,configServerUrl:ko,configServerEmail:So,configServerPassword:Co,publicToken:kt,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:Zt,npmRegistry:S.env.NPM_REGISTRY?.length?S.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(S.env.NPM_TIMEOUT??3e5),serverCompress:S.env.SERVER_COMPRESS==="1",serverCompressMinSize:S.env.SERVER_COMPRESS_MIN_SIZE?Number(S.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(S.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(","),dataPath:St,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:ve.join(St,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};D.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);D.warn("\u8F6F\u4EF6\u7248\u672C "+Zt);D.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");D.trace(_);import Y,{dirname as Lr}from"node:path";import{v4 as Ur}from"uuid";import{Buffer as Pe}from"node:buffer";import No from"recorder-core";var g=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Tt=class extends Error{static{c(this,"SourceApiNotFoundError")}},At=class extends Error{static{c(this,"SourceApiMissingParamsError")}},Et=class extends Error{static{c(this,"SourceApiUnAuthorizedError")}};import{v4 as to}from"uuid";import{decodeWavFile as vr}from"wav-file-decoder";import Ao from"keyv";import kr from"@keyv/redis";import Sr from"ffmpeg-static";import Fo from"fluent-ffmpeg";import{createReadStream as Cr,readFileSync as Tr}from"fs";import{fileTypeFromBuffer as Ar,fileTypeFromStream as Er}from"file-type";import{exec as Mo}from"child_process";Fo.setFfmpegPath(Sr);var N=y("helper"),Nr=JSON.parse(await Tr(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var ke=c(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}c(n,"writeString");let p=0;n(i,p,"RIFF"),p+=4,i.setUint32(p,36+s,!0),p+=4,n(i,p,"WAVE"),p+=4,n(i,p,"fmt "),p+=4,i.setUint32(p,16,!0),p+=4,i.setUint16(p,1,!0),p+=2,i.setUint16(p,o,!0),p+=2,i.setUint32(p,e,!0),p+=4,i.setUint32(p,e*o*(t/8),!0),p+=4,i.setUint16(p,o*(t/8),!0),p+=2,i.setUint16(p,t,!0),p+=2,n(i,p,"data"),p+=4,i.setUint32(p,s,!0),p+=4;function m(h,f,w){let I=new Int32Array(w);for(let b=0;b<I.length;b++,f+=4)h.setInt32(f,I[b],!0)}c(m,"floatTo32BitPCM");function d(h,f,w){let I=new Int16Array(w);for(let b=0;b<I.length;b++,f+=2)h.setInt16(f,I[b],!0)}c(d,"floatTo16BitPCM");function u(h,f,w){let I=new Int8Array(w);for(let b=0;b<I.length;b++,f++)h.setInt8(f,I[b])}return c(u,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?u(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Oo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}c(Oo,"removeEmoji");function Po(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}c(Po,"removeMarkdown");function Ro(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}c(Ro,"hasEmoji");function Bo(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}c(Bo,"hasMarkdown");function Lo(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}c(Lo,"extractArticleInfo");function oo(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}c(oo,"extractPositionInfo");function ce(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}c(ce,"betterMarkdown");async function le(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}c(le,"disposeObjects");async function _e(a){return new Promise((e,t)=>{No.amr2wav(a.buffer,o=>{e(v.fromBuffer(Buffer.from(o),to()+".wav","binary"))},o=>{N.error(o),t(o)})})}c(_e,"arm2wav");async function ie(a){let e=(await a.asBuffer()).buffer,t=vr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{No({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(p,m)=>{let d=v.fromBuffer(Buffer.from(await p.arrayBuffer()),to()+".amr");r({file:d,duration:m})},p=>{i(p)})})}c(ie,"wav2amr");function Nt(a){return _.redisUrl?.length?new Ao(new kr(_.redisUrl),{namespace:a}):new Ao}c(Nt,"createCacheManager");function Q(a){if(!a.startsWith("__"))return a;let e=Nr[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}c(Q,"getSecret");function Ft(a){return/^1[3-9]\d{9}$/.test(a)}c(Ft,"isPhoneNumber");function me(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}c(me,"generateRandomString");async function Fr(a,e,t,o){return new Promise(s=>{let r=Fo(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}c(Fr,"transFormat");async function Me(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Fr(s,r,e,t).then(i=>{if(i){let n=v.fromPath(r);o(n)}else o(void 0)})})})}c(Me,"transFileFormat");function Mr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}c(Mr,"_extractMarkdonwImages");function Oe(a,e=!1){if(a.indexOf("![")>=0)return Mr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}c(Oe,"extractImageUrls");function Uo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}c(Uo,"extractMarkdownImageTags");async function Do(a,e){let t=typeof a=="string"?await Er(Cr(a)):await Ar(a);if(!t)return N.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??to()+"."+t.ext;return e}c(Do,"detectName");async function $o(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}c($o,"stream2buffer");async function se(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=c(async()=>{let{value:i,done:n}=await t.read();if(i){let p=o.decode(i)?.trim();if(p?.length){let m=p.split(`
2
2
  `).map(d=>d.replace("data:","").trim()).filter(d=>d.length&&!d.startsWith("event:"));if(m.length){let d=s+m[0];try{let u=JSON.parse(d);if(e(u),m.length>1){for(let h=1;h<m.length-1;h++)u=JSON.parse(m[h]),e(u);try{u=JSON.parse(m[m.length-1]),e(u)}catch{s=m[m.length-1]}}}catch{s=d}}}}n?N.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await r()},"read");return r()}c(se,"sse");async function Mt(a){let e=`### ${a.title}`;for(let t of a.content)if(t.type==="text")e+=`
3
3
 
4
4
  ${t.data}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ppagent",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "description": "an agent manager",
5
5
  "types": "dist/lib.d.ts",
6
6
  "main": "dist/lib.js",