"use strict";functione(e){returne&&"object"==typeofe&&"default"ine?e.default:e}vart=e(require("fs")),r=e(require("path")),n=e(require("crypto")),i=e(require("querystring")),o=e(require("buffer")),s=e(require("stream")),a=e(require("util"));classcextendsError{constructor(e){super(e.message),this.errMsg=e.message||"",Object.defineProperties(this,{message:{get(){return`errCode: ${e.code||""} | errMsg: `+this.errMsg},set(e){this.errMsg=e}}})}}constu=Object.prototype.toString,f=Object.prototype.hasOwnProperty;functiond(e,t){returnf.call(e,t)}functionl(e){return"[object Object]"===u.call(e)}functionp(e){return"function"==typeofe}functionm(e){returnObject.prototype.toString.call(e).slice(8,-1).toLowerCase()}consth=/_(\w)/g,g=/[A-Z]/g;functiony(e){returne.replace(h,(e,t)=>t?t.toUpperCase():"")}functionw(e){returne.replace(g,e=>"_"+e.toLowerCase())}functionv(e,t){letr,n;switch(t){case"snake2camel":n=y,r=h;break;case"camel2snake":n=w,r=g}for(constiine)if(d(e,i)&&r.test(i)){constr=n(i);e[r]=e[i],deletee[i],l(e[r])?e[r]=v(e[r],t):Array.isArray(e[r])&&(e[r]=e[r].map(e=>v(e,t)))}returne}functionb(e){returnv(e,"snake2camel")}function_(e){returnv(e,"camel2snake")}functionE(e){returnfunction(e,t="-"){e=e||newDate;constr=[];returnr.push(e.getFullYear()),r.push(("00"+(e.getMonth()+1)).substr(-2)),r.push(("00"+e.getDate()).substr(-2)),r.join(t)}(e=e||newDate)+""+function(e,t=":"){e=e||newDate;constr=[];returnr.push(("00"+e.getHours()).substr(-2)),r.push(("00"+e.getMinutes()).substr(-2)),r.push(("00"+e.getSeconds()).substr(-2)),r.join(t)}(e)}functionS(){"development"===process.env.NODE_ENV&&console.log(...arguments)}functionx(e=6){lett="";for(letr=0;r<e;r++)t+=Math.floor(10*Math.random());returnt}functionk(e){returnArray.from(newSet(e))}functionj(e={},t){if(!t||!e)returne;constr=["_pre","_purify","_post"];t._pre&&(e=t._pre(e));letn={shouldDelete:newSet([])};if(t._purify){conste=t._purify;for(consttine)e[t]=newSet(e[t]);n=Object.assign(n,e)}if(l(t))for(constiint){consto=t[i];p(o)&&-1===r.indexOf(i)?e[i]=o(e):"string"==typeofo&&-1===r.indexOf(i)&&(e[i]=e[o],n.shouldDelete.add(o))}elsep(t)&&(e=t(e));if(n.shouldDelete)for(consttofn.shouldDelete)deletee[t];returnt._post&&(e=t._post(e)),e}functionT(e,t){constr=newe(t);returnnewProxy(r,{get:function(e,t){if("function"==typeofe[t]&&0!==t.indexOf("_")&&e._protocols&&e._protocols[t]){constr=e._protocols[t];returnasyncfunction(n){n=j(n,r.args);leti=awaite[t](n);returni=j(i,r.returnValue),i}}returne[t]}})}functionI(e){lett,r,n=e-Date.now(),i="后";n<0&&(i="前",n=-n);consto=Math.floor(n/1e3),s=Math.floor(o/60),a=Math.floor(s/60),c=Math.floor(a/24),u=Math.floor(c/30),f=Math.floor(u/12);switch(!0){casef>0:t=f,r="年";break;caseu>0:t=u,r="月";break;casec>0:t=c,r="天";break;casea>0:t=a,r="小时";break;cases>0:t=s,r="分钟";break;default:t=o,r="秒"}return`${t}${r}${i}`}constP=asyncfunction(){};functionC(e){returnP.constructor===e.constructor?asyncfunction(){constt=awaite.apply(this,arguments);returnl(t)&&t.msg&&(t.message=t.msg),t}:function(){constt=e.apply(this,arguments);returnl(t)&&t.msg&&(t.message=t.msg),t}}constR=uniCloud.database(),A=R.collection("uni-id-users"),O=R.collection("opendb-verify-codes"),D=R.collection("uni-id-roles"),B=R.collection("uni-id-permissions");asyncfunctionM({name:e,url:t,data:r,options:n,defaultOptions:i}){leto={};consts=_(Object.assign({},r));s&&s.access_token&&deletes.access_token;try{n=Object.assign({},i,n,{data:s}),o=awaituniCloud.httpclient.request(t,n)}catch(t){returnfunction(e,t){thrownewc({code:t.code||-2,message:t.message||e+" fail"})}(e,t)}leta=o.data;constu=o.headers["content-type"];if(!Buffer.isBuffer(a)||0!==u.indexOf("text/plain")&&0!==u.indexOf("application/json"))Buffer.isBuffer(a)&&(a={buffer:a,contentType:u});elsetry{a=JSON.parse(a.toString())}catch(e){a=a.toString()}returnb(function(e,t){if(t.errcode)thrownewc({code:t.errcode||-2,message:t.errmsg||e+" fail"});returndeletet.errcode,deletet.errmsg,{...t,errMsg:e+" ok",errCode:0}}(e,a||{errCode:-2,errMsg:"Request failed"}))}functionN(e,t){letr="";if(t&&t.accessToken){r=`${e.indexOf("?")>-1?"&":"?"}access_token=${t.accessToken}`}return`${e}${r}`}class${constructor(e){this.options=Object.assign({baseUrl:"https://api.weixin.qq.com",timeout:5e3},e)}async_requestWxOpenapi({name:e,url:t,data:r,options:n}){consti={method:"GET",dataType:"json",dataAsQueryString:!0,timeout:this.options.timeout};returnawaitM({name:"auth."+e,url:`${this.options.baseUrl}${N(t,r)}`,data:r,options:n,defaultOptions:i})}asynccode2Session(e){returnawaitthis._requestWxOpenapi({name:"code2Session",url:"/sns/jscode2session",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,js_code:e}})}asyncgetOauthAccessToken(e){returnawaitthis._requestWxOpenapi({name:"getOauthAccessToken",url:"/sns/oauth2/access_token",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,code:e}})}}constL={RSA:"RSA-SHA1",RSA2:"RSA-SHA256"};varK={code2Session:{returnValue:{openid:"userId"}}};classVextendsclass{constructor(e={}){if(!e.appId)thrownewError("appId required");if(!e.privateKey)thrownewError("privateKey required");constt={gateway:"https://openapi.alipay.com/gateway.do",timeout:5e3,charset:"utf-8",version:"1.0",signType:"RSA2",timeOffset:-(newDate).getTimezoneOffset()/60,keyType:"PKCS8"};e.sandbox&&(e.gateway="https://openapi.alipaydev.com/gateway.do"),this.options=Object.assign({},t,e);constr="PKCS8"===this.options.keyType?"PRIVATE KEY":"RSA PRIVATE KEY";this.options.privateKey=this._formatKey(this.options.privateKey,r),this.options.alipayPublicKey&&(this.options.alipayPublicKey=this._formatKey(this.options.alipayPublicKey,"PUBLIC KEY"))}_formatKey(e,t){return`-----BEGIN ${t}-----\n${e}\n-----END ${t}-----`}_formatUrl(e,t){letr=e;constn=["app_id","method","format","charset","sign_type","sign","timestamp","version","notify_url","return_url","auth_token","app_auth_token"];for(consteint)if(n.indexOf(e)>-1){constn=encodeURIComponent(t[e]);r=`${r}${r.includes("?")?"&":"?"}${e}=${n}`,deletet[e]}return{execParams:t,url:r}}_getSign(e,t){constr=t.bizContent||null;deletet.bizContent;consti=Object.assign({method:e,appId:this.options.appId,charset:this.options.charset,version:this.options.version,signType:this.options.signType,timestamp:E((o=this.options.timeOffset,newDate(Date.now()+6e4*((newDate).getTimezoneOffset()+60*(o||0)))))},t);varo;r&&(i.bizContent=JSON.stringify(_(r)));consts=_(i),a=Object.keys(s).sort().map(e=>{lett=s[e];return"[object String]"!==Array.prototype.toString.call(t)&&(t=JSON.stringify(t)),`${e}=${t}`}).join("&"),c=n.createSign(L[this.options.signType]).update(a,"utf8").sign(this.options.privateKey,"base64");returnObject.assign(s,{sign:c})}async_exec(e,t={},r={}){constn=this._getSign(e,t),{url:i,execParams:o}=this._formatUrl(this.options.gateway,n),{status:s,data:a}=awaituniCloud.httpclient.request(i,{method:"POST",data:o,dataType:"text",timeout:this.options.timeout});if(200!==s)thrownewError("request fail");constc=JSON.parse(a),u=e.replace(/\./g,"_")+"_response",f=c[u],d=c.error_response;if(f){if(!r.validateSign||this._checkResponseSign(a,u)){if(!f.code||"10000"===f.code){return{errCode:0,errMsg:f.msg||"",...b(f)}}conste=f.sub_code?`${f.sub_code}${f.sub_msg}`:""+(f.msg||"unkonwn error");thrownewError(e)}thrownewError("返回结果签名错误")}if(d)thrownewError(d.sub_msg||d.msg||"接口返回错误");thrownewError("request fail")}_checkResponseSign(e,t){if(!this.options.alipayPublicKey||""===this.options.alipayPublicKey)returnconsole.warn("options.alipayPublicKey is empty"),!0;if(!e)return!1;constr=this._getSignStr(e,t),i=JSON.parse(e).sign,o=n.createVerify(L[this.options.signType]);returno.update(r,"utf8"),o.verify(this.options.alipayPublicKey,i,"base64")}_getSignStr(e,t){letr=e.trim();constn=e.indexOf(t+'"'),i=e.lastIndexOf('"sign"');returnr=r.substr(n+t.length+1),r=r.substr(0,i),r=r.replace(/^[^{]*{/g,"{"),r=r.replace(/\}([^}]*)$/g,"}"),r}_notifyRSACheck(e,t,r){consti=Object.keys(e).sort().filter(e=>e).map(t=>{letr=e[t];return"[object String]"!==Array.prototype.toString.call(r)&&(r=JSON.stringify(r)),`${t}=${decodeURIComponent(r)}`}).join("&");returnn.createVerify(L[r]).update(i,"utf8").verify(this.options.alipayPublicKey,t,"base64")}_checkNotifySign(e){constt=e.sign;if(!this.options.alipayPublicKey||!t)return!1;constr=e.sign_type||this.options.signType||"RSA2",n={...e};deleten.sign,n.sign_type=r;return!!this._notifyRSACheck(n,t,r)||(deleten.sign_type,this._notifyRSACheck(n,t,r))}_verifyNotify(e){if(!e.headers)thrownewError("通知格式不正确");lett;for(constrine.headers)"content-type"===r.toLowerCase()&&(t=e.headers[r]);if(!1!==e.isBase64Encoded&&-1===t.indexOf("application/x-www-form-urlencoded"))thrownewError("通知格式不正确");constr=i.parse(e.body);if(this._checkNotifySign(r))returnb(r);thrownewError("通知验签未通过")}}{constructor(e){super(e),this._protocols=K}asynccode2Session(e){returnawaitthis._exec("alipay.system.oauth.token",{grantType:"authorization_code",code:e})}}functionU(e){vart=e[0];returnt<"0"||t>"7"?"00"+e:e}functionq(e){vart=e.toString(16);returnt.length%2?"0"+t:t}functionH(e){if(e<=127)returnq(e);vart=q(e);returnq(128+t.length/2)+t}functionF(e,t){returne(t={exports:{}},t.exports),t.exports}varJ=F((function(e,t){varr=o.Buffer;functionn(e,t){for(varrine)t[r]=e[r]}functioni(e,t,n){returnr(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=o:(n(o,t),t.Buffer=i),i.prototype=Object.create(r.prototype),n(r,i),i.from=function(e,t,n){if("number"==typeofe)thrownewTypeError("Argument must not be a number");returnr(e,t,n)},i.alloc=function(e,t,n){if("number"!=typeofe)thrownewTypeError("Argument must be a number");vari=r(e);returnvoid0!==t?"string"==typeofn?i.fill(t,n):i.fill(t):i.fill(0),i},i.allocUnsafe=function(e){if("number"!=typeofe)thrownewTypeError("Argument must be a number");returnr(e)},i.allocUnsafeSlow=function(e){if("number"!=typeofe)thrownewTypeError("Argument must be a number");returno.SlowBuffer(e)}})),G=(J.Buffer,J.Buffer);functionz(e){if(this.buffer=null,this.writable=!0,this.readable=!0,!e)returnthis.buffer=G.alloc(0),this;if("function"==typeofe.pipe)returnthis.buffer=G.alloc(0),e.pipe(this),this;if(e.length||"object"==typeofe)returnthis.buffer=e,this.writable=!1,process.nextTick(function(){this.emit("end",e),this.readable=!1,this.emit("close")}.bind(this)),this;thrownewTypeError("Unexpected data type ("+typeofe+")")}a.inherits(z,s),z.prototype.write=function(e){this.buffer=G.concat([this.buffer,G.from(e)]),this.emit("data",e)},z.prototype.end=function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1};varW=z,X=o.Buffer,Y=o.SlowBuffer,Z=Q;functionQ(e,t){if(!X.isBuffer(e)||!X.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(varr=0,n=0;n<e.length;n++)r|=e[n]^t[n];return0===r}Q.install=function(){X.prototype.equal=Y.prototype.equal=function(e){returnQ(this,e)}};varee=X.prototype.equal,te=Y.prototype.equal;functionre(e){return(e/8|0)+(e%8==0?0:1)}Q.restore=function(){X.prototype.equal=ee,Y.prototype.equal=te};varne={ES256:re(256),ES384:re(384),ES512:re(521)};varie=function(e){vart=ne[e];if(t)returnt;thrownewError('Unknown algorithm "'+e+'"')},oe=J.Buffer;functionse(e){if(oe.isBuffer(e))returne;if("string"==typeofe)returnoe.from(e,"base64");thrownewTypeError("ECDSA signature must be a Base64 string or a Buffer")}functionae(e,t,r){for(varn=0;t+n<r&&0===e[t+n];)++n;returne[t+n]>=128&&--n,n}varce={derToJose:function(e,t){e=se(e);varr=ie(t),n=r+1,i=e.length,o=0;if(48!==e[o++])thrownewError('Could not find expected "seq"');vars=e[o++];if(129===s&&(s=e[o++]),i-o<s)thrownewError('"seq" specified length of "'+s+'", only "'+(i-o)+'" remaining');if(2!==e[o++])thrownewError('Could not find expected "int" for "r"');vara=e[o++];if(i-o-2<a)thrownewError('"r" specified length of "'+a+'", only "'+(i-o-2)+'" available');if(n<a)thrownewError('"r" specified length of "'+a+'", max of "'+n+'" is acceptable');varc=o;if(o+=a,2!==e[o++])thrownewError('Could not find expected "int" for "s"');varu=e[o++];if(i-o!==u)thrownewError('"s" specified length of "'+u+'", expected "'+(i-o)+'"');if(n<u)thrownewError('"s" specified length of "'+u+'", max of "'+n+'" is acceptable');varf=o;if((o+=u)!==i)thrownewError('Expected to consume entire buffer, but "'+(i-o)+'" bytes remain');vard=r-a,l=r-u,p=oe.allocUnsafe(d+a+l+u);for(o=0;o<d;++o)p[o]=0;e.copy(p,o,c+Math.max(-d,0),c+a);for(varm=o=r;o<m+l;++o)p[o]=0;returne.copy(p,o,f+Math.max(-l,0),f+u),p=(p=p.toString("base64")).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")},joseToDer:function(e,t){e=se(e);varr=ie(t),n=e.length;if(n!==2*r)thrownewTypeError('"'+t+'" signatures must be "'+2*r+'" bytes, saw "'+n+'"');vari=ae(e,0,r),o=ae(e,r,e.length),s=r-i,a=r-o,c=2+s+1+1+a,u=c<128,f=oe.allocUnsafe((u?2:3)+c),d=0;returnf[d++]=48,u?f[d++]=c:(f[d++]=129,f[d++]=255&c),f[d++]=2,f[d++]=s,i<0?(f[d++]=0,d+=e.copy(f,d,0,r)):d+=e.copy(f,d,i,r),f[d++]=2,f[d++]=a,o<0?(f[d++]=0,e.copy(f,d,r)):e.copy(f,d,r+o),f}},ue=J.Buffer,fe="secret must be a string or buffer",de="key must be a string or a buffer",le="function"==typeofn.createPublicKey;functionpe(e){if(!ue.isBuffer(e)&&"string"!=typeofe){if(!le)throwye(de);if("object"!=typeofe)throwye(de);if("string"!=typeofe.type)throwye(de);if("string"!=typeofe.asymmetricKeyType)throwye(de);if("function"!=typeofe.export)throwye(de)}}functionme(e){if(!ue.isBuffer(e)&&"string"!=typeofe&&"object"!=typeofe)throwye("key must be a string, a buffer or an object")}functionhe(e){returne.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}functionge(e){vart=4-(e=e.toString()).length%4;if(4!==t)for(varr=0;r<t;++r)e+="=";returne.replace(/\-/g,"+").replace(/_/g,"/")}functionye(e){vart=[].slice.call(arguments,1),r=a.format.bind(a,e).apply(null,t);returnnewTypeError(r)}functionwe(e){vart;returnt=e,ue.isBuffer(t)||"string"==typeoft||(e=JSON.stringify(e)),e}functionve(e){returnfunction(t,r){!function(e){if(!ue.isBuffer(e)){if("string"==typeofe)returne;if(!le)throwye(fe);if("object"!=typeofe)throwye(fe);if("secret"!==e.type)throwye(fe);if("function"!=typeofe.export)throwye(fe)}}(r),t=we(t);vari=n.createHmac("sha"+e,r);returnhe((i.update(t),i.digest("base64")))}}functionbe(e){returnfunction(t,r,n){vari=ve(e)(t,n);returnZ(ue.from(r),ue.from(i))}}function_e(e){returnfunction(t,r){me(r),t=we(t);vari=n.createSign("RSA-SHA"+e);returnhe((i.update(t),i.sign(r,"base64")))}}functionEe(e){returnfunction(t,r,i){pe(i),t=we(t),r=ge(r);varo=n.createVerify("RSA-SHA"+e);returno.update(t),o.verify(i,r,"base64")}}functionSe(e){returnfunction(t,r){me(r),t=we(t);vari=n.createSign("RSA-SHA"+e);returnhe((i.update(t),i.sign({key:r,padding:n.constants.RSA_PKCS1_PSS_PADDING,saltLength:n.constants.RSA_PSS_SALTLEN_DIGEST},"base64")))}}functionxe(e){returnfunction(t,r,i){pe(i),t=we(t),r=ge(r);varo=n.createVerify("RSA-SHA"+e);returno.update(t),o.verify({key:i,padding:n.constants.RSA_PKCS1_PSS_PADDING,saltLength:n.constants.RSA_PSS_SALTLEN_DIGEST},r,"base64")}}functionke(e){vart=_e(e);returnfunction(){varr=t.apply(null,arguments);returnr=ce.derToJose(r,"ES"+e)}}functionje(e){vart=Ee(e);returnfunction(r,n,i){returnn=ce.joseToDer(n,"ES"+e).toString("base64"),t(r,n,i)}}functionTe(){returnfunction(){return""}}functionIe(){returnfunction(e,t){return""===t}}le&&(de+=" or a KeyObject",fe+="or a KeyObject");varPe=function(e){vart={hs:ve,rs:_e,ps:Se,es:ke,none:Te},r={hs:be,rs:Ee,ps:xe,es:je,none:Ie},n=e.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);if(!n)throwye('"%s" is not a valid algorithm.\n Supported algorithms are:\n "HS256", "HS384", "HS512", "RS256", "RS384", "RS512", "PS256", "PS384", "PS512", "ES256", "ES384", "ES512" and "none".',e);vari=(n[1]||n[3]).toLowerCase(),o=n[2];return{sign:t[i](o),verify:r[i](o)}},Ce=o.Buffer,Re=function(e){return"string"==typeofe?e:"number"==typeofe||Ce.isBuffer(e)?e.toString():JSON.stringify(e)},Ae=J.Buffer;functionOe(e,t){returnAe.from(e,t).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}functionDe(e){vart=e.header,r=e.payload,n=e.secret||e.privateKey,i=e.encoding,o=Pe(t.alg),s=function(e,t,r){r=r||"utf8";varn=Oe(Re(e),"binary"),i=Oe(Re(t),r);returna.format("%s.%s",n,i)}(t,r,i),c=o.sign(s,n);returna.format("%s.%s",s,c)}functionBe(e){vart=e.secret||e.privateKey||e.key,r=newW(t);this.readable=!0,this.header=e.header,this.encoding=e.encoding,this.secret=this.privateKey=this.key=r,this.payload=newW(e.payload),this.secret.once("close",function(){!this.payload.writable&&this.readable&&this.sign()}.bind(this)),this.payload.once("close",function(){!this.secret.writable&&this.readable&&this.sign()}.bind(this))}a.inherits(Be,s),Be.prototype.sign=function(){try{vare=De({header:this.header,payload:this.payload.buffer,secret:this.secret.buffer,encoding:this.encoding});returnthis.emit("done",e),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(e){this.readable=!1,this.emit("error",e),this.emit("close")}},Be.sign=De;varMe=Be,Ne=J.Buffer,$e=/^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;functionLe(e){if(function(e){return"[object Object]"===Object.prototype.toString.call(e)}(e))returne;try{returnJSON.parse(e)}catch(e){return}}functionKe(e){vart=e.split(".",1)[0];returnLe(Ne.from(t,"base64").toString("binary"))}functionVe(e){returne.split(".")[2]}functionUe(e){return$e.test(e)&&!!Ke(e)}functionqe(e,t,r){if(!t){varn=newError("Missing algorithm parameter for jws.verify");thrown.code="MISSING_ALGORITHM",n}vari=Ve(e=Re(e)),o=function(e){returne.split(".",2).join(".")}(e);returnPe(t).verify(o,i,r)}functionHe(e,t){if(t=t||{},!Ue(e=Re(e)))returnnull;varr=Ke(e);if(!r)returnnull;varn=function(e,t){t=t||"utf8";varr=e.split(".")[1];returnNe.from(r,"base64").toString(t)}(e);return("JWT"===r.typ||t.json)&&(n=JSON.parse(n,t.encoding)),{header:r,payload:n,signature:Ve(e)}}functionFe(e){vart=(e=e||{}).secret||e.publicKey||e.key,r=newW(t);this.readable=!0,this.algorithm=e.algorithm,this.encoding=e.encoding,this.secret=this.publicKey=this.key=r,this.signature=newW(e.signature),this.secret.once("close",function(){!this.signature.writable&&this.readable&&this.verify()}.bind(this)),this.signature.once("close",function(){!this.secret.writable&&this.readable&&this.verify()}.bind(this))}a.inherits(Fe,s),Fe.prototype.verify=function(){try{vare=qe(this.signature.buffer,this.algorithm,this.key.buffer),t=He(this.signature.buffer,this.encoding);returnthis.emit("done",e,t),this.emit("data",e),this.emit("end"),this.readable=!1,e}catch(e){this.readable=!1,this.emit("error",e),this.emit("close")}},Fe.decode=He,Fe.isValid=Ue,Fe.verify=qe;varJe=Fe,Ge={ALGORITHMS:["HS256","HS384","HS512","RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"],sign:Me.sign,verify:Je.verify,decode:Je.decode,isValid:Je.isValid,createSign:function(e){returnnewMe(e)},createVerify:function(e){returnnewJe(e)}},ze=function(e,t){t=t||{};varr=Ge.decode(e,t);if(!r)returnnull;varn=r.payload;if("string"==typeofn)try{vari=JSON.parse(n);null!==i&&"object"==typeofi&&(n=i)}catch(e){}return!0===t.complete?{header:r.header,payload:n,signature:r.signature}:n},We=function(e,t){Error.call(this,e),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor),this.name="JsonWebTokenError",this.message=e,t&&(this.inner=t)};(We.prototype=Object.create(Error.prototype)).constructor=We;varXe=We,Ye=function(e,t){Xe.call(this,e),this.name="NotBeforeError",this.date=t};(Ye.prototype=Object.create(Xe.prototype)).constructor=Ye;varZe=Ye,Qe=function(e,t){Xe.call(this,e),this.name="TokenExpiredError",this.expiredAt=t};(Qe.prototype=Object.create(Xe.prototype)).constructor=Qe;varet=Qe,tt=1e3,rt=60*tt,nt=60*rt,it=24*nt,ot=function(e,t){t=t||{};varr=typeofe;if("string"===r&&e.length>0)returnfunction(e){if((e=String(e)).length>100)return;vart=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;varr=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return315576e5*r;case"weeks":case"week":case"w":return6048e5*r;case"days":case"day":case"d":returnr*it;case"hours":case"hour":case"hrs":case"hr":case"h":returnr*nt;case"minutes":case"minute":case"mins":case"min":case"m":returnr*rt;case"seconds":case"second":case"secs":case"sec":case"s":returnr*tt;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":returnr;default:return}}(e);if("number"===r&&isFinite(e))returnt.long?function(e){vart=Math.abs(e);if(t>=it)returnst(e,t,it,"day");if(t>=nt)returnst(e,t,nt,"hour");if(t>=rt)returnst(e,t,rt,"minute");if(t>=tt)returnst(e,t,tt,"second");returne+" ms"}(e):function(e){vart=Math.abs(e);if(t>=it)returnMath.round(e/it)+"d";if(t>=nt)returnMath.round(e/nt)+"h";if(t>=rt)returnMath.round(e/rt)+"m";if(t>=tt)returnMath.round(e/tt)+"s";returne+"ms"}(e);thrownewError("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};functionst(e,t,r,n){vari=t>=1.5*r;returnMath.round(e/r)+""+n+(i?"s":"")}varat=function(e,t){varr=t||Math.floor(Date.now()/1e3);if("string"==typeofe){varn=ot(e);if(void0===n)return;returnMath.floor(r+n/1e3)}return"number"==typeofe?r+e:void0},ct=F((function(e,t){varr;t=e.exports=J,r="object"==typeofprocess&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){vare=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";varn=Number.MAX_SAFE_INTEGER||9007199254740991,i=t.re=[],o=t.src=[],s=0,a=s++;o[a]="0|[1-9]\\d*";varc=s++;o[c]="[0-9]+";varu=s++;o[u]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";varf=s++;o[f]="("+o[a]+")\\.("+o[a]+")\\.("+o[a]+")";vard=s++;o[d]="("+o[c]+")\\.("+o[c]+")\\.("+o[c]+")";varl=s++;o[l]="(?:"+o[a]+"|"+o[u]+")";varp=s++;o[p]="(?:"+o[c]+"|"+o[u]+")";varm=s++;o[m]="(?:-("+o[l]+"(?:\\."+o[l]+")*))";varh=s++;o[h]="(?:-?("+o[p]+"(?:\\."+o[p]+")*))";varg=s++;o[g]="[0-9A-Za-z-]+";vary=s++;o[y]="(?:\\+("+o[g]+"(?:\\."+o[g]+")*))";varw=s++,v="v?"+o[f]+o[m]+"?"+o[y]+"?";o[w]="^"+v+"$";varb="[v=\\s]*"+o[d]+o[h]+"?"+o[y]+"?",_=s++;o[_]="^"+b+"$";varE=s++;o[E]="((?:<|>)?=?)";varS=s++;o[S]=o[c]+"|x|X|\\*";varx=s++;o[x]=o[a]+"|x|X|\\*";vark=s++;o[k]="[v=\\s]*("+o[x]+")(?:\\.("+o[x]+")(?:\\.("+o[x]+")(?:"+o[m]+")?"+o[y]+"?)?)?";varj=s++;o[j]="[v=\\s]*("+o[S]+")(?:\\.("+o[S]+")(?:\\.("+o[S]+")(?:"+o[h]+")?"+o[y]+"?)?)?";varT=s++;o[T]="^"+o[E]+"\\s*"+o[k]+"$";varI=s++;o[I]="^"+o[E]+"\\s*"+o[j]+"$";varP=s++;o[P]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";varC=s++;o[C]="(?:~>?)";varR=s++;o[R]="(\\s*)"+o[C]+"\\s+",i[R]=newRegExp(o[R],"g");varA=s++;o[A]="^"+o[C]+o[k]+"$";varO=s++;o[O]="^"+o[C]+o[j]+"$";varD=s++;o[D]="(?:\\^)";varB=s++;o[B]="(\\s*)"+o[D]+"\\s+",i[B]=newRegExp(o[B],"g");varM=s++;o[M]="^"+o[D]+o[k]+"$";varN=s++;o[N]="^"+o[D]+o[j]+"$";var$=s++;o[$]="^"+o[E]+"\\s*("+b+")$|^$";varL=s++;o[L]="^"+o[E]+"\\s*("+v+")$|^$";varK=s++;o[K]="(\\s*)"+o[E]+"\\s*("+b+"|"+o[k]+")",i[K]=newRegExp(o[K],"g");varV=s++;o[V]="^\\s*("+o[k]+")\\s+-\\s+("+o[k]+")\\s*$";varU=s++;o[U]="^\\s*("+o[j]+")\\s+-\\s+("+o[j]+")\\s*$";varq=s++;o[q]="(<|>)?=?\\s*\\*";for(varH=0;H<35;H++)r(H,o[H]),i[H]||(i[H]=newRegExp(o[H]));functionF(e,t){if(t&&"object"==typeoft||(t={loose:!!t,includePrerelease:!1}),einstanceofJ)returne;if("string"!=typeofe)returnnull;if(e.length>256)returnnull;if(!(t.loose?i[_]:i[w]).test(e))returnnull;try{returnnewJ(e,t)}catch(e){returnnull}}functionJ(e,t){if(t&&"object"==typeoft||(t={loose:!!t,includePrerelease:!1}),einstanceofJ){if(e.loose===t.loose)returne;e=e.version}elseif("string"!=typeofe)thrownewTypeError("Invalid Version: "+e);if(e.length>256)thrownewTypeError("version is longer than 256 characters");if(!(thisinstanceofJ))returnnewJ(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;varo=e.trim().match(t.loose?i[_]:i[w]);if(!o)thrownewTypeError("Invalid Version: "+e);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>n||this.major<0)thrownewTypeError("Invalid major version");if(this.minor>n||this.minor<0)thrownewTypeError("Invalid minor version");if(this.patch>n||this.patch<0)thrownewTypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){vart=+e;if(t>=0&&t<n)returnt}returne})):this.prerelease=[],this.build=o[5]?o[5].split("."):[],this.format()}t.parse=F,t.valid=function(e,t){varr=F(e,t);returnr?r.version:null},t.clean=function(e,t){varr=F(e.trim().replace(/^[=v]+/,""),t);returnr?r.version:null},t.SemVer=J,J.prototype.format=function(){returnthis.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},J.prototype.toString=function(){returnthis.version},J.prototype.compare=function(e){returnr("SemVer.compare",this.version,this.options,e),einstanceofJ||(e=newJ(e,this.options)),this.compareMain(e)||this.comparePre(e)},J.prototype.compareMain=function(e){returneinstanceofJ||(e=newJ(e,this.options)),z(this.major,e.major)||z(this.minor,e.minor)||z(this.patch,e.patch)},J.prototype.comparePre=function(e){if(einstanceofJ||(e=newJ(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return1;if(!this.prerelease.length&&!e.prerelease.length)return0;vart=0;do{varn=this.prerelease[t],i=e.prerelease[t];if(r("prerelease compare",t,n,i),void0===n&&void0===i)return0;if(void0===i)return1;if(void0===n)return-1;if(n!==i)returnz(n,i)}while(++t)},J.prototype.inc=function(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(varr=this.prerelease.length;--r>=0;)"number"==typeofthis.prerelease[r]&&(this.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:thrownewError("invalid increment argument: "+e)}returnthis.format(),this.raw=this.version,this},t.inc=function(e,t,r,n){"string"==typeofr&&(n=r,r=void0);try{returnnewJ(e,r).inc(t,n).version}catch(e){returnnull}},t.diff=function(e,t){if(Z(e,t))returnnull;varr=F(e),n=F(t),i="";if(r.prerelease.length||n.prerelease.length){i="pre";varo="prerelease"}for(varsinr)if(("major"===s||"minor"===s||"patch"===s)&&r[s]!==n[s])returni+s;returno},t.compareIdentifiers=z;varG=/^[0-9]+$/;functionz(e,t){varr=G.test(e),n=G.test(t);returnr&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1}functionW(e,t,r){returnnewJ(e,r).compare(newJ(t,r))}functionX(e,t,r){returnW(e,t,r)>0}functionY(e,t,r){returnW(e,t,r)<0}functionZ(e,t,r){return0===W(e,t,r)}functionQ(e,t,r){return0!==W(e,t,r)}functionee(e,t,r){returnW(e,t,r)>=0}functionte(e,t,r){returnW(e,t,r)<=0}functionre(e,t,r,n){switch(t){case"===":return"object"==typeofe&&(e=e.version),"object"==typeofr&&(r=r.version),e===r;case"!==":return"object"==typeofe&&(e=e.version),"object"==typeofr&&(r=r.version),e!==r;case"":case"=":case"==":returnZ(e,r,n);case"!=":returnQ(e,r,n);case">":returnX(e,r,n);case">=":returnee(e,r,n);case"<":returnY(e,r,n);case"<=":returnte(e,r,n);default:thrownewTypeError("Invalid operator: "+t)}}functionne(e,t){if(t&&"object"==typeoft||(t={loose:!!t,includePrerelease:!1}),einstanceofne){if(e.loose===!!t.loose)returne;e=e.value}if(!(thisinstanceofne))returnnewne(e,t);r("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ie?this.value="":this.value=this.operator+this.semver.version,r("comp",this)}t.rcompareIdentifiers=function(e,t){returnz(t,e)},t.major=function(e,t){returnnewJ(e,t).major},t.minor=function(e,t){returnnewJ(e,t).minor},t.patch=function(e,t){returnnewJ(e,t).patch},t.compare=W,t.compareLoose=function(e,t){returnW(e,t,!0)},t.rcompare=function(e,t,r){returnW(t,e,r)},t.sort=function(e,r){returne.sort((function(e,n){returnt.compare(e,n,r)}))},t.rsort=function(e,r){returne.sort((function(e,n){returnt.rcompare(e,n,r)}))},t.gt=X,t.lt=Y,t.eq=Z,t.neq=Q,t.gte=ee,t.lte=te,t.cmp=re,t.Comparator=ne;varie={};functionoe(e,t){if(t&&"object"==typeoft||(t={loose:!!t,includePrerelease:!1}),einstanceofoe)returne.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:newoe(e.raw,t);if(einstanceofne)returnnewoe(e.value,t);if(!(thisinstanceofoe))returnnewoe(e,t);if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((function(e){returnthis.parseRange(e.trim())}),this).filter((function(e){returne.length})),!this.set.length)thrownewTypeError("Invalid SemVer Range: "+e);this.format()}functionse(e){return!e||"x"===e.toLowerCase()||"*"===e}functionae(e,t,r,n,i,o,s,a,c,u,f,d,l){return((t=se(r)?"":se(n)?">="+r+".0.0":se(i)?">="+r+"."+n+".0":">="+t)+""+(a=se(c)?"":se(u)?"<"+(+c+1)+".0.0":se(f)?"<"+c+"."+(+u+1)+".0":d?"<="+c+"."+u+"."+f+"-"+d:"<="+a)).trim()}functionce(e,t,n){for(vari=0;i<e.length;i++)if(!e[i].test(t))return!1;if(t.prerelease.length&&!n.includePrerelease){for(i=0;i<e.length;i++)if(r(e[i].semver),e[i].semver!==ie&&e[i].semver.prerelease.length>0){varo=e[i].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}functionue(e,t,r){try{t=newoe(t,r)}catch(e){return!1}returnt.test(e)}functionfe(e,t,r,n){vari,o,s,a,c;switch(e=newJ(e,n),t=newoe(t,n),r){case">":i=X,o=te,s=Y,a=">",c=">=";break;case"<":i=Y,o=ee,s=X,a="<",c="<=";break;default:thrownewTypeError('Must provide a hilo val of "<" or ">"')}if(ue(e,t,n))return!1;for(varu=0;u<t.set.length;++u){varf=t.set[u],d=null,l=null;if(f.forEach((function(e){e.semver===ie&&(e=newne(">=0.0.0")),d=d||e,l=l||e,i(e.semver,d.semver,n)?d=e:s(e.semver,l.semver,n)&&(l=e)})),d.operator===a||d.operator===c)return!1;if((!l.operator||l.operator===a)&&o(e,l.semver))return!1;if(l.operator===c&&s(e,l.semver))return!1}return!0}ne.prototype.parse=function(e){vart=this.options.loose?i[$]:i[L],r=e.match(t);if(!r)thrownewTypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),r[2]?this.semver=newJ(r[2],this.options.loose):this.semver=ie},ne.prototype.toString=function(){returnthis.value},ne.prototype.test=function(e){returnr("Comparator.test",e,this.options.loose),this.semver===ie||("string"==typeofe&&(e=newJ(e,this.options)),re(e,this.operator,this.semver,this.options))},ne.prototype.intersects=function(e,t){if(!(einstanceofne))thrownewTypeError("a Comparator is required");varr;if(t&&"object"==typeoft||(t={loose:!!t,includePrerelease:!1}),""===this.operator)returnr=newoe(e.value,t),ue(this.value,r,t);if(""===e.operator)returnr=newoe(this.value,t),ue(e.semver,r,t);varn=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),i=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),o=this.semver.version===e.semver.version,s=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),a=re(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),c=re(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);returnn||i||o&&s||a||c},t.Range=oe,oe.prototype.format=function(){returnthis.range=this.set.map((function(e){returne.join("").trim()})).join("||").trim(),this.range},oe.prototype.toString=function(){returnthis.range},oe.prototype.parseRange=function(e){vart=this.options.loose;e=e.trim();varn=t?i[U]:i[V];e=e.replace(n,ae),r("hyphen replace",e),e=e.replace(i[K],"$1$2$3"),r("comparator trim",e,i[K]),e=(e=(e=e.replace(i[R],"$1~")).replace(i[B],"$1^")).split(/\s+/).join("");varo=t?i[$]:i[L],s=e.split("").map((function(e){returnfunction(e,t){returnr("comp",e,t),e=function(e,t){returne.trim().split(/\s+/).map((function(e){returnfunction(e,t){r("caret",e,t);varn=t.loose?i[N]:i[M];returne.replace(n,(function(t,n,i,o,s){vara;returnr("caret",e,t,n,i,o,s),se(n)?a="":se(i)?a=">="+n+".0.0 <"+(+n+1)+".0.0":se(o)?a="0"===n?">="+n+"."+i+".0 <"+n+"."+(+i+1)+".0":">="+n+"."+i+".0 <"+(+n+1)+".0.0":s?(r("replaceCaret pr",s),a="0"===n?"0"===i?">="+n+"."+i+"."+o+"-"+s+" <"+n+"."+i+"."+(+o+1):">="+n+"."+i+"."+o+"-"+s+" <"+n+"."+(+i+1)+".0":">="+n+"."+i+"."+o+"-"+s+" <"+(+n+1)+".0.0"):(r("no pr"),a="0"===n?"0"===i?">="+n+"."+i+"."+o+" <"+n+"."+i+"."+(+o+1):">="+n+"."+i+"."+o+" <"+n+"."+(+i+1)+".0":">="+n+"."+i+"."+o+" <"+(+n+1)+".0.0"),r("caret return",a),a}))}(e,t)})).join("")}(e,t),r("caret",e),e=function(e,t){returne.trim().split(/\s+/).map((function(e){returnfunction(e,t){varn=t.loose?i[O]:i[A];returne.replace(n,(function(t,n,i,o,s){vara;returnr("tilde",e,t,n,i,o,s),se(n)?a="":se(i)?a=">="+n+".0.0 <"+(+n+1)+".0.0":se(o)?a=">="+n+"."+i+".0 <"+n+"."+(+i+1)+".0":s?(r("replaceTilde pr",s),a=">="+n+"."+i+"."+o+"-"+s+" <"+n+"."+(+i+1)+".0"):a=">="+n+"."+i+"."+o+" <"+n+"."+(+i+1)+".0",r("tilde return",a),a}))}(e,t)})).join("")}(e,t),r("tildes",e),e=function(e,t){returnr("replaceXRanges",e,t),e.split(/\s+/).map((function(e){returnfunction(e,t){e=e.trim();varn=t.loose?i[I]:i[T];returne.replace(n,(function(t,n,i,o,s,a){r("xRange",e,t,n,i,o,s,a);varc=se(i),u=c||se(o),f=u||se(s);return"="===n&&f&&(n=""),c?t=">"===n||"<"===n?"<0.0.0":"*":n&&f?(u&&(o=0),s=0,">"===n?(n=">=",u?(i=+i+1,o=0,s=0):(o=+o+1,s=0)):"<="===n&&(n="<",u?i=+i+1:o=+o+1),t=n+i+"."+o+"."+s):u?t=">="+i+".0.0 <"+(+i+1)+".0.0":f&&(t=">="+i+"."+o+".0 <"+i+"."+(+o+1)+".0"),r("xRange return",t),t}))}(e,t)})).join("")}(e,t),r("xrange",e),e=function(e,t){returnr("replaceStars",e,t),e.trim().replace(i[q],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join("").split(/\s+/);returnthis.options.loose&&(s=s.filter((function(e){return!!e.match(o)}))),s=s.map((function(e){returnnewne(e,this.options)}),this)},oe.prototype.intersects=function(e,t){if(!(einstanceofoe))thrownewTypeError("a Range is required");returnthis.set.some((function(r){returnr.every((function(r){returne.set.some((function(e){returne.every((function(e){returnr.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){returnnewoe(e,t).set.map((function(e){returne.map((function(e){returne.value})).join("").trim().split("")}))},oe.prototype.test=function(e){if(!e)return!1;"string"==typeofe&&(e=newJ(e,this.options));for(vart=0;t<this.set.length;t++)if(ce(this.set[t],e,this.options))return!0;return!1},t.satisfies=ue,t.maxSatisfying=function(e,t,r){varn=null,i=null;try{varo=newoe(t,r)}catch(e){returnnull}returne.forEach((function(e){o.test(e)&&(n&&-1!==i.compare(e)||(i=newJ(n=e,r)))})),n},t.minSatisfying=function(e,t,r){varn=null,i=null;try{varo=newoe(t,r)}catch(e){returnnull}returne.forEach((function(e){o.test(e)&&(n&&1!==i.compare(e)||(i=newJ(n=e,r)))})),n},t.minVersion=function(e,t){e=newoe(e,t);varr=newJ("0.0.0");if(e.test(r))returnr;if(r=newJ("0.0.0-0"),e.test(r))returnr;r=null;for(varn=0;n<e.set.length;++n){e.set[n].forEach((function(e){vart=newJ(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!X(r,t)||(r=t);break;case"<":case"<=":break;default:thrownewError("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))returnr;returnnull},t.validRange=function(e,t){try{returnnewoe(e,t).range||"*"}catch(e){returnnull}},t.ltr=function(e,t,r){returnfe(e,t,"<",r)},t.gtr=function(e,t,r){returnfe(e,t,">",r)},t.outside=fe,t.prerelease=function(e,t){varr=F(e,t);returnr&&r.prerelease.length?r.prerelease:null},t.intersects=function(e,t,r){returne=newoe(e,r),t=newoe(t,r),e.intersects(t)},t.coerce=function(e){if(einstanceofJ)returne;if("string"!=typeofe)returnnull;vart=e.match(i[P]);if(null==t)returnnull;returnF(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}})),ut=(ct.SEMVER_SPEC_VERSION,ct.re,ct.src,ct.parse,ct.valid,ct.clean,ct.SemVer,ct.inc,ct.diff,ct.compareIdentifiers,ct.rcompareIdentifiers,ct.major,ct.minor,ct.patch,ct.compare,ct.compareLoose,ct.rcompare,ct.sort,ct.rsort,ct.gt,ct.lt,ct.eq,ct.neq,ct.gte,ct.lte,ct.cmp,ct.Comparator,ct.Range,ct.toComparators,ct.satisfies,ct.maxSatisfying,ct.minSatisfying,ct.minVersion,ct.validRange,ct.ltr,ct.gtr,ct.outside,ct.prerelease,ct.intersects,ct.coerce,ct.satisfies(process.version,"^6.12.0 || >=8.0.0")),ft=["RS256","RS384","RS512","ES256","ES384","ES512"],dt=["RS256","RS384","RS512"],lt=["HS256","HS384","HS512"];ut&&(ft.splice(3,0,"PS256","PS384","PS512"),dt.splice(3,0,"PS256","PS384","PS512"));varpt=/^\s+|\s+$/g,mt=/^[-+]0x[0-9a-f]+$/i,ht=/^0b[01]+$/i,gt=/^0o[0-7]+$/i,yt=/^(?:0|[1-9]\d*)$/,wt=parseInt;functionvt(e){returne!=e}functionbt(e,t){returnfunction(e,t){for(varr=-1,n=e?e.length:0,i=Array(n);++r<n;)i[r]=t(e[r],r,e);returni}(t,(function(t){returne[t]}))}var_t,Et,St=Object.prototype,xt=St.hasOwnProperty,kt=St.toString,jt=St.propertyIsEnumerable,Tt=(_t=Object.keys,Et=Object,function(e){return_t(Et(e))}),It=Math.max;functionPt(e,t){varr=At(e)||function(e){returnfunction(e){returnBt(e)&&Ot(e)}(e)&&xt.call(e,"callee")&&(!jt.call(e,"callee")||"[object Arguments]"==kt.call(e))}(e)?function(e,t){for(varr=-1,n=Array(e);++r<e;)n[r]=t(r);returnn}(e.length,String):[],n=r.length,i=!!n;for(varoine)!t&&!xt.call(e,o)||i&&("length"==o||Rt(o,n))||r.push(o);returnr}functionCt(e){if(r=(t=e)&&t.constructor,n="function"==typeofr&&r.prototype||St,t!==n)returnTt(e);vart,r,n,i=[];for(varoinObject(e))xt.call(e,o)&&"constructor"!=o&&i.push(o);returni}functionRt(e,t){return!!(t=null==t?9007199254740991:t)&&("number"==typeofe||yt.test(e))&&e>-1&&e%1==0&&e<t}varAt=Array.isArray;functionOt(e){returnnull!=e&&function(e){return"number"==typeofe&&e>-1&&e%1==0&&e<=9007199254740991}(e.length)&&!function(e){vart=Dt(e)?kt.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)}functionDt(e){vart=typeofe;return!!e&&("object"==t||"function"==t)}functionBt(e){return!!e&&"object"==typeofe}varMt=function(e,t,r,n){vari;e=Ot(e)?e:(i=e)?bt(i,function(e){returnOt(e)?Pt(e):Ct(e)}(i)):[],r=r&&!n?function(e){vart=function(e){if(!e)return0===e?e:0;if((e=function(e){if("number"==typeofe)returne;if(function(e){return"symbol"==typeofe||Bt(e)&&"[object Symbol]"==kt.call(e)}(e))returnNaN;if(Dt(e)){vart="function"==typeofe.valueOf?e.valueOf():e;e=Dt(t)?t+"":t}if("string"!=typeofe)return0===e?e:+e;e=e.replace(pt,"");varr=ht.test(e);returnr||gt.test(e)?wt(e.slice(2),r?2:8):mt.test(e)?NaN:+e}(e))===1/0||e===-1/0){return17976931348623157e292*(e<0?-1:1)}returne==e?e:0}(e),r=t%1;returnt==t?r?t-r:t:0}(r):0;varo=e.length;returnr<0&&(r=It(o+r,0)),function(e){return"string"==typeofe||!At(e)&&Bt(e)&&"[object String]"==kt.call(e)}(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&function(e,t,r){if(t!=t)returnfunction(e,t,r,n){for(vari=e.length,o=r+(n?1:-1);n?o--:++o<i;)if(t(e[o],o,e))returno;return-1}(e,vt,r);for(varn=r-1,i=e.length;++n<i;)if(e[n]===t)returnn;return-1}(e,t,r)>-1},Nt=Object.prototype.toString;var$t=function(e){return!0===e||!1===e||function(e){return!!e&&"object"==typeofe}(e)&&"[object Boolean]"==Nt.call(e)},Lt=/^\s+|\s+$/g,Kt=/^[-+]0x[0-9a-f]+$/i,Vt=/^0b[01]+$/i,Ut=/^0o[0-7]+$/i,qt=parseInt,Ht=Object.prototype.toString;functionFt(e){vart=typeofe;return!!e&&("object"==t||"function"==t)}varJt=function(e){return"number"==typeofe&&e==function(e){vart=function(e){if(!e)return0===e?e:0;if((e=function(e){if("number"==typeofe)returne;if(function(e){return"symbol"==typeofe||function(e){return!!e&&"object"==typeofe}(e)&&"[object Symbol]"==Ht.call(e)}(e))returnNaN;if(Ft(e)){vart="function"==typeofe.valueOf?e.valueOf():e;e=Ft(t)?t+"":t}if("string"!=typeofe)return0===e?e:+e;e=e.replace(Lt,"");varr=Vt.test(e);returnr||Ut.test(e)?qt(e.slice(2),r?2:8):Kt.test(e)?NaN:+e}(e))===1/0||e===-1/0){return17976931348623157e292*(e<0?-1:1)}returne==e?e:0}(e),r=t%1;returnt==t?r?t-r:t:0}(e)},Gt=Object.prototype.toString;varzt=function(e){return"number"==typeofe||function(e){return!!e&&"object"==typeofe}(e)&&"[object Number]"==Gt.call(e)};varWt=Function.prototype,Xt=Object.prototype,Yt=Wt.toString,Zt=Xt.hasOwnProperty,Qt=Yt.call(Object),er=Xt.toString,tr=function(e,t){returnfunction(r){returne(t(r))}}(Object.getPrototypeOf,Object);varrr=function(e){if(!function(e){return!!e&&"object"==typeofe}(e)||"[object Object]"!=er.call(e)||function(e){vart=!1;if(null!=e&&"function"!=typeofe.toString)try{t=!!(e+"")}catch(e){}returnt}(e))return!1;vart=tr(e);if(null===t)return!0;varr=Zt.call(t,"constructor")&&t.constructor;return"function"==typeofr&&rinstanceofr&&Yt.call(r)==Qt},nr=Object.prototype.toString,ir=Array.isArray;varor=function(e){return"string"==typeofe||!ir(e)&&function(e){return!!e&&"object"==typeofe}(e)&&"[object String]"==nr.call(e)},sr=/^\s+|\s+$/g,ar=/^[-+]0x[0-9a-f]+$/i,cr=/^0b[01]+$/i,ur=/^0o[0-7]+$/i,fr=parseInt,dr=Object.prototype.toString;functionlr(e,t){varr;if("function"!=typeoft)thrownewTypeError("Expected a function");returne=function(e){vart=function(e){if(!e)return0===e?e:0;if((e=function(e){if("number"==typeofe)returne;if(function(e){return"symbol"==typeofe||function(e){return!!e&&"object"==typeofe}(e)&&"[object Symbol]"==dr.call(e)}(e))returnNaN;if(pr(e)){vart="function"==typeofe.valueOf?e.valueOf():e;e=pr(t)?t+"":t}if("string"!=typeofe)return0===e?e:+e;e=e.replace(sr,"");varr=cr.test(e);returnr||ur.test(e)?fr(e.slice(2),r?2:8):ar.test(e)?NaN:+e}(e))===1/0||e===-1/0){return17976931348623157e292*(e<0?-1:1)}returne==e?e:0}(e),r=t%1;returnt==t?r?t-r:t:0}(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=void0),r}}functionpr(e){vart=typeofe;return!!e&&("object"==t||"function"==t)}varmr=function(e){returnlr(2,e)},hr=["RS256","RS384","RS512","ES256","ES384","ES512","HS256","HS384","HS512","none"];ut&&hr.splice(3,0,"PS256","PS384","PS512");vargr={expiresIn:{isValid:function(e){returnJt(e)||or(e)&&e},message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:function(e){returnJt(e)||or(e)&&e},message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:function(e){returnor(e)||Array.isArray(e)},message:'"audience" must be a string or array'},algorithm:{isValid:Mt.bind(null,hr),message:'"algorithm" must be a valid string enum value'},header:{isValid:rr,message:'"header" must be an object'},encoding:{isValid:or,message:'"encoding" must be a string'},issuer:{isValid:or,message:'"issuer" must be a string'},subject:{isValid:or,message:'"subject" must be a string'},jwtid:{isValid:or,message:'"jwtid" must be a string'},noTimestamp:{isValid:$t,message:'"noTimestamp" must be a boolean'},keyid:{isValid:or,message:'"keyid" must be a string'},mutatePayload:{isValid:$t,message:'"mutatePayload" must be a boolean'}},yr={iat:{isValid:zt,message:'"iat" should be a number of seconds'},exp:{isValid:zt,message:'"exp" should be a number of seconds'},nbf:{isValid:zt,message:'"nbf" should be a number of seconds'}};functionwr(e,t,r,n){if(!rr(r))thrownewError('Expected "'+n+'" to be a plain object.');Object.keys(r).forEach((function(i){varo=e[i];if(o){if(!o.isValid(r[i]))thrownewError(o.message)}elseif(!t)thrownewError('"'+i+'" is not allowed in "'+n+'"')}))}varvr={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},br=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"],_r=function(e,t,r,n){vari;if("function"!=typeofr||n||(n=r,r={}),r||(r={}),r=Object.assign({},r),i=n||function(e,t){if(e)throwe;returnt},r.clockTimestamp&&"number"!=typeofr.clockTimestamp)returni(newXe("clockTimestamp must be a number"));if(void0!==r.nonce&&("string"!=typeofr.nonce||""===r.nonce.trim()))returni(newXe("nonce must be a non-empty string"));varo=r.clockTimestamp||Math.floor(Date.now()/1e3);if(!e)returni(newXe("jwt must be provided"));if("string"!=typeofe)returni(newXe("jwt must be a string"));vars,a=e.split(".");if(3!==a.length)returni(newXe("jwt malformed"));try{s=ze(e,{complete:!0})}catch(e){returni(e)}if(!s)returni(newXe("invalid token"));varc,u=s.header;if("function"==typeoft){if(!n)returni(newXe("verify must be called asynchronous if secret or public key is provided as a callback"));c=t}elsec=function(e,r){returnr(null,t)};returnc(u,(function(t,n){if(t)returni(newXe("error in secret or public key callback: "+t.message));varc,f=""!==a[2].trim();if(!f&&n)returni(newXe("jwt signature is required"));if(f&&!n)returni(newXe("secret or public key must be provided"));if(f||r.algorithms||(r.algorithms=["none"]),r.algorithms||(r.algorithms=~n.toString().indexOf("BEGIN CERTIFICATE")||~n.toString().indexOf("BEGIN PUBLIC KEY")?ft:~n.toString().indexOf("BEGIN RSA PUBLIC KEY")?dt:lt),!~r.algorithms.indexOf(s.header.alg))returni(newXe("invalid algorithm"));try{c=Ge.verify(e,s.header.alg,n)}catch(e){returni(e)}if(!c)returni(newXe("invalid signature"));vard=s.payload;if(void0!==d.nbf&&!r.ignoreNotBefore){if("number"!=typeofd.nbf)returni(newXe("invalid nbf value"));if(d.nbf>o+(r.clockTolerance||0))returni(newZe("jwt not active",newDate(1e3*d.nbf)))}if(void0!==d.exp&&!r.ignoreExpiration){if("number"!=typeofd.exp)returni(newXe("invalid exp value"));if(o>=d.exp+(r.clockTolerance||0))returni(newet("jwt expired",newDate(1e3*d.exp)))}if(r.audience){varl=Array.isArray(r.audience)?r.audience:[r.audience];if(!(Array.isArray(d.aud)?d.aud:[d.aud]).some((function(e){returnl.some((function(t){returntinstanceofRegExp?t.test(e):t===e}))})))returni(newXe("jwt audience invalid. expected: "+l.join(" or ")))}if(r.issuer&&("string"==typeofr.issuer&&d.iss!==r.issuer||Array.isArray(r.issuer)&&-1===r.issuer.indexOf(d.iss)))returni(newXe("jwt issuer invalid. expected: "+r.issuer));if(r.subject&&d.sub!==r.subject)returni(newXe("jwt subject invalid. expected: "+r.subject));if(r.jwtid&&d.jti!==r.jwtid)returni(newXe("jwt jwtid invalid. expected: "+r.jwtid));if(r.nonce&&d.nonce!==r.nonce)returni(newXe("jwt nonce invalid. expected: "+r.nonce));if(r.maxAge){if("number"!=typeofd.iat)returni(newXe("iat required when maxAge is specified"));varp=at(r.maxAge,d.iat);if(void0===p)returni(newXe('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));if(o>=p+(r.clockTolerance||0))returni(newet("maxAge exceeded",newDate(1e3*p)))}if(!0===r.complete){varm=s.signature;returni(null,{header:u,payload:d,signature:m})}returni(null,d)}))},Er=function(e,t,r,n){"function"==typeofr?(n=r,r={}):r=r||{};vari="object"==typeofe&&!Buffer.isBuffer(e),o=Object.assign({alg:r.algorithm||"HS256",typ:i?"JWT":void0,kid:r.keyid},r.header);functions(e){if(n)returnn(e);throwe}if(!t&&"none"!==r.algorithm)returns(newError("secretOrPrivateKey must have a value"));if(void0===e)returns(newError("payload is required"));if(i){try{!function(e){wr(yr,!0,e,"payload")}(e)}catch(e){returns(e)}r.mutatePayload||(e=Object.assign({},e))}else{vara=br.filter((function(e){returnvoid0!==r[e]}));if(a.length>0)returns(newError("invalid "+a.join(",")+" option for "+typeofe+" payload"))}if(void0!==e.exp&&void0!==r.expiresIn)returns(newError('Bad "options.expiresIn" option the payload already has an "exp" property.'));if(void0!==e.nbf&&void0!==r.notBefore)returns(newError('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{!function(e){wr(gr,!1,e,"options")}(r)}catch(e){returns(e)}varc=e.iat||Math.floor(Date.now()/1e3);if(r.noTimestamp?deletee.iat:i&&(e.iat=c),void0!==r.notBefore){try{e.nbf=at(r.notBefore,c)}catch(e){returns(e)}if(void0===e.nbf)returns(newError('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(void0!==r.expiresIn&&"object"==typeofe){try{e.exp=at(r.expiresIn,c)}catch(e){returns(e)}if(void0===e.exp)returns(newError('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(vr).forEach((function(t){varn=vr[t];if(void0!==r[t]){if(void0!==e[n])returns(newError('Bad "options.'+t+'" option. The payload already has an "'+n+'" property.'));e[n]=r[t]}}));varu=r.encoding||"utf8";if("function"!=typeofn)returnGe.sign({header:o,payload:e,secret:t,encoding:u});n=n&&mr(n),Ge.createSign({header:o,privateKey:t,payload:e,encoding:u}).once("error",n).once("done",(function(e){n(null,e)}))};letSr=[];classxr{constructor(e){this.fetched=!1,this.options=Object.assign({baseUrl:"https://appleid.apple.com",timeout:1e4},e)}async_fetch(e,t){const{baseUrl:r}=this.options;returnuniCloud.httpclient.request(r+e,t)}asyncverifyIdentityToken(e){constt=e.split(".")[0],r=JSON.parse(Buffer.from(t,"base64").toString()).kid;if(!Sr.length)try{Sr=awaitthis.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}letn=this.getUsedKey(Sr,r);if(!Object.keys(n).length&&!this.fetched){try{Sr=awaitthis.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}n=this.getUsedKey(Sr,r)}leti=null;try{i=_r(e,function(e,t){varr=Buffer.from(e,"base64"),n=Buffer.from(t,"base64"),i=r.toString("hex"),o=n.toString("hex");i=U(i),o=U(o);vars=i.length/2,a=o.length/2,c=H(s),u=H(a),f="30"+H(s+a+c.length/2+u.length/2+2)+"02"+c+i+"02"+u+o;return"-----BEGIN RSA PUBLIC KEY-----\n"+Buffer.from(f,"hex").toString("base64").match(/.{1,64}/g).join("\n")+"\n-----END RSA PUBLIC KEY-----\n"}(n.n,n.e),{algorithms:n.alg})}catch(e){return{code:10705,msg:e.message}}return{code:0,msg:i}}asyncgetAuthKeys(){const{status:e,data:t}=awaitthis._fetch("/auth/keys",{method:"GET",dataType:"json",timeout:this.options.timeout});if(this.fetched=!0,200!==e)thrownewError("request fail");returnt.keys}getUsedKey(e,t){letr={};for(letn=0;n<e.length;n++){consti=e[n];if(i.kid===t){r=i;break}}returnr}}varkr=function(e={}){returne.appId=e.appid,e.secret=e.appsecret,T($,e)},jr=function(e={}){returne.appId=e.appid,T(V,e)},Tr=function(e={}){returnT(xr,e)};functionIr(e=6){constt=["2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"];letr="";for(letn=0;n<e;n++)r+=t[Math.floor(Math.random()*t.length)];returnr}constPr=uniCloud.database().command;constCr=uniCloud.database();asyncfunctionRr(e){constt=["apiKey","apiSecret"];for(letr=0,n=t.length;r<n;r++){constn=t[r];if(!e[n])thrownewError("请在config.json中service.univerify下配置"+n)}if(!e.openid||!e.access_token)thrownewError("一键登录需要传递openid和access_token");returnfunction(e){constt={0:"成功",4e3:"缺失参数",4001:"apiKey不存在",4002:"sign校验不通过",4003:"appid不存在",4004:"应用未开通一键登录服务",4005:"应用开通的一键登录服务正在审核中",4006:"服务空间不在白名单中",4100:"账户余额不足",5e3:"获取手机号失败,请稍后重试(或其他未知错误)"};return{...e,msg:t[e.code]?"[getPhoneNumber] 获取手机号: "+t[e.code]:e.errMsg}}(awaituniCloud.getPhoneNumber({provider:"univerify",...e}))}constAr=uniCloud.database();constOr=uniCloud.database();constDr=uniCloud.database();constBr=uniCloud.database().command;constMr=uniCloud.database();constNr=uniCloud.database();const$r=uniCloud.database();constLr=uniCloud.database();constKr=uniCloud.database();constVr=uniCloud.database().command;constUr=uniCloud.database();varqr=Object.freeze({__proto__:null,getUserInfo:asyncfunction({uid:e,field:t}){constr={};if(t&&t.length)for(lete=0;e<t.length;e++)r[t[e]]=!0;letn;returnn=t&&t.length?awaitA.doc(e).field(r).get():awaitA.doc(e).get(),0===n.data.length?{code:80301,msg:"未查询到用户信息"}:{code:0,msg:"获取用户信息成功",userInfo:n.data[0]}},getUserInfoByToken:asyncfunction(e){constt=this._verifyToken(e);returnt.code||(deletet.iat,deletet.exp),t},resetPwd:asyncfunction({uid:e,password:t}){const{passwordHash:r,version:n}=this.encryptPwd(t),i={password:r,token:[]};returnn&&(i.password_secret_version=n),S("upRes",awaitA.doc(e).update(i)),{code:0,msg:"密码重置成功"}},setAvatar:asyncfunction(e){returnS("setAvatar -> upRes",awaitA.doc(e.uid).update({avatar:e.avatar})),{code:0,msg:"头像设置成功"}},updatePwd:asyncfunction(e){constt=awaitA.doc(e.uid).get();if(t&&t.data&&t.data.length>0){if(0===this._checkPwd(t.data[0],e.oldPassword).code){const{passwordHash:r,version:n}=this.encryptPwd(e.newPassword),i={password:r,token:[]};n&&(i.password_secret_version=n);returnS("upRes",awaitA.doc(t.data[0]._id).update(i)),{code:0,msg:"修改成功"}}return{code:40202,msg:"旧密码错误"}}return{code:40201,msg:"用户不存在"}},updateUser:asyncfunction(e){constt=e.uid;returnt?(deletee.uid,S("update -> upRes",awaitA.doc(t).update(e)),{code:0,msg:"修改成功"}):{code:80101,msg:"缺少uid参数"}},_getAlipayApi:function({platform:e}={}){constt=e||this.context.PLATFORM;if(!t)thrownewError("未能获取客户端平台信息,请主动传入platform");constr=this._getConfig(t);if(!r.oauth||!r.oauth.alipay)thrownewError(`请在公用模块uni-id的config.json或init方法中添加${t}平台支付宝登录配置项`);return["appid","privateKey"].forEach(e=>{if(!r.oauth.alipay[e])thrownewError(`请在公用模块uni-id的config.json或init方法中添加配置项:${t}.oauth.alipay.${e}`)}),jr({...r.oauth.alipay,clientType:t})},_getValidInviteCode:asyncfunction({inviteCode:e}){lett,r=10;e?(r=1,t=e):t=Ir();letn=!1;try{for(;r>0&&!n;){r--;if(0===(awaitA.where({invite_code:t}).get()).data.length){n=!0;break}t=Ir()}returnn?{code:0,inviteCode:t}:e?{code:80401,msg:"邀请码重复,设置失败"}:{code:80402,msg:"邀请码设置失败稍后再试"}}catch(e){return{code:90001,msg:"数据库读写异常"}}},_addUser:asyncfunction(e,t={}){constr=this._getConfig(),n={...e,register_date:Date.now(),register_ip:this.context.CLIENTIP},i=(awaitA.add(n)).id;leto;if(r.removePermissionAndRoleFromToken){conste=t.needPermission;o=awaitthis.createToken({uid:i,needPermission:e})}else{constt=e.role||[];letr;r=0===t.length||t.includes("admin")?[]:awaitthis._getPermissionListByRoleList(t),o=awaitthis.createToken({uid:i,role:t,permission:r})}const{token:s,tokenExpired:a}=o;returnawaitA.doc(i).update({token:[s]}),{token:s,tokenExpired:a,uid:i,type:"register",userInfo:Object.assign({},n,{token:s})}},_loginExec:asyncfunction(e,t={}){if(1===e.status)return{code:10001,msg:"账号已禁用"};constr=this._getConfig();letn=e.token||[];"string"==typeofn&&(n=[n]);consti=this._getExpiredToken(n);leto;if(n=n.filter(e=>-1===i.indexOf(e)),r.removePermissionAndRoleFromToken){constr=t.needPermission;o=awaitthis.createToken({uid:e._id,needPermission:r})}else{constt=e.role||[];letr;r=0===t.length||t.includes("admin")?[]:awaitthis._getPermissionListByRoleList(t),o=awaitthis.createToken({uid:e._id,role:t,permission:r})}const{token:s,tokenExpired:a}=o;n.push(s),e.token=n;constc={last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP,token:n,...t.extraData};awaitA.doc(e._id).update(c);constu=Object.assign({},e,c);return{code:0,msg:"登录成功",token:s,uid:u._id,username:u.username,type:"login",userInfo:u,tokenExpired:a}},_registerExec:asyncfunction(e,t={}){const{my_invite_code:r}=e;if(this._getConfig().autoSetInviteCode||r){constt=awaitthis._getValidInviteCode({inviteCode:r});if(t.code>0)returnt;e.my_invite_code=t.inviteCode}return{code:0,msg:"注册成功",...awaitthis._addUser(e,t)}},_getWeixinApi:function({platform:e}={}){constt=e||this.context.PLATFORM;if(!t)thrownewError("未能获取客户端平台信息,请主动传入platform");constr=this._getConfig(t);if(!r.oauth||!r.oauth.weixin)thrownewError(`请在公用模块uni-id的config.json或init方法中添加${t}平台微信登录配置项`);return["appid","appsecret"].forEach(e=>{if(!r.oauth.weixin[e])thrownewError(`请在公用模块uni-id的config.json或init方法中添加配置项:${t}.oauth.weixin.${e}`)}),kr({...r.oauth.weixin,clientType:t})},acceptInvite:asyncfunction({uid:e,inviteCode:t}){constr=awaitA.where({_id:Pr.neq(e),inviter_uid:Pr.not(Pr.all([e])),my_invite_code:t}).get();if(1!==r.data.length)return{code:80501,msg:"邀请码无效"};constn=[r.data[0]._id].concat(r.data[0].inviter_uid||[]),i=awaitA.doc(e).field({my_invite_code:!0,inviter_uid:!0}).get();if(0===i.data.length)return{code:80502,msg:"uid错误用户不存在"};if(i.data[0].inviter_uid&&i.data[0].inviter_uid.length>0)return{code:80503,msg:"邀请码不可修改"};consto=Date.now();returnawaitA.doc(e).update({inviter_uid:n,invite_time:o}),awaitA.where({inviter_uid:e}).update({inviter_uid:Pr.push(n)}),{code:0,msg:"邀请码填写成功"}},getInvitedUser:asyncfunction({uid:e,level:t=1,limit:r=20,offset:n=0,needTotal:i=!1}){consto={code:0,msg:"获取邀请列表成功",invitedUser:(awaitA.where({["inviter_uid."+(t-1)]:e}).field({_id:!0,username:!0,mobile:!0,invite_time:!0}).orderBy("invite_time","desc").skip(n).limit(r).get()).data};if(i){constr=awaitA.where({["inviter_uid."+(t-1)]:e}).count();o.total=r.total}returno},setUserInviteCode:asyncfunction({uid:e,myInviteCode:t}){constr=awaitthis._getValidInviteCode({inviteCode:t});returnr.code>0?r:(awaitA.doc(e).update({my_invite_code:r.inviteCode}),{code:0,msg:"邀请码设置成功",myInviteCode:r.inviteCode})},loginByAlipay:asyncfunction(e){lett=e;"string"==typeofe&&(t={code:e});constr=t.needPermission,n=t.platform||this.context.PLATFORM,{openid:i}=awaitthis._getAlipayApi({platform:n}).code2Session(t.code);if(!i)return{code:10501,msg:"获取openid失败"};consto=awaitA.where({ali_openid:i}).get();if(o&&o.data&&o.data.length>0){conste=o.data[0],t=awaitthis._loginExec(e,{needPermission:r});if(0!==t.code)returnt;const{userInfo:n}=t;return{...t,openid:i,mobileConfirmed:1===n.mobile_confirmed,emailConfirmed:1===n.email_confirmed}}{conste={ali_openid:i};e.my_invite_code=t.myInviteCode,e.role=t.role;constn=awaitthis._registerExec(e,{needPermission:r});return0!==n.code?n:{...n,openid:i,mobileConfirmed:!1,emailConfirmed:!1}}},loginByEmail:asyncfunction({email:e,code:t,password:r,myInviteCode:n,type:i,needPermission:o,role:s}){consta=awaitthis.verifyCode({email:e,code:t,type:i||"login"});if(0!==a.code)returna;constc={email:e,email_confirmed:1},u=awaitA.where(c).get();if(S("userInDB:",u),u&&u.data&&u.data.length>0){if("register"===i)return{code:10301,msg:"此邮箱已注册"};constt=u.data[0],r=awaitthis._loginExec(t,{needPermission:o});return0!==r.code?r:{...r,email:e}}{if("login"===i)return{code:10302,msg:"此邮箱尚未注册"};constt={email:e,email_confirmed:1};if(r){const{passwordHash:e,version:n}=this.encryptPwd(r);t.password=e,n&&(t.password_secret_version=n)}t.my_invite_code=n,t.role=s;consta=awaitthis._registerExec(t,{needPermission:o});return0!==a.code?a:{...a,email:e}}},loginBySms:asyncfunction({mobile:e,code:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){constc=this._getConfig();if(c.forceInviteCode&&!o)thrownewError("[loginBySms]强制使用邀请码注册时,需指明type为register还是login");constu=awaitthis.verifyCode({mobile:e,code:t,type:o||"login"});if(0!==u.code)returnu;constf={mobile:e,mobile_confirmed:1},d=awaitA.where(f).get();if(d&&d.data&&d.data.length>0){if("register"===o)return{code:10201,msg:"此手机号已注册"};constt=d.data[0],r=awaitthis._loginExec(t,{needPermission:s});return0!==r.code?r:{...r,mobile:e}}{constt=Date.now();if("login"===o)return{code:10203,msg:"此手机号尚未注册"};constu={mobile:e,mobile_confirmed:1,register_ip:this.context.CLIENTIP,register_date:t};if(r){const{passwordHash:e,version:t}=this.encryptPwd(r);u.password=e,t&&(u.password_secret_version=t)}if(n){conste=awaitA.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10202,msg:"邀请码无效"};u.inviter_uid=[e.data[0]._id].concat(e.data[0].inviter_uid||[]),u.invite_time=t}elseif(c.forceInviteCode)return{code:10202,msg:"邀请码无效"};u.my_invite_code=i,u.role=a;constf=awaitthis._registerExec(u,{needPermission:s});return0!==f.code?f:{...f,mobile:e}}},loginByWeixin:asyncfunction(e){lett=e;"string"==typeofe&&(t={code:e});constr=t.needPermission,n=t.platform||this.context.PLATFORM,{openid:i,unionid:o,sessionKey:s}=awaitthis._getWeixinApi({platform:n})["mp-weixin"===n?"code2Session":"getOauthAccessToken"](t.code);if(!i)return{code:10401,msg:"获取openid失败"};consta=Cr.command,c=[{wx_openid:{[n]:i}}];o&&c.push({wx_unionid:o});constu=awaitA.where(a.or(...c)).get();if(u&&u.data&&u.data.length>0){conste=u.data[0],t={wx_openid:{[n]:i}};o&&(t.wx_unionid=o);consta=awaitthis._loginExec(e,{needPermission:r,extraData:t});if(0!==a.code)returna;const{userInfo:c}=a;return{...a,openid:i,unionid:o,sessionKey:s,mobileConfirmed:1===c.mobile_confirmed,emailConfirmed:1===c.email_confirmed}}{conste={wx_openid:{[n]:i},wx_unionid:o},a=t.myInviteCode;e.my_invite_code=a,e.role=t.role;constc=awaitthis._registerExec(e,{needPermission:r});return0!==c.code?c:{...c,openid:i,unionid:o,sessionKey:s,mobileConfirmed:!1,emailConfirmed:!1}}},loginByUniverify:asyncfunction({openid:e,access_token:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){constc=this._getConfig(),u=c&&c.service&&c.service.univerify;if(!u)thrownewError("请在config.json中配置service.univerify下一键登录相关参数");if(c.forceInviteCode&&!o)thrownewError("[loginByUniverify] 强制使用邀请码注册时,需指明type为register还是login");constf=awaitRr({...u,openid:e,access_token:t});if(0!==f.code)returnf;constd=String(f.phoneNumber),l=awaitA.where({mobile:d}).get();if(l&&l.data&&l.data.length>0){if("register"===o)return{code:10601,msg:"此手机号已注册"};conste=l.data[0],t=awaitthis._loginExec(e,{needPermission:s});return0!==t.code?t:{...t,mobile:d}}if("login"===o)return{code:10602,msg:"此手机号尚未注册"};constp=Date.now(),m={mobile:d,my_invite_code:i,mobile_confirmed:1,role:a};if(r){const{passwordHash:e,version:t}=this.encryptPwd(r);m.password=e,t&&(m.password_secret_version=t)}if(n){lete=awaitA.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10202,msg:"邀请码无效"};e=e.data[0],m.inviter_uid=[e._id].concat(e.inviter_uid||[]),m.invite_time=p}elseif(c.forceInviteCode)return{code:10202,msg:"邀请码无效"};m.my_invite_code=i;consth=awaitthis._registerExec(m,{needPermission:s});return0!==h.code?h:{...h,mobile:d}},loginByApple:asyncfunction({nickName:e,fullName:t,email:r,authorizationCode:n,identityToken:i,realUserStatus:o,inviteCode:s,myInviteCode:a,type:c,needPermission:u,platform:f,role:d}){constl=this._getConfig(),p=l&&l["app-plus"]&&l["app-plus"].oauth&&l["app-plus"].oauth.apple;if(!p)thrownewError("请在config.json或init方法中,app-plus.oauth.apple 下配置相关参数");const{bundleId:m}=p;if(!m)thrownewError("请在config.json或init方法中 app-plus.oauth.apple 下配置bundleId");if(!i)thrownewError("[loginByApple] 苹果登录需要传递identityToken");consth=f||this.context.PLATFORM;t=e||(t&&Object.keys(t).length>0?t.familyName+t.givenName:"");const{code:g,msg:y}=awaitTr({clientType:h}).verifyIdentityToken(i);if(0!==g)return{code:g,msg:y};const{iss:w,sub:v,aud:b,email:_}=y;if("https://appleid.apple.com"!==w)return{code:10706,msg:"签发机构检验失败"};if(!v)return{code:10701,msg:"获取用户唯一标识符失败"};if(m!==b)return{code:10702,msg:"bundleId校验失败,请确认配置后重试"};constE=t||"新用户"+_.split("@")[0],S=awaitA.where({apple_openid:v}).get();if(S&&S.data&&S.data.length>0){if("register"===c)return{code:10703,msg:"此账户已注册"};conste=S.data[0],t=awaitthis._loginExec(e,{needPermission:u});return0!==t.code?t:{...t,openid:v}}if("login"===c)return{code:10704,msg:"此账户尚未注册"};constx={nickname:E,apple_openid:v,my_invite_code:a,role:d},k=awaitthis._registerExec(x,{needPermission:u});return0!==k.code?k:{...k,openid:v}},login:asyncfunction({username:e,password:t,queryField:r=[],needPermission:n}){consti=Ar.command,o=[];r&&r.length||(r=["username"]);consts={email:{email_confirmed:1},mobile:{mobile_confirmed:1}};r.forEach(t=>{o.push({[t]:e,...s[t]})});consta=awaitA.where(i.or(...o)).limit(1).get(),c=this.context.CLIENTIP,{passwordErrorLimit:u,passwordErrorRetryTime:f}=this._getConfig();if(S("userInDB:",a),0===a.data.length)return{code:10101,msg:"用户不存在"};constd=a.data[0];letl=d.login_ip_limit||[];l=l.filter(e=>e.last_error_time>Date.now()-1e3*f);letp=l.find(e=>e.ip===c);if(p&&p.error_times>=u)return{code:10103,msg:`密码错误次数过多,请${I(p.last_error_time+1e3*f)}再试。`};constm=this._checkPwd(d,t);if(0===m.code){conste=l.indexOf(p);e>-1&&l.splice(e,1);constt={login_ip_limit:l},{passwordHash:r,passwordVersion:i}=m;r&&i&&(t.password=r,t.password_secret_version=i);consto=awaitthis._loginExec(d,{needPermission:n,extraData:t});returno.code,o}returnp?(p.error_times++,p.last_error_time=Date.now()):(p={ip:c,error_times:1,last_error_time:Date.now()},l.push(p)),awaitA.doc(d._id).update({login_ip_limit:l}),{code:10102,msg:"密码错误"}},register:asyncfunction(e){constt=[],r=[{name:"username",desc:"用户名"},{name:"email",desc:"邮箱",extraCond:{email_confirmed:1}},{name:"mobile",desc:"手机号",extraCond:{mobile_confirmed:1}}],n=e.needPermission;if(void0!==n&&deletee.needPermission,r.forEach(r=>{constn=r.name;e[n]&&e[n].trim()&&t.push({[n]:e[n],...r.extraCond})}),0===t.length)return{code:20101,msg:"用户名、邮箱、手机号不可同时为空"};const{username:i,email:o,mobile:s,myInviteCode:a}=e,c=Or.command,u=awaitA.where(c.or(...t)).get();if(u&&u.data.length>0){constt=u.data[0];for(letn=0;n<r.length;n++){consti=r[n];leto=!0;if(i.extraCond&&(o=Object.keys(i.extraCond).every(e=>t[e]===i.extraCond[e])),t[i.name]===e[i.name]&&o)return{code:20102,msg:i.desc+"已存在"}}}const{passwordHash:f,version:d}=this.encryptPwd(e.password);e.password=f,d&&(e.password_secret_version=d),e.my_invite_code=a,deletee.myInviteCode;constl=awaitthis._registerExec(e,{needPermission:n});return0!==l.code?l:{...l,username:i,email:o,mobile:s}},logout:asyncfunction(e){constt=awaitthis.checkToken(e);if(t.code&&t.code>0)returnt;constr=Dr.command;returnawaitA.doc(t.uid).update({token:r.pull(e)}),{code:0,msg:"退出成功"}},getRoleByUid:asyncfunction({uid:e}){if(!e)return{code:"PARAMETER_ERROR",msg:"用户Id不能为空"};constt=awaitA.doc(e).get();return0===t.data.length?{code:"USER_NOT_EXIST",msg:"用户不存在"}:{code:0,msg:"获取角色成功",role:t.data[0].role||[]}},getPermissionByRole:asyncfunction({roleID:e}){if(!e)return{code:"PARAMETER_ERROR",msg:"角色ID不能为空"};if("admin"===e){return{code:0,msg:"获取权限成功",permission:(awaitB.limit(1e4).get()).data.map(e=>e.permission_id)}}constt=awaitD.where({role_id:e}).get();return0===t.data.length?{code:"ROLE_NOT_EXIST",msg:"角色不存在"}:{code:0,msg:"获取权限成功",permission:t.data[0].permission||[]}},getPermissionByUid:asyncfunction({uid:e}){constt=awaitA.aggregate().match({_id:e}).project({role:!0}).unwind("$role").lookup({from:"uni-id-roles",localField:"role",foreignField:"role_id",as:"roleDetail"}).unwind("$roleDetail").replaceRoot({newRoot:"$roleDetail"}).end(),r=[];returnt.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),{code:0,msg:"获取权限成功",permission:k(r)}},bindRole:asyncfunction({uid:e,roleList:t,reset:r=!1}){constn={};return"string"==typeoft&&(t=[t]),n.role=r?t:Br.push(t),awaitA.doc(e).update(n),{code:0,msg:"角色绑定成功"}},bindPermission:asyncfunction({roleID:e,permissionList:t,reset:r=!1}){constn={};return"string"==typeoft&&(t=[t]),n.permission=r?t:Br.push(t),awaitD.where({role_id:e}).update(n),{code:0,msg:"权限绑定成功"}},unbindRole:asyncfunction({uid:e,roleList:t}){return"string"==typeoft&&(t=[t]),awaitA.doc(e).update({role:Br.pull(Br.in(t))}),{code:0,msg:"角色解绑成功"}},unbindPermission:asyncfunction({roleID:e,permissionList:t}){return"string"==typeoft&&(t=[t]),awaitD.where({role_id:e}).update({permission:Br.pull(Br.in(t))}),{code:0,msg:"权限解绑成功"}},addRole:asyncfunction({roleID:e,roleName:t,comment:r,permission:n=[]}){returne?"admin"===e?{code:"PARAMETER_ERROR",msg:"不可新增roleID为admin的角色"}:(awaitD.add({role_id:e,role_name:t,comment:r,permission:n,create_date:Date.now()}),{code:0,msg:"角色新增成功"}):{code:"PARAMETER_ERROR",msg:"roleID不能为空"}},addPermission:asyncfunction({permissionID:e,permissionName:t,comment:r}){returne?(awaitB.add({permission_id:e,permission_name:t,comment:r,create_date:Date.now()}),{code:0,msg:"权限新增成功"}):{code:"PARAMETER_ERROR",msg:"permissionID不能为空"}},getRoleList:asyncfunction({limit:e=20,offset:t=0,needTotal:r=!0}){constn={code:0,msg:"获取角色列表成功",roleList:(awaitD.skip(t).limit(e).get()).data};if(r){const{total:e}=awaitD.where({_id:Br.exists(!0)}).count();n.total=e}returnn},getRoleInfo:asyncfunction(e){constt=awaitD.where({role_id:e}).get();return0===t.data.length?{code:"ROLE_ID_NOT_EXISTS",msg:"角色ID不存在"}:{code:0,...t.data[0]}},updateRole:asyncfunction({roleID:e,roleName:t,comment:r,permission:n}){returne?(awaitD.where({role_id:e}).update({role_name:t,comment:r,permission:n}),{code:0,msg:"角色更新成功"}):{code:"PARAMETER_ERROR",msg:"参数错误,roleID不能为空"}},deleteRole:asyncfunction({roleID:e}){constt=m(e);if("string"===t)e=[e];elseif("array"!==t)thrownewError("roleID只能为字符串或者数组");returnawaitD.where({role_id:Br.in(e)}).remove(),awaitA.where({role:Br.elemMatch(Br.in(e))}).update({role:Br.pullAll(e)}),{code:0,msg:"角色删除成功"}},getPermissionList:asyncfunction({limit:e=20,offset:t=0,needTotal:r=!0}){constn={code:0,msg:"获取权限列表成功",permissionList:(awaitB.skip(t).limit(e).get()).data};if(r){const{total:e}=awaitB.where({_id:Br.exists(!0)}).count();n.total=e}returnn},getPermissionInfo:asyncfunction(e){constt=awaitB.where({permission_id:e}).get();return0===t.data.length?{code:"PERMISSION_ID_NOT_EXISTS",msg:"权限ID不存在"}:{code:0,...t.data[0]}},updatePermission:asyncfunction({permissionID:e,permissionName:t,comment:r}){returne?(awaitB.where({permission_id:e}).update({permission_name:t,comment:r}),{code:0,msg:"权限更新成功"}):{code:"PARAMETER_ERROR",msg:"参数错误,permissionID不能为空"}},deletePermission:asyncfunction({permissionID:e}){constt=m(e);if("string"===t)e=[e];elseif("array"!==t)thrownewError("permissionID只能为字符串或者数组");returnawaitB.where({permission_id:Br.in(e)}).remove(),awaitD.where({permission:Br.elemMatch(Br.in(e))}).update({permission:Br.pullAll(e)}),{code:0,msg:"权限删除成功"}},bindAlipay:asyncfunction({uid:e,code:t,platform:r}){constn=r||this.context.PLATFORM,{openid:i}=awaitthis._getAlipayApi({platform:n}).code2Session(t);if(!i)return{code:60401,msg:"获取openid失败"};consto=awaitA.where({ali_openid:i}).get();returno&&o.data&&o.data.length>0?{code:60402,msg:"支付宝绑定失败,此账号已被绑定"}:(awaitA.doc(e).update({ali_openid:i}),{code:0,openid:i,msg:"绑定成功"})},bindEmail:asyncfunction({uid:e,email:t,code:r}){constn=awaitA.where({email:t,email_confirmed:1}).count();if(n&&n.total>0)return{code:60201,msg:"此邮箱已被绑定"};if(r){conste=awaitthis.verifyCode({email:t,code:r,type:"bind"});if(0!==e.code)returne}returnS("bindEmail -> upRes",awaitA.doc(e).update({email:t,email_confirmed:1})),{code:0,msg:"邮箱绑定成功",email:t}},bindMobile:asyncfunction({uid:e,mobile:t,code:r,openid:n,access_token:i,type:o="sms"}){if("univerify"===o){conste=this._getConfig(),r=e&&e.service&&e.service.univerify;if(!r)thrownewError("请在config.json中配置service.univerify下一键登录相关参数");consto=awaitRr({...r,openid:n,access_token:i});if(0!==o.code)returno;t=""+o.phoneNumber}consts=awaitA.where({mobile:t,mobile_confirmed:1}).count();if(s&&s.total>0)return{code:60101,msg:"此手机号已被绑定"};if("sms"===o&&r){conste=awaitthis.verifyCode({mobile:t,code:r,type:"bind"});if(0!==e.code)returne}returnS("bindMobile -> upRes",awaitA.doc(e).update({mobile:t,mobile_confirmed:1})),{code:0,msg:"手机号码绑定成功",mobile:t}},bindWeixin:asyncfunction({uid:e,code:t,platform:r}){constn=r||this.context.PLATFORM,{openid:i,unionid:o}=awaitthis._getWeixinApi({platform:n})["mp-weixin"===n?"code2Session":"getOauthAccessToken"](t);if(!i)return{code:60301,msg:"获取openid失败"};consts=Mr.command,a=[{wx_openid:{[n]:i}}];o&&a.push({wx_unionid:o});constc=awaitA.where(s.or(...a)).get();if(c&&c.data&&c.data.length>0)return{code:60302,msg:"微信绑定失败,此微信账号已被绑定"};constu={wx_openid:{[n]:i}};returno&&(u.wx_unionid=o),awaitA.doc(e).update(u),{code:0,openid:i,unionid:o,msg:"绑定成功"}},unbindAlipay:asyncfunction(e){constt=Nr.command,r=awaitA.doc(e).update({ali_openid:t.remove()});returnS("upRes:",r),1===r.updated?{code:0,msg:"支付宝解绑成功"}:{code:70401,msg:"支付宝解绑失败,请稍后再试"}},unbindEmail:asyncfunction({uid:e,email:t,code:r}){if(r){conste=awaitthis.verifyCode({email:t,code:r,type:"unbind"});if(0!==e.code)returne}constn=$r.command;return1===(awaitA.where({_id:e,email:t}).update({email:n.remove(),email_confirmed:n.remove()})).updated?{code:0,msg:"邮箱解绑成功"}:{code:70201,msg:"邮箱解绑失败,请稍后再试"}},unbindMobile:asyncfunction({uid:e,mobile:t,code:r}){if(r){conste=awaitthis.verifyCode({mobile:t,code:r,type:"unbind"});if(0!==e.code)returne}constn=Lr.command;return1===(awaitA.where({_id:e,mobile:t}).update({mobile:n.remove(),mobile_confirmed:n.remove()})).updated?{code:0,msg:"手机号解绑成功"}:{code:70101,msg:"手机号解绑失败,请稍后再试"}},unbindWeixin:asyncfunction(e){constt=Kr.command,r=awaitA.doc(e).update({wx_openid:t.remove(),wx_unionid:t.remove()});returnS("upRes:",r),1===r.updated?{code:0,msg:"微信解绑成功"}:{code:70301,msg:"微信解绑失败,请稍后再试"}},code2SessionAlipay:asyncfunction(e){lett=e;"string"==typeofe&&(t={code:e});try{conste=t.platform||this.context.PLATFORM,r=awaitthis._getAlipayApi({platform:e}).code2Session(t.code);returnr.openid?{code:0,msg:"",...r}:{code:80701,msg:"获取openid失败"}}catch(e){return{code:80702,msg:e.message}}},code2SessionWeixin:asyncfunction(e){lett=e;"string"==typeofe&&(t={code:e});try{conste=t.platform||this.context.PLATFORM,r=awaitthis._getWeixinApi({platform:e})["mp-weixin"===e?"code2Session":"getOauthAccessToken"](t.code);returnr.openid?{code:0,msg:"",...r}:{code:80601,msg:"获取openid失败"}}catch(e){return{code:80602,msg:e.message}}},verifyAppleIdentityToken:asyncfunction({identityToken:e,platform:t}){constr=t||this.context.PLATFORM,{code:n,msg:i}=awaitTr({clientType:r}).verifyIdentityToken(e);return0!==n?{code:n,msg:i}:{code:n,msg:"验证通过",...i}},wxBizDataCrypt:asyncfunction({code:e,sessionKey:t,encryptedData:r,iv:i}){if(!r)return{code:80805,msg:"encryptedData不可为空"};if(!i)return{code:80806,msg:"iv不可为空"};if(!e&&!t)return{code:80804,msg:"code或sessionKey必须有其中一个"};consto=this._getWeixinApi();if(!t){constr=awaito.code2Session(e);if(!r.sessionKey)return{code:80801,msg:"sessionKey获取失败"};t=r.sessionKey}t=Buffer.from(t,"base64"),r=Buffer.from(r,"base64"),i=Buffer.from(i,"base64");try{vars=n.createDecipheriv("aes-128-cbc",t,i);s.setAutoPadding(!0);vara=s.update(r,"binary","utf8");a+=s.final("utf8"),a=JSON.parse(a)}catch(e){return{code:80802,msg:"解密失败:"+e.message}}returna.watermark.appid!==o.options.appId?{code:80803,msg:"appid不匹配"}:{code:0,msg:"解密成功",...a}},encryptPwd:function(e,{value:t,version:r}={}){if(!t){conste=this._getConfig(),{passwordSecret:n}=e;if("array"===m(n)){conste=n.sort((e,t)=>e.version-t.version);t=e[e.length-1].value,r=e[e.length-1].version}elset=n}if(!t)thrownewError("passwordSecret不正确");consti=n.createHmac("sha1",t.toString("ascii"));returni.update(e),{passwordHash:i.digest("hex"),version:r}},checkToken:asyncfunction(e,{needPermission:t,needUserInfo:r=!0}={}){constn=this._getConfig();try{consti=this._verifyToken(e);if(i.code)returni;const{uid:o,needPermission:s,role:a,permission:c,exp:u}=i,f=a&&c;t=void0===t?s:t;constd=n.removePermissionAndRoleFromToken||!f||r,l=!n.removePermissionAndRoleFromToken&&!f||n.removePermissionAndRoleFromToken&&f||n.tokenExpiresThreshold&&u-Date.now()/1e3<n.tokenExpiresThreshold;letp={};if(d||l){constt=awaitA.doc(o).get();if(!t.data||0===t.data.length||!t.data[0].token)return{code:30202,msg:"token不合法,请重新登录"};if(p=t.data[0],1===p.status)return{code:10001,msg:"账号已禁用"};letr=p.token;if(r?"string"==typeofr&&(r=[r]):r=[],-1===r.indexOf(e))return{code:30202,msg:"token不合法,请重新登录"}}constm={code:0,msg:"token校验通过",uid:o};leth,g;if(f&&(m.role=a,m.permission=c),r&&(m.userInfo=p),(!f&&t||l)&&(h=m.role=p.role||[],g=0===h.length||h.includes("admin")?m.permission=[]:m.permission=awaitthis._getPermissionListByRoleList(m.role),t&&(m.role=h,m.permission=g)),l){lete;e=n.removePermissionAndRoleFromToken?awaitthis.createToken({uid:o,needPermission:s}):awaitthis.createToken({uid:o,role:h,permission:g});lett=p.token;t?"string"==typeoft&&(t=[t]):t=[];constr=this._getExpiredToken(t);returnt=t.filter(e=>-1===r.indexOf(e)),t.push(e.token),awaitA.doc(o).update({token:t,last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP}),{...m,...e}}returnm}catch(e){return{code:90001,msg:"数据库读写异常:"+e.message,err:e}}},createToken:function({uid:e,needPermission:t,role:r,permission:n}){if(!e)return{code:30101,msg:"缺少uid参数"};consti={uid:e,needPermission:t,role:r,permission:n},o=this._getConfig();if(!this.interceptorMap.has("customToken")){conste={...i};returnthis._createTokenInternal({signContent:e,config:o})}consts=this.interceptorMap.get("customToken");if("function"!==m(s))thrownewError("custom-token.js应导出一个function");consta=s(i);returnainstanceofPromise?a.then(e=>this._createTokenInternal({signContent:e,config:o})):this._createTokenInternal({signContent:a,config:o})},_checkPwd:function(e,t){if(!t)return{code:1,message:"密码不能为空"};const{password:r,password_secret_version:n}=e,i=this._getConfig(),{passwordSecret:o}=i,s=m(o);if("string"===s){const{passwordHash:e}=this.encryptPwd(t,{value:o});returne===r?{code:0,message:"密码校验通过"}:{code:2,message:"密码不正确"}}if("array"!==s)thrownewError("config内passwordSecret类型错误,只可设置string类型和array类型");consta=o.sort((e,t)=>e.version-t.version);letc;if(c=n?a.find(e=>e.version===n):a[0],!c)return{code:3,message:"secretVersion不正确"};constu=a[a.length-1],{passwordHash:f}=this.encryptPwd(t,c);if(f===r){conste={code:0,message:"密码校验通过"};if(c!==u){const{passwordHash:r,version:n}=this.encryptPwd(t,u);e.passwordHash=r,e.passwordVersion=n}returne}return{code:4,message:""}},_verifyToken:function(e){constt=this._getConfig();letr;try{r=_r(e,t.tokenSecret)}catch(e){return"TokenExpiredError"===e.name?{code:30203,msg:"token已过期,请重新登录",err:e}:{code:30204,msg:"非法token",err:e}}returnt.bindTokenToDevice&&r.clientId&&r.clientId!==this._getClientUaHash()?{code:30201,msg:"token不合法,请重新登录"}:r},_getExpiredToken:function(e){constt=this._getConfig(),r=[];returne.forEach(e=>{try{_r(e,t.tokenSecret)}catch(t){r.push(e)}}),r},_getPermissionListByRoleList:asyncfunction(e){if(!Array.isArray(e))return[];if(0===e.length)return[];if(e.includes("admin")){return(awaitB.limit(500).get()).data.map(e=>e.permission_id)}constt=awaitD.where({role_id:Vr.in(e)}).get(),r=[];returnt.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),k(r)},_getClientUaHash:function(){conste=n.createHash("md5"),t=/MicroMessenger/i.test(this.context.CLIENTUA)?this.context.CLIENTUA.replace(/(MicroMessenger\S+).*/i,"$1"):this.context.CLIENTUA;returne.update(t),e.digest("hex")},_createTokenInternal:function({signContent:e,config:t}){return"object"!==m(e)?{code:30101,msg:"token对应的payload为对象且必须包含uid"}:e.uid?(t.bindTokenToDevice&&(e.clientId=this._getClientUaHash()),{token:Er(e,t.tokenSecret,{expiresIn:t.tokenExpiresIn}),tokenExpired:Date.now()+1e3*t.tokenExpiresIn}):{code:30101,msg:"token对应的payload必须包含uid"}},setVerifyCode:asyncfunction({mobile:e,email:t,code:r,expiresIn:n,type:i}){if(!e&&!t||e&&t)return{code:50101,msg:"手机号和邮箱必须且只能给定其中一个"};r||(r=x()),n||(n=180);consto=Date.now(),s={mobile:e,email:t,type:i,code:r,state:0,ip:this.context.CLIENTIP,created_at:o,expired_at:o+1e3*n};returnS("addRes",awaitO.add(s)),{code:0,mobile:e,email:t}},verifyCode:asyncfunction({mobile:e,email:t,code:r,type:n}){if(!e&&!t||e&&t)return{code:50201,msg:"手机号和邮箱必须且只能给定其中一个"};consti=Ur.command,o=Date.now(),s={mobile:e,email:t,type:n,code:r,state:0,expired_at:i.gt(o)},a=awaitO.where(s).orderBy("created_at","desc").limit(1).get();if(S("verifyRecord:",a),a&&a.data&&a.data.length>0){conste=a.data[0];returnS("upRes",awaitO.doc(e._id).update({state:1})),{code:0,msg:"验证通过"}}return{code:50202,msg:"验证码错误或已失效"}},sendSmsCode:asyncfunction({mobile:e,code:t,type:r,templateId:n}){if(!e)thrownewError("手机号码不可为空");if(t||(t=x()),!r)thrownewError("验证码类型不可为空");consti=this._getConfig();leto=i&&i.service&&i.service.sms;if(!o)thrownewError("请在config.json或init方法中配置service.sms下短信相关参数");o=Object.assign({codeExpiresIn:300},o);consts=["smsKey","smsSecret"];if(!n&&!o.name)thrownewError("不传入templateId时应在config.json或init方法内service.sms下配置name字段以正确使用uniID_code模板");for(lete=0,t=s.length;e<t;e++){constt=s[e];if(!o[t])thrownewError("请在config.json或init方法中service.sms下配置"+t)}const{name:a,smsKey:c,smsSecret:u,codeExpiresIn:f}=o;letd;switch(r){case"login":d="登录";break;default:d="验证手机号"}try{consti={name:a,code:t,action:d,expMinute:""+Math.round(f/60)};a&&(i.name=a),awaituniCloud.sendSms({smsKey:c,smsSecret:u,phone:e,templateId:n||"uniID_code",data:i});consto=awaitthis.setVerifyCode({mobile:e,code:t,expiresIn:f,type:r});returno.code>=0?o:{code:0,msg:"验证码发送成功"}}catch(e){return{code:50301,msg:"验证码发送失败, "+e.message}}}});letHr;try{Hr=require("uni-config-center")}catch(e){}constFr="\n传入配置的方式有以下几种:\n- 在uni-config-center公共模块的uni-id目录下放置config.json文件(推荐)\n- 在uni-id公共模块的目录下放置config.json文件\n- 使用init方法传入配置\n- 如果使用uni-config-center且HBuilderX版本低于3.1.8,批量上传云函数及公共模块后需要再单独上传一次uni-id";classJr{constructor({context:e,config:t}={}){constr=Hr&&Hr({pluginId:"uni-id"});this.pluginConfig=r,this.config=t||this._getConfigContent(),Object.defineProperty(this,"context",{get:()=>e||global.__ctx__}),this.interceptorMap=newMap,r&&r.hasFile("custom-token.js")&&this.setInterceptor("customToken",require(r.resolve("custom-token.js")))}_getConfigContent(){if(this.pluginConfig&&this.pluginConfig.hasFile("config.json")){this._hasConfigFile=!0;try{returnthis.pluginConfig.config()}catch(e){return}}conste=r.resolve(__dirname,"config.json");this._hasConfigFile=t.existsSync(e);try{returnrequire(e)}catch(e){}}init(e){this.config=e}setInterceptor(e,t){this.interceptorMap.set(e,t)}_getConfig(e){constt=this.config&&0!==Object.keys(this.config).length;if(this._hasConfigFile&&!t)thrownewError("请确保公用模块uni-id对应的配置文件格式正确(不可包含注释)"+Fr);if(!t)thrownewError("公用模块uni-id缺少配置信息"+Fr);constr=Object.assign(this.config,this.config[e||this.context.PLATFORM])||{},n=Object.assign({bindTokenToDevice:!1,tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600},r);return["passwordSecret","tokenSecret","tokenExpiresIn","passwordErrorLimit","passwordErrorRetryTime"].forEach(e=>{if(!n||!n[e])thrownewError("请在公用模块uni-id的配置信息中内添加配置项:"+e)}),n}}for(consteinqr)Jr.prototype[e]=C(qr[e]);functionGr({context:e,config:t}={}){constr=newJr({context:e,config:t}),n=newProxy(r,{get(e,t){if(tine)return"function"==typeofe[t]?e[t].bind(n):e[t]}});returnn}Jr.prototype.createInstance=Gr;varzr=Gr();module.exports=zr;