From 16a3e0a8ff4a87a1ec868398d1746a2b24d7a49b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?VK=E4=BA=91=E6=A1=8C=E9=9D=A2?= <370725567@qq.com> Date: Sat, 13 Nov 2021 14:13:00 +0800 Subject: [PATCH] 1.7.4 --- README/1.7/1.7.4.md | 7 ++ app.config.js | 3 +- changelog.md | 9 +++ package.json | 4 +- .../uni-config-center/vk-unicloud/index.js | 7 +- uni_modules/uni-id/changelog.md | 2 + uni_modules/uni-id/package.json | 2 +- .../cloudfunctions/common/uni-id/index.js | 2 +- .../cloudfunctions/common/uni-id/package.json | 2 +- uni_modules/vk-unicloud/changelog.md | 9 +++ uni_modules/vk-unicloud/package.json | 2 +- uni_modules/vk-unicloud/readme.md | 2 +- .../common/vk-unicloud/index.js | 2 +- .../common/vk-unicloud/package.json | 2 +- .../vk-unicloud-page/libs/function/index.js | 75 +++++++++++++------ .../libs/function/timeUtil.js | 57 ++++++++++++++ .../vk-unicloud-callFunctionUtil.js | 38 +++++++--- 17 files changed, 181 insertions(+), 44 deletions(-) create mode 100644 README/1.7/1.7.4.md diff --git a/README/1.7/1.7.4.md b/README/1.7/1.7.4.md new file mode 100644 index 0000000..8477f3b --- /dev/null +++ b/README/1.7/1.7.4.md @@ -0,0 +1,7 @@ +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.7` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 diff --git a/app.config.js b/app.config.js index 94528cd..0647d89 100644 --- a/app.config.js +++ b/app.config.js @@ -28,7 +28,8 @@ export default { * 如果 mode = 1 则代表list内的页面需要登录,不在list内的页面不需要登录 * 如果 mode = 2 则代表list内的页面不需要登录,不在list内的页面需要登录 * 注意1: list内是通配符表达式,非正则表达式 - * 注意2: 需要使用 vk.navigateTo 代替 uni.navigateTo 进行页面跳转才会生效 + * 注意3: 首次进入的页面暂无法检测,故不会生效。 + * 但只要页面上执行kh或sys函数,会自动判断是否登录,未登录也会自动跳登录页面,登录成功后会自动返回本来要跳转的页面。 */ mode: 2, list: [ diff --git a/changelog.md b/changelog.md index af263bf..6fbdc20 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +## 1.7.4(2021-11-13) +* 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.7` +* 2、【优化】一些细节 + +##### 框架更新步骤 [点击查看](https://vkdoc.fsq.pub/admin/1/update.html) +##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架 + +##### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。 + ## 1.7.3(2021-11-09) * 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.7.6` * 2、【优化】`万能表单` `radio` `checkbox` `select` `cascader` `tree-select` 的 `data` 静态模式数据源 支持 `function` 模式 [点击查看](https://vkdoc.fsq.pub/admin/components/9%E3%80%81select.html#%E9%9D%99%E6%80%81%E6%95%B0%E6%8D%AE%E6%96%B9%E5%BC%8F2) diff --git a/package.json b/package.json index e0e398f..b54b816 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud-admin", "name": "vk-unicloud-admin", - "version": "1.7.3", + "version": "1.7.4", "displayName": "【开箱即用】vk-unicloud-admin-快速开发框架-打造unicloud最好用的admin", "description": "vk-unicloud-admin是基于unicloud+uni-id+element+vk-unicloud-router的一套快速PC admin完整开发框架。小白几分钟即可完成一个页面CRUD。", "keywords": [ @@ -22,7 +22,7 @@ "dependencies": { "element-ui": "^2.15.6", "umy-ui": "^1.1.6", - "vk-unicloud-admin-ui": "^1.7.6" + "vk-unicloud-admin-ui": "^1.7.7" }, "engines": { "HBuilderX": "^3.1.10" diff --git a/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js b/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js index 3f58f14..38f0c13 100644 --- a/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js +++ b/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js @@ -1,4 +1,9 @@ -const uniIdConfig = require('../uni-id/config.json'); +var uniIdConfig; +try { + uniIdConfig = require('../uni-id/config.json'); +} catch(err) { + throw new Error("配置文件:uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json \n编译错误,请检查!"+err.message); +} module.exports = { "uni":uniIdConfig, "vk":{ diff --git a/uni_modules/uni-id/changelog.md b/uni_modules/uni-id/changelog.md index b7abd90..67c443c 100644 --- a/uni_modules/uni-id/changelog.md +++ b/uni_modules/uni-id/changelog.md @@ -1,3 +1,5 @@ +## 3.3.9(2021-11-09) +- 去除重复的context.xxx未找到的提示语 ## 3.3.8(2021-10-28) - 新增 用户账户封禁接口 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=ban-account) - 新增 用户账户注销接口 [详情](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=close-account) diff --git a/uni_modules/uni-id/package.json b/uni_modules/uni-id/package.json index 151c4d3..dfbeb69 100644 --- a/uni_modules/uni-id/package.json +++ b/uni_modules/uni-id/package.json @@ -1,7 +1,7 @@ { "id": "uni-id", "displayName": "uni-id", - "version": "3.3.8", + "version": "3.3.9", "description": "简单、统一、可扩展的用户中心", "keywords": [ "uniid", diff --git a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js index 05ea7b9..fa52023 100644 --- a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js +++ b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js @@ -1 +1 @@ -"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("fs")),r=e(require("path")),n=e(require("crypto")),i=e(require("buffer")),o=e(require("stream")),s=e(require("util"));const a={PARAM_ERROR:{errCode:"param-error"},PARAM_REQUIRED:{errCode:"param-required"},USER_NOT_EXIST:{errCode:"user-not-exist"},ROLE_NOT_EXIST:{errCode:"role-not-exist"},PERMISSION_NOT_EXIST:{errCode:"permission-not-exist"},MULTI_USER_MATCHED:{errCode:"multi-user-matched"},USER_INFO_ERROR:{errCode:"user-info-error"},USER_ACCOUNT_CONFLICT:{errCode:"user-account-conflict"},USER_ACCOUNT_CLOSED:{errCode:"user-account-closed"},ACCOUNT_ALREADY_REGISTED:{errCode:"account-already-registed"},ACCOUNT_NOT_REGISTED:{errCode:"account-not-registed"},ACCOUNT_already_BOUND:{errCode:"account-already-bound"},UNBIND_FAILED:{errCode:"unbind-failed"},INVALID_INVITE_CODE:{errCode:"invalid-invite-code"},SET_INVITE_CODE_FAILED:{errCode:"set-invite-code-failed"},GET_THIRD_PARTY_ACCOUNT_FAILED:{errCode:"get-third-party-account-failed"}},c={0:{errCode:0,errMsg:""},10001:{errCode:"account-banned"},10002:a.USER_NOT_EXIST,10003:a.MULTI_USER_MATCHED,10004:a.USER_INFO_ERROR,10005:a.USER_ACCOUNT_CONFLICT,10006:a.USER_ACCOUNT_CLOSED,10102:{errCode:"password-error"},10103:{errCode:"password-error-exceed-limit"},10201:a.ACCOUNT_ALREADY_REGISTED,10202:a.ACCOUNT_NOT_REGISTED,10203:a.INVALID_INVITE_CODE,10301:a.ACCOUNT_ALREADY_REGISTED,10302:a.ACCOUNT_NOT_REGISTED,10401:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10402:a.ACCOUNT_ALREADY_REGISTED,10403:a.ACCOUNT_NOT_REGISTED,10501:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10502:a.ACCOUNT_ALREADY_REGISTED,10503:a.ACCOUNT_NOT_REGISTED,10601:a.ACCOUNT_ALREADY_REGISTED,10602:a.ACCOUNT_NOT_REGISTED,10701:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10702:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10703:a.ACCOUNT_ALREADY_REGISTED,10704:a.ACCOUNT_NOT_REGISTED,10705:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10706:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10801:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10802:a.ACCOUNT_ALREADY_REGISTED,10803:a.ACCOUNT_NOT_REGISTED,20101:a.PARAM_REQUIRED,20102:a.ACCOUNT_ALREADY_REGISTED,30101:a.PARAM_REQUIRED,30201:{errCode:"check-device-feature-failed"},30202:{errCode:"token-not-exist"},30203:{errCode:"token-expired"},30204:{errCode:"check-token-failed"},40201:a.USER_NOT_EXIST,40202:{errCode:"invalid-old-password"},50101:a.PARAM_REQUIRED,50102:a.PARAM_ERROR,50201:a.PARAM_REQUIRED,50203:a.PARAM_ERROR,50202:{errCode:"invalid-verify-code"},50301:{errCode:"send-sms-code-failed"},60101:a.ACCOUNT_already_BOUND,60201:a.ACCOUNT_already_BOUND,60301:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60302:a.ACCOUNT_already_BOUND,60401:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60402:a.ACCOUNT_already_BOUND,60501:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60502:a.ACCOUNT_already_BOUND,70101:a.UNBIND_FAILED,70201:a.UNBIND_FAILED,70301:a.UNBIND_FAILED,70401:a.UNBIND_FAILED,70501:a.UNBIND_FAILED,80301:a.USER_NOT_EXIST,80401:a.SET_INVITE_CODE_FAILED,80402:a.SET_INVITE_CODE_FAILED,80501:a.INVALID_INVITE_CODE,80502:a.USER_NOT_EXIST,80503:{errCode:"modify-invite-code-is-not-allowed"},80601:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80602:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80701:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80702:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80801:{errCode:"decrypt-weixin-data-failed"},80802:{errCode:"decrypt-weixin-data-failed"},80803:{errCode:"invalid-weixin-appid"},80804:a.PARAM_REQUIRED,80805:a.PARAM_REQUIRED,80806:a.PARAM_REQUIRED,90001:{errCode:"database-operation-failed"},90002:a.PARAM_REQUIRED,90003:a.PARAM_ERROR,90004:a.USER_NOT_EXIST,90005:a.ROLE_NOT_EXIST,90006:a.PERMISSION_NOT_EXIST};class u extends Error{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}}})}}const d=Object.prototype.toString,l=Object.prototype.hasOwnProperty;function p(e,t){return l.call(e,t)}function f(e){return"[object Object]"===d.call(e)}function m(e){return"function"==typeof e}function h(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}function g(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}const y=/_(\w)/g,w=/[A-Z]/g;function v(e){return e.replace(y,(e,t)=>t?t.toUpperCase():"")}function _(e){return e.replace(w,e=>"_"+e.toLowerCase())}function b(e,t){let r,n;switch(t){case"snake2camel":n=v,r=y;break;case"camel2snake":n=_,r=w}for(const i in e)if(p(e,i)&&r.test(i)){const r=n(i);e[r]=e[i],delete e[i],f(e[r])?e[r]=b(e[r],t):Array.isArray(e[r])&&(e[r]=e[r].map(e=>b(e,t)))}return e}function E(e){return b(e,"snake2camel")}function C(e){return b(e,"camel2snake")}function T(e){return function(e,t="-"){e=e||new Date;const r=[];return r.push(e.getFullYear()),r.push(("00"+(e.getMonth()+1)).substr(-2)),r.push(("00"+e.getDate()).substr(-2)),r.join(t)}(e=e||new Date)+" "+function(e,t=":"){e=e||new Date;const r=[];return r.push(("00"+e.getHours()).substr(-2)),r.push(("00"+e.getMinutes()).substr(-2)),r.push(("00"+e.getSeconds()).substr(-2)),r.join(t)}(e)}function A(){"development"===process.env.NODE_ENV&&console.log(...arguments)}function x(e=6){let t="";for(let r=0;r-1!==r.indexOf(e))?"zh-Hant":"zh-Hans");var r;const n=function(e,t){return t.find(t=>0===e.indexOf(t))}(e,["en","fr","es"]);return n||void 0}class L{constructor({locale:e,fallbackLocale:t,messages:r,watcher:n,formater:i}){this.locale="en",this.fallbackLocale="en",this.message={},this.messages={},this.watchers=[],t&&(this.fallbackLocale=t),this.formater=i||q,this.messages=r,this.setLocale(e),n&&this.watchLocale(n)}setLocale(e){const t=this.locale;this.locale=N(e,this.messages)||this.fallbackLocale,this.message=this.messages[this.locale],this.watchers.forEach(e=>{e(this.locale,t)})}getLocale(){return this.locale}watchLocale(e){const t=this.watchers.push(e)-1;return()=>{this.watchers.splice(t,1)}}t(e,t,r){let n=this.message;return"string"==typeof t?(t=N(t,this.messages))&&(n=this.messages[t]):r=t,((e,t)=>j.call(e,t))(n,e)?this.formater.interpolate(n[e],r).join(""):(console.warn(`Cannot translate the value of keypath ${e}. Use the value of keypath as default.`),e)}}var U={"zh-Hans":{alipay:"支付宝",wechat:"微信",user:"用户","user-id":"用户ID","dcloud-appid":"应用Appid","dcloud-appid-list":"应用列表",account:"账号",username:"用户名",email:"邮箱",mobile:"手机号","wechat-openid":"微信openid","wechat-account":"微信账号","alipay-account":"支付宝账号","qq-openid":"QQ openid","qq-account":"QQ账号","apple-account":"苹果账号",password:"密码","verify-code":"验证码","verify-code-type":"验证码类型","user-unique-param":"用户名、邮箱或手机号","role-id":"角色ID","permission-id":"权限ID",login:"登录","verify-mobile":"验证手机","context-param-required":"context内缺少{param},请使用uniID.createInstance传入客户端信息,例:uniID.createInstance({context:{PLATFORM:'h5'}})","config-param-require":"uni-id的配置内缺少{param}","uni-verify-config-required":"请在config.json中配置service.univerify下一键登录相关参数","login-with-invite-type-required":"强制使用邀请码注册时,需指明type为register还是login","type-array-required":"{param}应为数组形式","query-field-warning":"检测到当前使用queryField匹配多字段进行登录操作,需要注意:uni-id并未限制用户名不能是手机号或邮箱,需要开发者自行限制。否则可能出现用户输入abc@xx.com会同时匹配到邮箱为此值的用户和用户名为此值的用户,导致登录失败","add-role-admin-is-not-allowed":"不可新增roleID为admin的角色","password-secret-type-error":"config内passwordSecret类型错误,只可设置string类型和array类型","token-expires-config-warning":"tokenExpiresIn不可小于或等于tokenExpiresThreshold","type-function-required":"{param}应为function类型","dev-warning":"当前正在使用uniID.dev属性,注意此属性仅可用于开发调试","config-file-invalid":"请确保公用模块uni-id对应的配置文件(common/uni-config-center/uni-id/config.json)格式正确(不可包含注释)","config-file-not-found":"请在common/uni-config-center/uni-id/config.json内添加uni-id相关配置信息","hx-version-warning":"当前使用的HBuilderX版本过低,请升级HBuilderX到最新版本","account-banned":"账号已禁用","user-not-exist":"用户不存在","multi-user-matched":"匹配到多个账号","user-info-error":"用户信息不正确","user-account-conflict":"用户账号冲突","user-account-closed":"此账号已注销","password-error":"密码错误","password-error-exceed-limit":"密码错误次数过多,请稍后再试","account-already-registed":"此{type}已注册","account-not-registed":"此{type}尚未注册","invalid-invite-code":"邀请码无效","get-third-party-account-failed":"获取{account}失败","param-required":"{param}不可为空","check-device-feature-failed":"设备特征校验未通过","token-not-exist":"云端已不包含此token","token-expired":"token已过期","check-token-failed":"token校验未通过","invalid-old-password":"旧密码错误","param-error":"{param}参数错误,{reason}","invalid-verify-code":"验证码错误或已失效","send-sms-code-failed":"验证码发送失败","account-already-bound":"此{type}已绑定","unbind-failed":"解绑失败","set-invite-code-failed":"邀请码设置失败","modify-invite-code-is-not-allowed":"邀请码不可修改","decrypt-weixin-data-failed":"解密失败","invalid-weixin-appid":"appid不匹配","database-operation-failed":"数据库读写异常","role-not-exist":"角色不存在","permission-not-exist":"权限不存在","context-required":"uni-id无法获取context.{key},请使用uniID.createInstance方法传入"},en:{alipay:"alipay",wechat:"wechat",user:"user","user-id":"user id","dcloud-appid":"DCloud appid","dcloud-appid-list":"DCloud appid list",account:"account",username:"username",email:"email",mobile:"phone number","wechat-openid":"wechat openid","wechat-account":"wechat account","alipay-account":"alipay account","qq-openid":"QQ openid","qq-account":"QQ account","apple-account":"apple account",password:"password","verify-code":"verify code","verify-code-type":"verify code type","user-unique-param":"username, email or mobile phone number","role-id":"role id","permission-id":"permission id",login:"login","verify-mobile":"verify mobile phone number","context-param-required":"You should pass {param} in context using uniID.createInstance, eg: uniID.createInstance({context: {PLATFORM: 'h5'}})","config-param-require":"{param} is required in uni-id's config","uni-verify-config-required":"univerify config required: service.univerify","login-with-invite-type-required":"parameter type is required when forceInviteCode set to true","type-array-required":"type of {param} must be array","query-field-warning":"You are using multi query field to login, be aware that uni-id will not check username's fromat, eg: abc@xx.com is a valid username for uni-id. You should check username in your code.","add-role-admin-is-not-allowed":'add role with an id of "admin" is not allowed',"password-secret-type-error":"passwordSecret in config must be string or array","token-expires-config-warning":"tokenExpiresIn must be greater than tokenExpiresThreshold","type-function-required":"{param} must be a function","dev-warning":"warning: uniID.dev is only for development","config-file-invalid":"invalid config file (common/uni-config-center/uni-id/config.json), comment is not allowed","config-file-not-found":"config file (common/uni-config-center/uni-id/config.json) not found","hx-version-warning":"The version of your HBuilderX is too lower, please upgrade to the latest version of HBuilderX","account-banned":"account is banned","user-not-exist":"user does not exist","multi-user-matched":"multiple users are matched","user-info-error":"user info error","user-account-conflict":"user account conflict","user-account-closed":"user account was closed","password-error":"password is incorrect","password-error-exceed-limit":"password error exceed limit","account-already-registed":"{type} is already registed","account-not-registed":"{type} is not registed","invalid-invite-code":"invalid invite code","get-third-party-account-failed":"get {account} failed","param-required":"{param} is required","check-device-feature-failed":"check device feature failed","token-not-exist":"token is not exist","token-expired":"token is expired","check-token-failed":"check token failed","invalid-old-password":"invalid old password","param-error":"{param} error, {reason}","invalid-verify-code":"invalid verify code","send-sms-code-failed":"send sms code failed","account-already-bound":"{type} is already bound","unbind-failed":"unbind failed","set-invite-code-failed":"set invite code failed","modify-invite-code-is-not-allowed":"invite code modification is not allowed","decrypt-weixin-data-failed":"decrypt weixin data failed","invalid-weixin-appid":"invalid weixin appid","database-operation-failed":"database operation failed","role-not-exist":"role does not exist","permission-not-exist":"permission does not exist","context-required":"context.{key} is required, you should pass context using uniID.createInstance"}};const V=uniCloud.database(),M=V.collection("uni-id-users"),B=V.collection("opendb-verify-codes"),F=V.collection("uni-id-roles"),H=V.collection("uni-id-permissions"),$={username:"username",mobile:"mobile",email:"email",wx_unionid:"wechat-account","wx_openid.app-plus":"wechat-account","wx_openid.mp-weixin":"wechat-account",qq_unionid:"qq-account","qq_openid.app-plus":"qq-account","qq_openid.mp-weixin":"qq-account",ali_openid:"alipay-account",apple_openid:"alipay-account"},K=90002,G=90003,Q=90004,Y=90005,z=0,J=1,X=4;async function W({uid:e,status:t}={}){return e?(await M.doc(e).update({status:t,status_update_date:Date.now()}),{code:0}):{code:K,messageValues:{param:this.t("user-id")}}}async function Z({name:e,url:t,data:r,options:n,defaultOptions:i}){let o={};const s=C(Object.assign({},r));s&&s.access_token&&delete s.access_token;try{n=Object.assign({},i,n,{data:s}),o=await uniCloud.httpclient.request(t,n)}catch(t){return function(e,t){throw new u({code:t.code||-2,message:t.message||e+" fail"})}(e,t)}let a=o.data;const c=o.headers["content-type"];if(!Buffer.isBuffer(a)||0!==c.indexOf("text/plain")&&0!==c.indexOf("application/json"))Buffer.isBuffer(a)&&(a={buffer:a,contentType:c});else try{a=JSON.parse(a.toString())}catch(e){a=a.toString()}return E(function(e,t){if(t.errcode)throw new u({code:t.errcode||-2,message:t.errmsg||e+" fail"});return delete t.errcode,delete t.errmsg,{...t,errMsg:e+" ok",errCode:0}}(e,a||{errCode:-2,errMsg:"Request failed"}))}function ee(e,t){let r="";if(t&&t.accessToken){r=`${e.indexOf("?")>-1?"&":"?"}access_token=${t.accessToken}`}return`${e}${r}`}class te{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}){const i={method:"GET",dataType:"json",dataAsQueryString:!0,timeout:this.options.timeout};return await Z({name:"auth."+e,url:`${this.options.baseUrl}${ee(t,r)}`,data:r,options:n,defaultOptions:i})}async code2Session(e){return await this._requestWxOpenapi({name:"code2Session",url:"/sns/jscode2session",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,js_code:e}})}async getOauthAccessToken(e){const t=await this._requestWxOpenapi({name:"getOauthAccessToken",url:"/sns/oauth2/access_token",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,code:e}});return t.expiresIn&&(t.expired=Date.now()+t.expiresIn),t}}async function re({name:e,url:t,data:r,options:n,defaultOptions:i}){let o;n=Object.assign({},i,n,{data:C(Object.assign({},r))});try{o=await uniCloud.httpclient.request(t,n)}catch(t){return function(e,t){throw new u({code:t.code||-2,message:t.message||e+" fail"})}(e,t)}let s=o.data;const a=o.headers["content-type"];if(!Buffer.isBuffer(s)||0!==a.indexOf("text/plain")&&0!==a.indexOf("application/json"))Buffer.isBuffer(s)&&(s={buffer:s,contentType:a});else try{s=JSON.parse(s.toString())}catch(e){s=s.toString()}return E(function(e,t){if(t.ret||t.error){const r=t.ret||t.error||t.errcode||-2,n=t.msg||t.error_description||t.errmsg||e+" fail";throw new u({code:r,message:n})}return delete t.ret,delete t.msg,delete t.error,delete t.error_description,delete t.errcode,delete t.errmsg,{...t,errMsg:e+" ok",errCode:0}}(e,s||{errCode:-2,errMsg:"Request failed"}))}class ne{constructor(e){this.options=Object.assign({baseUrl:"https://graph.qq.com",timeout:5e3},e)}async _requestQQOpenapi({name:e,url:t,data:r,options:n}){const i={method:"GET",dataType:"json",dataAsQueryString:!0,timeout:this.options.timeout};return await re({name:"auth."+e,url:I(this.options.baseUrl,t),data:r,options:n,defaultOptions:i})}async getOpenidByToken({accessToken:e}={}){const t=await this._requestQQOpenapi({name:"getOpenidByToken",url:"/oauth2.0/me",data:{accessToken:e,unionid:1,fmt:"json"}});if(t.clientId!==this.options.appId)throw new u({code:"APPID_NOT_MATCH",message:"appid not match"});return{openid:t.openid,unionid:t.unionid}}async code2Session({code:e}={}){return await this._requestQQOpenapi({name:"getOpenidByToken",url:"https://api.q.qq.com/sns/jscode2session",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,js_code:e}})}}const ie={RSA:"RSA-SHA1",RSA2:"RSA-SHA256"};var oe={code2Session:{returnValue:{openid:"userId"}}};class se extends class{constructor(e={}){if(!e.appId)throw new Error("appId required");if(!e.privateKey)throw new Error("privateKey required");const t={gateway:"https://openapi.alipay.com/gateway.do",timeout:5e3,charset:"utf-8",version:"1.0",signType:"RSA2",timeOffset:-(new Date).getTimezoneOffset()/60,keyType:"PKCS8"};e.sandbox&&(e.gateway="https://openapi.alipaydev.com/gateway.do"),this.options=Object.assign({},t,e);const r="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){let r=e;const n=["app_id","method","format","charset","sign_type","sign","timestamp","version","notify_url","return_url","auth_token","app_auth_token"];for(const e in t)if(n.indexOf(e)>-1){const n=encodeURIComponent(t[e]);r=`${r}${r.includes("?")?"&":"?"}${e}=${n}`,delete t[e]}return{execParams:t,url:r}}_getSign(e,t){const r=t.bizContent||null;delete t.bizContent;const i=Object.assign({method:e,appId:this.options.appId,charset:this.options.charset,version:this.options.version,signType:this.options.signType,timestamp:T((o=this.options.timeOffset,new Date(Date.now()+6e4*((new Date).getTimezoneOffset()+60*(o||0)))))},t);var o;r&&(i.bizContent=JSON.stringify(C(r)));const s=C(i),a=Object.keys(s).sort().map(e=>{let t=s[e];return"[object String]"!==Array.prototype.toString.call(t)&&(t=JSON.stringify(t)),`${e}=${t}`}).join("&"),c=n.createSign(ie[this.options.signType]).update(a,"utf8").sign(this.options.privateKey,"base64");return Object.assign(s,{sign:c})}async _exec(e,t={},r={}){const n=this._getSign(e,t),{url:i,execParams:o}=this._formatUrl(this.options.gateway,n),{status:s,data:a}=await uniCloud.httpclient.request(i,{method:"POST",data:o,dataType:"text",timeout:this.options.timeout});if(200!==s)throw new Error("request fail");const c=JSON.parse(a),u=e.replace(/\./g,"_")+"_response",d=c[u],l=c.error_response;if(d){if(!r.validateSign||this._checkResponseSign(a,u)){if(!d.code||"10000"===d.code){return{errCode:0,errMsg:d.msg||"",...E(d)}}const e=d.sub_code?`${d.sub_code} ${d.sub_msg}`:""+(d.msg||"unkonwn error");throw new Error(e)}throw new Error("check sign error")}if(l)throw new Error(l.sub_msg||l.msg||"request fail");throw new Error("request fail")}_checkResponseSign(e,t){if(!this.options.alipayPublicKey||""===this.options.alipayPublicKey)return console.warn("options.alipayPublicKey is empty"),!0;if(!e)return!1;const r=this._getSignStr(e,t),i=JSON.parse(e).sign,o=n.createVerify(ie[this.options.signType]);return o.update(r,"utf8"),o.verify(this.options.alipayPublicKey,i,"base64")}_getSignStr(e,t){let r=e.trim();const n=e.indexOf(t+'"'),i=e.lastIndexOf('"sign"');return r=r.substr(n+t.length+1),r=r.substr(0,i),r=r.replace(/^[^{]*{/g,"{"),r=r.replace(/\}([^}]*)$/g,"}"),r}}{constructor(e){super(e),this._protocols=oe}async code2Session(e){return await this._exec("alipay.system.oauth.token",{grantType:"authorization_code",code:e})}}function ae(e){var t=e[0];return t<"0"||t>"7"?"00"+e:e}function ce(e){var t=e.toString(16);return t.length%2?"0"+t:t}function ue(e){if(e<=127)return ce(e);var t=ce(e);return ce(128+t.length/2)+t}function de(e,t){return e(t={exports:{}},t.exports),t.exports}var le=de((function(e,t){var r=i.Buffer;function n(e,t){for(var r in e)t[r]=e[r]}function o(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(n(i,t),t.Buffer=o),o.prototype=Object.create(r.prototype),n(r,o),o.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},o.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"==typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}})),pe=(le.Buffer,le.Buffer);function fe(e){if(this.buffer=null,this.writable=!0,this.readable=!0,!e)return this.buffer=pe.alloc(0),this;if("function"==typeof e.pipe)return this.buffer=pe.alloc(0),e.pipe(this),this;if(e.length||"object"==typeof e)return this.buffer=e,this.writable=!1,process.nextTick(function(){this.emit("end",e),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof e+")")}s.inherits(fe,o),fe.prototype.write=function(e){this.buffer=pe.concat([this.buffer,pe.from(e)]),this.emit("data",e)},fe.prototype.end=function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1};var me=fe,he=i.Buffer,ge=i.SlowBuffer,ye=we;function we(e,t){if(!he.isBuffer(e)||!he.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(var r=0,n=0;n=128&&--n,n}var Se={derToJose:function(e,t){e=Ae(e);var r=Ce(t),n=r+1,i=e.length,o=0;if(48!==e[o++])throw new Error('Could not find expected "seq"');var s=e[o++];if(129===s&&(s=e[o++]),i-o0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\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;var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"weeks":case"week":case"w":return 6048e5*r;case"days":case"day":case"d":return r*Ct;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Et;case"minutes":case"minute":case"mins":case"min":case"m":return r*bt;case"seconds":case"second":case"secs":case"sec":case"s":return r*_t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===r&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=Ct)return At(e,t,Ct,"day");if(t>=Et)return At(e,t,Et,"hour");if(t>=bt)return At(e,t,bt,"minute");if(t>=_t)return At(e,t,_t,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=Ct)return Math.round(e/Ct)+"d";if(t>=Et)return Math.round(e/Et)+"h";if(t>=bt)return Math.round(e/bt)+"m";if(t>=_t)return Math.round(e/_t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function At(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}var xt=function(e,t){var r=t||Math.floor(Date.now()/1e3);if("string"==typeof e){var n=Tt(e);if(void 0===n)return;return Math.floor(r+n/1e3)}return"number"==typeof e?r+e:void 0},St=de((function(e,t){var r;t=e.exports=G,r="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var n=Number.MAX_SAFE_INTEGER||9007199254740991,i=t.re=[],o=t.src=[],s=0,a=s++;o[a]="0|[1-9]\\d*";var c=s++;o[c]="[0-9]+";var u=s++;o[u]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var d=s++;o[d]="("+o[a]+")\\.("+o[a]+")\\.("+o[a]+")";var l=s++;o[l]="("+o[c]+")\\.("+o[c]+")\\.("+o[c]+")";var p=s++;o[p]="(?:"+o[a]+"|"+o[u]+")";var f=s++;o[f]="(?:"+o[c]+"|"+o[u]+")";var m=s++;o[m]="(?:-("+o[p]+"(?:\\."+o[p]+")*))";var h=s++;o[h]="(?:-?("+o[f]+"(?:\\."+o[f]+")*))";var g=s++;o[g]="[0-9A-Za-z-]+";var y=s++;o[y]="(?:\\+("+o[g]+"(?:\\."+o[g]+")*))";var w=s++,v="v?"+o[d]+o[m]+"?"+o[y]+"?";o[w]="^"+v+"$";var _="[v=\\s]*"+o[l]+o[h]+"?"+o[y]+"?",b=s++;o[b]="^"+_+"$";var E=s++;o[E]="((?:<|>)?=?)";var C=s++;o[C]=o[c]+"|x|X|\\*";var T=s++;o[T]=o[a]+"|x|X|\\*";var A=s++;o[A]="[v=\\s]*("+o[T]+")(?:\\.("+o[T]+")(?:\\.("+o[T]+")(?:"+o[m]+")?"+o[y]+"?)?)?";var x=s++;o[x]="[v=\\s]*("+o[C]+")(?:\\.("+o[C]+")(?:\\.("+o[C]+")(?:"+o[h]+")?"+o[y]+"?)?)?";var S=s++;o[S]="^"+o[E]+"\\s*"+o[A]+"$";var I=s++;o[I]="^"+o[E]+"\\s*"+o[x]+"$";var k=s++;o[k]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var O=s++;o[O]="(?:~>?)";var R=s++;o[R]="(\\s*)"+o[O]+"\\s+",i[R]=new RegExp(o[R],"g");var P=s++;o[P]="^"+o[O]+o[A]+"$";var D=s++;o[D]="^"+o[O]+o[x]+"$";var j=s++;o[j]="(?:\\^)";var q=s++;o[q]="(\\s*)"+o[j]+"\\s+",i[q]=new RegExp(o[q],"g");var N=s++;o[N]="^"+o[j]+o[A]+"$";var L=s++;o[L]="^"+o[j]+o[x]+"$";var U=s++;o[U]="^"+o[E]+"\\s*("+_+")$|^$";var V=s++;o[V]="^"+o[E]+"\\s*("+v+")$|^$";var M=s++;o[M]="(\\s*)"+o[E]+"\\s*("+_+"|"+o[A]+")",i[M]=new RegExp(o[M],"g");var B=s++;o[B]="^\\s*("+o[A]+")\\s+-\\s+("+o[A]+")\\s*$";var F=s++;o[F]="^\\s*("+o[x]+")\\s+-\\s+("+o[x]+")\\s*$";var H=s++;o[H]="(<|>)?=?\\s*\\*";for(var $=0;$<35;$++)r($,o[$]),i[$]||(i[$]=new RegExp(o[$]));function K(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof G)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?i[b]:i[w]).test(e))return null;try{return new G(e,t)}catch(e){return null}}function G(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof G){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof G))return new G(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var o=e.trim().match(t.loose?i[b]:i[w]);if(!o)throw new TypeError("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)throw new TypeError("Invalid major version");if(this.minor>n||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>n||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t=0;)"number"==typeof this.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:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,r,n){"string"==typeof r&&(n=r,r=void 0);try{return new G(e,r).inc(t,n).version}catch(e){return null}},t.diff=function(e,t){if(W(e,t))return null;var r=K(e),n=K(t),i="";if(r.prerelease.length||n.prerelease.length){i="pre";var o="prerelease"}for(var s in r)if(("major"===s||"minor"===s||"patch"===s)&&r[s]!==n[s])return i+s;return o},t.compareIdentifiers=Y;var Q=/^[0-9]+$/;function Y(e,t){var r=Q.test(e),n=Q.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e0}function X(e,t,r){return z(e,t,r)<0}function W(e,t,r){return 0===z(e,t,r)}function Z(e,t,r){return 0!==z(e,t,r)}function ee(e,t,r){return z(e,t,r)>=0}function te(e,t,r){return z(e,t,r)<=0}function re(e,t,r,n){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return W(e,r,n);case"!=":return Z(e,r,n);case">":return J(e,r,n);case">=":return ee(e,r,n);case"<":return X(e,r,n);case"<=":return te(e,r,n);default:throw new TypeError("Invalid operator: "+t)}}function ne(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof ne){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof ne))return new ne(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){return Y(t,e)},t.major=function(e,t){return new G(e,t).major},t.minor=function(e,t){return new G(e,t).minor},t.patch=function(e,t){return new G(e,t).patch},t.compare=z,t.compareLoose=function(e,t){return z(e,t,!0)},t.rcompare=function(e,t,r){return z(t,e,r)},t.sort=function(e,r){return e.sort((function(e,n){return t.compare(e,n,r)}))},t.rsort=function(e,r){return e.sort((function(e,n){return t.rcompare(e,n,r)}))},t.gt=J,t.lt=X,t.eq=W,t.neq=Z,t.gte=ee,t.lte=te,t.cmp=re,t.Comparator=ne;var ie={};function oe(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof oe)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new oe(e.raw,t);if(e instanceof ne)return new oe(e.value,t);if(!(this instanceof oe))return new oe(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){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function se(e){return!e||"x"===e.toLowerCase()||"*"===e}function ae(e,t,r,n,i,o,s,a,c,u,d,l,p){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(d)?"<"+c+"."+(+u+1)+".0":l?"<="+c+"."+u+"."+d+"-"+l:"<="+a)).trim()}function ce(e,t,n){for(var i=0;i0){var o=e[i].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}function ue(e,t,r){try{t=new oe(t,r)}catch(e){return!1}return t.test(e)}function de(e,t,r,n){var i,o,s,a,c;switch(e=new G(e,n),t=new oe(t,n),r){case">":i=J,o=te,s=X,a=">",c=">=";break;case"<":i=X,o=ee,s=J,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ue(e,t,n))return!1;for(var u=0;u=0.0.0")),l=l||e,p=p||e,i(e.semver,l.semver,n)?l=e:s(e.semver,p.semver,n)&&(p=e)})),l.operator===a||l.operator===c)return!1;if((!p.operator||p.operator===a)&&o(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}ne.prototype.parse=function(e){var t=this.options.loose?i[U]:i[V],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),r[2]?this.semver=new G(r[2],this.options.loose):this.semver=ie},ne.prototype.toString=function(){return this.value},ne.prototype.test=function(e){return r("Comparator.test",e,this.options.loose),this.semver===ie||("string"==typeof e&&(e=new G(e,this.options)),re(e,this.operator,this.semver,this.options))},ne.prototype.intersects=function(e,t){if(!(e instanceof ne))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return r=new oe(e.value,t),ue(this.value,r,t);if(""===e.operator)return r=new oe(this.value,t),ue(e.semver,r,t);var n=!(">="!==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);return n||i||o&&s||a||c},t.Range=oe,oe.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},oe.prototype.toString=function(){return this.range},oe.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var n=t?i[F]:i[B];e=e.replace(n,ae),r("hyphen replace",e),e=e.replace(i[M],"$1$2$3"),r("comparator trim",e,i[M]),e=(e=(e=e.replace(i[R],"$1~")).replace(i[q],"$1^")).split(/\s+/).join(" ");var o=t?i[U]:i[V],s=e.split(" ").map((function(e){return function(e,t){return r("comp",e,t),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){r("caret",e,t);var n=t.loose?i[L]:i[N];return e.replace(n,(function(t,n,i,o,s){var a;return r("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){return e.trim().split(/\s+/).map((function(e){return function(e,t){var n=t.loose?i[D]:i[P];return e.replace(n,(function(t,n,i,o,s){var a;return r("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){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function(e,t){e=e.trim();var n=t.loose?i[I]:i[S];return e.replace(n,(function(t,n,i,o,s,a){r("xRange",e,t,n,i,o,s,a);var c=se(i),u=c||se(o),d=u||se(s);return"="===n&&d&&(n=""),c?t=">"===n||"<"===n?"<0.0.0":"*":n&&d?(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":d&&(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){return r("replaceStars",e,t),e.trim().replace(i[H],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(s=s.filter((function(e){return!!e.match(o)}))),s=s.map((function(e){return new ne(e,this.options)}),this)},oe.prototype.intersects=function(e,t){if(!(e instanceof oe))throw new TypeError("a Range is required");return this.set.some((function(r){return r.every((function(r){return e.set.some((function(e){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){return new oe(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},oe.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new G(e,this.options));for(var t=0;t":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!J(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))return r;return null},t.validRange=function(e,t){try{return new oe(e,t).range||"*"}catch(e){return null}},t.ltr=function(e,t,r){return de(e,t,"<",r)},t.gtr=function(e,t,r){return de(e,t,">",r)},t.outside=de,t.prerelease=function(e,t){var r=K(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function(e,t,r){return e=new oe(e,r),t=new oe(t,r),e.intersects(t)},t.coerce=function(e){if(e instanceof G)return e;if("string"!=typeof e)return null;var t=e.match(i[k]);if(null==t)return null;return K(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}})),It=(St.SEMVER_SPEC_VERSION,St.re,St.src,St.parse,St.valid,St.clean,St.SemVer,St.inc,St.diff,St.compareIdentifiers,St.rcompareIdentifiers,St.major,St.minor,St.patch,St.compare,St.compareLoose,St.rcompare,St.sort,St.rsort,St.gt,St.lt,St.eq,St.neq,St.gte,St.lte,St.cmp,St.Comparator,St.Range,St.toComparators,St.satisfies,St.maxSatisfying,St.minSatisfying,St.minVersion,St.validRange,St.ltr,St.gtr,St.outside,St.prerelease,St.intersects,St.coerce,St.satisfies(process.version,"^6.12.0 || >=8.0.0")),kt=["RS256","RS384","RS512","ES256","ES384","ES512"],Ot=["RS256","RS384","RS512"],Rt=["HS256","HS384","HS512"];It&&(kt.splice(3,0,"PS256","PS384","PS512"),Ot.splice(3,0,"PS256","PS384","PS512"));var Pt=/^\s+|\s+$/g,Dt=/^[-+]0x[0-9a-f]+$/i,jt=/^0b[01]+$/i,qt=/^0o[0-7]+$/i,Nt=/^(?:0|[1-9]\d*)$/,Lt=parseInt;function Ut(e){return e!=e}function Vt(e,t){return function(e,t){for(var r=-1,n=e?e.length:0,i=Array(n);++r-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}(e.length)&&!function(e){var t=Zt(e)?$t.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)}function Zt(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function er(e){return!!e&&"object"==typeof e}var tr=function(e,t,r,n){var i;e=Wt(e)?e:(i=e)?Vt(i,function(e){return Wt(e)?Yt(e):zt(e)}(i)):[],r=r&&!n?function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||er(e)&&"[object Symbol]"==$t.call(e)}(e))return NaN;if(Zt(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Zt(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Pt,"");var r=jt.test(e);return r||qt.test(e)?Lt(e.slice(2),r?2:8):Dt.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(r):0;var o=e.length;return r<0&&(r=Qt(o+r,0)),function(e){return"string"==typeof e||!Xt(e)&&er(e)&&"[object String]"==$t.call(e)}(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&function(e,t,r){if(t!=t)return function(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o-1},rr=Object.prototype.toString;var nr=function(e){return!0===e||!1===e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Boolean]"==rr.call(e)},ir=/^\s+|\s+$/g,or=/^[-+]0x[0-9a-f]+$/i,sr=/^0b[01]+$/i,ar=/^0o[0-7]+$/i,cr=parseInt,ur=Object.prototype.toString;function dr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}var lr=function(e){return"number"==typeof e&&e==function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==ur.call(e)}(e))return NaN;if(dr(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=dr(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(ir,"");var r=sr.test(e);return r||ar.test(e)?cr(e.slice(2),r?2:8):or.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(e)},pr=Object.prototype.toString;var fr=function(e){return"number"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Number]"==pr.call(e)};var mr=Function.prototype,hr=Object.prototype,gr=mr.toString,yr=hr.hasOwnProperty,wr=gr.call(Object),vr=hr.toString,_r=function(e,t){return function(r){return e(t(r))}}(Object.getPrototypeOf,Object);var br=function(e){if(!function(e){return!!e&&"object"==typeof e}(e)||"[object Object]"!=vr.call(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e))return!1;var t=_r(e);if(null===t)return!0;var r=yr.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&gr.call(r)==wr},Er=Object.prototype.toString,Cr=Array.isArray;var Tr=function(e){return"string"==typeof e||!Cr(e)&&function(e){return!!e&&"object"==typeof e}(e)&&"[object String]"==Er.call(e)},Ar=/^\s+|\s+$/g,xr=/^[-+]0x[0-9a-f]+$/i,Sr=/^0b[01]+$/i,Ir=/^0o[0-7]+$/i,kr=parseInt,Or=Object.prototype.toString;function Rr(e,t){var r;if("function"!=typeof t)throw new TypeError("Expected a function");return e=function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==Or.call(e)}(e))return NaN;if(Pr(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Pr(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ar,"");var r=Sr.test(e);return r||Ir.test(e)?kr(e.slice(2),r?2:8):xr.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=void 0),r}}function Pr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}var Dr=function(e){return Rr(2,e)},jr=["RS256","RS384","RS512","ES256","ES384","ES512","HS256","HS384","HS512","none"];It&&jr.splice(3,0,"PS256","PS384","PS512");var qr={expiresIn:{isValid:function(e){return lr(e)||Tr(e)&&e},message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:function(e){return lr(e)||Tr(e)&&e},message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:function(e){return Tr(e)||Array.isArray(e)},message:'"audience" must be a string or array'},algorithm:{isValid:tr.bind(null,jr),message:'"algorithm" must be a valid string enum value'},header:{isValid:br,message:'"header" must be an object'},encoding:{isValid:Tr,message:'"encoding" must be a string'},issuer:{isValid:Tr,message:'"issuer" must be a string'},subject:{isValid:Tr,message:'"subject" must be a string'},jwtid:{isValid:Tr,message:'"jwtid" must be a string'},noTimestamp:{isValid:nr,message:'"noTimestamp" must be a boolean'},keyid:{isValid:Tr,message:'"keyid" must be a string'},mutatePayload:{isValid:nr,message:'"mutatePayload" must be a boolean'}},Nr={iat:{isValid:fr,message:'"iat" should be a number of seconds'},exp:{isValid:fr,message:'"exp" should be a number of seconds'},nbf:{isValid:fr,message:'"nbf" should be a number of seconds'}};function Lr(e,t,r,n){if(!br(r))throw new Error('Expected "'+n+'" to be a plain object.');Object.keys(r).forEach((function(i){var o=e[i];if(o){if(!o.isValid(r[i]))throw new Error(o.message)}else if(!t)throw new Error('"'+i+'" is not allowed in "'+n+'"')}))}var Ur={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},Vr=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"],Mr=function(e,t,r,n){var i;if("function"!=typeof r||n||(n=r,r={}),r||(r={}),r=Object.assign({},r),i=n||function(e,t){if(e)throw e;return t},r.clockTimestamp&&"number"!=typeof r.clockTimestamp)return i(new ht("clockTimestamp must be a number"));if(void 0!==r.nonce&&("string"!=typeof r.nonce||""===r.nonce.trim()))return i(new ht("nonce must be a non-empty string"));var o=r.clockTimestamp||Math.floor(Date.now()/1e3);if(!e)return i(new ht("jwt must be provided"));if("string"!=typeof e)return i(new ht("jwt must be a string"));var s,a=e.split(".");if(3!==a.length)return i(new ht("jwt malformed"));try{s=ft(e,{complete:!0})}catch(e){return i(e)}if(!s)return i(new ht("invalid token"));var c,u=s.header;if("function"==typeof t){if(!n)return i(new ht("verify must be called asynchronous if secret or public key is provided as a callback"));c=t}else c=function(e,r){return r(null,t)};return c(u,(function(t,n){if(t)return i(new ht("error in secret or public key callback: "+t.message));var c,d=""!==a[2].trim();if(!d&&n)return i(new ht("jwt signature is required"));if(d&&!n)return i(new ht("secret or public key must be provided"));if(d||r.algorithms||(r.algorithms=["none"]),r.algorithms||(r.algorithms=~n.toString().indexOf("BEGIN CERTIFICATE")||~n.toString().indexOf("BEGIN PUBLIC KEY")?kt:~n.toString().indexOf("BEGIN RSA PUBLIC KEY")?Ot:Rt),!~r.algorithms.indexOf(s.header.alg))return i(new ht("invalid algorithm"));try{c=pt.verify(e,s.header.alg,n)}catch(e){return i(e)}if(!c)return i(new ht("invalid signature"));var l=s.payload;if(void 0!==l.nbf&&!r.ignoreNotBefore){if("number"!=typeof l.nbf)return i(new ht("invalid nbf value"));if(l.nbf>o+(r.clockTolerance||0))return i(new yt("jwt not active",new Date(1e3*l.nbf)))}if(void 0!==l.exp&&!r.ignoreExpiration){if("number"!=typeof l.exp)return i(new ht("invalid exp value"));if(o>=l.exp+(r.clockTolerance||0))return i(new vt("jwt expired",new Date(1e3*l.exp)))}if(r.audience){var p=Array.isArray(r.audience)?r.audience:[r.audience];if(!(Array.isArray(l.aud)?l.aud:[l.aud]).some((function(e){return p.some((function(t){return t instanceof RegExp?t.test(e):t===e}))})))return i(new ht("jwt audience invalid. expected: "+p.join(" or ")))}if(r.issuer&&("string"==typeof r.issuer&&l.iss!==r.issuer||Array.isArray(r.issuer)&&-1===r.issuer.indexOf(l.iss)))return i(new ht("jwt issuer invalid. expected: "+r.issuer));if(r.subject&&l.sub!==r.subject)return i(new ht("jwt subject invalid. expected: "+r.subject));if(r.jwtid&&l.jti!==r.jwtid)return i(new ht("jwt jwtid invalid. expected: "+r.jwtid));if(r.nonce&&l.nonce!==r.nonce)return i(new ht("jwt nonce invalid. expected: "+r.nonce));if(r.maxAge){if("number"!=typeof l.iat)return i(new ht("iat required when maxAge is specified"));var f=xt(r.maxAge,l.iat);if(void 0===f)return i(new ht('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));if(o>=f+(r.clockTolerance||0))return i(new vt("maxAge exceeded",new Date(1e3*f)))}if(!0===r.complete){var m=s.signature;return i(null,{header:u,payload:l,signature:m})}return i(null,l)}))},Br=function(e,t,r,n){"function"==typeof r?(n=r,r={}):r=r||{};var i="object"==typeof e&&!Buffer.isBuffer(e),o=Object.assign({alg:r.algorithm||"HS256",typ:i?"JWT":void 0,kid:r.keyid},r.header);function s(e){if(n)return n(e);throw e}if(!t&&"none"!==r.algorithm)return s(new Error("secretOrPrivateKey must have a value"));if(void 0===e)return s(new Error("payload is required"));if(i){try{!function(e){Lr(Nr,!0,e,"payload")}(e)}catch(e){return s(e)}r.mutatePayload||(e=Object.assign({},e))}else{var a=Vr.filter((function(e){return void 0!==r[e]}));if(a.length>0)return s(new Error("invalid "+a.join(",")+" option for "+typeof e+" payload"))}if(void 0!==e.exp&&void 0!==r.expiresIn)return s(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.'));if(void 0!==e.nbf&&void 0!==r.notBefore)return s(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{!function(e){Lr(qr,!1,e,"options")}(r)}catch(e){return s(e)}var c=e.iat||Math.floor(Date.now()/1e3);if(r.noTimestamp?delete e.iat:i&&(e.iat=c),void 0!==r.notBefore){try{e.nbf=xt(r.notBefore,c)}catch(e){return s(e)}if(void 0===e.nbf)return s(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(void 0!==r.expiresIn&&"object"==typeof e){try{e.exp=xt(r.expiresIn,c)}catch(e){return s(e)}if(void 0===e.exp)return s(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(Ur).forEach((function(t){var n=Ur[t];if(void 0!==r[t]){if(void 0!==e[n])return s(new Error('Bad "options.'+t+'" option. The payload already has an "'+n+'" property.'));e[n]=r[t]}}));var u=r.encoding||"utf8";if("function"!=typeof n)return pt.sign({header:o,payload:e,secret:t,encoding:u});n=n&&Dr(n),pt.createSign({header:o,privateKey:t,payload:e,encoding:u}).once("error",n).once("done",(function(e){n(null,e)}))};let Fr=[];class Hr{constructor(e){this.options=Object.assign({baseUrl:"https://appleid.apple.com",timeout:1e4},e)}async _fetch(e,t){const{baseUrl:r}=this.options;return uniCloud.httpclient.request(r+e,t)}async verifyIdentityToken(e){const t=e.split(".")[0],{kid:r}=JSON.parse(Buffer.from(t,"base64").toString());if(!Fr.length)try{Fr=await this.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}const n=this.getUsedKey(Fr,r);if(!Object.keys(n).length&&!this.fetched)try{Fr=await this.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}let i=null;try{i=Mr(e,function(e,t){var r=Buffer.from(e,"base64"),n=Buffer.from(t,"base64"),i=r.toString("hex"),o=n.toString("hex");i=ae(i),o=ae(o);var s=i.length/2,a=o.length/2,c=ue(s),u=ue(a),d="30"+ue(s+a+c.length/2+u.length/2+2)+"02"+c+i+"02"+u+o;return"-----BEGIN RSA PUBLIC KEY-----\n"+Buffer.from(d,"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}}async getAuthKeys(){const{status:e,data:t}=await this._fetch("/auth/keys",{method:"GET",dataType:"json",timeout:this.options.timeout});if(200!==e)throw new Error("request https://appleid.apple.com/auth/keys fail");return t.keys}getUsedKey(e,t){let r={};for(let n=0;nvoid 0===e))return{code:K,messageValues:{param:this.t("dcloud-appid")}};const r=await M.doc(e).get(),n=r&&r.data&&r.data[0];if(!n)return{code:10002};const i=Object.keys($).reduce((e,t)=>{const r=t,i=function(e,t){return t.split(".").reduce((e,t)=>e&&e[t],e)}(n,t);return i&&e.push({[r]:i}),e},[]);let o;const s={dcloud_appid:zr.in(t),_id:zr.neq(n._id)},a={dcloud_appid:zr.exists(!1),_id:zr.neq(n._id)};switch(i.length){case 0:return{code:10004};case 1:o=zr.or([zr.and([i[0],s]),zr.and([i[0],a])]);break;default:o=zr.or([zr.and([zr.or(i),s]),zr.and([zr.or(i),a])])}const c=await M.where(o).limit(1).get();return c&&c.data&&c.data[0]?{code:10005}:{code:0}}const Xr=uniCloud.database().command;const Wr=uniCloud.database();const Zr=uniCloud.database();const en=uniCloud.database();async function tn(e){const t=["apiKey","apiSecret"];for(let r=0,n=t.length;r0){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);return A("upRes",await M.doc(t.data[0]._id).update(i)),{code:0,msg:""}}return{code:40202}}return{code:40201}},updateUser:async function(e){const t=e.uid;if(!t)return{code:K,messageValues:{param:this.t("user-id")}};delete e.uid;const{username:r,email:n}=e,{usernameToLowerCase:i,emailToLowerCase:o}=this._getConfig();let s=r&&r.trim(),a=n&&n.trim();return s&&(i&&(s=s.toLowerCase()),e.username=s),a&&(o&&(a=a.toLowerCase()),e.email=a),A("update -> upRes",await M.doc(t).update(e)),{code:0,msg:""}},banAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:J})},unbanAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:z})},closeAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:X})},openAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:z})},_getAlipayApi:function({platform:e}={}){const t=e||this.context.PLATFORM;if(!t)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const r=this._getConfig(t);if(!r.oauth||!r.oauth.alipay)throw new Error(this.t("config-param-require",{param:t+".alipay"}));return["appid","privateKey"].forEach(e=>{if(!r.oauth.alipay[e])throw new Error(this.t("config-param-require",{param:`${t}.alipay.${e}`}))}),Gr({...r.oauth.alipay,clientType:t})},_getValidInviteCode:async function({inviteCode:e}){let t,r=10;e?(r=1,t=e):t=Yr();let n=!1;try{for(;r>0&&!n;){r--;if(0===(await M.where({my_invite_code:t}).get()).data.length){n=!0;break}t=Yr()}t=Yr()}catch(e){}return n?{code:0,inviteCode:t}:e?{code:80401}:{code:80402}},_addUser:async function(e,{needPermission:t,autoSetDcloudAppid:r=!0}={}){const n=this._getConfig(),i={...e,dcloud_appid:r?[this.context.APPID]:[],register_date:Date.now(),register_ip:this.context.CLIENTIP},o=(await M.add(i)).id;let s;if(n.removePermissionAndRoleFromToken)s=await this.createToken({uid:o,needPermission:t});else{const t=e.role||[];let r;r=0===t.length||t.includes("admin")?[]:await this._getPermissionListByRoleList(t),s=await this.createToken({uid:o,role:t,permission:r})}const{token:a,tokenExpired:c}=s;return await M.doc(o).update({token:[a]}),{token:a,tokenExpired:c,uid:o,type:"register",userInfo:Object.assign({},i,{token:a})}},_loginExec:async function(e,t={}){if(e.status===J)return{code:10001};if(e.status===X)return{code:10006};const r=this._getConfig();let n=e.token||[];"string"==typeof n&&(n=[n]);const i=this._getExpiredToken(n);let o;if(n=n.filter(e=>-1===i.indexOf(e)),r.removePermissionAndRoleFromToken){const r=t.needPermission;o=await this.createToken({uid:e._id,needPermission:r})}else{const t=e.role||[];let r;r=0===t.length||t.includes("admin")?[]:await this._getPermissionListByRoleList(t),o=await this.createToken({uid:e._id,role:t,permission:r})}const{token:s,tokenExpired:a}=o;n.push(s),e.token=n;const c={last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP,token:n,...t.extraData};await M.doc(e._id).update(c);const u=Object.assign({},e,c);return{code:0,msg:"",token:s,uid:u._id,username:u.username,type:"login",userInfo:u,tokenExpired:a}},_registerExec:async function(e,{needPermission:t,autoSetDcloudAppid:r=!0}={}){const{my_invite_code:n}=e;if(this._getConfig().autoSetInviteCode||n){const t=await this._getValidInviteCode({inviteCode:n});if(t.code)return t;e.my_invite_code=t.inviteCode}return{code:0,msg:"",...await this._addUser(e,{needPermission:t,autoSetDcloudAppid:r})}},_getWeixinApi:function({platform:e}={}){const t=e||this.context.PLATFORM;if(!t)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const r=this._getConfig(t);if(!r.oauth||!r.oauth.weixin)throw new Error(this.t("config-param-require",{param:t+".weixin"}));return["appid","appsecret"].forEach(e=>{if(!r.oauth.weixin[e])throw new Error(this.t("config-param-require",{param:`${t}.weixin.${e}`}))}),$r({...r.oauth.weixin,clientType:t})},_getQQApi:function(){const e=this.context.PLATFORM;if(!e)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const t=this._getConfig(e);if(!t.oauth||!t.oauth.qq)throw new Error(this.t("config-param-require",{param:e+".qq"}));return["appid","appsecret"].forEach(r=>{if(!t.oauth.qq[r])throw new Error(this.t("config-param-require",{param:`${e}.qq.${r}`}))}),Kr({...t.oauth.qq,clientType:e})},_getMatchedUser:function(e,t){if(0===e.length)return{code:10002};let r;const n={},i={};for(let r=e.length-1;r>=0;r--){const o=e[r];for(let s=0;s0?{code:10003,messageValues:{target:"用户"}}:{code:0,msg:"",userMatched:r,fieldMatched:s,isFallbackValueMatched:!!s&&i[s]}},_getCurrentAppUser:function(e){const t=this.context.APPID;return e.filter(e=>void 0===e.dcloud_appid||null===e.dcloud_appid||e.dcloud_appid.indexOf(t)>-1||e.dcloud_appid.indexOf(null)>-1)},setAuthorizedAppLogin:async function({uid:e,dcloudAppidList:t}={}){if("array"!==g(t))return{code:G,messageValues:{param:"dcloudAppidList",reason:this.t("type-array-required",{param:this.t("dcloud-appid-list")})}};if(t&&0!==t.length){const r=await Jr.bind(this)({uid:e,dcloudAppidList:t});if(r.code)return r}return await M.doc(e).update({dcloud_appid:zr.set(t)}),{code:0}},authorizeAppLogin:async function({uid:e,dcloudAppid:t}={}){const r=await Jr.bind(this)({uid:e,dcloudAppidList:[t]});return r.code?r:(await M.doc(e).update({dcloud_appid:zr.push(t)}),{code:0})},forbidAppLogin:async function({uid:e,dcloudAppid:t}={}){return e?(await M.doc(e).update({dcloud_appid:zr.pull(t)}),{code:0}):{code:K,messageValues:{param:this.t("user-id")}}},acceptInvite:async function({uid:e,inviteCode:t}){const r=await M.where({_id:Xr.neq(e),inviter_uid:Xr.not(Xr.all([e])),my_invite_code:t}).get();if(1!==r.data.length)return{code:80501,msg:"邀请码无效"};const n=[r.data[0]._id].concat(r.data[0].inviter_uid||[]),i=await M.doc(e).field({my_invite_code:!0,inviter_uid:!0}).get();if(0===i.data.length)return{code:80502};if(i.data[0].inviter_uid&&i.data[0].inviter_uid.length>0)return{code:80503,msg:"邀请码不可修改"};const o=Date.now();return await M.doc(e).update({inviter_uid:n,invite_time:o}),await M.where({inviter_uid:e}).update({inviter_uid:Xr.push(n)}),{code:0,msg:""}},getInvitedUser:async function({uid:e,level:t=1,limit:r=20,offset:n=0,needTotal:i=!1}){const o={code:0,msg:"",invitedUser:(await M.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){const r=await M.where({["inviter_uid."+(t-1)]:e}).count();o.total=r.total}return o},setUserInviteCode:async function({uid:e,myInviteCode:t}){const r=await this._getValidInviteCode({inviteCode:t});return r.code?r:(await M.doc(e).update({my_invite_code:r.inviteCode}),{code:0,msg:"",myInviteCode:r.inviteCode})},loginByAlipay:async function(e){"string"==typeof e&&(e={code:e});const{needPermission:t,platform:r,code:n,myInviteCode:i,role:o,type:s}=e,a=r||this.context.PLATFORM,{openid:c}=await this._getAlipayApi({platform:a}).code2Session(n);if(!c)return{code:10501,messageValues:{account:this.t("alipay-account")}};let u=await M.where({ali_openid:c}).get();if(u=this._getCurrentAppUser(u.data),u&&u.length>0){if("register"===s)return{code:10502,messageValues:{type:this.t("alipay-account")}};if(1!==u.length)return{code:10005};const e=u[0],r=await this._loginExec(e,{needPermission:t});if(0!==r.code)return r;const{userInfo:n}=r;return{...r,openid:c,mobileConfirmed:1===n.mobile_confirmed,emailConfirmed:1===n.email_confirmed}}{if("login"===s)return{code:10503,messageValues:{type:this.t("alipay-account")}};const e={ali_openid:c};e.my_invite_code=i,e.role=o;const r=await this._registerExec(e,{needPermission:t});return 0!==r.code?r:{...r,openid:c,mobileConfirmed:!1,emailConfirmed:!1}}},loginByEmail:async function({email:e,code:t,password:r,myInviteCode:n,type:i,needPermission:o,role:s}){if(!(e=e&&e.trim()))return{code:K,messageValues:{param:"邮箱"}};const{emailToLowerCase:a}=this._getConfig();let c=e;a&&(c=e.toLowerCase());const u=await this.verifyCode({email:c,code:t,type:i||"login"});if(0!==u.code)return u;let d={email:e,email_confirmed:1};const l={field:"email",value:e},p=Wr.command;c!==e&&(d=p.or(d,{email:c,email_confirmed:1}),l.fallbackValue=c);let f=await M.where(d).get();if(f=this._getCurrentAppUser(f.data),f&&f.length>0){if("register"===i)return{code:10301,messageValues:{type:"邮箱"}};const e=this._getMatchedUser(f,[l]);if(e.code)return e;const{userMatched:t}=e,r=await this._loginExec(t,{needPermission:o});return 0!==r.code?r:{...r,email:c}}{if("login"===i)return{code:10302,messageValues:{type:"邮箱"}};const e={email:c,email_confirmed:1},t=r&&r.trim();if(t){const{passwordHash:r,version:n}=this.encryptPwd(t);e.password=r,n&&(e.password_secret_version=n)}e.my_invite_code=n,e.role=s;const a=await this._registerExec(e,{needPermission:o});return 0!==a.code?a:{...a,email:c}}},loginBySms:async function({mobile:e,code:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){if(!(e=e&&e.trim()))return{code:K,messageValues:{param:this.t("mobile")}};const c=this._getConfig();if(c.forceInviteCode&&!o)throw new Error(this.t("login-with-invite-type-required"));const u=await this.verifyCode({mobile:e,code:t,type:o||"login"});if(0!==u.code)return u;const d={mobile:e,mobile_confirmed:1};let l=await M.where(d).get();if(l=this._getCurrentAppUser(l.data),l&&l.length>0){if("register"===o)return{code:10201,messageValues:{type:this.t("mobile")}};if(1!==l.length)return{code:10005};const t=l[0],r=await this._loginExec(t,{needPermission:s});return 0!==r.code?r:{...r,mobile:e}}{const t=Date.now();if("login"===o)return{code:10202,messageValues:{type:this.t("mobile")}};const u={mobile:e,mobile_confirmed:1,register_ip:this.context.CLIENTIP,register_date:t},d=r&&r.trim();if(d){const{passwordHash:e,version:t}=this.encryptPwd(d);u.password=e,t&&(u.password_secret_version=t)}if(n){const e=await M.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10203};u.inviter_uid=[e.data[0]._id].concat(e.data[0].inviter_uid||[]),u.invite_time=t}else if(c.forceInviteCode)return{code:10203};u.my_invite_code=i,u.role=a;const l=await this._registerExec(u,{needPermission:s});return 0!==l.code?l:{...l,mobile:e}}},loginByWeixin:async function(e){"string"==typeof e&&(e={code:e});const{needPermission:t,platform:r,code:n,myInviteCode:i,role:o,type:s}=e,a=r||this.context.PLATFORM,c="mp-weixin"===a,{openid:u,unionid:d,sessionKey:l,accessToken:p,refreshToken:f,expired:m}=await this._getWeixinApi({platform:a})[c?"code2Session":"getOauthAccessToken"](n);if(!u)return{code:10401,messageValues:{account:"微信openid"}};let h;h=c?{sessionKey:l}:{accessToken:p,refreshToken:f,accessTokenExpired:m};const g=Zr.command,y=[{wx_openid:{[a]:u}}];d&&y.push({wx_unionid:d});let w=await M.where(g.or(...y)).get();if(w=this._getCurrentAppUser(w.data),w&&w.length>0){if("register"===s)return{code:10402,messageValues:{type:this.t("wechat-account")}};if(1!==w.length)return{code:10005};const e=w[0],r={wx_openid:{[a]:u}};d&&(r.wx_unionid=d);const n=await this._loginExec(e,{needPermission:t,extraData:r});if(0!==n.code)return n;const{userInfo:i}=n;return{...n,openid:u,unionid:d,...h,mobileConfirmed:1===i.mobile_confirmed,emailConfirmed:1===i.email_confirmed}}{if("login"===s)return{code:10403,messageValues:{type:this.t("wechat-account")}};const e={wx_openid:{[a]:u},wx_unionid:d};e.my_invite_code=i,e.role=o;const r=await this._registerExec(e,{needPermission:t});return 0!==r.code?r:{...r,openid:u,unionid:d,...h,mobileConfirmed:!1,emailConfirmed:!1}}},loginByQQ:async function({code:e,accessToken:t,myInviteCode:r,needPermission:n,role:i,type:o}={}){const s=this.context.PLATFORM,a="mp-qq"===s,{openid:c,unionid:u,sessionKey:d}=await this._getQQApi()[a?"code2Session":"getOpenidByToken"]({code:e,accessToken:t});if(!c)return{code:10801,messageValues:{account:"qq openid"}};const l={accessToken:t,sessionKey:d},p=en.command,f=[{qq_openid:{[s]:c}}];u&&f.push({qq_unionid:u});let m=await M.where(p.or(...f)).get();if(m=this._getCurrentAppUser(m.data),m&&m.length>0){if("register"===o)return{code:10802,messageValues:{type:this.t("qq-account")}};if(1!==m.length)return{code:10005};const e=m[0],t={qq_openid:{[s]:c}};u&&(t.qq_unionid=u);const r=await this._loginExec(e,{needPermission:n,extraData:t});if(0!==r.code)return r;const{userInfo:i}=r;return{...r,openid:c,unionid:u,...l,mobileConfirmed:1===i.mobile_confirmed,emailConfirmed:1===i.email_confirmed}}{if("login"===o)return{code:10803,messageValues:{type:this.t("qq-account")}};const e={qq_openid:{[s]:c},qq_unionid:u};e.my_invite_code=r,e.role=i;const t=await this._registerExec(e);return 0!==t.code?t:{...t,openid:c,unionid:u,...l,mobileConfirmed:!1,emailConfirmed:!1}}},loginByUniverify:async function({openid:e,access_token:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){const c=this._getConfig(),u=c&&c.service&&c.service.univerify;if(!u)throw new Error(this.t("uni-verify-config-required"));if(c.forceInviteCode&&!o)throw new Error(this.t("login-with-invite-type-required"));const d=await tn.bind(this)({...u,openid:e,access_token:t});if(0!==d.code)return d;const l=String(d.phoneNumber);let p=await M.where({mobile:l}).get();if(p=this._getCurrentAppUser(p.data),p&&p.length>0){if("register"===o)return{code:10601,messageValues:{type:this.t("mobile")}};if(1!==p.length)return{code:10005};const e=p[0],t=await this._loginExec(e,{needPermission:s});return 0!==t.code?t:{...t,mobile:l}}if("login"===o)return{code:10602,messageValues:{type:this.t("mobile")}};const f=Date.now(),m={mobile:l,my_invite_code:i,mobile_confirmed:1,role:a},h=r&&r.trim();if(h){const{passwordHash:e,version:t}=this.encryptPwd(h);m.password=e,t&&(m.password_secret_version=t)}if(n){let e=await M.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10203};e=e.data[0],m.inviter_uid=[e._id].concat(e.inviter_uid||[]),m.invite_time=f}else if(c.forceInviteCode)return{code:10203};m.my_invite_code=i;const g=await this._registerExec(m,{needPermission:s});return 0!==g.code?g:{...g,mobile:l}},loginByApple:async function({nickName:e,fullName:t,identityToken:r,myInviteCode:n,type:i,needPermission:o,platform:s,role:a}){const c=this._getConfig(),u=c&&c["app-plus"]&&c["app-plus"].oauth&&c["app-plus"].oauth.apple,d=u&&u.bundleId;if(!d)throw new Error(this.t("config-param-require",{param:"app-plus.alipay.bundleId"}));if(!r)return{code:K,messageValues:{param:"identityToken"}};const l=s||this.context.PLATFORM;t=e||(t&&Object.keys(t).length>0?t.familyName+t.givenName:"");const{code:p,msg:f}=await Qr({clientType:l}).verifyIdentityToken(r);if(0!==p)return{code:p,msg:f,messageValues:{account:this.t("apple-account")}};const{iss:m,sub:h,aud:g,email:y}=f;if("https://appleid.apple.com"!==m)return{code:10706,messageValues:{account:this.t("apple-account")}};if(!h)return{code:10701,messageValues:{account:this.t("apple-account")}};if(d!==g)return{code:10702,messageValues:{account:this.t("apple-account")}};const w=t||"User-"+y.split("@")[0];let v=await M.where({apple_openid:h}).get();if(v=this._getCurrentAppUser(v.data),v&&v.length>0){if("register"===i)return{code:10703,messageValues:{type:this.t("apple-account")}};if(1!==v.length)return{code:10005};const e=v[0],t=await this._loginExec(e,{needPermission:o});return 0!==t.code?t:{...t,openid:h}}if("login"===i)return{code:10704,messageValues:{type:this.t("apple-account")}};const _={nickname:w,apple_openid:h,my_invite_code:n,role:a},b=await this._registerExec(_,{needPermission:o});return 0!==b.code?b:{...b,openid:h}},login:async function({username:e,password:t,queryField:r=[],needPermission:n}){const i=rn.command,o=[];r&&r.length||(r=["username"]),r.length>1&&console.warn(this.t("query-field-warning"));const{usernameToLowerCase:s,emailToLowerCase:a,passwordErrorLimit:c,passwordErrorRetryTime:u}=this._getConfig(),d={email:{email_confirmed:1},mobile:{mobile_confirmed:1}},l={},p=e.trim();if(!p)return{code:K,messageValues:{param:this.t("username")}};s&&(l.username=p.toLowerCase()),a&&(l.email=p.toLowerCase());const f=[];r.forEach(t=>{o.push({[t]:e,...d[t]});const r={field:t,value:e};"username"===t&&l.username!==e?(o.push({[t]:l.username,...d[t]}),r.fallbackValue=l.username):"email"===t&&l.email!==e&&(o.push({[t]:l.email,...d[t]}),r.fallbackValue=l.email),f.push(r)});let m=await M.where(i.or(...o)).limit(1).get();m=this._getCurrentAppUser(m.data);const h=this.context.CLIENTIP,g=this._getMatchedUser(m,f);if(g.code)return g;const{userMatched:y}=g;let w=y.login_ip_limit||[];w=w.filter(e=>e.last_error_time>Date.now()-1e3*u);let v=w.find(e=>e.ip===h);if(v&&v.error_times>=c)return{code:10103};const _=t&&t.trim();if(!_)return{code:K,messageValues:{param:"密码"}};const b=this._checkPwd(y,_);if(0===b.code){const e=w.indexOf(v);e>-1&&w.splice(e,1);const t={login_ip_limit:w},{passwordHash:r,passwordVersion:i}=b;r&&i&&(t.password=r,t.password_secret_version=i);const o=await this._loginExec(y,{needPermission:n,extraData:t});return o.code,o}return v?(v.error_times++,v.last_error_time=Date.now()):(v={ip:h,error_times:1,last_error_time:Date.now()},w.push(v)),await M.doc(y._id).update({login_ip_limit:w}),{code:10102,msg:"密码错误"}},register:async function(e){const t=[],r=[{name:"username",desc:this.t("username")},{name:"email",desc:this.t("email"),extraCond:{email_confirmed:1}},{name:"mobile",desc:this.t("mobile"),extraCond:{mobile_confirmed:1}}],{usernameToLowerCase:n,emailToLowerCase:i}=this._getConfig();r.forEach(r=>{const o=r.name;let s=e[o]&&e[o].trim();s?(("username"===r.name&&n||"email"===r.name&&i)&&(s=s.toLowerCase()),e[o]=s,t.push({[o]:s,...r.extraCond})):delete e[o]});const{username:o,email:s,mobile:a,myInviteCode:c,needPermission:u,autoSetDcloudAppid:d=!0}=e;if("needPermission"in e&&delete e.needPermission,"autoSetDcloudAppid"in e&&delete e.autoSetDcloudAppid,0===t.length)return{code:20101,messageValues:{param:this.t("user-unique-param")}};const l=nn.command;let p=await M.where(l.or(...t)).get();if(p=this._getCurrentAppUser(p.data),p&&p.length>0){const t=p[0];if(t.status===X)return{code:10006};for(let n=0;nt[e]===i.extraCond[e])),t[i.name]===e[i.name]&&o)return{code:20102,messageValues:{type:i.desc}}}}const f=e.password&&e.password.trim();if(!f)return{code:K,messageValues:{param:this.t("password")}};const{passwordHash:m,version:h}=this.encryptPwd(f);e.password=m,h&&(e.password_secret_version=h),e.my_invite_code=c,delete e.myInviteCode;const g=await this._registerExec(e,{needPermission:u,autoSetDcloudAppid:d});return 0!==g.code?g:{...g,username:o,email:s,mobile:a}},logout:async function(e){const t=await this.checkToken(e);if(t.code)return t;const r=on.command;return await M.doc(t.uid).update({token:r.pull(e)}),{code:0,msg:""}},getRoleByUid:async function({uid:e}){if(!e)return{code:K,messageValues:{param:this.t("user-id")}};const t=await M.doc(e).get();return 0===t.data.length?{code:Q}:{code:0,msg:"",role:t.data[0].role||[]}},getPermissionByRole:async function({roleID:e}){if(!e)return{code:K,messageValues:{param:"roleID"}};if("admin"===e){return{code:0,msg:"",permission:(await H.limit(1e3).get()).data.map(e=>e.permission_id)}}const t=await F.where({role_id:e}).get();return 0===t.data.length?{code:Y}:{code:0,msg:"",permission:t.data[0].permission||[]}},getPermissionByUid:async function({uid:e}){const t=await M.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=[];return t.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),{code:0,msg:"",permission:S(r)}},bindRole:async function({uid:e,roleList:t,reset:r=!1}){const n={};return"string"==typeof t&&(t=[t]),n.role=r?t:sn.push(t),await M.doc(e).update(n),{code:0,msg:""}},bindPermission:async function({roleID:e,permissionList:t,reset:r=!1}){const n={};return"string"==typeof t&&(t=[t]),n.permission=r?t:sn.push(t),await F.where({role_id:e}).update(n),{code:0,msg:""}},unbindRole:async function({uid:e,roleList:t}){return"string"==typeof t&&(t=[t]),await M.doc(e).update({role:sn.pull(sn.in(t))}),{code:0,msg:""}},unbindPermission:async function({roleID:e,permissionList:t}){return"string"==typeof t&&(t=[t]),await F.where({role_id:e}).update({permission:sn.pull(sn.in(t))}),{code:0,msg:""}},addRole:async function({roleID:e,roleName:t,comment:r,permission:n=[]}){return e?"admin"===e?{code:G,messageValues:{param:"roleID",reason:this.t("add-role-admin-is-not-allowed")}}:(await F.add({role_id:e,role_name:t,comment:r,permission:n,create_date:Date.now()}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("role-id")}}},addPermission:async function({permissionID:e,permissionName:t,comment:r}){return e?(await H.add({permission_id:e,permission_name:t,comment:r,create_date:Date.now()}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("permission-id")}}},getRoleList:async function({limit:e=20,offset:t=0,needTotal:r=!0}){const n={code:0,msg:"",roleList:(await F.skip(t).limit(e).get()).data};if(r){const{total:e}=await F.where({_id:sn.exists(!0)}).count();n.total=e}return n},getRoleInfo:async function(e){const t=await F.where({role_id:e}).get();return 0===t.data.length?{code:Y}:{code:0,...t.data[0]}},updateRole:async function({roleID:e,roleName:t,comment:r,permission:n}){return e?(await F.where({role_id:e}).update({role_name:t,comment:r,permission:n}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("role-id")}}},deleteRole:async function({roleID:e}){const t=g(e);if("string"===t)e=[e];else if("array"!==t)throw new Error("typeof roleID must be array or string");return await F.where({role_id:sn.in(e)}).remove(),await M.where({role:sn.elemMatch(sn.in(e))}).update({role:sn.pullAll(e)}),{code:0,msg:""}},getPermissionList:async function({limit:e=20,offset:t=0,needTotal:r=!0}){const n={code:0,msg:"",permissionList:(await H.skip(t).limit(e).get()).data};if(r){const{total:e}=await H.where({_id:sn.exists(!0)}).count();n.total=e}return n},getPermissionInfo:async function(e){const t=await H.where({permission_id:e}).get();return 0===t.data.length?{code:K,messageValues:{param:this.t("permission-id")}}:{code:0,...t.data[0]}},updatePermission:async function({permissionID:e,permissionName:t,comment:r}){return e?(await H.where({permission_id:e}).update({permission_name:t,comment:r}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("permission-id")}}},deletePermission:async function({permissionID:e}){const t=g(e);if("string"===t)e=[e];else if("array"!==t)throw new Error("typeof permissionID must be array or string");return await H.where({permission_id:sn.in(e)}).remove(),await F.where({permission:sn.elemMatch(sn.in(e))}).update({permission:sn.pullAll(e)}),{code:0,msg:""}},bindAlipay:async function({uid:e,code:t,platform:r}){const n=r||this.context.PLATFORM,{openid:i}=await this._getAlipayApi({platform:n}).code2Session(t);if(!i)return{code:60401,messageValues:{account:this.t("alipay-account")}};let o=await M.where({ali_openid:i}).get();return o=this._getCurrentAppUser(o.data),o&&o.length>0?{code:60402,messageValues:{type:this.t("alipay-account")}}:(await M.doc(e).update({ali_openid:i}),{code:0,openid:i,msg:""})},bindEmail:async function({uid:e,email:t,code:r}){if(!(t=t&&t.trim()))return{code:K,messageValues:{param:"邮箱"}};if(!r)return{code:K,messageValues:{param:"验证码"}};const{emailToLowerCase:n}=this._getConfig();n&&(t=t.toLowerCase());let i=await M.where({email:t,email_confirmed:1}).get();if(i=this._getCurrentAppUser(i.data),i&&i.length>0)return{code:60201,messageValues:{type:"邮箱"}};if(r){const e=await this.verifyCode({email:t,code:r,type:"bind"});if(0!==e.code)return e}return await M.doc(e).update({email:t,email_confirmed:1}),{code:0,msg:"",email:t}},bindMobile:async function({uid:e,mobile:t,code:r,openid:n,access_token:i,type:o="sms"}){if("univerify"===o){const e=this._getConfig(),r=e&&e.service&&e.service.univerify;if(!r)throw new Error("请在config.json中配置service.univerify下一键登录相关参数");const o=await tn.bind(this)({...r,openid:n,access_token:i});if(0!==o.code)return o;t=""+o.phoneNumber}let s=await M.where({mobile:t,mobile_confirmed:1}).get();if(s=this._getCurrentAppUser(s.data),s&&s.length>0)return{code:60101,messageValues:{type:"手机号"}};if("sms"===o&&r){if(!t)return{code:K,messageValues:{param:this.t("mobile")}};if(!r)return{code:K,messageValues:{param:this.t("verify-code")}};const e=await this.verifyCode({mobile:t,code:r,type:"bind"});if(0!==e.code)return e}return await M.doc(e).update({mobile:t,mobile_confirmed:1}),{code:0,msg:"",mobile:t}},bindWeixin:async function({uid:e,code:t,platform:r}){const n=r||this.context.PLATFORM,i="mp-weixin"===n,{openid:o,unionid:s,sessionKey:a,accessToken:c,refreshToken:u,expired:d}=await this._getWeixinApi({platform:n})[i?"code2Session":"getOauthAccessToken"](t);if(!o)return{code:60301,messageValues:{account:"微信openid"}};const l=an.command,p=[{wx_openid:{[n]:o}}];s&&p.push({wx_unionid:s});let f=await M.where(l.or(...p)).get();if(f=this._getCurrentAppUser(f.data),f&&f.length>0)return{code:60302,messageValues:{type:this.t("wechat-account")}};const m={wx_openid:{[n]:o}};let h;return s&&(m.wx_unionid=s),await M.doc(e).update(m),h=i?{sessionKey:a}:{accessToken:c,refreshToken:u,accessTokenExpired:d},{code:0,msg:"",openid:o,unionid:s,...h}},bindQQ:async function({uid:e,code:t,accessToken:r,platform:n}={}){const i=n||this.context.PLATFORM,o="mp-qq"===i,{openid:s,unionid:a,sessionKey:c}=await this._getQQApi()[o?"code2Session":"getOpenidByToken"]({code:t,accessToken:r});if(!s)return{code:60501,messageValues:{account:"qq openid"}};const u=cn.command,d=[{qq_openid:{[i]:s}}];a&&d.push({qq_unionid:a});let l=await M.where(u.or(...d)).get();if(l=this._getCurrentAppUser(l.data),l&&l.length>0)return{code:60502,messageValues:{type:this.t("qq-account")}};const p={qq_openid:{[i]:s}};return a&&(p.qq_unionid=a),await M.doc(e).update(p),{code:0,msg:"",openid:s,unionid:a,...{accessToken:r,sessionKey:c}}},unbindAlipay:async function(e){const t=un.command,r=await M.doc(e).update({ali_openid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70401}},unbindEmail:async function({uid:e,email:t,code:r}){if(t=t&&t.trim(),!e||!t)return{code:K,messageValues:{param:e?this.t("email"):this.t("user-id")}};const{emailToLowerCase:n}=this._getConfig();if(r){const e=await this.verifyCode({email:t,code:r,type:"unbind"});if(0!==e.code)return e}const i=dn.command;let o={_id:e,email:t};if(n){const r=t.toLowerCase();r!==t&&(o=i.or(o,{_id:e,email:r}))}return 1===(await M.where(o).update({email:i.remove(),email_confirmed:i.remove()})).updated?{code:0,msg:""}:{code:70201}},unbindMobile:async function({uid:e,mobile:t,code:r}){if(r){const e=await this.verifyCode({mobile:t,code:r,type:"unbind"});if(0!==e.code)return e}const n=ln.command;return 1===(await M.where({_id:e,mobile:t}).update({mobile:n.remove(),mobile_confirmed:n.remove()})).updated?{code:0,msg:""}:{code:70101}},unbindWeixin:async function(e){const t=pn.command,r=await M.doc(e).update({wx_openid:t.remove(),wx_unionid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70301}},unbindQQ:async function(e){const t=fn.command,r=await M.doc(e).update({qq_openid:t.remove(),qq_unionid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70501}},code2SessionAlipay:async function(e){let t=e;"string"==typeof e&&(t={code:e});try{const e=t.platform||this.context.PLATFORM,r=await this._getAlipayApi({platform:e}).code2Session(t.code);return r.openid?{code:0,msg:"",...r}:{code:80701,messageValues:{account:this.t("alipay-account")}}}catch(e){return{code:80702,messageValues:{account:this.t("alipay-account")}}}},code2SessionWeixin:async function(e){let t=e;"string"==typeof e&&(t={code:e});try{const e=t.platform||this.context.PLATFORM,r=await this._getWeixinApi({platform:e})["mp-weixin"===e?"code2Session":"getOauthAccessToken"](t.code);return r.openid?{code:0,msg:"",...r}:{code:80601,messageValues:{account:"微信openid"}}}catch(e){return{code:80602,messageValues:{account:"微信openid"}}}},verifyAppleIdentityToken:async function({identityToken:e,platform:t}){const r=t||this.context.PLATFORM,{code:n,msg:i}=await Qr({clientType:r}).verifyIdentityToken(e);return 0!==n?{code:n,msg:i}:{code:n,msg:"验证通过",...i}},wxBizDataCrypt:async function({code:e,sessionKey:t,encryptedData:r,iv:i}){if(!r)return{code:K,messageValues:{param:"encryptedData"}};if(!i)return{code:K,messageValues:{param:"iv"}};if(!e&&!t)return{code:K,messageValues:{param:"sessionKey"}};const o=this._getWeixinApi();if(!t){const r=await o.code2Session(e);if(!r.sessionKey)return{code:80801};t=r.sessionKey}t=Buffer.from(t,"base64"),r=Buffer.from(r,"base64"),i=Buffer.from(i,"base64");try{var s=n.createDecipheriv("aes-128-cbc",t,i);s.setAutoPadding(!0);var a=s.update(r,"binary","utf8");a+=s.final("utf8"),a=JSON.parse(a)}catch(e){return console.error(e),{code:80802}}return a.watermark.appid!==o.options.appId?{code:80803}:{code:0,msg:"",...a}},encryptPwd:function(e,{value:t,version:r}={}){if(!(e=e&&e.trim()))throw new Error(this.t("param-required",{param:this.t("password")}));if(!t){const e=this._getConfig(),{passwordSecret:n}=e;if("array"===g(n)){const e=n.sort((e,t)=>e.version-t.version);t=e[e.length-1].value,r=e[e.length-1].version}else t=n}if(!t)throw new Error(this.t("param-error",{param:"passwordSecret",reason:"invalid passwordSecret"}));const i=n.createHmac("sha1",t.toString("ascii"));return i.update(e),{passwordHash:i.digest("hex"),version:r}},checkToken:async function(e,{needPermission:t,needUserInfo:r=!0}={}){const n=this._getConfig(),i=this._verifyToken(e);if(i.code)return i;const{uid:o,needPermission:s,role:a,permission:c,exp:u}=i,d=a&&c;t=void 0===t?s:t;const l=n.removePermissionAndRoleFromToken||!d||r,p=!n.removePermissionAndRoleFromToken&&!d||n.removePermissionAndRoleFromToken&&d||n.tokenExpiresThreshold&&u-Date.now()/1e3-1===r.indexOf(e)),t.push(e.token),await M.doc(o).update({token:t,last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP}),{...m,...e}}return m},createToken:function({uid:e,needPermission:t,role:r,permission:n}){if(!e)return{code:30101,messageValues:{param:this.t("user-id")}};const i={uid:e,needPermission:t,role:r,permission:n},o=this._getConfig();if(!this.interceptorMap.has("customToken")){const e={...i};return this._createTokenInternal({signContent:e,config:o})}const s=this.interceptorMap.get("customToken");if("function"!=typeof s)throw new Error(this.t("type-function-required","custumToken"));const a=s(i);return a instanceof Promise?a.then(e=>this._createTokenInternal({signContent:e,config:o})):this._createTokenInternal({signContent:a,config:o})},_checkPwd:function(e,t){if(!t)return{code:1};const{password:r,password_secret_version:n}=e,i=this._getConfig(),{passwordSecret:o}=i,s=g(o);if("string"===s){const{passwordHash:e}=this.encryptPwd(t,{value:o});return e===r?{code:0,message:""}:{code:2}}if("array"!==s)throw new Error(this.t("password-secret-type-error"));const a=o.sort((e,t)=>e.version-t.version);let c;if(c=n?a.find(e=>e.version===n):a[0],!c)return{code:3};const u=a[a.length-1],{passwordHash:d}=this.encryptPwd(t,c);if(d===r){const e={code:0};if(c!==u){const{passwordHash:r,version:n}=this.encryptPwd(t,u);e.passwordHash=r,e.passwordVersion=n}return e}return{code:4,message:""}},_verifyToken:function(e){const t=this._getConfig();let r;try{r=Mr(e,t.tokenSecret)}catch(e){return"TokenExpiredError"===e.name?{code:30203,err:e}:{code:30204,err:e}}return t.bindTokenToDevice&&r.clientId&&r.clientId!==this._getClientUaHash()?{code:30201}:{code:0,message:"",...r}},_getExpiredToken:function(e){const t=this._getConfig(),r=[];return e.forEach(e=>{try{Mr(e,t.tokenSecret)}catch(t){r.push(e)}}),r},_getPermissionListByRoleList:async function(e){if(!Array.isArray(e))return[];if(0===e.length)return[];if(e.includes("admin")){return(await H.limit(500).get()).data.map(e=>e.permission_id)}const t=await F.where({role_id:mn.in(e)}).get(),r=[];return t.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),S(r)},_getClientUaHash:function(){const e=n.createHash("md5"),t=/MicroMessenger/i.test(this.context.CLIENTUA)?this.context.CLIENTUA.replace(/(MicroMessenger\S+).*/i,"$1"):this.context.CLIENTUA;return e.update(t),e.digest("hex")},_createTokenInternal:function({signContent:e,config:t}){if(t.tokenExpiresIn&&t.tokenExpiresThreshold&&t.tokenExpiresIn<=t.tokenExpiresThreshold)throw new Error(this.t("token-expires-config-warning"));return"object"===g(e)&&e.uid?(t.bindTokenToDevice&&(e.clientId=this._getClientUaHash()),{token:Br(e,t.tokenSecret,{expiresIn:t.tokenExpiresIn}),tokenExpired:Date.now()+1e3*t.tokenExpiresIn}):{code:30101,messageValues:{param:this.t("user-id")}}},setVerifyCode:async function({mobile:e,email:t,code:r,expiresIn:n,type:i}){if(t=t&&t.trim(),e=e&&e.trim(),t){const{emailToLowerCase:e}=this._getConfig();e&&(t=t.toLowerCase())}if(!e&&!t)return{code:50101,messageValues:{param:"手机号或邮箱"}};if(e&&t)return{code:50102,messageValues:{param:"参数",reason:"手机号和邮箱不可同时存在"}};r||(r=x()),n||(n=180);const o=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};return A("addRes",await B.add(s)),{code:0,mobile:e,email:t}},verifyCode:async function({mobile:e,email:t,code:r,type:n}){if(t=t&&t.trim(),e=e&&e.trim(),t){const{emailToLowerCase:e}=this._getConfig();e&&(t=t.toLowerCase())}if(!e&&!t)return{code:50201,messageValues:{param:"手机号或邮箱"}};if(e&&t)return{code:50203,messageValues:{param:"参数",reason:"手机号和邮箱不可同时存在"}};const i=hn.command,o=Date.now(),s={mobile:e,email:t,type:n,code:r,state:0,expired_at:i.gt(o)},a=await B.where(s).orderBy("created_at","desc").limit(1).get();if(A("verifyRecord:",a),a&&a.data&&a.data.length>0){const e=a.data[0];return A("upRes",await B.doc(e._id).update({state:1})),{code:0,msg:"验证通过"}}return{code:50202,msg:"验证码错误或已失效"}},sendSmsCode:async function({mobile:e,code:t,type:r,templateId:n}){if(!e)return{code:K,messageValues:{param:this.t("mobile")}};if(t||(t=x()),!r)return{code:K,messageValues:{param:this.t("verify-code-type")}};const i=this._getConfig();let o=i&&i.service&&i.service.sms;if(!o)throw new Error(this.t("config-param-required",{param:"service.sms"}));o=Object.assign({codeExpiresIn:300},o);const s=["smsKey","smsSecret"];for(let e=0,t=s.length;e=0?o:{code:0,msg:""}}catch(e){return{code:50301}}}});let yn;try{yn=require("uni-config-center")}catch(e){}class wn{constructor({context:e,config:t}={}){const r=yn&&yn({pluginId:"uni-id"});let n;this.pluginConfig=r,this.config=t||this._getConfigContent(),Object.defineProperty(this,"context",{get(){const t=e||global.__ctx__||{},r=["CLIENTIP","PLATFORM","APPID","LOCALE"];for(let e=0;ee.dcloudAppid===this.context.APPID)||e.find(e=>e.isDefaultConfig)}_getConfigContent(){if(this.pluginConfig&&this.pluginConfig.hasFile("config.json")){this._hasConfigFile=!0;try{return this._parseConfig(this.pluginConfig.config())}catch(e){return}}const e=r.resolve(__dirname,"config.json");this._hasConfigFile=t.existsSync(e);try{return this._parseConfig(require(e))}catch(e){}}init(e){console.warn("uniID.init has been deprecated, use uniID.createInstance instead"),this.config=e}setInterceptor(e,t){this.interceptorMap.set(e,t)}_getConfig(e){const t=this.config&&0!==Object.keys(this.config).length;if(this._hasConfigFile&&!t)throw new Error(this.t("config-file-invalid"));if(!t)throw new Error(this.t("config-file-not-found"));const r=this._getCurrentAppConfig(this.config),n=Object.assign(r,r[e||this.context.PLATFORM])||{},i=Object.assign({bindTokenToDevice:!1,tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600,usernameToLowerCase:!0,emailToLowerCase:!0},n);return["passwordSecret","tokenSecret","tokenExpiresIn","passwordErrorLimit","passwordErrorRetryTime"].forEach(e=>{if(!i||!i[e])throw new Error(this.t("config-param-required",{param:e}))}),i}}for(const e in gn)wn.prototype[e]=gn[e];function vn({context:e,config:t}={}){const r=new wn({context:e,config:t});return new Proxy(r,{get(e,t){if(t in e&&0!==t.indexOf("_"))return"function"==typeof e[t]?(r=e[t],function(){const e=r.apply(this,arguments);return h(e)?e.then(e=>(R.bind(this)(e),e)):(R.bind(this)(e),e)}).bind(e):e[t];var r}})}wn.prototype.createInstance=vn;var _n=vn();module.exports=_n; +"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("fs")),r=e(require("path")),n=e(require("crypto")),i=e(require("buffer")),o=e(require("stream")),s=e(require("util"));const a={PARAM_ERROR:{errCode:"param-error"},PARAM_REQUIRED:{errCode:"param-required"},USER_NOT_EXIST:{errCode:"user-not-exist"},ROLE_NOT_EXIST:{errCode:"role-not-exist"},PERMISSION_NOT_EXIST:{errCode:"permission-not-exist"},MULTI_USER_MATCHED:{errCode:"multi-user-matched"},USER_INFO_ERROR:{errCode:"user-info-error"},USER_ACCOUNT_CONFLICT:{errCode:"user-account-conflict"},USER_ACCOUNT_CLOSED:{errCode:"user-account-closed"},ACCOUNT_ALREADY_REGISTED:{errCode:"account-already-registed"},ACCOUNT_NOT_REGISTED:{errCode:"account-not-registed"},ACCOUNT_already_BOUND:{errCode:"account-already-bound"},UNBIND_FAILED:{errCode:"unbind-failed"},INVALID_INVITE_CODE:{errCode:"invalid-invite-code"},SET_INVITE_CODE_FAILED:{errCode:"set-invite-code-failed"},GET_THIRD_PARTY_ACCOUNT_FAILED:{errCode:"get-third-party-account-failed"}},c={0:{errCode:0,errMsg:""},10001:{errCode:"account-banned"},10002:a.USER_NOT_EXIST,10003:a.MULTI_USER_MATCHED,10004:a.USER_INFO_ERROR,10005:a.USER_ACCOUNT_CONFLICT,10006:a.USER_ACCOUNT_CLOSED,10102:{errCode:"password-error"},10103:{errCode:"password-error-exceed-limit"},10201:a.ACCOUNT_ALREADY_REGISTED,10202:a.ACCOUNT_NOT_REGISTED,10203:a.INVALID_INVITE_CODE,10301:a.ACCOUNT_ALREADY_REGISTED,10302:a.ACCOUNT_NOT_REGISTED,10401:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10402:a.ACCOUNT_ALREADY_REGISTED,10403:a.ACCOUNT_NOT_REGISTED,10501:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10502:a.ACCOUNT_ALREADY_REGISTED,10503:a.ACCOUNT_NOT_REGISTED,10601:a.ACCOUNT_ALREADY_REGISTED,10602:a.ACCOUNT_NOT_REGISTED,10701:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10702:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10703:a.ACCOUNT_ALREADY_REGISTED,10704:a.ACCOUNT_NOT_REGISTED,10705:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10706:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10801:a.GET_THIRD_PARTY_ACCOUNT_FAILED,10802:a.ACCOUNT_ALREADY_REGISTED,10803:a.ACCOUNT_NOT_REGISTED,20101:a.PARAM_REQUIRED,20102:a.ACCOUNT_ALREADY_REGISTED,30101:a.PARAM_REQUIRED,30201:{errCode:"check-device-feature-failed"},30202:{errCode:"token-not-exist"},30203:{errCode:"token-expired"},30204:{errCode:"check-token-failed"},40201:a.USER_NOT_EXIST,40202:{errCode:"invalid-old-password"},50101:a.PARAM_REQUIRED,50102:a.PARAM_ERROR,50201:a.PARAM_REQUIRED,50203:a.PARAM_ERROR,50202:{errCode:"invalid-verify-code"},50301:{errCode:"send-sms-code-failed"},60101:a.ACCOUNT_already_BOUND,60201:a.ACCOUNT_already_BOUND,60301:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60302:a.ACCOUNT_already_BOUND,60401:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60402:a.ACCOUNT_already_BOUND,60501:a.GET_THIRD_PARTY_ACCOUNT_FAILED,60502:a.ACCOUNT_already_BOUND,70101:a.UNBIND_FAILED,70201:a.UNBIND_FAILED,70301:a.UNBIND_FAILED,70401:a.UNBIND_FAILED,70501:a.UNBIND_FAILED,80301:a.USER_NOT_EXIST,80401:a.SET_INVITE_CODE_FAILED,80402:a.SET_INVITE_CODE_FAILED,80501:a.INVALID_INVITE_CODE,80502:a.USER_NOT_EXIST,80503:{errCode:"modify-invite-code-is-not-allowed"},80601:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80602:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80701:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80702:a.GET_THIRD_PARTY_ACCOUNT_FAILED,80801:{errCode:"decrypt-weixin-data-failed"},80802:{errCode:"decrypt-weixin-data-failed"},80803:{errCode:"invalid-weixin-appid"},80804:a.PARAM_REQUIRED,80805:a.PARAM_REQUIRED,80806:a.PARAM_REQUIRED,90001:{errCode:"database-operation-failed"},90002:a.PARAM_REQUIRED,90003:a.PARAM_ERROR,90004:a.USER_NOT_EXIST,90005:a.ROLE_NOT_EXIST,90006:a.PERMISSION_NOT_EXIST};class u extends Error{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}}})}}const d=Object.prototype.toString,l=Object.prototype.hasOwnProperty;function p(e,t){return l.call(e,t)}function f(e){return"[object Object]"===d.call(e)}function m(e){return"function"==typeof e}function h(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof e.then}function g(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}const y=/_(\w)/g,w=/[A-Z]/g;function v(e){return e.replace(y,(e,t)=>t?t.toUpperCase():"")}function _(e){return e.replace(w,e=>"_"+e.toLowerCase())}function b(e,t){let r,n;switch(t){case"snake2camel":n=v,r=y;break;case"camel2snake":n=_,r=w}for(const i in e)if(p(e,i)&&r.test(i)){const r=n(i);e[r]=e[i],delete e[i],f(e[r])?e[r]=b(e[r],t):Array.isArray(e[r])&&(e[r]=e[r].map(e=>b(e,t)))}return e}function E(e){return b(e,"snake2camel")}function C(e){return b(e,"camel2snake")}function T(e){return function(e,t="-"){e=e||new Date;const r=[];return r.push(e.getFullYear()),r.push(("00"+(e.getMonth()+1)).substr(-2)),r.push(("00"+e.getDate()).substr(-2)),r.join(t)}(e=e||new Date)+" "+function(e,t=":"){e=e||new Date;const r=[];return r.push(("00"+e.getHours()).substr(-2)),r.push(("00"+e.getMinutes()).substr(-2)),r.push(("00"+e.getSeconds()).substr(-2)),r.join(t)}(e)}function A(){"development"===process.env.NODE_ENV&&console.log(...arguments)}function x(e=6){let t="";for(let r=0;r-1!==r.indexOf(e))?"zh-Hant":"zh-Hans");var r;const n=function(e,t){return t.find(t=>0===e.indexOf(t))}(e,["en","fr","es"]);return n||void 0}class L{constructor({locale:e,fallbackLocale:t,messages:r,watcher:n,formater:i}){this.locale="en",this.fallbackLocale="en",this.message={},this.messages={},this.watchers=[],t&&(this.fallbackLocale=t),this.formater=i||q,this.messages=r,this.setLocale(e),n&&this.watchLocale(n)}setLocale(e){const t=this.locale;this.locale=N(e,this.messages)||this.fallbackLocale,this.message=this.messages[this.locale],this.watchers.forEach(e=>{e(this.locale,t)})}getLocale(){return this.locale}watchLocale(e){const t=this.watchers.push(e)-1;return()=>{this.watchers.splice(t,1)}}t(e,t,r){let n=this.message;return"string"==typeof t?(t=N(t,this.messages))&&(n=this.messages[t]):r=t,((e,t)=>j.call(e,t))(n,e)?this.formater.interpolate(n[e],r).join(""):(console.warn(`Cannot translate the value of keypath ${e}. Use the value of keypath as default.`),e)}}var U={"zh-Hans":{alipay:"支付宝",wechat:"微信",user:"用户","user-id":"用户ID","dcloud-appid":"应用Appid","dcloud-appid-list":"应用列表",account:"账号",username:"用户名",email:"邮箱",mobile:"手机号","wechat-openid":"微信openid","wechat-account":"微信账号","alipay-account":"支付宝账号","qq-openid":"QQ openid","qq-account":"QQ账号","apple-account":"苹果账号",password:"密码","verify-code":"验证码","verify-code-type":"验证码类型","user-unique-param":"用户名、邮箱或手机号","role-id":"角色ID","permission-id":"权限ID",login:"登录","verify-mobile":"验证手机","context-param-required":"context内缺少{param},请使用uniID.createInstance传入客户端信息,例:uniID.createInstance({context:{PLATFORM:'h5'}})","config-param-require":"uni-id的配置内缺少{param}","uni-verify-config-required":"请在config.json中配置service.univerify下一键登录相关参数","login-with-invite-type-required":"强制使用邀请码注册时,需指明type为register还是login","type-array-required":"{param}应为数组形式","query-field-warning":"检测到当前使用queryField匹配多字段进行登录操作,需要注意:uni-id并未限制用户名不能是手机号或邮箱,需要开发者自行限制。否则可能出现用户输入abc@xx.com会同时匹配到邮箱为此值的用户和用户名为此值的用户,导致登录失败","add-role-admin-is-not-allowed":"不可新增roleID为admin的角色","password-secret-type-error":"config内passwordSecret类型错误,只可设置string类型和array类型","token-expires-config-warning":"tokenExpiresIn不可小于或等于tokenExpiresThreshold","type-function-required":"{param}应为function类型","dev-warning":"当前正在使用uniID.dev属性,注意此属性仅可用于开发调试","config-file-invalid":"请确保公用模块uni-id对应的配置文件(common/uni-config-center/uni-id/config.json)格式正确(不可包含注释)","config-file-not-found":"请在common/uni-config-center/uni-id/config.json内添加uni-id相关配置信息","hx-version-warning":"当前使用的HBuilderX版本过低,请升级HBuilderX到最新版本","account-banned":"账号已禁用","user-not-exist":"用户不存在","multi-user-matched":"匹配到多个账号","user-info-error":"用户信息不正确","user-account-conflict":"用户账号冲突","user-account-closed":"此账号已注销","password-error":"密码错误","password-error-exceed-limit":"密码错误次数过多,请稍后再试","account-already-registed":"此{type}已注册","account-not-registed":"此{type}尚未注册","invalid-invite-code":"邀请码无效","get-third-party-account-failed":"获取{account}失败","param-required":"{param}不可为空","check-device-feature-failed":"设备特征校验未通过","token-not-exist":"云端已不包含此token","token-expired":"token已过期","check-token-failed":"token校验未通过","invalid-old-password":"旧密码错误","param-error":"{param}参数错误,{reason}","invalid-verify-code":"验证码错误或已失效","send-sms-code-failed":"验证码发送失败","account-already-bound":"此{type}已绑定","unbind-failed":"解绑失败","set-invite-code-failed":"邀请码设置失败","modify-invite-code-is-not-allowed":"邀请码不可修改","decrypt-weixin-data-failed":"解密失败","invalid-weixin-appid":"appid不匹配","database-operation-failed":"数据库读写异常","role-not-exist":"角色不存在","permission-not-exist":"权限不存在","context-required":"uni-id无法获取context.{key},请使用uniID.createInstance方法传入"},en:{alipay:"alipay",wechat:"wechat",user:"user","user-id":"user id","dcloud-appid":"DCloud appid","dcloud-appid-list":"DCloud appid list",account:"account",username:"username",email:"email",mobile:"phone number","wechat-openid":"wechat openid","wechat-account":"wechat account","alipay-account":"alipay account","qq-openid":"QQ openid","qq-account":"QQ account","apple-account":"apple account",password:"password","verify-code":"verify code","verify-code-type":"verify code type","user-unique-param":"username, email or mobile phone number","role-id":"role id","permission-id":"permission id",login:"login","verify-mobile":"verify mobile phone number","context-param-required":"You should pass {param} in context using uniID.createInstance, eg: uniID.createInstance({context: {PLATFORM: 'h5'}})","config-param-require":"{param} is required in uni-id's config","uni-verify-config-required":"univerify config required: service.univerify","login-with-invite-type-required":"parameter type is required when forceInviteCode set to true","type-array-required":"type of {param} must be array","query-field-warning":"You are using multi query field to login, be aware that uni-id will not check username's fromat, eg: abc@xx.com is a valid username for uni-id. You should check username in your code.","add-role-admin-is-not-allowed":'add role with an id of "admin" is not allowed',"password-secret-type-error":"passwordSecret in config must be string or array","token-expires-config-warning":"tokenExpiresIn must be greater than tokenExpiresThreshold","type-function-required":"{param} must be a function","dev-warning":"warning: uniID.dev is only for development","config-file-invalid":"invalid config file (common/uni-config-center/uni-id/config.json), comment is not allowed","config-file-not-found":"config file (common/uni-config-center/uni-id/config.json) not found","hx-version-warning":"The version of your HBuilderX is too lower, please upgrade to the latest version of HBuilderX","account-banned":"account is banned","user-not-exist":"user does not exist","multi-user-matched":"multiple users are matched","user-info-error":"user info error","user-account-conflict":"user account conflict","user-account-closed":"user account was closed","password-error":"password is incorrect","password-error-exceed-limit":"password error exceed limit","account-already-registed":"{type} is already registed","account-not-registed":"{type} is not registed","invalid-invite-code":"invalid invite code","get-third-party-account-failed":"get {account} failed","param-required":"{param} is required","check-device-feature-failed":"check device feature failed","token-not-exist":"token is not exist","token-expired":"token is expired","check-token-failed":"check token failed","invalid-old-password":"invalid old password","param-error":"{param} error, {reason}","invalid-verify-code":"invalid verify code","send-sms-code-failed":"send sms code failed","account-already-bound":"{type} is already bound","unbind-failed":"unbind failed","set-invite-code-failed":"set invite code failed","modify-invite-code-is-not-allowed":"invite code modification is not allowed","decrypt-weixin-data-failed":"decrypt weixin data failed","invalid-weixin-appid":"invalid weixin appid","database-operation-failed":"database operation failed","role-not-exist":"role does not exist","permission-not-exist":"permission does not exist","context-required":"context.{key} is required, you should pass context using uniID.createInstance"}};const V=uniCloud.database(),M=V.collection("uni-id-users"),B=V.collection("opendb-verify-codes"),F=V.collection("uni-id-roles"),H=V.collection("uni-id-permissions"),$={username:"username",mobile:"mobile",email:"email",wx_unionid:"wechat-account","wx_openid.app-plus":"wechat-account","wx_openid.mp-weixin":"wechat-account",qq_unionid:"qq-account","qq_openid.app-plus":"qq-account","qq_openid.mp-weixin":"qq-account",ali_openid:"alipay-account",apple_openid:"alipay-account"},K=90002,G=90003,Q=90004,Y=90005,z=0,J=1,X=4;async function W({uid:e,status:t}={}){return e?(await M.doc(e).update({status:t,status_update_date:Date.now()}),{code:0}):{code:K,messageValues:{param:this.t("user-id")}}}async function Z({name:e,url:t,data:r,options:n,defaultOptions:i}){let o={};const s=C(Object.assign({},r));s&&s.access_token&&delete s.access_token;try{n=Object.assign({},i,n,{data:s}),o=await uniCloud.httpclient.request(t,n)}catch(t){return function(e,t){throw new u({code:t.code||-2,message:t.message||e+" fail"})}(e,t)}let a=o.data;const c=o.headers["content-type"];if(!Buffer.isBuffer(a)||0!==c.indexOf("text/plain")&&0!==c.indexOf("application/json"))Buffer.isBuffer(a)&&(a={buffer:a,contentType:c});else try{a=JSON.parse(a.toString())}catch(e){a=a.toString()}return E(function(e,t){if(t.errcode)throw new u({code:t.errcode||-2,message:t.errmsg||e+" fail"});return delete t.errcode,delete t.errmsg,{...t,errMsg:e+" ok",errCode:0}}(e,a||{errCode:-2,errMsg:"Request failed"}))}function ee(e,t){let r="";if(t&&t.accessToken){r=`${e.indexOf("?")>-1?"&":"?"}access_token=${t.accessToken}`}return`${e}${r}`}class te{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}){const i={method:"GET",dataType:"json",dataAsQueryString:!0,timeout:this.options.timeout};return await Z({name:"auth."+e,url:`${this.options.baseUrl}${ee(t,r)}`,data:r,options:n,defaultOptions:i})}async code2Session(e){return await this._requestWxOpenapi({name:"code2Session",url:"/sns/jscode2session",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,js_code:e}})}async getOauthAccessToken(e){const t=await this._requestWxOpenapi({name:"getOauthAccessToken",url:"/sns/oauth2/access_token",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,code:e}});return t.expiresIn&&(t.expired=Date.now()+t.expiresIn),t}}async function re({name:e,url:t,data:r,options:n,defaultOptions:i}){let o;n=Object.assign({},i,n,{data:C(Object.assign({},r))});try{o=await uniCloud.httpclient.request(t,n)}catch(t){return function(e,t){throw new u({code:t.code||-2,message:t.message||e+" fail"})}(e,t)}let s=o.data;const a=o.headers["content-type"];if(!Buffer.isBuffer(s)||0!==a.indexOf("text/plain")&&0!==a.indexOf("application/json"))Buffer.isBuffer(s)&&(s={buffer:s,contentType:a});else try{s=JSON.parse(s.toString())}catch(e){s=s.toString()}return E(function(e,t){if(t.ret||t.error){const r=t.ret||t.error||t.errcode||-2,n=t.msg||t.error_description||t.errmsg||e+" fail";throw new u({code:r,message:n})}return delete t.ret,delete t.msg,delete t.error,delete t.error_description,delete t.errcode,delete t.errmsg,{...t,errMsg:e+" ok",errCode:0}}(e,s||{errCode:-2,errMsg:"Request failed"}))}class ne{constructor(e){this.options=Object.assign({baseUrl:"https://graph.qq.com",timeout:5e3},e)}async _requestQQOpenapi({name:e,url:t,data:r,options:n}){const i={method:"GET",dataType:"json",dataAsQueryString:!0,timeout:this.options.timeout};return await re({name:"auth."+e,url:I(this.options.baseUrl,t),data:r,options:n,defaultOptions:i})}async getOpenidByToken({accessToken:e}={}){const t=await this._requestQQOpenapi({name:"getOpenidByToken",url:"/oauth2.0/me",data:{accessToken:e,unionid:1,fmt:"json"}});if(t.clientId!==this.options.appId)throw new u({code:"APPID_NOT_MATCH",message:"appid not match"});return{openid:t.openid,unionid:t.unionid}}async code2Session({code:e}={}){return await this._requestQQOpenapi({name:"getOpenidByToken",url:"https://api.q.qq.com/sns/jscode2session",data:{grant_type:"authorization_code",appid:this.options.appId,secret:this.options.secret,js_code:e}})}}const ie={RSA:"RSA-SHA1",RSA2:"RSA-SHA256"};var oe={code2Session:{returnValue:{openid:"userId"}}};class se extends class{constructor(e={}){if(!e.appId)throw new Error("appId required");if(!e.privateKey)throw new Error("privateKey required");const t={gateway:"https://openapi.alipay.com/gateway.do",timeout:5e3,charset:"utf-8",version:"1.0",signType:"RSA2",timeOffset:-(new Date).getTimezoneOffset()/60,keyType:"PKCS8"};e.sandbox&&(e.gateway="https://openapi.alipaydev.com/gateway.do"),this.options=Object.assign({},t,e);const r="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){let r=e;const n=["app_id","method","format","charset","sign_type","sign","timestamp","version","notify_url","return_url","auth_token","app_auth_token"];for(const e in t)if(n.indexOf(e)>-1){const n=encodeURIComponent(t[e]);r=`${r}${r.includes("?")?"&":"?"}${e}=${n}`,delete t[e]}return{execParams:t,url:r}}_getSign(e,t){const r=t.bizContent||null;delete t.bizContent;const i=Object.assign({method:e,appId:this.options.appId,charset:this.options.charset,version:this.options.version,signType:this.options.signType,timestamp:T((o=this.options.timeOffset,new Date(Date.now()+6e4*((new Date).getTimezoneOffset()+60*(o||0)))))},t);var o;r&&(i.bizContent=JSON.stringify(C(r)));const s=C(i),a=Object.keys(s).sort().map(e=>{let t=s[e];return"[object String]"!==Array.prototype.toString.call(t)&&(t=JSON.stringify(t)),`${e}=${t}`}).join("&"),c=n.createSign(ie[this.options.signType]).update(a,"utf8").sign(this.options.privateKey,"base64");return Object.assign(s,{sign:c})}async _exec(e,t={},r={}){const n=this._getSign(e,t),{url:i,execParams:o}=this._formatUrl(this.options.gateway,n),{status:s,data:a}=await uniCloud.httpclient.request(i,{method:"POST",data:o,dataType:"text",timeout:this.options.timeout});if(200!==s)throw new Error("request fail");const c=JSON.parse(a),u=e.replace(/\./g,"_")+"_response",d=c[u],l=c.error_response;if(d){if(!r.validateSign||this._checkResponseSign(a,u)){if(!d.code||"10000"===d.code){return{errCode:0,errMsg:d.msg||"",...E(d)}}const e=d.sub_code?`${d.sub_code} ${d.sub_msg}`:""+(d.msg||"unkonwn error");throw new Error(e)}throw new Error("check sign error")}if(l)throw new Error(l.sub_msg||l.msg||"request fail");throw new Error("request fail")}_checkResponseSign(e,t){if(!this.options.alipayPublicKey||""===this.options.alipayPublicKey)return console.warn("options.alipayPublicKey is empty"),!0;if(!e)return!1;const r=this._getSignStr(e,t),i=JSON.parse(e).sign,o=n.createVerify(ie[this.options.signType]);return o.update(r,"utf8"),o.verify(this.options.alipayPublicKey,i,"base64")}_getSignStr(e,t){let r=e.trim();const n=e.indexOf(t+'"'),i=e.lastIndexOf('"sign"');return r=r.substr(n+t.length+1),r=r.substr(0,i),r=r.replace(/^[^{]*{/g,"{"),r=r.replace(/\}([^}]*)$/g,"}"),r}}{constructor(e){super(e),this._protocols=oe}async code2Session(e){return await this._exec("alipay.system.oauth.token",{grantType:"authorization_code",code:e})}}function ae(e){var t=e[0];return t<"0"||t>"7"?"00"+e:e}function ce(e){var t=e.toString(16);return t.length%2?"0"+t:t}function ue(e){if(e<=127)return ce(e);var t=ce(e);return ce(128+t.length/2)+t}function de(e,t){return e(t={exports:{}},t.exports),t.exports}var le=de((function(e,t){var r=i.Buffer;function n(e,t){for(var r in e)t[r]=e[r]}function o(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(n(i,t),t.Buffer=o),o.prototype=Object.create(r.prototype),n(r,o),o.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},o.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"==typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},o.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},o.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}})),pe=(le.Buffer,le.Buffer);function fe(e){if(this.buffer=null,this.writable=!0,this.readable=!0,!e)return this.buffer=pe.alloc(0),this;if("function"==typeof e.pipe)return this.buffer=pe.alloc(0),e.pipe(this),this;if(e.length||"object"==typeof e)return this.buffer=e,this.writable=!1,process.nextTick(function(){this.emit("end",e),this.readable=!1,this.emit("close")}.bind(this)),this;throw new TypeError("Unexpected data type ("+typeof e+")")}s.inherits(fe,o),fe.prototype.write=function(e){this.buffer=pe.concat([this.buffer,pe.from(e)]),this.emit("data",e)},fe.prototype.end=function(e){e&&this.write(e),this.emit("end",e),this.emit("close"),this.writable=!1,this.readable=!1};var me=fe,he=i.Buffer,ge=i.SlowBuffer,ye=we;function we(e,t){if(!he.isBuffer(e)||!he.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(var r=0,n=0;n=128&&--n,n}var Se={derToJose:function(e,t){e=Ae(e);var r=Ce(t),n=r+1,i=e.length,o=0;if(48!==e[o++])throw new Error('Could not find expected "seq"');var s=e[o++];if(129===s&&(s=e[o++]),i-o0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\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;var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"weeks":case"week":case"w":return 6048e5*r;case"days":case"day":case"d":return r*Ct;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Et;case"minutes":case"minute":case"mins":case"min":case"m":return r*bt;case"seconds":case"second":case"secs":case"sec":case"s":return r*_t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===r&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=Ct)return At(e,t,Ct,"day");if(t>=Et)return At(e,t,Et,"hour");if(t>=bt)return At(e,t,bt,"minute");if(t>=_t)return At(e,t,_t,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=Ct)return Math.round(e/Ct)+"d";if(t>=Et)return Math.round(e/Et)+"h";if(t>=bt)return Math.round(e/bt)+"m";if(t>=_t)return Math.round(e/_t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function At(e,t,r,n){var i=t>=1.5*r;return Math.round(e/r)+" "+n+(i?"s":"")}var xt=function(e,t){var r=t||Math.floor(Date.now()/1e3);if("string"==typeof e){var n=Tt(e);if(void 0===n)return;return Math.floor(r+n/1e3)}return"number"==typeof e?r+e:void 0},St=de((function(e,t){var r;t=e.exports=G,r="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?function(){var e=Array.prototype.slice.call(arguments,0);e.unshift("SEMVER"),console.log.apply(console,e)}:function(){},t.SEMVER_SPEC_VERSION="2.0.0";var n=Number.MAX_SAFE_INTEGER||9007199254740991,i=t.re=[],o=t.src=[],s=0,a=s++;o[a]="0|[1-9]\\d*";var c=s++;o[c]="[0-9]+";var u=s++;o[u]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var d=s++;o[d]="("+o[a]+")\\.("+o[a]+")\\.("+o[a]+")";var l=s++;o[l]="("+o[c]+")\\.("+o[c]+")\\.("+o[c]+")";var p=s++;o[p]="(?:"+o[a]+"|"+o[u]+")";var f=s++;o[f]="(?:"+o[c]+"|"+o[u]+")";var m=s++;o[m]="(?:-("+o[p]+"(?:\\."+o[p]+")*))";var h=s++;o[h]="(?:-?("+o[f]+"(?:\\."+o[f]+")*))";var g=s++;o[g]="[0-9A-Za-z-]+";var y=s++;o[y]="(?:\\+("+o[g]+"(?:\\."+o[g]+")*))";var w=s++,v="v?"+o[d]+o[m]+"?"+o[y]+"?";o[w]="^"+v+"$";var _="[v=\\s]*"+o[l]+o[h]+"?"+o[y]+"?",b=s++;o[b]="^"+_+"$";var E=s++;o[E]="((?:<|>)?=?)";var C=s++;o[C]=o[c]+"|x|X|\\*";var T=s++;o[T]=o[a]+"|x|X|\\*";var A=s++;o[A]="[v=\\s]*("+o[T]+")(?:\\.("+o[T]+")(?:\\.("+o[T]+")(?:"+o[m]+")?"+o[y]+"?)?)?";var x=s++;o[x]="[v=\\s]*("+o[C]+")(?:\\.("+o[C]+")(?:\\.("+o[C]+")(?:"+o[h]+")?"+o[y]+"?)?)?";var S=s++;o[S]="^"+o[E]+"\\s*"+o[A]+"$";var I=s++;o[I]="^"+o[E]+"\\s*"+o[x]+"$";var k=s++;o[k]="(?:^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])";var O=s++;o[O]="(?:~>?)";var R=s++;o[R]="(\\s*)"+o[O]+"\\s+",i[R]=new RegExp(o[R],"g");var P=s++;o[P]="^"+o[O]+o[A]+"$";var D=s++;o[D]="^"+o[O]+o[x]+"$";var j=s++;o[j]="(?:\\^)";var q=s++;o[q]="(\\s*)"+o[j]+"\\s+",i[q]=new RegExp(o[q],"g");var N=s++;o[N]="^"+o[j]+o[A]+"$";var L=s++;o[L]="^"+o[j]+o[x]+"$";var U=s++;o[U]="^"+o[E]+"\\s*("+_+")$|^$";var V=s++;o[V]="^"+o[E]+"\\s*("+v+")$|^$";var M=s++;o[M]="(\\s*)"+o[E]+"\\s*("+_+"|"+o[A]+")",i[M]=new RegExp(o[M],"g");var B=s++;o[B]="^\\s*("+o[A]+")\\s+-\\s+("+o[A]+")\\s*$";var F=s++;o[F]="^\\s*("+o[x]+")\\s+-\\s+("+o[x]+")\\s*$";var H=s++;o[H]="(<|>)?=?\\s*\\*";for(var $=0;$<35;$++)r($,o[$]),i[$]||(i[$]=new RegExp(o[$]));function K(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof G)return e;if("string"!=typeof e)return null;if(e.length>256)return null;if(!(t.loose?i[b]:i[w]).test(e))return null;try{return new G(e,t)}catch(e){return null}}function G(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof G){if(e.loose===t.loose)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof G))return new G(e,t);r("SemVer",e,t),this.options=t,this.loose=!!t.loose;var o=e.trim().match(t.loose?i[b]:i[w]);if(!o)throw new TypeError("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)throw new TypeError("Invalid major version");if(this.minor>n||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>n||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map((function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t=0;)"number"==typeof this.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:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=function(e,t,r,n){"string"==typeof r&&(n=r,r=void 0);try{return new G(e,r).inc(t,n).version}catch(e){return null}},t.diff=function(e,t){if(W(e,t))return null;var r=K(e),n=K(t),i="";if(r.prerelease.length||n.prerelease.length){i="pre";var o="prerelease"}for(var s in r)if(("major"===s||"minor"===s||"patch"===s)&&r[s]!==n[s])return i+s;return o},t.compareIdentifiers=Y;var Q=/^[0-9]+$/;function Y(e,t){var r=Q.test(e),n=Q.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e0}function X(e,t,r){return z(e,t,r)<0}function W(e,t,r){return 0===z(e,t,r)}function Z(e,t,r){return 0!==z(e,t,r)}function ee(e,t,r){return z(e,t,r)>=0}function te(e,t,r){return z(e,t,r)<=0}function re(e,t,r,n){switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return W(e,r,n);case"!=":return Z(e,r,n);case">":return J(e,r,n);case">=":return ee(e,r,n);case"<":return X(e,r,n);case"<=":return te(e,r,n);default:throw new TypeError("Invalid operator: "+t)}}function ne(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof ne){if(e.loose===!!t.loose)return e;e=e.value}if(!(this instanceof ne))return new ne(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){return Y(t,e)},t.major=function(e,t){return new G(e,t).major},t.minor=function(e,t){return new G(e,t).minor},t.patch=function(e,t){return new G(e,t).patch},t.compare=z,t.compareLoose=function(e,t){return z(e,t,!0)},t.rcompare=function(e,t,r){return z(t,e,r)},t.sort=function(e,r){return e.sort((function(e,n){return t.compare(e,n,r)}))},t.rsort=function(e,r){return e.sort((function(e,n){return t.rcompare(e,n,r)}))},t.gt=J,t.lt=X,t.eq=W,t.neq=Z,t.gte=ee,t.lte=te,t.cmp=re,t.Comparator=ne;var ie={};function oe(e,t){if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),e instanceof oe)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new oe(e.raw,t);if(e instanceof ne)return new oe(e.value,t);if(!(this instanceof oe))return new oe(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){return this.parseRange(e.trim())}),this).filter((function(e){return e.length})),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function se(e){return!e||"x"===e.toLowerCase()||"*"===e}function ae(e,t,r,n,i,o,s,a,c,u,d,l,p){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(d)?"<"+c+"."+(+u+1)+".0":l?"<="+c+"."+u+"."+d+"-"+l:"<="+a)).trim()}function ce(e,t,n){for(var i=0;i0){var o=e[i].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}function ue(e,t,r){try{t=new oe(t,r)}catch(e){return!1}return t.test(e)}function de(e,t,r,n){var i,o,s,a,c;switch(e=new G(e,n),t=new oe(t,n),r){case">":i=J,o=te,s=X,a=">",c=">=";break;case"<":i=X,o=ee,s=J,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ue(e,t,n))return!1;for(var u=0;u=0.0.0")),l=l||e,p=p||e,i(e.semver,l.semver,n)?l=e:s(e.semver,p.semver,n)&&(p=e)})),l.operator===a||l.operator===c)return!1;if((!p.operator||p.operator===a)&&o(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}ne.prototype.parse=function(e){var t=this.options.loose?i[U]:i[V],r=e.match(t);if(!r)throw new TypeError("Invalid comparator: "+e);this.operator=r[1],"="===this.operator&&(this.operator=""),r[2]?this.semver=new G(r[2],this.options.loose):this.semver=ie},ne.prototype.toString=function(){return this.value},ne.prototype.test=function(e){return r("Comparator.test",e,this.options.loose),this.semver===ie||("string"==typeof e&&(e=new G(e,this.options)),re(e,this.operator,this.semver,this.options))},ne.prototype.intersects=function(e,t){if(!(e instanceof ne))throw new TypeError("a Comparator is required");var r;if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return r=new oe(e.value,t),ue(this.value,r,t);if(""===e.operator)return r=new oe(this.value,t),ue(e.semver,r,t);var n=!(">="!==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);return n||i||o&&s||a||c},t.Range=oe,oe.prototype.format=function(){return this.range=this.set.map((function(e){return e.join(" ").trim()})).join("||").trim(),this.range},oe.prototype.toString=function(){return this.range},oe.prototype.parseRange=function(e){var t=this.options.loose;e=e.trim();var n=t?i[F]:i[B];e=e.replace(n,ae),r("hyphen replace",e),e=e.replace(i[M],"$1$2$3"),r("comparator trim",e,i[M]),e=(e=(e=e.replace(i[R],"$1~")).replace(i[q],"$1^")).split(/\s+/).join(" ");var o=t?i[U]:i[V],s=e.split(" ").map((function(e){return function(e,t){return r("comp",e,t),e=function(e,t){return e.trim().split(/\s+/).map((function(e){return function(e,t){r("caret",e,t);var n=t.loose?i[L]:i[N];return e.replace(n,(function(t,n,i,o,s){var a;return r("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){return e.trim().split(/\s+/).map((function(e){return function(e,t){var n=t.loose?i[D]:i[P];return e.replace(n,(function(t,n,i,o,s){var a;return r("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){return r("replaceXRanges",e,t),e.split(/\s+/).map((function(e){return function(e,t){e=e.trim();var n=t.loose?i[I]:i[S];return e.replace(n,(function(t,n,i,o,s,a){r("xRange",e,t,n,i,o,s,a);var c=se(i),u=c||se(o),d=u||se(s);return"="===n&&d&&(n=""),c?t=">"===n||"<"===n?"<0.0.0":"*":n&&d?(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":d&&(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){return r("replaceStars",e,t),e.trim().replace(i[H],"")}(e,t),r("stars",e),e}(e,this.options)}),this).join(" ").split(/\s+/);return this.options.loose&&(s=s.filter((function(e){return!!e.match(o)}))),s=s.map((function(e){return new ne(e,this.options)}),this)},oe.prototype.intersects=function(e,t){if(!(e instanceof oe))throw new TypeError("a Range is required");return this.set.some((function(r){return r.every((function(r){return e.set.some((function(e){return e.every((function(e){return r.intersects(e,t)}))}))}))}))},t.toComparators=function(e,t){return new oe(e,t).set.map((function(e){return e.map((function(e){return e.value})).join(" ").trim().split(" ")}))},oe.prototype.test=function(e){if(!e)return!1;"string"==typeof e&&(e=new G(e,this.options));for(var t=0;t":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":r&&!J(r,t)||(r=t);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+e.operator)}}))}if(r&&e.test(r))return r;return null},t.validRange=function(e,t){try{return new oe(e,t).range||"*"}catch(e){return null}},t.ltr=function(e,t,r){return de(e,t,"<",r)},t.gtr=function(e,t,r){return de(e,t,">",r)},t.outside=de,t.prerelease=function(e,t){var r=K(e,t);return r&&r.prerelease.length?r.prerelease:null},t.intersects=function(e,t,r){return e=new oe(e,r),t=new oe(t,r),e.intersects(t)},t.coerce=function(e){if(e instanceof G)return e;if("string"!=typeof e)return null;var t=e.match(i[k]);if(null==t)return null;return K(t[1]+"."+(t[2]||"0")+"."+(t[3]||"0"))}})),It=(St.SEMVER_SPEC_VERSION,St.re,St.src,St.parse,St.valid,St.clean,St.SemVer,St.inc,St.diff,St.compareIdentifiers,St.rcompareIdentifiers,St.major,St.minor,St.patch,St.compare,St.compareLoose,St.rcompare,St.sort,St.rsort,St.gt,St.lt,St.eq,St.neq,St.gte,St.lte,St.cmp,St.Comparator,St.Range,St.toComparators,St.satisfies,St.maxSatisfying,St.minSatisfying,St.minVersion,St.validRange,St.ltr,St.gtr,St.outside,St.prerelease,St.intersects,St.coerce,St.satisfies(process.version,"^6.12.0 || >=8.0.0")),kt=["RS256","RS384","RS512","ES256","ES384","ES512"],Ot=["RS256","RS384","RS512"],Rt=["HS256","HS384","HS512"];It&&(kt.splice(3,0,"PS256","PS384","PS512"),Ot.splice(3,0,"PS256","PS384","PS512"));var Pt=/^\s+|\s+$/g,Dt=/^[-+]0x[0-9a-f]+$/i,jt=/^0b[01]+$/i,qt=/^0o[0-7]+$/i,Nt=/^(?:0|[1-9]\d*)$/,Lt=parseInt;function Ut(e){return e!=e}function Vt(e,t){return function(e,t){for(var r=-1,n=e?e.length:0,i=Array(n);++r-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}(e.length)&&!function(e){var t=Zt(e)?$t.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)}function Zt(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function er(e){return!!e&&"object"==typeof e}var tr=function(e,t,r,n){var i;e=Wt(e)?e:(i=e)?Vt(i,function(e){return Wt(e)?Yt(e):zt(e)}(i)):[],r=r&&!n?function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||er(e)&&"[object Symbol]"==$t.call(e)}(e))return NaN;if(Zt(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Zt(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Pt,"");var r=jt.test(e);return r||qt.test(e)?Lt(e.slice(2),r?2:8):Dt.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(r):0;var o=e.length;return r<0&&(r=Qt(o+r,0)),function(e){return"string"==typeof e||!Xt(e)&&er(e)&&"[object String]"==$t.call(e)}(e)?r<=o&&e.indexOf(t,r)>-1:!!o&&function(e,t,r){if(t!=t)return function(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o-1},rr=Object.prototype.toString;var nr=function(e){return!0===e||!1===e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Boolean]"==rr.call(e)},ir=/^\s+|\s+$/g,or=/^[-+]0x[0-9a-f]+$/i,sr=/^0b[01]+$/i,ar=/^0o[0-7]+$/i,cr=parseInt,ur=Object.prototype.toString;function dr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}var lr=function(e){return"number"==typeof e&&e==function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==ur.call(e)}(e))return NaN;if(dr(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=dr(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(ir,"");var r=sr.test(e);return r||ar.test(e)?cr(e.slice(2),r?2:8):or.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(e)},pr=Object.prototype.toString;var fr=function(e){return"number"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Number]"==pr.call(e)};var mr=Function.prototype,hr=Object.prototype,gr=mr.toString,yr=hr.hasOwnProperty,wr=gr.call(Object),vr=hr.toString,_r=function(e,t){return function(r){return e(t(r))}}(Object.getPrototypeOf,Object);var br=function(e){if(!function(e){return!!e&&"object"==typeof e}(e)||"[object Object]"!=vr.call(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e))return!1;var t=_r(e);if(null===t)return!0;var r=yr.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&gr.call(r)==wr},Er=Object.prototype.toString,Cr=Array.isArray;var Tr=function(e){return"string"==typeof e||!Cr(e)&&function(e){return!!e&&"object"==typeof e}(e)&&"[object String]"==Er.call(e)},Ar=/^\s+|\s+$/g,xr=/^[-+]0x[0-9a-f]+$/i,Sr=/^0b[01]+$/i,Ir=/^0o[0-7]+$/i,kr=parseInt,Or=Object.prototype.toString;function Rr(e,t){var r;if("function"!=typeof t)throw new TypeError("Expected a function");return e=function(e){var t=function(e){if(!e)return 0===e?e:0;if((e=function(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==Or.call(e)}(e))return NaN;if(Pr(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Pr(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Ar,"");var r=Sr.test(e);return r||Ir.test(e)?kr(e.slice(2),r?2:8):xr.test(e)?NaN:+e}(e))===1/0||e===-1/0){return 17976931348623157e292*(e<0?-1:1)}return e==e?e:0}(e),r=t%1;return t==t?r?t-r:t:0}(e),function(){return--e>0&&(r=t.apply(this,arguments)),e<=1&&(t=void 0),r}}function Pr(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}var Dr=function(e){return Rr(2,e)},jr=["RS256","RS384","RS512","ES256","ES384","ES512","HS256","HS384","HS512","none"];It&&jr.splice(3,0,"PS256","PS384","PS512");var qr={expiresIn:{isValid:function(e){return lr(e)||Tr(e)&&e},message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:function(e){return lr(e)||Tr(e)&&e},message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:function(e){return Tr(e)||Array.isArray(e)},message:'"audience" must be a string or array'},algorithm:{isValid:tr.bind(null,jr),message:'"algorithm" must be a valid string enum value'},header:{isValid:br,message:'"header" must be an object'},encoding:{isValid:Tr,message:'"encoding" must be a string'},issuer:{isValid:Tr,message:'"issuer" must be a string'},subject:{isValid:Tr,message:'"subject" must be a string'},jwtid:{isValid:Tr,message:'"jwtid" must be a string'},noTimestamp:{isValid:nr,message:'"noTimestamp" must be a boolean'},keyid:{isValid:Tr,message:'"keyid" must be a string'},mutatePayload:{isValid:nr,message:'"mutatePayload" must be a boolean'}},Nr={iat:{isValid:fr,message:'"iat" should be a number of seconds'},exp:{isValid:fr,message:'"exp" should be a number of seconds'},nbf:{isValid:fr,message:'"nbf" should be a number of seconds'}};function Lr(e,t,r,n){if(!br(r))throw new Error('Expected "'+n+'" to be a plain object.');Object.keys(r).forEach((function(i){var o=e[i];if(o){if(!o.isValid(r[i]))throw new Error(o.message)}else if(!t)throw new Error('"'+i+'" is not allowed in "'+n+'"')}))}var Ur={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},Vr=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"],Mr=function(e,t,r,n){var i;if("function"!=typeof r||n||(n=r,r={}),r||(r={}),r=Object.assign({},r),i=n||function(e,t){if(e)throw e;return t},r.clockTimestamp&&"number"!=typeof r.clockTimestamp)return i(new ht("clockTimestamp must be a number"));if(void 0!==r.nonce&&("string"!=typeof r.nonce||""===r.nonce.trim()))return i(new ht("nonce must be a non-empty string"));var o=r.clockTimestamp||Math.floor(Date.now()/1e3);if(!e)return i(new ht("jwt must be provided"));if("string"!=typeof e)return i(new ht("jwt must be a string"));var s,a=e.split(".");if(3!==a.length)return i(new ht("jwt malformed"));try{s=ft(e,{complete:!0})}catch(e){return i(e)}if(!s)return i(new ht("invalid token"));var c,u=s.header;if("function"==typeof t){if(!n)return i(new ht("verify must be called asynchronous if secret or public key is provided as a callback"));c=t}else c=function(e,r){return r(null,t)};return c(u,(function(t,n){if(t)return i(new ht("error in secret or public key callback: "+t.message));var c,d=""!==a[2].trim();if(!d&&n)return i(new ht("jwt signature is required"));if(d&&!n)return i(new ht("secret or public key must be provided"));if(d||r.algorithms||(r.algorithms=["none"]),r.algorithms||(r.algorithms=~n.toString().indexOf("BEGIN CERTIFICATE")||~n.toString().indexOf("BEGIN PUBLIC KEY")?kt:~n.toString().indexOf("BEGIN RSA PUBLIC KEY")?Ot:Rt),!~r.algorithms.indexOf(s.header.alg))return i(new ht("invalid algorithm"));try{c=pt.verify(e,s.header.alg,n)}catch(e){return i(e)}if(!c)return i(new ht("invalid signature"));var l=s.payload;if(void 0!==l.nbf&&!r.ignoreNotBefore){if("number"!=typeof l.nbf)return i(new ht("invalid nbf value"));if(l.nbf>o+(r.clockTolerance||0))return i(new yt("jwt not active",new Date(1e3*l.nbf)))}if(void 0!==l.exp&&!r.ignoreExpiration){if("number"!=typeof l.exp)return i(new ht("invalid exp value"));if(o>=l.exp+(r.clockTolerance||0))return i(new vt("jwt expired",new Date(1e3*l.exp)))}if(r.audience){var p=Array.isArray(r.audience)?r.audience:[r.audience];if(!(Array.isArray(l.aud)?l.aud:[l.aud]).some((function(e){return p.some((function(t){return t instanceof RegExp?t.test(e):t===e}))})))return i(new ht("jwt audience invalid. expected: "+p.join(" or ")))}if(r.issuer&&("string"==typeof r.issuer&&l.iss!==r.issuer||Array.isArray(r.issuer)&&-1===r.issuer.indexOf(l.iss)))return i(new ht("jwt issuer invalid. expected: "+r.issuer));if(r.subject&&l.sub!==r.subject)return i(new ht("jwt subject invalid. expected: "+r.subject));if(r.jwtid&&l.jti!==r.jwtid)return i(new ht("jwt jwtid invalid. expected: "+r.jwtid));if(r.nonce&&l.nonce!==r.nonce)return i(new ht("jwt nonce invalid. expected: "+r.nonce));if(r.maxAge){if("number"!=typeof l.iat)return i(new ht("iat required when maxAge is specified"));var f=xt(r.maxAge,l.iat);if(void 0===f)return i(new ht('"maxAge" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));if(o>=f+(r.clockTolerance||0))return i(new vt("maxAge exceeded",new Date(1e3*f)))}if(!0===r.complete){var m=s.signature;return i(null,{header:u,payload:l,signature:m})}return i(null,l)}))},Br=function(e,t,r,n){"function"==typeof r?(n=r,r={}):r=r||{};var i="object"==typeof e&&!Buffer.isBuffer(e),o=Object.assign({alg:r.algorithm||"HS256",typ:i?"JWT":void 0,kid:r.keyid},r.header);function s(e){if(n)return n(e);throw e}if(!t&&"none"!==r.algorithm)return s(new Error("secretOrPrivateKey must have a value"));if(void 0===e)return s(new Error("payload is required"));if(i){try{!function(e){Lr(Nr,!0,e,"payload")}(e)}catch(e){return s(e)}r.mutatePayload||(e=Object.assign({},e))}else{var a=Vr.filter((function(e){return void 0!==r[e]}));if(a.length>0)return s(new Error("invalid "+a.join(",")+" option for "+typeof e+" payload"))}if(void 0!==e.exp&&void 0!==r.expiresIn)return s(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.'));if(void 0!==e.nbf&&void 0!==r.notBefore)return s(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{!function(e){Lr(qr,!1,e,"options")}(r)}catch(e){return s(e)}var c=e.iat||Math.floor(Date.now()/1e3);if(r.noTimestamp?delete e.iat:i&&(e.iat=c),void 0!==r.notBefore){try{e.nbf=xt(r.notBefore,c)}catch(e){return s(e)}if(void 0===e.nbf)return s(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(void 0!==r.expiresIn&&"object"==typeof e){try{e.exp=xt(r.expiresIn,c)}catch(e){return s(e)}if(void 0===e.exp)return s(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(Ur).forEach((function(t){var n=Ur[t];if(void 0!==r[t]){if(void 0!==e[n])return s(new Error('Bad "options.'+t+'" option. The payload already has an "'+n+'" property.'));e[n]=r[t]}}));var u=r.encoding||"utf8";if("function"!=typeof n)return pt.sign({header:o,payload:e,secret:t,encoding:u});n=n&&Dr(n),pt.createSign({header:o,privateKey:t,payload:e,encoding:u}).once("error",n).once("done",(function(e){n(null,e)}))};let Fr=[];class Hr{constructor(e){this.options=Object.assign({baseUrl:"https://appleid.apple.com",timeout:1e4},e)}async _fetch(e,t){const{baseUrl:r}=this.options;return uniCloud.httpclient.request(r+e,t)}async verifyIdentityToken(e){const t=e.split(".")[0],{kid:r}=JSON.parse(Buffer.from(t,"base64").toString());if(!Fr.length)try{Fr=await this.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}const n=this.getUsedKey(Fr,r);if(!Object.keys(n).length&&!this.fetched)try{Fr=await this.getAuthKeys()}catch(e){return{code:10705,msg:e.message}}let i=null;try{i=Mr(e,function(e,t){var r=Buffer.from(e,"base64"),n=Buffer.from(t,"base64"),i=r.toString("hex"),o=n.toString("hex");i=ae(i),o=ae(o);var s=i.length/2,a=o.length/2,c=ue(s),u=ue(a),d="30"+ue(s+a+c.length/2+u.length/2+2)+"02"+c+i+"02"+u+o;return"-----BEGIN RSA PUBLIC KEY-----\n"+Buffer.from(d,"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}}async getAuthKeys(){const{status:e,data:t}=await this._fetch("/auth/keys",{method:"GET",dataType:"json",timeout:this.options.timeout});if(200!==e)throw new Error("request https://appleid.apple.com/auth/keys fail");return t.keys}getUsedKey(e,t){let r={};for(let n=0;nvoid 0===e))return{code:K,messageValues:{param:this.t("dcloud-appid")}};const r=await M.doc(e).get(),n=r&&r.data&&r.data[0];if(!n)return{code:10002};const i=Object.keys($).reduce((e,t)=>{const r=t,i=function(e,t){return t.split(".").reduce((e,t)=>e&&e[t],e)}(n,t);return i&&e.push({[r]:i}),e},[]);let o;const s={dcloud_appid:zr.in(t),_id:zr.neq(n._id)},a={dcloud_appid:zr.exists(!1),_id:zr.neq(n._id)};switch(i.length){case 0:return{code:10004};case 1:o=zr.or([zr.and([i[0],s]),zr.and([i[0],a])]);break;default:o=zr.or([zr.and([zr.or(i),s]),zr.and([zr.or(i),a])])}const c=await M.where(o).limit(1).get();return c&&c.data&&c.data[0]?{code:10005}:{code:0}}const Xr=uniCloud.database().command;const Wr=uniCloud.database();const Zr=uniCloud.database();const en=uniCloud.database();async function tn(e){const t=["apiKey","apiSecret"];for(let r=0,n=t.length;r0){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);return A("upRes",await M.doc(t.data[0]._id).update(i)),{code:0,msg:""}}return{code:40202}}return{code:40201}},updateUser:async function(e){const t=e.uid;if(!t)return{code:K,messageValues:{param:this.t("user-id")}};delete e.uid;const{username:r,email:n}=e,{usernameToLowerCase:i,emailToLowerCase:o}=this._getConfig();let s=r&&r.trim(),a=n&&n.trim();return s&&(i&&(s=s.toLowerCase()),e.username=s),a&&(o&&(a=a.toLowerCase()),e.email=a),A("update -> upRes",await M.doc(t).update(e)),{code:0,msg:""}},banAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:J})},unbanAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:z})},closeAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:X})},openAccount:async function({uid:e}={}){return W.call(this,{uid:e,status:z})},_getAlipayApi:function({platform:e}={}){const t=e||this.context.PLATFORM;if(!t)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const r=this._getConfig(t);if(!r.oauth||!r.oauth.alipay)throw new Error(this.t("config-param-require",{param:t+".alipay"}));return["appid","privateKey"].forEach(e=>{if(!r.oauth.alipay[e])throw new Error(this.t("config-param-require",{param:`${t}.alipay.${e}`}))}),Gr({...r.oauth.alipay,clientType:t})},_getValidInviteCode:async function({inviteCode:e}){let t,r=10;e?(r=1,t=e):t=Yr();let n=!1;try{for(;r>0&&!n;){r--;if(0===(await M.where({my_invite_code:t}).get()).data.length){n=!0;break}t=Yr()}t=Yr()}catch(e){}return n?{code:0,inviteCode:t}:e?{code:80401}:{code:80402}},_addUser:async function(e,{needPermission:t,autoSetDcloudAppid:r=!0}={}){const n=this._getConfig(),i={...e,dcloud_appid:r?[this.context.APPID]:[],register_date:Date.now(),register_ip:this.context.CLIENTIP},o=(await M.add(i)).id;let s;if(n.removePermissionAndRoleFromToken)s=await this.createToken({uid:o,needPermission:t});else{const t=e.role||[];let r;r=0===t.length||t.includes("admin")?[]:await this._getPermissionListByRoleList(t),s=await this.createToken({uid:o,role:t,permission:r})}const{token:a,tokenExpired:c}=s;return await M.doc(o).update({token:[a]}),{token:a,tokenExpired:c,uid:o,type:"register",userInfo:Object.assign({},i,{token:a})}},_loginExec:async function(e,t={}){if(e.status===J)return{code:10001};if(e.status===X)return{code:10006};const r=this._getConfig();let n=e.token||[];"string"==typeof n&&(n=[n]);const i=this._getExpiredToken(n);let o;if(n=n.filter(e=>-1===i.indexOf(e)),r.removePermissionAndRoleFromToken){const r=t.needPermission;o=await this.createToken({uid:e._id,needPermission:r})}else{const t=e.role||[];let r;r=0===t.length||t.includes("admin")?[]:await this._getPermissionListByRoleList(t),o=await this.createToken({uid:e._id,role:t,permission:r})}const{token:s,tokenExpired:a}=o;n.push(s),e.token=n;const c={last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP,token:n,...t.extraData};await M.doc(e._id).update(c);const u=Object.assign({},e,c);return{code:0,msg:"",token:s,uid:u._id,username:u.username,type:"login",userInfo:u,tokenExpired:a}},_registerExec:async function(e,{needPermission:t,autoSetDcloudAppid:r=!0}={}){const{my_invite_code:n}=e;if(this._getConfig().autoSetInviteCode||n){const t=await this._getValidInviteCode({inviteCode:n});if(t.code)return t;e.my_invite_code=t.inviteCode}return{code:0,msg:"",...await this._addUser(e,{needPermission:t,autoSetDcloudAppid:r})}},_getWeixinApi:function({platform:e}={}){const t=e||this.context.PLATFORM;if(!t)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const r=this._getConfig(t);if(!r.oauth||!r.oauth.weixin)throw new Error(this.t("config-param-require",{param:t+".weixin"}));return["appid","appsecret"].forEach(e=>{if(!r.oauth.weixin[e])throw new Error(this.t("config-param-require",{param:`${t}.weixin.${e}`}))}),$r({...r.oauth.weixin,clientType:t})},_getQQApi:function(){const e=this.context.PLATFORM;if(!e)throw new Error(this.t("context-param-required",{parma:"PLATFORM"}));const t=this._getConfig(e);if(!t.oauth||!t.oauth.qq)throw new Error(this.t("config-param-require",{param:e+".qq"}));return["appid","appsecret"].forEach(r=>{if(!t.oauth.qq[r])throw new Error(this.t("config-param-require",{param:`${e}.qq.${r}`}))}),Kr({...t.oauth.qq,clientType:e})},_getMatchedUser:function(e,t){if(0===e.length)return{code:10002};let r;const n={},i={};for(let r=e.length-1;r>=0;r--){const o=e[r];for(let s=0;s0?{code:10003,messageValues:{target:"用户"}}:{code:0,msg:"",userMatched:r,fieldMatched:s,isFallbackValueMatched:!!s&&i[s]}},_getCurrentAppUser:function(e){const t=this.context.APPID;return e.filter(e=>void 0===e.dcloud_appid||null===e.dcloud_appid||e.dcloud_appid.indexOf(t)>-1||e.dcloud_appid.indexOf(null)>-1)},setAuthorizedAppLogin:async function({uid:e,dcloudAppidList:t}={}){if("array"!==g(t))return{code:G,messageValues:{param:"dcloudAppidList",reason:this.t("type-array-required",{param:this.t("dcloud-appid-list")})}};if(t&&0!==t.length){const r=await Jr.bind(this)({uid:e,dcloudAppidList:t});if(r.code)return r}return await M.doc(e).update({dcloud_appid:zr.set(t)}),{code:0}},authorizeAppLogin:async function({uid:e,dcloudAppid:t}={}){const r=await Jr.bind(this)({uid:e,dcloudAppidList:[t]});return r.code?r:(await M.doc(e).update({dcloud_appid:zr.push(t)}),{code:0})},forbidAppLogin:async function({uid:e,dcloudAppid:t}={}){return e?(await M.doc(e).update({dcloud_appid:zr.pull(t)}),{code:0}):{code:K,messageValues:{param:this.t("user-id")}}},acceptInvite:async function({uid:e,inviteCode:t}){const r=await M.where({_id:Xr.neq(e),inviter_uid:Xr.not(Xr.all([e])),my_invite_code:t}).get();if(1!==r.data.length)return{code:80501,msg:"邀请码无效"};const n=[r.data[0]._id].concat(r.data[0].inviter_uid||[]),i=await M.doc(e).field({my_invite_code:!0,inviter_uid:!0}).get();if(0===i.data.length)return{code:80502};if(i.data[0].inviter_uid&&i.data[0].inviter_uid.length>0)return{code:80503,msg:"邀请码不可修改"};const o=Date.now();return await M.doc(e).update({inviter_uid:n,invite_time:o}),await M.where({inviter_uid:e}).update({inviter_uid:Xr.push(n)}),{code:0,msg:""}},getInvitedUser:async function({uid:e,level:t=1,limit:r=20,offset:n=0,needTotal:i=!1}){const o={code:0,msg:"",invitedUser:(await M.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){const r=await M.where({["inviter_uid."+(t-1)]:e}).count();o.total=r.total}return o},setUserInviteCode:async function({uid:e,myInviteCode:t}){const r=await this._getValidInviteCode({inviteCode:t});return r.code?r:(await M.doc(e).update({my_invite_code:r.inviteCode}),{code:0,msg:"",myInviteCode:r.inviteCode})},loginByAlipay:async function(e){"string"==typeof e&&(e={code:e});const{needPermission:t,platform:r,code:n,myInviteCode:i,role:o,type:s}=e,a=r||this.context.PLATFORM,{openid:c}=await this._getAlipayApi({platform:a}).code2Session(n);if(!c)return{code:10501,messageValues:{account:this.t("alipay-account")}};let u=await M.where({ali_openid:c}).get();if(u=this._getCurrentAppUser(u.data),u&&u.length>0){if("register"===s)return{code:10502,messageValues:{type:this.t("alipay-account")}};if(1!==u.length)return{code:10005};const e=u[0],r=await this._loginExec(e,{needPermission:t});if(0!==r.code)return r;const{userInfo:n}=r;return{...r,openid:c,mobileConfirmed:1===n.mobile_confirmed,emailConfirmed:1===n.email_confirmed}}{if("login"===s)return{code:10503,messageValues:{type:this.t("alipay-account")}};const e={ali_openid:c};e.my_invite_code=i,e.role=o;const r=await this._registerExec(e,{needPermission:t});return 0!==r.code?r:{...r,openid:c,mobileConfirmed:!1,emailConfirmed:!1}}},loginByEmail:async function({email:e,code:t,password:r,myInviteCode:n,type:i,needPermission:o,role:s}){if(!(e=e&&e.trim()))return{code:K,messageValues:{param:"邮箱"}};const{emailToLowerCase:a}=this._getConfig();let c=e;a&&(c=e.toLowerCase());const u=await this.verifyCode({email:c,code:t,type:i||"login"});if(0!==u.code)return u;let d={email:e,email_confirmed:1};const l={field:"email",value:e},p=Wr.command;c!==e&&(d=p.or(d,{email:c,email_confirmed:1}),l.fallbackValue=c);let f=await M.where(d).get();if(f=this._getCurrentAppUser(f.data),f&&f.length>0){if("register"===i)return{code:10301,messageValues:{type:"邮箱"}};const e=this._getMatchedUser(f,[l]);if(e.code)return e;const{userMatched:t}=e,r=await this._loginExec(t,{needPermission:o});return 0!==r.code?r:{...r,email:c}}{if("login"===i)return{code:10302,messageValues:{type:"邮箱"}};const e={email:c,email_confirmed:1},t=r&&r.trim();if(t){const{passwordHash:r,version:n}=this.encryptPwd(t);e.password=r,n&&(e.password_secret_version=n)}e.my_invite_code=n,e.role=s;const a=await this._registerExec(e,{needPermission:o});return 0!==a.code?a:{...a,email:c}}},loginBySms:async function({mobile:e,code:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){if(!(e=e&&e.trim()))return{code:K,messageValues:{param:this.t("mobile")}};const c=this._getConfig();if(c.forceInviteCode&&!o)throw new Error(this.t("login-with-invite-type-required"));const u=await this.verifyCode({mobile:e,code:t,type:o||"login"});if(0!==u.code)return u;const d={mobile:e,mobile_confirmed:1};let l=await M.where(d).get();if(l=this._getCurrentAppUser(l.data),l&&l.length>0){if("register"===o)return{code:10201,messageValues:{type:this.t("mobile")}};if(1!==l.length)return{code:10005};const t=l[0],r=await this._loginExec(t,{needPermission:s});return 0!==r.code?r:{...r,mobile:e}}{const t=Date.now();if("login"===o)return{code:10202,messageValues:{type:this.t("mobile")}};const u={mobile:e,mobile_confirmed:1,register_ip:this.context.CLIENTIP,register_date:t},d=r&&r.trim();if(d){const{passwordHash:e,version:t}=this.encryptPwd(d);u.password=e,t&&(u.password_secret_version=t)}if(n){const e=await M.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10203};u.inviter_uid=[e.data[0]._id].concat(e.data[0].inviter_uid||[]),u.invite_time=t}else if(c.forceInviteCode)return{code:10203};u.my_invite_code=i,u.role=a;const l=await this._registerExec(u,{needPermission:s});return 0!==l.code?l:{...l,mobile:e}}},loginByWeixin:async function(e){"string"==typeof e&&(e={code:e});const{needPermission:t,platform:r,code:n,myInviteCode:i,role:o,type:s}=e,a=r||this.context.PLATFORM,c="mp-weixin"===a,{openid:u,unionid:d,sessionKey:l,accessToken:p,refreshToken:f,expired:m}=await this._getWeixinApi({platform:a})[c?"code2Session":"getOauthAccessToken"](n);if(!u)return{code:10401,messageValues:{account:"微信openid"}};let h;h=c?{sessionKey:l}:{accessToken:p,refreshToken:f,accessTokenExpired:m};const g=Zr.command,y=[{wx_openid:{[a]:u}}];d&&y.push({wx_unionid:d});let w=await M.where(g.or(...y)).get();if(w=this._getCurrentAppUser(w.data),w&&w.length>0){if("register"===s)return{code:10402,messageValues:{type:this.t("wechat-account")}};if(1!==w.length)return{code:10005};const e=w[0],r={wx_openid:{[a]:u}};d&&(r.wx_unionid=d);const n=await this._loginExec(e,{needPermission:t,extraData:r});if(0!==n.code)return n;const{userInfo:i}=n;return{...n,openid:u,unionid:d,...h,mobileConfirmed:1===i.mobile_confirmed,emailConfirmed:1===i.email_confirmed}}{if("login"===s)return{code:10403,messageValues:{type:this.t("wechat-account")}};const e={wx_openid:{[a]:u},wx_unionid:d};e.my_invite_code=i,e.role=o;const r=await this._registerExec(e,{needPermission:t});return 0!==r.code?r:{...r,openid:u,unionid:d,...h,mobileConfirmed:!1,emailConfirmed:!1}}},loginByQQ:async function({code:e,accessToken:t,myInviteCode:r,needPermission:n,role:i,type:o}={}){const s=this.context.PLATFORM,a="mp-qq"===s,{openid:c,unionid:u,sessionKey:d}=await this._getQQApi()[a?"code2Session":"getOpenidByToken"]({code:e,accessToken:t});if(!c)return{code:10801,messageValues:{account:"qq openid"}};const l={accessToken:t,sessionKey:d},p=en.command,f=[{qq_openid:{[s]:c}}];u&&f.push({qq_unionid:u});let m=await M.where(p.or(...f)).get();if(m=this._getCurrentAppUser(m.data),m&&m.length>0){if("register"===o)return{code:10802,messageValues:{type:this.t("qq-account")}};if(1!==m.length)return{code:10005};const e=m[0],t={qq_openid:{[s]:c}};u&&(t.qq_unionid=u);const r=await this._loginExec(e,{needPermission:n,extraData:t});if(0!==r.code)return r;const{userInfo:i}=r;return{...r,openid:c,unionid:u,...l,mobileConfirmed:1===i.mobile_confirmed,emailConfirmed:1===i.email_confirmed}}{if("login"===o)return{code:10803,messageValues:{type:this.t("qq-account")}};const e={qq_openid:{[s]:c},qq_unionid:u};e.my_invite_code=r,e.role=i;const t=await this._registerExec(e);return 0!==t.code?t:{...t,openid:c,unionid:u,...l,mobileConfirmed:!1,emailConfirmed:!1}}},loginByUniverify:async function({openid:e,access_token:t,password:r,inviteCode:n,myInviteCode:i,type:o,needPermission:s,role:a}){const c=this._getConfig(),u=c&&c.service&&c.service.univerify;if(!u)throw new Error(this.t("uni-verify-config-required"));if(c.forceInviteCode&&!o)throw new Error(this.t("login-with-invite-type-required"));const d=await tn.bind(this)({...u,openid:e,access_token:t});if(0!==d.code)return d;const l=String(d.phoneNumber);let p=await M.where({mobile:l}).get();if(p=this._getCurrentAppUser(p.data),p&&p.length>0){if("register"===o)return{code:10601,messageValues:{type:this.t("mobile")}};if(1!==p.length)return{code:10005};const e=p[0],t=await this._loginExec(e,{needPermission:s});return 0!==t.code?t:{...t,mobile:l}}if("login"===o)return{code:10602,messageValues:{type:this.t("mobile")}};const f=Date.now(),m={mobile:l,my_invite_code:i,mobile_confirmed:1,role:a},h=r&&r.trim();if(h){const{passwordHash:e,version:t}=this.encryptPwd(h);m.password=e,t&&(m.password_secret_version=t)}if(n){let e=await M.where({my_invite_code:n}).get();if(1!==e.data.length)return{code:10203};e=e.data[0],m.inviter_uid=[e._id].concat(e.inviter_uid||[]),m.invite_time=f}else if(c.forceInviteCode)return{code:10203};m.my_invite_code=i;const g=await this._registerExec(m,{needPermission:s});return 0!==g.code?g:{...g,mobile:l}},loginByApple:async function({nickName:e,fullName:t,identityToken:r,myInviteCode:n,type:i,needPermission:o,platform:s,role:a}){const c=this._getConfig(),u=c&&c["app-plus"]&&c["app-plus"].oauth&&c["app-plus"].oauth.apple,d=u&&u.bundleId;if(!d)throw new Error(this.t("config-param-require",{param:"app-plus.alipay.bundleId"}));if(!r)return{code:K,messageValues:{param:"identityToken"}};const l=s||this.context.PLATFORM;t=e||(t&&Object.keys(t).length>0?t.familyName+t.givenName:"");const{code:p,msg:f}=await Qr({clientType:l}).verifyIdentityToken(r);if(0!==p)return{code:p,msg:f,messageValues:{account:this.t("apple-account")}};const{iss:m,sub:h,aud:g,email:y}=f;if("https://appleid.apple.com"!==m)return{code:10706,messageValues:{account:this.t("apple-account")}};if(!h)return{code:10701,messageValues:{account:this.t("apple-account")}};if(d!==g)return{code:10702,messageValues:{account:this.t("apple-account")}};const w=t||"User-"+y.split("@")[0];let v=await M.where({apple_openid:h}).get();if(v=this._getCurrentAppUser(v.data),v&&v.length>0){if("register"===i)return{code:10703,messageValues:{type:this.t("apple-account")}};if(1!==v.length)return{code:10005};const e=v[0],t=await this._loginExec(e,{needPermission:o});return 0!==t.code?t:{...t,openid:h}}if("login"===i)return{code:10704,messageValues:{type:this.t("apple-account")}};const _={nickname:w,apple_openid:h,my_invite_code:n,role:a},b=await this._registerExec(_,{needPermission:o});return 0!==b.code?b:{...b,openid:h}},login:async function({username:e,password:t,queryField:r=[],needPermission:n}){const i=rn.command,o=[];r&&r.length||(r=["username"]),r.length>1&&console.warn(this.t("query-field-warning"));const{usernameToLowerCase:s,emailToLowerCase:a,passwordErrorLimit:c,passwordErrorRetryTime:u}=this._getConfig(),d={email:{email_confirmed:1},mobile:{mobile_confirmed:1}},l={},p=e.trim();if(!p)return{code:K,messageValues:{param:this.t("username")}};s&&(l.username=p.toLowerCase()),a&&(l.email=p.toLowerCase());const f=[];r.forEach(t=>{o.push({[t]:e,...d[t]});const r={field:t,value:e};"username"===t&&l.username!==e?(o.push({[t]:l.username,...d[t]}),r.fallbackValue=l.username):"email"===t&&l.email!==e&&(o.push({[t]:l.email,...d[t]}),r.fallbackValue=l.email),f.push(r)});let m=await M.where(i.or(...o)).limit(1).get();m=this._getCurrentAppUser(m.data);const h=this.context.CLIENTIP,g=this._getMatchedUser(m,f);if(g.code)return g;const{userMatched:y}=g;let w=y.login_ip_limit||[];w=w.filter(e=>e.last_error_time>Date.now()-1e3*u);let v=w.find(e=>e.ip===h);if(v&&v.error_times>=c)return{code:10103};const _=t&&t.trim();if(!_)return{code:K,messageValues:{param:"密码"}};const b=this._checkPwd(y,_);if(0===b.code){const e=w.indexOf(v);e>-1&&w.splice(e,1);const t={login_ip_limit:w},{passwordHash:r,passwordVersion:i}=b;r&&i&&(t.password=r,t.password_secret_version=i);const o=await this._loginExec(y,{needPermission:n,extraData:t});return o.code,o}return v?(v.error_times++,v.last_error_time=Date.now()):(v={ip:h,error_times:1,last_error_time:Date.now()},w.push(v)),await M.doc(y._id).update({login_ip_limit:w}),{code:10102,msg:"密码错误"}},register:async function(e){const t=[],r=[{name:"username",desc:this.t("username")},{name:"email",desc:this.t("email"),extraCond:{email_confirmed:1}},{name:"mobile",desc:this.t("mobile"),extraCond:{mobile_confirmed:1}}],{usernameToLowerCase:n,emailToLowerCase:i}=this._getConfig();r.forEach(r=>{const o=r.name;let s=e[o]&&e[o].trim();s?(("username"===r.name&&n||"email"===r.name&&i)&&(s=s.toLowerCase()),e[o]=s,t.push({[o]:s,...r.extraCond})):delete e[o]});const{username:o,email:s,mobile:a,myInviteCode:c,needPermission:u,autoSetDcloudAppid:d=!0}=e;if("needPermission"in e&&delete e.needPermission,"autoSetDcloudAppid"in e&&delete e.autoSetDcloudAppid,0===t.length)return{code:20101,messageValues:{param:this.t("user-unique-param")}};const l=nn.command;let p=await M.where(l.or(...t)).get();if(p=this._getCurrentAppUser(p.data),p&&p.length>0){const t=p[0];if(t.status===X)return{code:10006};for(let n=0;nt[e]===i.extraCond[e])),t[i.name]===e[i.name]&&o)return{code:20102,messageValues:{type:i.desc}}}}const f=e.password&&e.password.trim();if(!f)return{code:K,messageValues:{param:this.t("password")}};const{passwordHash:m,version:h}=this.encryptPwd(f);e.password=m,h&&(e.password_secret_version=h),e.my_invite_code=c,delete e.myInviteCode;const g=await this._registerExec(e,{needPermission:u,autoSetDcloudAppid:d});return 0!==g.code?g:{...g,username:o,email:s,mobile:a}},logout:async function(e){const t=await this.checkToken(e);if(t.code)return t;const r=on.command;return await M.doc(t.uid).update({token:r.pull(e)}),{code:0,msg:""}},getRoleByUid:async function({uid:e}){if(!e)return{code:K,messageValues:{param:this.t("user-id")}};const t=await M.doc(e).get();return 0===t.data.length?{code:Q}:{code:0,msg:"",role:t.data[0].role||[]}},getPermissionByRole:async function({roleID:e}){if(!e)return{code:K,messageValues:{param:"roleID"}};if("admin"===e){return{code:0,msg:"",permission:(await H.limit(1e3).get()).data.map(e=>e.permission_id)}}const t=await F.where({role_id:e}).get();return 0===t.data.length?{code:Y}:{code:0,msg:"",permission:t.data[0].permission||[]}},getPermissionByUid:async function({uid:e}){const t=await M.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=[];return t.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),{code:0,msg:"",permission:S(r)}},bindRole:async function({uid:e,roleList:t,reset:r=!1}){const n={};return"string"==typeof t&&(t=[t]),n.role=r?t:sn.push(t),await M.doc(e).update(n),{code:0,msg:""}},bindPermission:async function({roleID:e,permissionList:t,reset:r=!1}){const n={};return"string"==typeof t&&(t=[t]),n.permission=r?t:sn.push(t),await F.where({role_id:e}).update(n),{code:0,msg:""}},unbindRole:async function({uid:e,roleList:t}){return"string"==typeof t&&(t=[t]),await M.doc(e).update({role:sn.pull(sn.in(t))}),{code:0,msg:""}},unbindPermission:async function({roleID:e,permissionList:t}){return"string"==typeof t&&(t=[t]),await F.where({role_id:e}).update({permission:sn.pull(sn.in(t))}),{code:0,msg:""}},addRole:async function({roleID:e,roleName:t,comment:r,permission:n=[]}){return e?"admin"===e?{code:G,messageValues:{param:"roleID",reason:this.t("add-role-admin-is-not-allowed")}}:(await F.add({role_id:e,role_name:t,comment:r,permission:n,create_date:Date.now()}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("role-id")}}},addPermission:async function({permissionID:e,permissionName:t,comment:r}){return e?(await H.add({permission_id:e,permission_name:t,comment:r,create_date:Date.now()}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("permission-id")}}},getRoleList:async function({limit:e=20,offset:t=0,needTotal:r=!0}){const n={code:0,msg:"",roleList:(await F.skip(t).limit(e).get()).data};if(r){const{total:e}=await F.where({_id:sn.exists(!0)}).count();n.total=e}return n},getRoleInfo:async function(e){const t=await F.where({role_id:e}).get();return 0===t.data.length?{code:Y}:{code:0,...t.data[0]}},updateRole:async function({roleID:e,roleName:t,comment:r,permission:n}){return e?(await F.where({role_id:e}).update({role_name:t,comment:r,permission:n}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("role-id")}}},deleteRole:async function({roleID:e}){const t=g(e);if("string"===t)e=[e];else if("array"!==t)throw new Error("typeof roleID must be array or string");return await F.where({role_id:sn.in(e)}).remove(),await M.where({role:sn.elemMatch(sn.in(e))}).update({role:sn.pullAll(e)}),{code:0,msg:""}},getPermissionList:async function({limit:e=20,offset:t=0,needTotal:r=!0}){const n={code:0,msg:"",permissionList:(await H.skip(t).limit(e).get()).data};if(r){const{total:e}=await H.where({_id:sn.exists(!0)}).count();n.total=e}return n},getPermissionInfo:async function(e){const t=await H.where({permission_id:e}).get();return 0===t.data.length?{code:K,messageValues:{param:this.t("permission-id")}}:{code:0,...t.data[0]}},updatePermission:async function({permissionID:e,permissionName:t,comment:r}){return e?(await H.where({permission_id:e}).update({permission_name:t,comment:r}),{code:0,msg:""}):{code:K,messageValues:{param:this.t("permission-id")}}},deletePermission:async function({permissionID:e}){const t=g(e);if("string"===t)e=[e];else if("array"!==t)throw new Error("typeof permissionID must be array or string");return await H.where({permission_id:sn.in(e)}).remove(),await F.where({permission:sn.elemMatch(sn.in(e))}).update({permission:sn.pullAll(e)}),{code:0,msg:""}},bindAlipay:async function({uid:e,code:t,platform:r}){const n=r||this.context.PLATFORM,{openid:i}=await this._getAlipayApi({platform:n}).code2Session(t);if(!i)return{code:60401,messageValues:{account:this.t("alipay-account")}};let o=await M.where({ali_openid:i}).get();return o=this._getCurrentAppUser(o.data),o&&o.length>0?{code:60402,messageValues:{type:this.t("alipay-account")}}:(await M.doc(e).update({ali_openid:i}),{code:0,openid:i,msg:""})},bindEmail:async function({uid:e,email:t,code:r}){if(!(t=t&&t.trim()))return{code:K,messageValues:{param:"邮箱"}};if(!r)return{code:K,messageValues:{param:"验证码"}};const{emailToLowerCase:n}=this._getConfig();n&&(t=t.toLowerCase());let i=await M.where({email:t,email_confirmed:1}).get();if(i=this._getCurrentAppUser(i.data),i&&i.length>0)return{code:60201,messageValues:{type:"邮箱"}};if(r){const e=await this.verifyCode({email:t,code:r,type:"bind"});if(0!==e.code)return e}return await M.doc(e).update({email:t,email_confirmed:1}),{code:0,msg:"",email:t}},bindMobile:async function({uid:e,mobile:t,code:r,openid:n,access_token:i,type:o="sms"}){if("univerify"===o){const e=this._getConfig(),r=e&&e.service&&e.service.univerify;if(!r)throw new Error("请在config.json中配置service.univerify下一键登录相关参数");const o=await tn.bind(this)({...r,openid:n,access_token:i});if(0!==o.code)return o;t=""+o.phoneNumber}let s=await M.where({mobile:t,mobile_confirmed:1}).get();if(s=this._getCurrentAppUser(s.data),s&&s.length>0)return{code:60101,messageValues:{type:"手机号"}};if("sms"===o&&r){if(!t)return{code:K,messageValues:{param:this.t("mobile")}};if(!r)return{code:K,messageValues:{param:this.t("verify-code")}};const e=await this.verifyCode({mobile:t,code:r,type:"bind"});if(0!==e.code)return e}return await M.doc(e).update({mobile:t,mobile_confirmed:1}),{code:0,msg:"",mobile:t}},bindWeixin:async function({uid:e,code:t,platform:r}){const n=r||this.context.PLATFORM,i="mp-weixin"===n,{openid:o,unionid:s,sessionKey:a,accessToken:c,refreshToken:u,expired:d}=await this._getWeixinApi({platform:n})[i?"code2Session":"getOauthAccessToken"](t);if(!o)return{code:60301,messageValues:{account:"微信openid"}};const l=an.command,p=[{wx_openid:{[n]:o}}];s&&p.push({wx_unionid:s});let f=await M.where(l.or(...p)).get();if(f=this._getCurrentAppUser(f.data),f&&f.length>0)return{code:60302,messageValues:{type:this.t("wechat-account")}};const m={wx_openid:{[n]:o}};let h;return s&&(m.wx_unionid=s),await M.doc(e).update(m),h=i?{sessionKey:a}:{accessToken:c,refreshToken:u,accessTokenExpired:d},{code:0,msg:"",openid:o,unionid:s,...h}},bindQQ:async function({uid:e,code:t,accessToken:r,platform:n}={}){const i=n||this.context.PLATFORM,o="mp-qq"===i,{openid:s,unionid:a,sessionKey:c}=await this._getQQApi()[o?"code2Session":"getOpenidByToken"]({code:t,accessToken:r});if(!s)return{code:60501,messageValues:{account:"qq openid"}};const u=cn.command,d=[{qq_openid:{[i]:s}}];a&&d.push({qq_unionid:a});let l=await M.where(u.or(...d)).get();if(l=this._getCurrentAppUser(l.data),l&&l.length>0)return{code:60502,messageValues:{type:this.t("qq-account")}};const p={qq_openid:{[i]:s}};return a&&(p.qq_unionid=a),await M.doc(e).update(p),{code:0,msg:"",openid:s,unionid:a,...{accessToken:r,sessionKey:c}}},unbindAlipay:async function(e){const t=un.command,r=await M.doc(e).update({ali_openid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70401}},unbindEmail:async function({uid:e,email:t,code:r}){if(t=t&&t.trim(),!e||!t)return{code:K,messageValues:{param:e?this.t("email"):this.t("user-id")}};const{emailToLowerCase:n}=this._getConfig();if(r){const e=await this.verifyCode({email:t,code:r,type:"unbind"});if(0!==e.code)return e}const i=dn.command;let o={_id:e,email:t};if(n){const r=t.toLowerCase();r!==t&&(o=i.or(o,{_id:e,email:r}))}return 1===(await M.where(o).update({email:i.remove(),email_confirmed:i.remove()})).updated?{code:0,msg:""}:{code:70201}},unbindMobile:async function({uid:e,mobile:t,code:r}){if(r){const e=await this.verifyCode({mobile:t,code:r,type:"unbind"});if(0!==e.code)return e}const n=ln.command;return 1===(await M.where({_id:e,mobile:t}).update({mobile:n.remove(),mobile_confirmed:n.remove()})).updated?{code:0,msg:""}:{code:70101}},unbindWeixin:async function(e){const t=pn.command,r=await M.doc(e).update({wx_openid:t.remove(),wx_unionid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70301}},unbindQQ:async function(e){const t=fn.command,r=await M.doc(e).update({qq_openid:t.remove(),qq_unionid:t.remove()});return A("upRes:",r),1===r.updated?{code:0,msg:""}:{code:70501}},code2SessionAlipay:async function(e){let t=e;"string"==typeof e&&(t={code:e});try{const e=t.platform||this.context.PLATFORM,r=await this._getAlipayApi({platform:e}).code2Session(t.code);return r.openid?{code:0,msg:"",...r}:{code:80701,messageValues:{account:this.t("alipay-account")}}}catch(e){return{code:80702,messageValues:{account:this.t("alipay-account")}}}},code2SessionWeixin:async function(e){let t=e;"string"==typeof e&&(t={code:e});try{const e=t.platform||this.context.PLATFORM,r=await this._getWeixinApi({platform:e})["mp-weixin"===e?"code2Session":"getOauthAccessToken"](t.code);return r.openid?{code:0,msg:"",...r}:{code:80601,messageValues:{account:"微信openid"}}}catch(e){return{code:80602,messageValues:{account:"微信openid"}}}},verifyAppleIdentityToken:async function({identityToken:e,platform:t}){const r=t||this.context.PLATFORM,{code:n,msg:i}=await Qr({clientType:r}).verifyIdentityToken(e);return 0!==n?{code:n,msg:i}:{code:n,msg:"验证通过",...i}},wxBizDataCrypt:async function({code:e,sessionKey:t,encryptedData:r,iv:i}){if(!r)return{code:K,messageValues:{param:"encryptedData"}};if(!i)return{code:K,messageValues:{param:"iv"}};if(!e&&!t)return{code:K,messageValues:{param:"sessionKey"}};const o=this._getWeixinApi();if(!t){const r=await o.code2Session(e);if(!r.sessionKey)return{code:80801};t=r.sessionKey}t=Buffer.from(t,"base64"),r=Buffer.from(r,"base64"),i=Buffer.from(i,"base64");try{var s=n.createDecipheriv("aes-128-cbc",t,i);s.setAutoPadding(!0);var a=s.update(r,"binary","utf8");a+=s.final("utf8"),a=JSON.parse(a)}catch(e){return console.error(e),{code:80802}}return a.watermark.appid!==o.options.appId?{code:80803}:{code:0,msg:"",...a}},encryptPwd:function(e,{value:t,version:r}={}){if(!(e=e&&e.trim()))throw new Error(this.t("param-required",{param:this.t("password")}));if(!t){const e=this._getConfig(),{passwordSecret:n}=e;if("array"===g(n)){const e=n.sort((e,t)=>e.version-t.version);t=e[e.length-1].value,r=e[e.length-1].version}else t=n}if(!t)throw new Error(this.t("param-error",{param:"passwordSecret",reason:"invalid passwordSecret"}));const i=n.createHmac("sha1",t.toString("ascii"));return i.update(e),{passwordHash:i.digest("hex"),version:r}},checkToken:async function(e,{needPermission:t,needUserInfo:r=!0}={}){const n=this._getConfig(),i=this._verifyToken(e);if(i.code)return i;const{uid:o,needPermission:s,role:a,permission:c,exp:u}=i,d=a&&c;t=void 0===t?s:t;const l=n.removePermissionAndRoleFromToken||!d||r,p=!n.removePermissionAndRoleFromToken&&!d||n.removePermissionAndRoleFromToken&&d||n.tokenExpiresThreshold&&u-Date.now()/1e3-1===r.indexOf(e)),t.push(e.token),await M.doc(o).update({token:t,last_login_date:Date.now(),last_login_ip:this.context.CLIENTIP}),{...m,...e}}return m},createToken:function({uid:e,needPermission:t,role:r,permission:n}){if(!e)return{code:30101,messageValues:{param:this.t("user-id")}};const i={uid:e,needPermission:t,role:r,permission:n},o=this._getConfig();if(!this.interceptorMap.has("customToken")){const e={...i};return this._createTokenInternal({signContent:e,config:o})}const s=this.interceptorMap.get("customToken");if("function"!=typeof s)throw new Error(this.t("type-function-required","custumToken"));const a=s(i);return a instanceof Promise?a.then(e=>this._createTokenInternal({signContent:e,config:o})):this._createTokenInternal({signContent:a,config:o})},_checkPwd:function(e,t){if(!t)return{code:1};const{password:r,password_secret_version:n}=e,i=this._getConfig(),{passwordSecret:o}=i,s=g(o);if("string"===s){const{passwordHash:e}=this.encryptPwd(t,{value:o});return e===r?{code:0,message:""}:{code:2}}if("array"!==s)throw new Error(this.t("password-secret-type-error"));const a=o.sort((e,t)=>e.version-t.version);let c;if(c=n?a.find(e=>e.version===n):a[0],!c)return{code:3};const u=a[a.length-1],{passwordHash:d}=this.encryptPwd(t,c);if(d===r){const e={code:0};if(c!==u){const{passwordHash:r,version:n}=this.encryptPwd(t,u);e.passwordHash=r,e.passwordVersion=n}return e}return{code:4,message:""}},_verifyToken:function(e){const t=this._getConfig();let r;try{r=Mr(e,t.tokenSecret)}catch(e){return"TokenExpiredError"===e.name?{code:30203,err:e}:{code:30204,err:e}}return t.bindTokenToDevice&&r.clientId&&r.clientId!==this._getClientUaHash()?{code:30201}:{code:0,message:"",...r}},_getExpiredToken:function(e){const t=this._getConfig(),r=[];return e.forEach(e=>{try{Mr(e,t.tokenSecret)}catch(t){r.push(e)}}),r},_getPermissionListByRoleList:async function(e){if(!Array.isArray(e))return[];if(0===e.length)return[];if(e.includes("admin")){return(await H.limit(500).get()).data.map(e=>e.permission_id)}const t=await F.where({role_id:mn.in(e)}).get(),r=[];return t.data.forEach(e=>{Array.prototype.push.apply(r,e.permission)}),S(r)},_getClientUaHash:function(){const e=n.createHash("md5"),t=/MicroMessenger/i.test(this.context.CLIENTUA)?this.context.CLIENTUA.replace(/(MicroMessenger\S+).*/i,"$1"):this.context.CLIENTUA;return e.update(t),e.digest("hex")},_createTokenInternal:function({signContent:e,config:t}){if(t.tokenExpiresIn&&t.tokenExpiresThreshold&&t.tokenExpiresIn<=t.tokenExpiresThreshold)throw new Error(this.t("token-expires-config-warning"));return"object"===g(e)&&e.uid?(t.bindTokenToDevice&&(e.clientId=this._getClientUaHash()),{token:Br(e,t.tokenSecret,{expiresIn:t.tokenExpiresIn}),tokenExpired:Date.now()+1e3*t.tokenExpiresIn}):{code:30101,messageValues:{param:this.t("user-id")}}},setVerifyCode:async function({mobile:e,email:t,code:r,expiresIn:n,type:i}){if(t=t&&t.trim(),e=e&&e.trim(),t){const{emailToLowerCase:e}=this._getConfig();e&&(t=t.toLowerCase())}if(!e&&!t)return{code:50101,messageValues:{param:"手机号或邮箱"}};if(e&&t)return{code:50102,messageValues:{param:"参数",reason:"手机号和邮箱不可同时存在"}};r||(r=x()),n||(n=180);const o=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};return A("addRes",await B.add(s)),{code:0,mobile:e,email:t}},verifyCode:async function({mobile:e,email:t,code:r,type:n}){if(t=t&&t.trim(),e=e&&e.trim(),t){const{emailToLowerCase:e}=this._getConfig();e&&(t=t.toLowerCase())}if(!e&&!t)return{code:50201,messageValues:{param:"手机号或邮箱"}};if(e&&t)return{code:50203,messageValues:{param:"参数",reason:"手机号和邮箱不可同时存在"}};const i=hn.command,o=Date.now(),s={mobile:e,email:t,type:n,code:r,state:0,expired_at:i.gt(o)},a=await B.where(s).orderBy("created_at","desc").limit(1).get();if(A("verifyRecord:",a),a&&a.data&&a.data.length>0){const e=a.data[0];return A("upRes",await B.doc(e._id).update({state:1})),{code:0,msg:"验证通过"}}return{code:50202,msg:"验证码错误或已失效"}},sendSmsCode:async function({mobile:e,code:t,type:r,templateId:n}){if(!e)return{code:K,messageValues:{param:this.t("mobile")}};if(t||(t=x()),!r)return{code:K,messageValues:{param:this.t("verify-code-type")}};const i=this._getConfig();let o=i&&i.service&&i.service.sms;if(!o)throw new Error(this.t("config-param-required",{param:"service.sms"}));o=Object.assign({codeExpiresIn:300},o);const s=["smsKey","smsSecret"];for(let e=0,t=s.length;e=0?o:{code:0,msg:""}}catch(e){return{code:50301}}}});let yn;try{yn=require("uni-config-center")}catch(e){}class wn{constructor({context:e,config:t}={}){const r=yn&&yn({pluginId:"uni-id"});let n;this.pluginConfig=r,this.config=t||this._getConfigContent(),Object.defineProperty(this,"config",{get:()=>t||this._getConfigContent()}),Object.defineProperty(this,"context",{get(){const t=e||global.__ctx__||{},r=["CLIENTIP","PLATFORM","APPID","LOCALE"];for(let e=0;ee.dcloudAppid===this.context.APPID)||e.find(e=>e.isDefaultConfig)}_getConfigContent(){if(this.pluginConfig&&this.pluginConfig.hasFile("config.json")){this._hasConfigFile=!0;try{return this._parseConfig(this.pluginConfig.config())}catch(e){return}}const e=r.resolve(__dirname,"config.json");this._hasConfigFile=t.existsSync(e);try{return this._parseConfig(require(e))}catch(e){}}init(e){console.warn("uniID.init has been deprecated, use uniID.createInstance instead"),this.config=e}setInterceptor(e,t){this.interceptorMap.set(e,t)}_getConfig(e){const t=this.config&&0!==Object.keys(this.config).length;if(this._hasConfigFile&&!t)throw new Error(this.t("config-file-invalid"));if(!t)throw new Error(this.t("config-file-not-found"));const r=this._getCurrentAppConfig(this.config),n=Object.assign(r,r[e||this.context.PLATFORM])||{},i=Object.assign({bindTokenToDevice:!1,tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600,usernameToLowerCase:!0,emailToLowerCase:!0},n);return["passwordSecret","tokenSecret","tokenExpiresIn","passwordErrorLimit","passwordErrorRetryTime"].forEach(e=>{if(!i||!i[e])throw new Error(this.t("config-param-required",{param:e}))}),i}}for(const e in gn)wn.prototype[e]=gn[e];function vn({context:e,config:t}={}){const r=new wn({context:e,config:t});return new Proxy(r,{get(e,t){if(t in e&&0!==t.indexOf("_")){if("function"==typeof e[t])return(r=e[t],function(){const e=r.apply(this,arguments);return h(e)?e.then(e=>(R.bind(this)(e),e)):(R.bind(this)(e),e)}).bind(e);if("context"!==t&&"config"!==t)return e[t]}var r}})}wn.prototype.createInstance=vn;var _n=vn();module.exports=_n; diff --git a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json index a53980e..f29f74e 100644 --- a/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json +++ b/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json @@ -1,6 +1,6 @@ { "name": "uni-id", - "version": "3.3.8", + "version": "3.3.9", "description": "uni-id for uniCloud", "main": "index.js", "homepage": "https://uniapp.dcloud.io/uniCloud/uni-id", diff --git a/uni_modules/vk-unicloud/changelog.md b/uni_modules/vk-unicloud/changelog.md index d29a02c..39289f7 100644 --- a/uni_modules/vk-unicloud/changelog.md +++ b/uni_modules/vk-unicloud/changelog.md @@ -1,3 +1,12 @@ +## 2.5.6(2021-11-13) +* 1、【优化】一些细节 +* 完整框架项目地址:`https://ext.dcloud.net.cn/plugin?id=2204`[点击查看](https://ext.dcloud.net.cn/plugin?id=2204) +## 2.5.5(2021-11-11) +* 1、【新增】`vk.pubfn.getOffsetTime` 获得指定时间偏移 year年 month月 day天 hours时 minutes分 seconds秒前或后的时间戳 [点击查看](https://vkdoc.fsq.pub/client/jsapi.html#vk-pubfn-getoffsettime-%E8%8E%B7%E5%BE%97%E6%8C%87%E5%AE%9A%E6%97%B6%E9%97%B4%E5%81%8F%E7%A7%BB-year%E5%B9%B4-month%E6%9C%88-day%E5%A4%A9-hours%E6%97%B6-minutes%E5%88%86-seconds%E7%A7%92%E5%89%8D%E6%88%96%E5%90%8E%E7%9A%84%E6%97%B6%E9%97%B4%E6%88%B3) +* 完整框架项目地址:`https://ext.dcloud.net.cn/plugin?id=2204`[点击查看](https://ext.dcloud.net.cn/plugin?id=2204) +## 2.5.4(2021-11-10) +* 1、【优化】前端请求云函数的一处细节。 +* 完整框架项目地址:`https://ext.dcloud.net.cn/plugin?id=2204`[点击查看](https://ext.dcloud.net.cn/plugin?id=2204) ## 2.5.3(2021-11-09) * 1、【优化】`vk.pubfn.base64ToFile` 支持 APP 环境执行 * 2、【优化】`vk.pubfn.fileToBase64` 支持 APP 环境执行 diff --git a/uni_modules/vk-unicloud/package.json b/uni_modules/vk-unicloud/package.json index 29dacd6..7e930bc 100644 --- a/uni_modules/vk-unicloud/package.json +++ b/uni_modules/vk-unicloud/package.json @@ -1,7 +1,7 @@ { "id": "vk-unicloud", "displayName": "vk-unicloud-router开发框架核心库 - 已集成uni-id 框架内置了众多API。", - "version": "2.5.3", + "version": "2.5.6", "description": "此为vk-unicloud-router框架核心库(新手建议下载完整框架项目)已集成uni-id支持云函数url化。众多现成API,内置小白也能轻松上手的数据库API。使你项目刚起步进度就是百分之50", "keywords": [ "vk-unicloud-router", diff --git a/uni_modules/vk-unicloud/readme.md b/uni_modules/vk-unicloud/readme.md index b68434e..1ef9d17 100644 --- a/uni_modules/vk-unicloud/readme.md +++ b/uni_modules/vk-unicloud/readme.md @@ -34,7 +34,7 @@ #### 5、全面支持`url化`的云函数请求,您无需关心url化后参数的获取问题 -#### 6、已集成`uni-id` 当前版本:`3.3.7`(已支持真实发送邮箱验证码和阿里云短信验证码) +#### 6、已集成`uni-id` 当前版本:`3.3.8`(已支持真实发送邮箱验证码和阿里云短信验证码) ``` 6.1、由于每个应用基本都会用上用户系统,官方建议所有`uniCloud`应用均使用`uni-id`作为用户体系, 有了统一的账户规范,并且围绕这套账户规范,有各种各样插件,那么开发者可以随意整合这些插件,让数据连同。 diff --git a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js index 14ae4b5..39ccd23 100644 --- a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js +++ b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/index.js @@ -1 +1 @@ -"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n,r);let s={code:t,msg:n};return r&&(s.err={message:r.message,stack:r.stack,code:r.code}),await i.onActionError(a,o,s)}process.env.TZ="Asia/Shanghai";var s=async function(e){let{event:t,context:n,vk:r}=e,{config:a,uniID:s,uniPay:l,db:d,middlewareService:c,pubFun:u,customUtil:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}catch(e){}}n.$url||(n.data.$url?n.$url=n.data.$url:n.$url=r),n.data.uni_id_token&&(n.uni_id_token=n.data.uni_id_token,delete n.data.uni_id_token)}else{if(e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t.data&&(t.data=JSON.parse(t.data)),n=Object.assign(n,t)}if(e.body){let t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n=Object.assign(n,t)}catch(e){}}}}else n=JSON.parse(JSON.stringify(e));n.data||(n.data={});n.uniIdToken||(n.uniIdToken=n.uni_id_token);return n.url=n.$url||"",n}(t,r),{url:h,data:b,uniIdToken:y}=m;if([403].indexOf(m.code)>-1)return m;if(b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform),r.pubfn.isNullOne(n.APPID,n.PLATFORM))){let e=r.pubfn.getData(a,"vk.context");r.pubfn.isNotNull(e)&&(n.APPID||(n.APPID=e.APPID),n.PLATFORM||(n.PLATFORM=e.PLATFORM),n.LOCALE||(n.LOCALE=e.LOCALE))}const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,x,D;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:x})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):n.indexOf("Response timeout for 10000ms")>-1?await o({code:502,msg:"timeout 请求超时,请重试!",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=await i.onActionExecuted(_,k,D)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return D};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;if(t.pubfn.isNotNull(i)){let e=n.collection(a).where(i);if(s)for(let t in s){let n=s[t],r=n.name,a=n.type;null!=a&&""!=a||(a="asc"),e=e.orderBy(r,a)}o&&(e=e.field(o));let t=await e.limit(1).get();if(t.data&&t.data.length>0)return t.data[0]}else console.error("whereJson条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c}=e;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=r.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await r.collection(i).where(o).count():await r.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let d=e.sortArr,c=e.fieldJson,u=0,f=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),u=e.total,o1e3&&(l=1e3));let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.sum("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.avg("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.max("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.min("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;let l=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&l.match(i),l.sample({size:o}),t.pubfn.isNotNull(s)&&l.project(s),(await l.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:d=!1,getOne:c=!1,getMain:u=!1,sortArr:f=[],fieldJson:p={},groupJson:g,foreignDB:b=[],lastWhereJson:y,addFields:w}=e;-1==l&&(s=1,l=999999999,d=!1),c&&(l=1,d=!1);let N=0,_=!1;if(d){if(t.pubfn.isNotNull(y)){let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),t.pubfn.isNotNull(g)&&e.group(g),t.pubfn.isNotNull(b)&&(e=h.addForeignDB({foreignDB:b,foreignKey:i,result:e})),e=e.match(y),e=await e.count("total").end(),N=e.data[0]?e.data[0].total:0}else if(t.pubfn.isNotNull(g)){let e;e=t.pubfn.isNotNull(o)?await n.collection(a).aggregate().match(o).group(g).count("total").end():await n.collection(a).aggregate().group(g).count("total").end(),N=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(o)?await n.collection(a).where(o).count():await n.collection(a).count(),N=e.total}s=l),k.rows=x,k.code=0,k.msg="查询成功",k.pagination={pageIndex:s,pageSize:l},c&&(k.rows=k.rows[0]),u?k.rows:k},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",as:p,limit:g,whereJson:m,fieldJson:b,sortArr:y,foreignDB:w,addFields:N}=a[e];p||(p=d),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===f.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+h.getForeignKeyName(n)),then:s.in(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:[s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])];let _=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(m)&&(_=_.match(m)),t.pubfn.isNotNull(y)){let e={};for(let t in y){let n=y[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}_=_.sort(e)}g&&(_=_.limit(g)),t.pubfn.isNotNull(w)&&(_=h.addForeignDB({foreignDB:w,result:_})),t.pubfn.isNotNull(b)&&(b=h.foreignDBToProject({fieldJson:b,foreignDB:w}),_=_.project(b)),t.pubfn.isNotNull(N)&&(_=_.addFields(N)),_=_.done();let k={};k["foreignKey"+h.getForeignKeyName(n)]="$"+n;let v={from:d,let:k,pipeline:_,as:p};o=o.lookup(v)}return o},getForeignKeyName:function(e){return e.replace(new RegExp("\\.","g"),"__")},addWhereJson:function(e,t={},n="whereJson"){let{vk:r,db:a,_:i}=m,{formData:o,columns:s}=e;for(let e in s){let a,l=s[e],{key:d,mode:c,defaultValue:u,type:f="",lastWhereJson:p,auxiliary:g=!0,trim:m=!0}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let h=d;if(r.pubfn.isNotNull(l.fieldName)&&(h=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("string"==typeof a&&m&&"function"==typeof a.trim&&(a=a.trim()),"custom"===c);else if("%%"===c)try{t[h]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[h]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[h]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[h]=t[h]?t[h].gt(a):i.gt(a);else if(">="===c)t[h]=t[h]?t[h].gte(a):i.gte(a);else if("<"===c)t[h]=t[h]?t[h].lt(a):i.lt(a);else if("<="===c)t[h]=t[h]?t[h].lte(a):i.lte(a);else if("in"===c)t[h]=i.in(a);else if("nin"===c)t[h]=i.nin(a);else if("!="===c)t[h]=i.neq(a);else if("[]"===c)t[h]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[h]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[h]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[h]=i.gt(a[0]).lt(a[1]);else if("address"===c){let e={};a.province&&a.province.code&&(e["province.code"]=a.province.code),a.city&&a.city.code&&(e["city.code"]=a.city.code),a.area&&a.area.code&&(e["area.code"]=a.area.code),t[h]=e}else t[h]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{dbName:i,data:o,getCount:s=!0,whereJson:l,fieldJson:d,sortArr:c,treeProps:u,groupJson:f,foreignKey:p,foreignDB:g,lastWhereJson:b}=e,{pageIndex:y,pageSize:w,pagination:N,sortRule:_,formData:k,columns:v}=o;N&&(y=N.pageIndex,w=N.pageSize);let x={},D={},T=[],S={};if(t.pubfn.isNotNull(c))T=c;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?T=e:T.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(_)&&(T=_),D=h.addWhereJson(o),S=h.addLastWhereJson(o),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(D,l),t.pubfn.isNotNull(d)&&t.pubfn.objectAssign(x,d),t.pubfn.isNotNull(b)&&t.pubfn.objectAssign(S,b),t.pubfn.isNullAll(g,f,u)?await t.baseDao.select({dbName:i,getCount:s,pageIndex:y,pageSize:w,fieldJson:x,whereJson:D,sortArr:T}):await t.baseDao.selects({dbName:i,foreignKey:p,getCount:s,pageIndex:y,pageSize:w,whereJson:D,fieldJson:x,sortArr:T,treeProps:u,groupJson:f,foreignDB:g,lastWhereJson:S})},startTransaction:async function(e){let{vk:t,db:n,_:r}=m;return await n.startTransaction()},rollbackTransaction:async function(e){let{db:t,msg:n="【异常】操作失败",tips:r="事务已回滚。",err:a={}}=e,i={code:-1,msg:n,tips:r};await t.rollback();let o={message:a.message,stack:a.stack};try{o.body=JSON.parse(a.message),"object"==typeof o.body&&void 0!==o.body.code&&(o.body.msg,1)&&(i.msg=o.body.msg)}catch(e){}return console.error("transaction error",a),console.error("transaction errJson",o),i.err=o,i},group:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,groupJson:o,sortArr:s,pageIndex:l=1,pageSize:d=10,getCount:c=!1,lookupJson:u}=e;d<=0&&(d=999999999);r.aggregate;let f,p=n.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(p=p.match(i)),t.pubfn.isNotNull(o)&&(p=p.group(o)),t.pubfn.isNotNull(s)){let e={};for(let t in s){let n=s[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}p=p.sort(e)}p=p.skip((l-1)*d).limit(d),t.pubfn.isNotNull(u)&&(f=u.returnObject,delete u.returnObject,p=p.lookup(u)),p=await p.end();let g,h=p.data;if(f)for(let e in h)h[e][u.as]=h[e][u.as][0];let b=!1;if(c){let e=n.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let r=await e.count("total").end();g=r.data[0]?r.data[0].total:0,l=d;return{hasMore:b,total:g,rows:h,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=x.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=x.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=x.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=x.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=x.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return x.isLeapYear(n)||x.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i}},D=x,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=D,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,T.getCommonTime=T.timeUtil.getCommonTime,T.getMonthStartAndEnd=T.timeUtil.getMonthStartAndEnd,T.validator=function(e){return function(t,n,r){let a=T.test(n,e);return"function"!=typeof r||!a&&n?r(!1):void r()}},T.test=function(e,t){switch(t){case"mobile":return new RegExp(/^1[3|4|5|6|7|8|9][0-9]{9}$/).test(e);case"tel":return new RegExp(/^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/).test(e);case"card":return new RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/).test(e);case"mobileCode":return new RegExp(/^[0-9]{6}$/).test(e);case"username":return new RegExp(/^[a-zA-Z]([-_a-zA-Z0-9]{5,17})$/).test(e);case"pwd":case"password":return new RegExp(/^([a-zA-Z0-9_]){6,18}$/).test(e);case"payPwd":return new RegExp(/^[0-9]{6}$/).test(e);case"postal":return new RegExp(/[1-9]\d{5}(?!\d)/).test(e);case"QQ":return new RegExp(/^[1-9][0-9]{4,9}$/).test(e);case"email":return new RegExp(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/).test(e);case"money":return new RegExp(/^\d*(?:\.\d{0,2})?$/).test(e);case"URL":return new RegExp(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/).test(e);case"IP":return new RegExp(/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/).test(e);case"date":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/).test(e);case"time":return new RegExp(/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"dateTime":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"english+number":return new RegExp(/^[a-zA-Z0-9]*$/).test(e);case"english+number+_":return new RegExp(/^[a-zA-Z0-9_]*$/).test(e);case"number":return new RegExp(/^[0-9]*$/).test(e);case"english":return new RegExp(/^[a-zA-Z]+$/).test(e);case"chinese":return new RegExp(/^[\u4e00-\u9fa5]+$/gi).test(e);case"lower":return new RegExp(/^[a-z]+$/).test(e);case"upper":return new RegExp(/^[A-Z]+$/).test(e);case"HTML":return new RegExp(/<("[^"]*"|'[^']*'|[^'">])*>/).test(e);default:return!0}},T.checkStr=T.test,T.priceFilter=function(e){return"string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2)},T.objectAssign=function(e,t){return Object.assign(e,t)},T.copyObject=function(e){return void 0!==e?JSON.parse(JSON.stringify(e)):e},T.deepClone=function(e){if([null,void 0,NaN,!1].includes(e))return e;if("object"!=typeof e&&"function"!=typeof e)return e;let t="[object Array]"===Object.prototype.toString.call(e)?[]:{};for(let n in e)e.hasOwnProperty(n)&&(t[n]="object"==typeof e[n]?T.deepClone(e[n]):e[n]);return t},T.formAssign=function(e,t){let n=T.copyObject(e);return T.objectAssign(n,t)},T.arr_concat=function(e,t,n){n||(n="id");var r=e.concat(t),a=[];if(-1!=n){var i=[];for(var o in r)-1==i.indexOf(r[o][n])&&(i.push(r[o][n]),a.push(r[o]))}else a=r;return a},T.getData=function(e,t,n){let r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";let a="";for(let e=0;ee[t])},T.random=function(e,t,n){let r;if(T.isNull(n))r=T.randomFn(e,t);else{let a=0,i=1e5;do{a++,r=T.randomFn(e,t)}while(n.indexOf(r)>-1&&ae){n+="0123456789"[r[e].charCodeAt()%10]}else n="0"+n;return n},T.hidden=function(e="",t=0,n=0){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},T.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))O(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return O(e,"snake2camel")},T.camel2snakeJson=function(e){return O(e,"camel2snake")},T.string2Number=function(e,t={}){switch(Object.prototype.toString.call(e).slice(8,-1).toLowerCase()){case"string":if(isNaN(e))return e;{let{mobile:n=!0,idCard:r=!0,startFrom0:a=!0}=t;return n&&T.test(e,"mobile")||(r&&T.test(e,"card")||a&&e.length>1&&0===e.indexOf("0")&&1!==e.indexOf("."))?e:Number(e)}case"object":const n=Object.keys(e);for(let t=0;t-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t};var E=T,I={},J={};I.get=function(e){let t,n=J[e];if(n){let{value:r,expired:a}=n;I.isExpired(e)?delete J[e]:t=r}return t},I.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};J[e]=r},I.del=function(e){delete J[e]},I.clear=function(e){if(e)for(let t in J)0==t.indexOf(e)&&delete J[t];else J={}},I.isExpired=function(e){let t=!0,n=J[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},I.getAll=function(e){let t={};if(e)for(let n in J)0==n.indexOf(e)&&(t[e]=J[e]);else t=J;for(let e in t)I.isExpired(e)&&(delete t[e],delete J[e]);return t};var $=I,C={},B={},P={};C.init=function(e){P=(B=e).vk.system.globalDataDao},C.get=async function(e,t=0,n,r=!0){return"function"==typeof n?C.autoGet(e,t,n,r):C._get(e)},C.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=B;try{a=await C._get(e),i.pubfn.isNull(a)&&"function"==typeof n&&(a=await n(),void 0!==a&&r&&await i.globalDataCache.set(e,a,t))}catch(e){return}return a},C._get=async function(e){let t;try{let n=await P.find(e);if(n){let{value:r,expired_at:a}=n;C.isExpired(n)?await C.del(e):t=r}}catch(e){return}return t},C.set=async function(e,t,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await P.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.del=async function(e){await P.del(e)},C.clear=async function(e){if(e)return await P.deleteByWhere({key:new RegExp("^"+e)})},C.list=async function(e){return await P.list(e)},C.count=async function(e){return await P.count(e)},C.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},C.inc=async function(e,t=1,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await P.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},C.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=B,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await P.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.deleteExpired=async function(e){await P.deleteExpired(e)};var M=C,j={},F={};function q(e){return e.code=e.errcode,e.msg=e.errmsg,e}j.init=function(e){F=e},j.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=F;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},j.decrypt={},j.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=F,c={code:0,msg:"ok"},u=o.pubfn.isNullOneByObject({encryptedData:n,iv:r,sessionKey:a});if(u)return{code:-1,msg:u+"不能为空"};if(t)i=t;else try{if(i=j.getConfig()["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=j.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},j.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=F,l=new Buffer(i,"base64"),d=new Buffer(r,"base64"),c=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,c);e.setAutoPadding(!0),t=e.update(d,"binary","utf8"),t+=e.final("utf8"),t=JSON.parse(t)}catch(e){throw new Error(e)}return t.watermark.appid!==n?{code:-1,msg:"appid不一致"}:t},j.auth={},j.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),{vk:r,config:a}=F,i=await r.request({url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${t}&secret=${n}`,method:"GET"});return i.errcode?(console.error("getAccessToken失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",access_token:i.access_token,expires_in:i.expires_in}},j.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=j.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=F,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await j.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},j.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=F,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await j.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await j.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},j.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=F,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.wxacode={},j.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=F,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await j.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=await n.request({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+t,method:"POST",data:{scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d},dataType:"default",useContent:!0,headers:{encoding:null}});if(c.length<500){let e=c.toString();try{e=JSON.parse(e)}catch(e){}return{code:-1,msg:"生成小程序码失败,请重试!",res:e}}return Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},j.urlscheme={},j.urlscheme.generate=async function(e={}){let{vk:t}=F,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await j.auth.getAccessToken(e);if(!s)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a>0&&(a=(new Date).getTime()/1e3+a);let l=await t.request({url:"https://api.weixin.qq.com/wxa/generatescheme?access_token="+s,method:"POST",data:{jump_wxa:{path:i,query:o},is_expire:r,expire_time:a},useContent:!0});switch(l=q(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},j.security={},j.security.msgSecCheck=async function(e={}){let{vk:t}=F,{content:n}=e,r=await j.auth.getAccessToken(e);if(!r)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let a=await t.request({url:"https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+r,method:"POST",data:{content:n},useContent:!0});switch(a=q(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},j.security.imgSecCheck=async function(e={}){let{vk:t}=F,{dataBuffer:n,formData:r,base64:a}=e,i=await j.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a&&!n&&(n=new Buffer(a,"base64")),n&&!r&&(r=new t.formDataUtil.FormData,r.append("media",n,{filename:Date.now()+".png",contentType:"image/png"}));let o=await t.request({url:"https://api.weixin.qq.com/wxa/img_sec_check?access_token="+i,content:r.getBuffer(),headers:r.getHeaders()});switch(o=q(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},j.subscribeMessage={},j.subscribeMessage.send=async function(e={}){let{vk:t}=F,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await j.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=await t.request({url:"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+l,method:"POST",data:{touser:n,template_id:r,page:a,data:i,miniprogram_state:o,lang:s},useContent:!0});switch(d=q(d),d.code){case 40003:d.msg="touser字段openid为空或者不正确";break;case 40037:d.msg="订阅模板id为空不正确";break;case 43101:d.msg="用户未订阅该消息";break;case 47003:d.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:d.msg="page路径不正确,需要保证在现网版本小程序中存在"}return d},j.livebroadcast={},j.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=F,{pageIndex:n=1,pageSize:r=100}=e,a=await j.auth.getAccessToken(e);if(!a)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(n<=0)return{code:-1,msg:"pageIndex必须是大于0的整数"};let i=(n-1)*r,o=r,s=await t.request({url:"https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+a,method:"POST",data:{start:i,limit:o},useContent:!0});switch(s=q(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},j.app={},j.app.auth={},j.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=F,{code:i}=e,o=await r.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${i}&grant_type=authorization_code`,method:"GET"});return o.errcode?(console.error("getAccessToken失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok"}},j.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=F,{access_token:i,openid:o,lang:s="zh-CN"}=e;if(!i)return{code:-1,msg:"access_token不能为空"};let l=await r.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${i}&openid=${o}$lang=${s}`,method:"GET"});return l.errcode?(console.error("getUserInfo失败:",l),{code:l.errcode,msg:l.errmsg,err:l}):{...l,code:0,msg:"ok",avatar:l.headimgurl,gender:l.sex}},j.h5={},j.h5.auth={},j.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},j.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=j.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=F,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=F,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&!n.msg&&(n.msg="register"===n.type?"注册成功":"登录成功"),n.uid&&"register"===n.type&&["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});(e.nickname||e.headimgurl)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:{nickname:e.nickname,avatar:e.headimgurl}}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=j,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Z=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,G=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,V=/Content-Type:\s(.+?)$/i;var Y={FormData:class{constructor(){this._shouldUseCache=!1,this._cachedBuffer=null,this._lineBreak="\r\n",this._boundary="------FormDataBaseBoundary"+Math.random().toString(36).substring(2),this.dataList=[]}_addData(e){if(this._shouldUseCache=!1,0===this.dataList.length)return void this.dataList.push(e);const t=this.dataList[this.dataList.length-1];switch(`${Buffer.isBuffer(t)?"buffer":"other"}_${Buffer.isBuffer(e)?"buffer":"other"}`){case"buffer_buffer":this.dataList.push(this._lineBreak),this.dataList.push(e);break;case"buffer_other":this.dataList.push(this._lineBreak+e);break;case"other_buffer":this.dataList[this.dataList.length-1]=t+"\r\n",this.dataList.push(e);break;case"other_other":this.dataList[this.dataList.length-1]=t+"\r\n"+e}}append(e,t,n){this._addData("--"+this._boundary);let r=`Content-Disposition: form-data; name="${encodeURIComponent(e)}"`;if(Buffer.isBuffer(t)){if(!n.filename||!n.contentType)throw new Error("filename and contentType required");r+=`; filename="${encodeURIComponent(n.filename)}"`,this._addData(r),this._addData("Content-Type: "+n.contentType),this._addData(""),this._addData(t)}else this._addData(r),this._addData(""),this._addData(t)}getHeaders(e){const t={"Content-Type":"multipart/form-data; boundary="+this._boundary};return Object.assign(t,e)}getBuffer(){if(this._shouldUseCache)return this._cachedBuffer;this._shouldUseCache=!0;let e=Buffer.alloc(0);return this.dataList.forEach(t=>{e=Buffer.isBuffer(t)?Buffer.concat([e,t]):Buffer.concat([e,Buffer.from(""+t)])}),e=Buffer.concat([e,Buffer.from(`${this._lineBreak}--${this._boundary}--`)]),this._cachedBuffer=e,e}},formParser:e=>{const t=(e.headers["content-type"]||e.headers["Content-Type"]).match(Z),n=t[1]||t[2],r=function(e,t){let n=0,r=0,a=[];for(;-1!==(r=e.indexOf(t,n));)a.push(e.slice(n,r)),n=r+t.length,r=e.indexOf(t,n);return a}(Buffer.from(e.body,"base64"),Buffer.from("--"+n)).map(e=>function(e){let t=e.indexOf("\r\n")+"\r\n".length,n=t,r=e.lastIndexOf("\r\n"),a=[];for(;-1!==(n=e.indexOf("\r\n",t));)if(a.push(e.slice(t,n)),t=n+"\r\n".length,0===a[a.length-1].length){a.push(e.slice(t,r));break}return a}(e).filter(e=>e.length>0)).filter(e=>2===e.length||3===e.length||4===e.length).map(e=>{const t={},n=e[0].toString().match(G);switch(t.name=decodeURIComponent(n[1]),e.length){case 2:t.value=e[1].toString();break;case 3:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(V)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(V)[1],t.fileContent=e[3]}return t}),a={};return r.forEach(e=>{const t=e.name;delete e.name,a[t]=e.fileContent?e:e.value}),a}};const H="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:H,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:H,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:H,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:H,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:H,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="opendb-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let t={code:0,msg:"ok"};return await re.count({_id:e.key})>0?(t.num=await re.update(e),t.mode="update"):(t.id=await re.add(e),t.num=1,t.mode="add"),t},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=E,fe.temporaryCache=$,fe.globalDataCache=M,fe.openapi=W,fe.formDataUtil=Y,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){let{message:t=""}=e;return void(-1==t.indexOf("Cannot find module")&&console.error(e))}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.config)throw new Error("配置文件:uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js \n编译错误,请检查!");if(!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; +"use strict";var e={regExpTest:function(e,t){let n=!1;if("string"==typeof e){new RegExp(e).test(t)&&(n=!0)}else if("object"==typeof e)for(let r=0;r{let{url:t,data:n={},util:r}=e,{uniID:a}=r,{need_user_info:i=!0}=n,o={code:-1,msg:""},s=0==t.indexOf("admin/");s&&(i=!0);let l=t.indexOf("/sys/")>-1,d=await a.checkToken(e.uniIdToken,{needPermission:l,needUserInfo:i});if(d.code&&d.code>0)return d;if(d.userInfo){let e=d.userInfo;e.permission=d.permission,delete e.token,delete e.password,o.userInfo=e}if(o.uid=d.uid,d.token&&(o.token=d.token,o.tokenExpired=d.tokenExpired),s){if(!o.userInfo)return{code:403,msg:"need_user_info必须为true"};{let e=o.userInfo.role||[];if(!o.userInfo.allow_login_background&&!e.includes("admin"))return{code:403,msg:"您无权限登录后台"}}}return o.code=0,o.msg="ok",o}};async function r(e={},t){let{vk:n,db:r,_:a}=t,{whereJson:i={},fieldJson:o={},justNeedID:s=!1}=e;s&&(o={permission_id:!0}),i.enable=!0;let l=[],d=await n.baseDao.select({dbName:"uni-id-permissions",pageIndex:1,pageSize:500,fieldJson:o,whereJson:i});if(s)for(let e=0;e{let{url:t,util:a}=e,{uniID:i,config:o,pubFun:s,vk:l,db:d,_:c}=a,u={code:-1,msg:""};const f=n;if(u=await f.main(e),0!==u.code)return u;if(!u.userInfo)return{code:403,msg:"请去除need_user_info:false"};if(u.userInfo.role||(u.userInfo.role=[]),u.userInfo.role.includes("admin"))return u;if(!u.userInfo.allow_login_background)return{code:403,msg:"您无权限登录后台"};let p=[];if(u.userInfo.role.includes("admin-lv3")){let e=await r({whereJson:{level:c.in([1,2,3])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv2")){let e=await r({whereJson:{level:c.in([1,2])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("admin-lv1")){let e=await r({whereJson:{level:c.in([1])},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}if(u.userInfo.role.includes("query-all")){let e=await r({whereJson:{curd_category:4,level:c.neq(4)},justNeedID:!0},a);l.pubfn.isNotNull(e)&&(p=p.concat(e))}let g=await async function(e,t){let{vk:n,db:r,_:a}=t,{role:i}=e;if(n.pubfn.isNull(i))return[];return(await n.baseDao.select({dbName:"uni-id-roles",whereJson:{role_id:a.in(i),enable:!0},fieldJson:{permission:!0}})).rows}({role:u.userInfo.role},a);for(let e in g){let{permission:t}=g[e];l.pubfn.isNotNull(t)&&(p=p.concat(t))}if(0==p.length)return{code:403,msg:"权限不足"};p=[...new Set(p)];let m=await r({whereJson:{permission_id:c.in(p),match_mode:c.in([1,2])}},a),h=!1;for(let e=0;e0}({myPermission:p,url:t},a)&&(h=!0)}return h?(u.code=0,u.msg="ok",u):{code:403,msg:"权限不足"}}}.main}];var i={onActionExecuting:async(e,n=[])=>{let r={code:403,msg:"access denied",filterStack:[]},{url:a}=e;for(let i in n){let o=n[i],{mode:s="onActionExecuting",enable:l=!0}=o;if(l&&"onActionExecuting"===s&&t.regExpTest(o.regExp,a)){e.filterResponse=r;let t=await o.main(e);if(t.filterId=o.id,r.filterStack.push(t),0!==t.code){r=t;break}r=Object.assign(r,t)}}return r},onActionExecuted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionExecuted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionIntercepted:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionIntercepted"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},onActionError:async(e,n=[],r)=>{let{url:a}=e;for(let i in n){let o=n[i],{mode:s,enable:l=!0}=o;if(l&&"onActionError"===s&&t.regExpTest(o.regExp,a)){let t=await o.main(e,r);if(t){if(0!==t.code){r=t;break}r=Object.assign(r,t)}}}return r},getMiddleware:function(e){let t=[];if(e){let n=[...a,...e];n.sort((function(e,t){return e.index-t.index})),t=n.filter((e,t,r)=>{var a=[];return n.forEach((e,t)=>{a.push(e.id)}),a.indexOf(e.id)===t})}else t=a;return t}};async function o(e={}){let{code:t,msg:n,err:r,serviceParam:a,middlewareService:o}=e;console.error(n,r);let s={code:t,msg:n};return r&&(s.err={message:r.message,stack:r.stack,code:r.code}),await i.onActionError(a,o,s)}process.env.TZ="Asia/Shanghai";var s=async function(e){let{event:t,context:n,vk:r}=e,{config:a,uniID:s,uniPay:l,db:d,middlewareService:c,pubFun:u,customUtil:f,crypto:p}=r.unicloud;if(r.pubfn.getData(a,"vk.system.serviceShutdown"))return{code:405,msg:r.pubfn.getData(a,"vk.system.serviceShutdownDescription")};let g={event:t,context:n},m=function(e,t){let n={};if(e.httpMethod){let{path:r=""}=e;if("/"===r[0]&&(r=r.substring(1)),r){let a,{urlrewrite:i={}}=t.unicloud,{rule:o}=i,s=t.pubfn.getData(i,"config.accessOnlyInRule"),l=!1;if(o)for(let e in o){let n=o[e],i=t.pubfn.regExpExecToTemplate(r,e,n);if(i){l=!0;let e=i.split("?");r=e[0],a=t.pubfn.urlStringToJson(e[1]);break}}if(!l&&s)return{mpserverlessComposedResponse:!0,statusCode:403,code:403,headers:{"content-type":"application/json"},body:JSON.stringify({code:403,msg:"access denied"})};if(n={data:{}},t.pubfn.isNotNull(a)&&(n.data=Object.assign(n.data,a)),e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t&&(t=JSON.parse(t)),n.data=Object.assign(n.data,t)}if(e.body){let r=e.body;if((e.headers&&e.headers["content-type"]?e.headers["content-type"]:"").indexOf("multipart/form-data;")>-1)r=t.formDataUtil.formParser(e),n.data=Object.assign(n.data,r);else{e.isBase64Encoded&&(r=Buffer.from(r,"base64").toString("utf-8"));try{"string"==typeof r&&(r=JSON.parse(r)),n.data=Object.assign(n.data,r)}catch(e){}}}n.$url||(n.data.$url?n.$url=n.data.$url:n.$url=r),n.data.uni_id_token&&(n.uni_id_token=n.data.uni_id_token,delete n.data.uni_id_token)}else{if(e.queryStringParameters){let t=e.queryStringParameters;"string"==typeof t.data&&(t.data=JSON.parse(t.data)),n=Object.assign(n,t)}if(e.body){let t=e.body;e.isBase64Encoded&&(t=Buffer.from(t,"base64").toString("utf-8"));try{"string"==typeof t&&(t=JSON.parse(t)),n=Object.assign(n,t)}catch(e){}}}}else n=JSON.parse(JSON.stringify(e));n.data||(n.data={});n.uniIdToken||(n.uniIdToken=n.uni_id_token);return n.url=n.$url||"",n}(t,r),{url:h,data:b,uniIdToken:y}=m;if([403].indexOf(m.code)>-1)return m;if(b&&(b.vk_appid&&(n.APPID=b.vk_appid),b.vk_platform&&(n.PLATFORM=b.vk_platform),r.pubfn.isNullOne(n.APPID,n.PLATFORM))){let e=r.pubfn.getData(a,"vk.context");r.pubfn.isNotNull(e)&&(n.APPID||(n.APPID=e.APPID),n.PLATFORM||(n.PLATFORM=e.PLATFORM),n.LOCALE||(n.LOCALE=e.LOCALE))}const w=s.createInstance({context:n});d.command.$=d.command.aggregate;let N={vk:r,config:a,pubFun:u,uniID:w,uniPay:l,db:d,_:d.command,$:d.command.aggregate,customUtil:f,crypto:p,env:{APPID:n.APPID,PLATFORM:n.PLATFORM}};try{uniCloud.vk=r,uniCloud.env=N.env}catch(e){}let _={url:h,data:b,uniIdToken:y,util:N,originalParam:g};const k=i.getMiddleware(c);let v,D,x;try{if(v=await i.onActionExecuting(_,k),0!==v.code)return await async function(e,t,n){try{n=await i.onActionIntercepted(e,t,n)}catch(n){return await o({code:500,msg:`云函数 ${e.url} 的中间件 onActionIntercepted 运行异常!`,err:n,serviceParam:e,middlewareService:t})}return n}(_,k,v);v.uid&&(b.uid=v.uid),_.filterResponse=v}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuting 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{D=r.require("service/"+h)}catch(e){e||(e={});let{code:t,message:n=""}=e;return"MODULE_NOT_FOUND"==t&&n.indexOf("service/")>-1?await o({code:404,msg:`云函数 ${h} 不存在!`,serviceParam:_,middlewareService:k}):"MODULE_NOT_FOUND"==t&&n.indexOf("Cannot find module")>-1?await o({code:500,msg:n,err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 编译异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=await async function(e={}){let{res:t,serviceParam:n,serviceMain:r}=e;t.uid&&(n.uid=t.uid);t.userInfo&&(n.userInfo=t.userInfo);let a=await r.main(n);t.token&&"object"==typeof a&&(a.vk_uni_token={token:t.token,tokenExpired:t.tokenExpired});return a}({res:v,serviceParam:_,serviceMain:D})}catch(e){e||(e={});let{code:t,message:n=""}=e;return"InternalServerError"==t&&n.indexOf("_id_ dup key")>-1?await o({code:500,msg:"vk.baseDao.add : _id不能重复添加",err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("msg:")?await o({code:501,msg:n.substring(4),err:e,serviceParam:_,middlewareService:k}):0===n.indexOf("Cannot read property 'mp-weixin' of undefined")?await o({code:501,msg:"请先绑定微信",err:e,serviceParam:_,middlewareService:k}):n.indexOf("Response timeout for 10000ms")>-1?await o({code:502,msg:"timeout 请求超时,请重试!",err:e,serviceParam:_,middlewareService:k}):await o({code:500,msg:`云函数 ${h} 运行异常!`,err:e,serviceParam:_,middlewareService:k})}try{x=await i.onActionExecuted(_,k,x)}catch(e){return await o({code:500,msg:`云函数 ${h} 的中间件 onActionExecuted 运行异常!`,err:e,serviceParam:_,middlewareService:k})}return x};function l(e,t,n,r,a,i){return p((o=p(p(t,e),p(r,i)))<<(s=a)|o>>>32-s,n);var o,s}function d(e,t,n,r,a,i,o){return l(t&n|~t&r,e,t,a,i,o)}function c(e,t,n,r,a,i,o){return l(t&r|n&~r,e,t,a,i,o)}function u(e,t,n,r,a,i,o){return l(t^n^r,e,t,a,i,o)}function f(e,t,n,r,a,i,o){return l(n^(t|~r),e,t,a,i,o)}function p(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}var g=function(e){return function(e){for(var t="",n=0;n<4*e.length;n++)t+="0123456789abcdef".charAt(e[n>>2]>>n%4*8+4&15)+"0123456789abcdef".charAt(e[n>>2]>>n%4*8&15);return t}(function(e,t){e[t>>5]|=128<>>9<<4)]=t;for(var n=1732584193,r=-271733879,a=-1732584194,i=271733878,o=0;o>5]|=(255&e.charCodeAt(n/8))<500)return await h.selectAll(e);let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,fieldJson:b}=d;return c=c.skip((g-1)*o).limit(o),t.pubfn.isNotNull(b)&&(c=c.field(b)),c.get().then(e=>{let t={};return p?(t.total=f,t.hasMore=u):(t.total=e.data?e.data.length:0,t.hasMore=t.total>=o),t.rows=e.data,t.code=0,t.msg="查询成功",t.pagination={pageIndex:g,pageSize:o},s&&(t.rows=t.rows[0]),l?t.rows:t})},findById:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,id:i,fieldJson:o,db:s}=e,l=(s||n).collection(a).doc(i);o&&(l=l.field(o));let d=await l.get();return"[object Array]"===Object.prototype.toString.call(d.data)?d.data[0]:d.data},findByWhereJson:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,fieldJson:o,sortArr:s}=e;if(t.pubfn.isNotNull(i)){let e=n.collection(a).where(i);if(s)for(let t in s){let n=s[t],r=n.name,a=n.type;null!=a&&""!=a||(a="asc"),e=e.orderBy(r,a)}o&&(e=e.field(o));let t=await e.limit(1).get();if(t.data&&t.data.length>0)return t.data[0]}else console.error("whereJson条件不能为空");return null},count:async function(e){let t,{vk:n,db:r,_:a}=m,{dbName:i,whereJson:o,foreignDB:s,foreignKey:l,groupJson:d,lastWhereJson:c}=e;if(n.pubfn.isNotNull(s)||n.pubfn.isNotNull(d)){let e=r.collection(i).aggregate();return n.pubfn.isNotNull(o)&&e.match(o),n.pubfn.isNotNull(d)&&e.group(d),n.pubfn.isNotNull(s)&&(e=h.addForeignDB({foreignDB:s,foreignKey:l,result:e})),n.pubfn.isNotNull(c)&&(e=e.match(c)),e=await e.count("total").end(),e.data[0]?e.data[0].total:0}return t=n.pubfn.isNotNull(o)?await r.collection(i).where(o).count():await r.collection(i).count(),t.total},getSelectData:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,pageIndex:o=1,pageSize:s=10,getCount:l=!1}=e;s<0&&(o=1,s=999999999,l=!0);let d=e.sortArr,c=e.fieldJson,u=0,f=!1;if(l){let e;e=t.pubfn.isNotNull(i)?await n.collection(a).where(i).count():await n.collection(a).count(),u=e.total,o1e3&&(l=1e3));let d=await h.getSelectData(e),{result:c,hasMore:u,total:f,getCount:p,pageIndex:g,pageSize:b,fieldJson:y}=d;b>0&&!f&&!p&&(f=b),r.pubfn.isNotNull(y)&&(c=c.field(y));let w={};if(p&&0===f)w={data:[]};else{let t=f;bi&&(n=i-t);let o=c.skip(t).limit(n).get();r.push(o)}try{w=(await Promise.all(r)).reduce((e,t)=>({data:e.data.concat(t.data),errMsg:e.errMsg}))}catch(t){throw console.error("vk.baseDao.select-异常",e,t),new Error("msg:vk.baseDao.select-异常")}}let N={};return N.total=p?f:w.data?w.data.length:0,N.hasMore=u,N.rows=w.data,N.code=0,N.msg="查询成功",N.pagination={pageIndex:g,pageSize:b},o&&(N.rows=N.rows[0]),s?N.rows:N},sum:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.sum("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:0},avg:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.avg("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},max:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.max("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},min:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,fieldName:i,whereJson:o}=e;const s=n.command.aggregate;let l=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&l.match(o),l.group({_id:null,num:s.min("$"+i)});let d=await l.end();return d.data&&d.data[0]?d.data[0].num:null},sample:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,size:o,fieldJson:s}=e;n.command.aggregate;let l=n.collection(a).aggregate();return t.pubfn.isNotNull(i)&&l.match(i),l.sample({size:o}),t.pubfn.isNotNull(s)&&l.project(s),(await l.end()).data},selects:async function(e){let{vk:t,db:n,_:r}=m;if(t.pubfn.isNotNull(e.treeProps))return await h.tree(e);let{dbName:a,foreignKey:i="_id",whereJson:o={},pageIndex:s=1,pageSize:l=10,getCount:d=!1,getOne:c=!1,getMain:u=!1,sortArr:f=[],fieldJson:p={},groupJson:g,foreignDB:b=[],lastWhereJson:y,addFields:w}=e;-1==l&&(s=1,l=999999999,d=!1),c&&(l=1,d=!1);let N=0,_=!1;if(d){if(t.pubfn.isNotNull(y)){let e=n.collection(a).aggregate();t.pubfn.isNotNull(o)&&e.match(o),t.pubfn.isNotNull(g)&&e.group(g),t.pubfn.isNotNull(b)&&(e=h.addForeignDB({foreignDB:b,foreignKey:i,result:e})),e=e.match(y),e=await e.count("total").end(),N=e.data[0]?e.data[0].total:0}else if(t.pubfn.isNotNull(g)){let e;e=t.pubfn.isNotNull(o)?await n.collection(a).aggregate().match(o).group(g).count("total").end():await n.collection(a).aggregate().group(g).count("total").end(),N=e.data[0]?e.data[0].total:0}else{let e;e=t.pubfn.isNotNull(o)?await n.collection(a).where(o).count():await n.collection(a).count(),N=e.total}s=l),k.rows=D,k.code=0,k.msg="查询成功",k.pagination={pageIndex:s,pageSize:l},c&&(k.rows=k.rows[0]),u?k.rows:k},listToObjectByLimit1:function(e){let{vk:t,db:n,_:r}=m,{list:a,foreignDB:i}=e;if(t.pubfn.isNotNull(i))for(let e in a)for(let n in i){let{as:r,limit:o,foreignDB:s,dbName:l}=i[n];r||(r=l),t.pubfn.isNotNull(s)&&(a[e][r]=h.listToObjectByLimit1({list:a[e][r],foreignDB:s})),1===o&&(a[e][r]&&a[e][r].length>0?a[e][r]=a[e][r][0]:a[e][r]={})}return a},addForeignDB:function(e){let{vk:t,db:n,_:r}=m,{foreignDB:a,foreignKey:i,result:o}=e;const s=r.aggregate;for(let e in a){let n,l,{dbName:d,foreignKey:c,localKey:u,localKeyType:f="",as:p,limit:g,whereJson:m,fieldJson:b,sortArr:y,foreignDB:w,addFields:N}=a[e];p||(p=d),n=t.pubfn.isNotNull(u)?u:"object"==typeof i?i[e]:i,l="array"===f.toLowerCase()?[s.cond({if:s.isArray("$$foreignKey"+h.getForeignKeyName(n)),then:s.in(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)]),else:s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])})]:[s.eq(["$"+c,"$$foreignKey"+h.getForeignKeyName(n)])];let _=s.pipeline().match(r.expr(s.and(l)));if(t.pubfn.isNotNull(m)&&(_=_.match(m)),t.pubfn.isNotNull(y)){let e={};for(let t in y){let n=y[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}_=_.sort(e)}g&&(_=_.limit(g)),t.pubfn.isNotNull(w)&&(_=h.addForeignDB({foreignDB:w,result:_})),t.pubfn.isNotNull(b)&&(b=h.foreignDBToProject({fieldJson:b,foreignDB:w}),_=_.project(b)),t.pubfn.isNotNull(N)&&(_=_.addFields(N)),_=_.done();let k={};k["foreignKey"+h.getForeignKeyName(n)]="$"+n;let v={from:d,let:k,pipeline:_,as:p};o=o.lookup(v)}return o},getForeignKeyName:function(e){return e.replace(new RegExp("\\.","g"),"__")},addWhereJson:function(e,t={},n="whereJson"){let{vk:r,db:a,_:i}=m,{formData:o,columns:s}=e;for(let e in s){let a,l=s[e],{key:d,mode:c,defaultValue:u,type:f="",lastWhereJson:p,auxiliary:g=!0,trim:m=!0}=l;if("lastWhereJson"===n&&!p)continue;if("lastWhereJson"!==n&&p)continue;let h=d;if(r.pubfn.isNotNull(l.fieldName)&&(h=l.fieldName),a=r.pubfn.isNotNull(l.value)?l.value:o[d],r.pubfn.isNull(a)&&r.pubfn.isNotNull(u)&&(a=u),r.pubfn.isNull(c)&&(c=["address","province","city","area"].indexOf(f)>-1?"address":"[object Array]"===Object.prototype.toString.call(a)&&a.length>=2?"[]":"="),r.pubfn.isNotNull(a))if("string"==typeof a&&m&&"function"==typeof a.trim&&(a=a.trim()),"custom"===c);else if("%%"===c)try{t[h]=new RegExp(a)}catch(e){}else if("%*"===c)try{t[h]=new RegExp("^"+a)}catch(e){}else if("*%"===c)try{t[h]=new RegExp(a+"$")}catch(e){}else if(">"===c)t[h]=t[h]?t[h].gt(a):i.gt(a);else if(">="===c)t[h]=t[h]?t[h].gte(a):i.gte(a);else if("<"===c)t[h]=t[h]?t[h].lt(a):i.lt(a);else if("<="===c)t[h]=t[h]?t[h].lte(a):i.lte(a);else if("in"===c)t[h]=i.in(a);else if("nin"===c)t[h]=i.nin(a);else if("!="===c)t[h]=i.neq(a);else if("[]"===c)t[h]=i.gte(a[0]).lte(a[1]);else if("[)"===c)t[h]=i.gte(a[0]).lt(a[1]);else if("(]"===c)t[h]=i.gt(a[0]).lte(a[1]);else if("()"===c)t[h]=i.gt(a[0]).lt(a[1]);else if("address"===c){let e={};a.province&&a.province.code&&(e["province.code"]=a.province.code),a.city&&a.city.code&&(e["city.code"]=a.city.code),a.area&&a.area.code&&(e["area.code"]=a.area.code),t[h]=e}else t[h]=g?"___empty-array___"===a?[]:"___empty-object___"===a?{}:"___non-existent___"===a?i.exists(!1):"___existent___"===a?i.exists(!0):a:a}return t},addLastWhereJson:function(e,t={}){return h.addWhereJson(e,t,"lastWhereJson")},getTableData:async function(e){let{vk:t,db:n,_:r,config:a}=m,{dbName:i,data:o,getCount:s=!0,whereJson:l,fieldJson:d,sortArr:c,treeProps:u,groupJson:f,foreignKey:p,foreignDB:g,lastWhereJson:b}=e,{pageIndex:y,pageSize:w,pagination:N,sortRule:_,formData:k,columns:v}=o;N&&(y=N.pageIndex,w=N.pageSize);let D={},x={},T=[],S={};if(t.pubfn.isNotNull(c))T=c;else{let e=t.pubfn.getData(a,"vk.db.unicloud.getTableData.sortArr");t.pubfn.isNotNull(e)?T=e:T.push({name:"_id",type:"desc"})}return t.pubfn.isNotNull(_)&&(T=_),x=h.addWhereJson(o),S=h.addLastWhereJson(o),t.pubfn.isNotNull(l)&&t.pubfn.objectAssign(x,l),t.pubfn.isNotNull(d)&&t.pubfn.objectAssign(D,d),t.pubfn.isNotNull(b)&&t.pubfn.objectAssign(S,b),t.pubfn.isNullAll(g,f,u)?await t.baseDao.select({dbName:i,getCount:s,pageIndex:y,pageSize:w,fieldJson:D,whereJson:x,sortArr:T}):await t.baseDao.selects({dbName:i,foreignKey:p,getCount:s,pageIndex:y,pageSize:w,whereJson:x,fieldJson:D,sortArr:T,treeProps:u,groupJson:f,foreignDB:g,lastWhereJson:S})},startTransaction:async function(e){let{vk:t,db:n,_:r}=m;return await n.startTransaction()},rollbackTransaction:async function(e){let{db:t,msg:n="【异常】操作失败",tips:r="事务已回滚。",err:a={}}=e,i={code:-1,msg:n,tips:r};await t.rollback();let o={message:a.message,stack:a.stack};try{o.body=JSON.parse(a.message),"object"==typeof o.body&&void 0!==o.body.code&&(o.body.msg,1)&&(i.msg=o.body.msg)}catch(e){}return console.error("transaction error",a),console.error("transaction errJson",o),i.err=o,i},group:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i,groupJson:o,sortArr:s,pageIndex:l=1,pageSize:d=10,getCount:c=!1,lookupJson:u}=e;d<=0&&(d=999999999);r.aggregate;let f,p=n.collection(a).aggregate();if(t.pubfn.isNotNull(i)&&(p=p.match(i)),t.pubfn.isNotNull(o)&&(p=p.group(o)),t.pubfn.isNotNull(s)){let e={};for(let t in s){let n=s[t],r=n.name,a=n.type;a=null==a||""==a||"asc"==a?1:-1,e[r]=a}p=p.sort(e)}p=p.skip((l-1)*d).limit(d),t.pubfn.isNotNull(u)&&(f=u.returnObject,delete u.returnObject,p=p.lookup(u)),p=await p.end();let g,h=p.data;if(f)for(let e in h)h[e][u.as]=h[e][u.as][0];let b=!1;if(c){let e=n.collection(a).aggregate();t.pubfn.isNotNull(i)&&(e=e.match(i)),t.pubfn.isNotNull(o)&&(e=e.group(o));let r=await e.count("total").end();g=r.data[0]?r.data[0].total:0,l=d;return{hasMore:b,total:g,rows:h,code:0,key:1,pageIndex:l,pageSize:d}},tree:async function(e){let{vk:t,db:n,_:r}=m,{dbName:a,whereJson:i={},pageIndex:o=1,pageSize:s=10,getCount:l=!1,sortArr:d=[],fieldJson:c={},lastWhereJson:u,treeProps:f={}}=e;e.foreignDB||(e.foreignDB=[]);let{id:p="_id",parent_id:g="parent_id",children:b="children",level:y=10,limit:w=500}=f;if(y<1||y>20)throw new Error("msg:treeProps.level的范围必须在[1,20]");delete e.treeProps,e.whereJson||(e.whereJson={[g]:null}),e.foreignDB.unshift({dbName:a,localKey:p,foreignKey:g,as:b,limit:w,whereJson:f.whereJson,fieldJson:f.fieldJson||e.fieldJson,sortArr:f.sortArr,foreignDB:t.pubfn.copyObject(e.foreignDB)});let N=t.pubfn.copyObject(e.foreignDB);for(let n=1;n{"[object object]"===Object.prototype.toString.call(e.content)&&(e.content=JSON.stringify(e.content)),void 0===e.dataType&&(e.dataType="json"),"default"!=e.dataType&&""!==e.dataType||delete e.dataType,e.useContent&&(e.content=JSON.stringify(e.data)),e.method||(e.method="POST"),void 0===e.headers&&void 0!==e.header&&(e.headers=e.header);let t=await uniCloud.httpclient.request(e.url,e);return!e.needOriginalRes&&t&&t.data?t.data:t},w={formValidateItem:function(e,t,n){let r={code:0,msg:"ok"};for(let a in n){let i=n[a];if(void 0===e[t]&&i.required){r={type:"undefined",code:-1,msg:"字段:"+t+" 名称错误,请检查!",key:t,value:e[t]};break}if(i.required&&(null==e[t]||null==e[t]||""===e[t]||0==e[t].length)){r={type:"required",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.type&&void 0!==e[t]){if(Object.prototype.toString.call(e[t]).toLowerCase().toLowerCase()!==`[object ${i.type}]`.toLowerCase()){r={type:"type",code:-1,msg:i.message,key:t,value:e[t]};break}}if(i.len&&e[t].length!=i.len){r={type:"len",code:-1,msg:i.message,key:t,value:e[t]};break}if(i.min)if(i.type&&"number"==i.type){if(e[t]i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}}else if(e[t].length>i.max){r={type:"max",code:-1,msg:i.message,key:t,value:e[t]};break}if("function"==typeof i.validator){let n=i.validator(i,e[t],(function(e){return e}));if(void 0!==n&&!0!==n){r={type:"validator",code:-1,msg:i.message,key:t,value:e[t]};break}}}return r}};function N(e){return JSON.parse(JSON.stringify(e))}var _={};function k(e){let t=[];for(let n=0;n0&&(n=_.treeToArrayFn(d[o],t,n,d[a])),s&&delete d[o]}return n},_.arrayToTree=function(e,t){let n=N(e),{id:r="_id",parent_id:a="parent_id",children:i="children",deleteParentId:o=!1,need_field:s}=t,l=[],d={};for(let e=0;e0&&a>0){const e=60*(new Date).getTimezoneOffset()*1e3+60*t*60*1e3;let i=new Date(r,a,0).getDate();n.startTime=new Date(`${r}/${a}/1`).getTime()-e,n.endTime=new Date(`${r}/${a}/${i}`).getTime()+86399999-e}return n},getDayOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;r=new Date(r.getTime()+864e5*e);let o=D.getFullTime(r,2);return a.startTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()-i,a.endTime=new Date(`${o.year}/${o.month}/${o.day}`).getTime()+86399999-i,a},getMonthOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=D.getFullTime(r,2),s=o.month+e,l=o.year;s>12?(l+=Math.floor(s/12),s=Math.abs(s)%12):s<=0&&(l=l-1-Math.floor(Math.abs(s)/12),s=12-Math.abs(s)%12);let d=new Date(l,s,0).getDate();return a.startTime=new Date(`${l}/${s}/1`).getTime()-i,a.endTime=new Date(`${l}/${s}/${d}`).getTime()+86399999-i,a},getYearOffsetStartAndEnd:function(e=0,t,n=8){let r,a={};"string"!=typeof t||isNaN(t)||(t=Number(t)),t?"number"==typeof t?(10==t.toString().length&&(t*=1e3),r=new Date(t)):r=t:r=new Date;const i=60*r.getTimezoneOffset()*1e3+60*n*60*1e3;let o=D.getFullTime(r,2).year+e;return a.startTime=new Date(o+"/1/1").getTime()-i,a.endTime=new Date(o+"/12/31").getTime()+86399999-i,a},isLeapYear:function(e){if(void 0===e){let{now:t}=D.getCommonTime();e=t.year}else if("object"==typeof e){let{now:t}=D.getCommonTime(e);e=t.year}return e%4==0&&e%100!=0||e%400==0},isQingming:function(e=new Date){let{now:t}=D.getCommonTime(e),{year:n,month:r,day:a}=t,i=!1;return D.isLeapYear(n)||D.isLeapYear(n-1)?4===r&&4===a&&(i=!0):4===r&&5===a&&(i=!0),i},getOffsetTime:function(e=new Date,t){let n="number"==typeof e?new Date(e):e,r=t.year||t.y,a=t.month||t.m,i=t.day||t.d,o=t.hours||t.hh,s=t.minutes||t.mm,l=t.seconds||t.ss,{mode:d="after"}=t;return"before"==d&&(r*=-1,a*=-1,i*=-1,o*=-1,s*=-1,l*=-1),r&&(n=n.setFullYear(n.getFullYear()+r),n=new Date(n)),a&&(n=n.setMonth(n.getMonth()+a),n=new Date(n)),i&&(n=n.setDate(n.getDate()+i),n=new Date(n)),o&&(n=n.setHours(n.getHours()+o),n=new Date(n)),s&&(n=n.setMinutes(n.getMinutes()+s),n=new Date(n)),l&&(n=n.setSeconds(n.getSeconds()+l),n=new Date(n)),n.getTime()}},x=D,T={formValidate:function(e={}){let t={code:0,msg:"ok"},{data:n,rules:r}=e;if(r)for(let e in r){let a=r[e];if(t=w.formValidateItem(n,e,a),0!=t.code)break}return t}};T.treeUtil=v,T.timeUtil=x,T.sleep=e=>new Promise(t=>setTimeout(t,e)),T.timeFormat=T.timeUtil.timeFormat,T.getFullTime=T.timeUtil.getFullTime,T.getCommonTime=T.timeUtil.getCommonTime,T.getOffsetTime=T.timeUtil.getOffsetTime,T.getWeekStartAndEnd=T.timeUtil.getWeekStartAndEnd,T.getDayOffsetStartAndEnd=T.timeUtil.getDayOffsetStartAndEnd,T.getMonthOffsetStartAndEnd=T.timeUtil.getMonthOffsetStartAndEnd,T.getYearOffsetStartAndEnd=T.timeUtil.getYearOffsetStartAndEnd,T.getMonthStartAndEnd=T.timeUtil.getMonthStartAndEnd,T.validator=function(e){return function(t,n,r){let a=T.test(n,e);return"function"!=typeof r||!a&&n?r(!1):void r()}},T.test=function(e,t){switch(t){case"mobile":return new RegExp(/^1[3|4|5|6|7|8|9][0-9]{9}$/).test(e);case"tel":return new RegExp(/^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/).test(e);case"card":return new RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/).test(e);case"mobileCode":return new RegExp(/^[0-9]{6}$/).test(e);case"username":return new RegExp(/^[a-zA-Z]([-_a-zA-Z0-9]{5,17})$/).test(e);case"pwd":case"password":return new RegExp(/^([a-zA-Z0-9_]){6,18}$/).test(e);case"payPwd":return new RegExp(/^[0-9]{6}$/).test(e);case"postal":return new RegExp(/[1-9]\d{5}(?!\d)/).test(e);case"QQ":return new RegExp(/^[1-9][0-9]{4,9}$/).test(e);case"email":return new RegExp(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/).test(e);case"money":return new RegExp(/^\d*(?:\.\d{0,2})?$/).test(e);case"URL":return new RegExp(/(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/).test(e);case"IP":return new RegExp(/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/).test(e);case"date":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/).test(e);case"time":return new RegExp(/^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"dateTime":return new RegExp(/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/).test(e);case"english+number":return new RegExp(/^[a-zA-Z0-9]*$/).test(e);case"english+number+_":return new RegExp(/^[a-zA-Z0-9_]*$/).test(e);case"number":return new RegExp(/^[0-9]*$/).test(e);case"english":return new RegExp(/^[a-zA-Z]+$/).test(e);case"chinese":return new RegExp(/^[\u4e00-\u9fa5]+$/gi).test(e);case"lower":return new RegExp(/^[a-z]+$/).test(e);case"upper":return new RegExp(/^[A-Z]+$/).test(e);case"HTML":return new RegExp(/<("[^"]*"|'[^']*'|[^'">])*>/).test(e);default:return!0}},T.checkStr=T.test,T.priceFilter=function(e){return"string"==typeof e&&(e=parseFloat(e)),(e/100).toFixed(2)},T.objectAssign=function(e,t){return Object.assign(e,t)},T.copyObject=function(e){return void 0!==e?JSON.parse(JSON.stringify(e)):e},T.deepClone=function(e){if([null,void 0,NaN,!1].includes(e))return e;if("object"!=typeof e&&"function"!=typeof e)return e;let t="[object Array]"===Object.prototype.toString.call(e)?[]:{};for(let n in e)e.hasOwnProperty(n)&&(t[n]="object"==typeof e[n]?T.deepClone(e[n]):e[n]);return t},T.formAssign=function(e,t){let n=T.copyObject(e);return T.objectAssign(n,t)},T.arr_concat=function(e,t,n){n||(n="id");var r=e.concat(t),a=[];if(-1!=n){var i=[];for(var o in r)-1==i.indexOf(r[o][n])&&(i.push(r[o][n]),a.push(r[o]))}else a=r;return a},T.getData=function(e,t,n){let r=JSON.parse(JSON.stringify(e));t=t.replace(/\s+/g,"")+".";let a="";for(let e=0;ee[t])},T.random=function(e,t,n){let r;if(T.isNull(n))r=T.randomFn(e,t);else{let a=0,i=1e5;do{a++,r=T.randomFn(e,t)}while(n.indexOf(r)>-1&&ae){n+="0123456789"[r[e].charCodeAt()%10]}else n="0"+n;return n},T.hidden=function(e="",t=0,n=0){let r=e.length-t-n,a="";for(let e=0;e-1&&(n=!0);return n},T.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},T.isObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},T.calcFreights=function(e,t){let{first_weight:n,first_weight_price:r,continuous_weight:a,continuous_weight_price:i,max_weight:o=1e8}=e,s=0,l=0,d=o,c=!1,u=0;for(;t>0;)c?(u++,t-=a,d-=a):(c=!0,l++,d=o,t-=n,d-=n),d<=0&&(c=!1);return s=l*r+i*u,s},T.getNewObject=function(e,t){let n=T.copyObject(e),r={};if(t&&t.length>0)for(let e in t){let a=t[e];T.isNotNull(n[a])&&(r[a]=n[a])}else r=n;return r},T.deleteObjectKeys=function(e,t=[]){var n={};if(e)for(let r in e)-1==t.indexOf(r)&&(n[r]=e[r]);return n},T.arrayToTree=T.treeUtil.arrayToTree,T.treeToArray=T.treeUtil.treeToArray,T.wildcardTestOne=function(e,t){if(!t)return!1;let n=t.replace(new RegExp("\\*"),"(.*)"),r=0!==t.indexOf("*")?"^":"",a="*"!==t[t.length-1]?"$":"";return new RegExp(r+n+a).test(e)},T.wildcardTest=function(e,t){let n=0;if("string"==typeof t)T.wildcardTestOne(e,t)&&n++;else if("object"==typeof t)for(let r=0;r0?d=i+"天":o>0?d=o+"小时":s>0?d=s+"分钟":l>0&&(d=l+"秒"),d+=t},T.calcSize=function(e=0,t,n,r=2,a="auto"){let i=0,o="";if((e=parseFloat(e))O(e,t)))}return e}T.snake2camel=function(e){return e.replace(S,(e,t)=>t?t.toUpperCase():"")},T.camel2snake=function(e){return e.replace(A,e=>"_"+e.toLowerCase())},T.snake2camelJson=function(e){return O(e,"snake2camel")},T.camel2snakeJson=function(e){return O(e,"camel2snake")},T.string2Number=function(e,t={}){switch(Object.prototype.toString.call(e).slice(8,-1).toLowerCase()){case"string":if(isNaN(e))return e;{let{mobile:n=!0,idCard:r=!0,startFrom0:a=!0,maxLength:i=14}=t;return e.length>i||(n&&T.test(e,"mobile")||r&&T.test(e,"card")||a&&e.length>1&&0===e.indexOf("0")&&1!==e.indexOf("."))?e:Number(e)}case"object":const n=Object.keys(e);for(let t=0;t-1){var o=a.indexOf('"',i),s=a.substring(i,o);if(o>i){var l=a.indexOf("---",o),d=a.substring(o+1,l).trim();n[s]=d}}}return n},T.getPlatform=function(e){e||(e=uniCloud.$context);let t=e.PLATFORM;return"h5"===t&&e.CLIENTUA.toLowerCase().indexOf("micromessenger")>-1&&(t="h5-weixin"),t};var E=T,I={},J={};I.get=function(e){let t,n=J[e];if(n){let{value:r,expired:a}=n;I.isExpired(e)?delete J[e]:t=r}return t},I.set=function(e,t,n=0){let r={value:t,expired:n>0?(new Date).getTime()+1e3*n:0};J[e]=r},I.del=function(e){delete J[e]},I.clear=function(e){if(e)for(let t in J)0==t.indexOf(e)&&delete J[t];else J={}},I.isExpired=function(e){let t=!0,n=J[e];return n&&(0==n.expired||n.expired>(new Date).getTime())&&(t=!1),t},I.getAll=function(e){let t={};if(e)for(let n in J)0==n.indexOf(e)&&(t[e]=J[e]);else t=J;for(let e in t)I.isExpired(e)&&(delete t[e],delete J[e]);return t};var $=I,C={},B={},P={};C.init=function(e){P=(B=e).vk.system.globalDataDao},C.get=async function(e,t=0,n,r=!0){return"function"==typeof n?C.autoGet(e,t,n,r):C._get(e)},C.autoGet=async function(e,t=0,n,r=!0){let a,{vk:i}=B;try{a=await C._get(e),i.pubfn.isNull(a)&&"function"==typeof n&&(a=await n(),void 0!==a&&r&&await i.globalDataCache.set(e,a,t))}catch(e){return}return a},C._get=async function(e){let t;try{let n=await P.find(e);if(n){let{value:r,expired_at:a}=n;C.isExpired(n)?await C.del(e):t=r}}catch(e){return}return t},C.set=async function(e,t,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await P.set({key:r,value:t,expired_at:e})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.del=async function(e){await P.del(e)},C.clear=async function(e){if(e)return await P.deleteByWhere({key:new RegExp("^"+e)})},C.list=async function(e){return await P.list(e)},C.count=async function(e){return await P.count(e)},C.isExpired=function(e){let t=!0;return e&&(!e.expired_at||0==e.expired_at||e.expired_at>(new Date).getTime())&&(t=!1),t},C.inc=async function(e,t=1,n=0){let r;e&&void 0!==e.key&&void 0!==e.value?(r=e.key,t=e.value,n=e.second):r=e;let a={code:0,msg:"ok"};try{if(!r)return{code:-1,msg:"key值不能为空"};let e=n>0?(new Date).getTime()+1e3*n:0;a=await P.inc({key:r,value:t,expired_at:e})}catch(e){return{code:-1,msg:"异常",err:e}}return a},C.uniqueAdd=async function(e,t=1,n=5){let{vk:r}=B,a={code:0,msg:"ok"};try{if(!e)return{code:-1,msg:"key值不能为空"};let i=n>0?(new Date).getTime()+1e3*n:0;await r.globalDataCache.deleteExpired(e);a.id=await P.add({key:e,value:t,expired_at:i})}catch(e){return console.error(e),{code:-1,msg:"异常"}}return a},C.deleteExpired=async function(e){await P.deleteExpired(e)};var M=C,j={},F={};function q(e){return e.code=e.errcode,e.msg=e.errmsg,e}j.init=function(e){F=e},j.getConfig=function(){let{vk:e,config:t,crypto:n,uniID:r}=F;const a=t.uni;var i;if(e.pubfn.isArray(a)){let t=uniCloud.env&&uniCloud.env.APPID?uniCloud.env.APPID:uniCloud.$context.APPID;i=e.pubfn.getListItem(a,"dcloudAppid",t),e.pubfn.isNull(i)&&(i=e.pubfn.getListItem(a,"isDefaultConfig",!0))}else i=a;return i},j.decrypt={},j.decrypt.getPhoneNumber=async function(e={}){let{appid:t,encryptedData:n,iv:r,sessionKey:a}=e;e.appId&&(t=e.appId);let i,{vk:o,crypto:s,uniID:l,config:d}=F,c={code:0,msg:"ok"},u=o.pubfn.isNullOneByObject({encryptedData:n,iv:r,sessionKey:a});if(u)return{code:-1,msg:u+"不能为空"};if(t)i=t;else try{if(i=j.getConfig()["mp-weixin"].oauth.weixin.appid,o.pubfn.isNull(i))return{code:-1,msg:"请先配置微信小程序APPID"}}catch(e){return{code:-1,msg:"请先配置微信小程序APPID"}}return c.data=j.decrypt.decryptData({appid:i,encryptedData:n,iv:r,sessionKey:a}),c.phone=c.data.phoneNumber,c.mobile=c.data.phoneNumber,c},j.decrypt.decryptData=function(e={}){let t,{appid:n,encryptedData:r,iv:a,sessionKey:i}=e,{vk:o,crypto:s}=F,l=new Buffer(i,"base64"),d=new Buffer(r,"base64"),c=new Buffer(a,"base64");try{let e=s.createDecipheriv("aes-128-cbc",l,c);e.setAutoPadding(!0),t=e.update(d,"binary","utf8"),t+=e.final("utf8"),t=JSON.parse(t)}catch(e){throw new Error(e)}return t.watermark.appid!==n?{code:-1,msg:"appid不一致"}:t},j.auth={},j.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"mp-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),{vk:r,config:a}=F,i=await r.request({url:`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${t}&secret=${n}`,method:"GET"});return i.errcode?(console.error("getAccessToken失败:",i),{code:i.errcode,msg:i.errmsg,err:i}):{code:0,msg:"ok",access_token:i.access_token,expires_in:i.expires_in}},j.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=j.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=F,o="mp-weixin-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await j.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,240),await i.globalDataCache.deleteExpired())}return t},j.auth.code2Session=async function(e={}){let t,{vk:n,uniID:r}=F,{platform:a,context:i}=e;return a||(a=n.pubfn.getPlatform(i)||"mp-weixin"),t="mp-weixin"===a?await j.auth.code2SessionMpWeixin(e):"h5-weixin"===a?await j.h5.auth.code2Session(e):await r.code2SessionWeixin(e),t.platform=a,t},j.auth.code2SessionMpWeixin=async function(e={}){let{appid:t,appsecret:n}=j.auth.getAppidInfo(e),r=e.code||e.js_code,{vk:a}=F,i=await a.request({url:`https://api.weixin.qq.com/sns/jscode2session?appid=${t}&secret=${n}&js_code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.wxacode={},j.wxacode.getUnlimited=async function(e={}){let t,{vk:n}=F,{access_token:r,scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d}=e;if(t=r||await j.auth.getAccessToken(e),!t)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let c=await n.request({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+t,method:"POST",data:{scene:a,page:i,width:o,auto_color:s,line_color:l,is_hyaline:d},dataType:"default",useContent:!0,headers:{encoding:null}});if(c.length<500){let e=c.toString();try{e=JSON.parse(e)}catch(e){}return{code:-1,msg:"生成小程序码失败,请重试!",res:e}}return Buffer.isBuffer(c)?c:{code:c.errcode,msg:c.errmsg,err:c}},j.urlscheme={},j.urlscheme.generate=async function(e={}){let{vk:t}=F,{jump_wxa:n={},is_expire:r,expire_time:a}=e,{path:i,query:o}=n,s=await j.auth.getAccessToken(e);if(!s)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a>0&&(a=(new Date).getTime()/1e3+a);let l=await t.request({url:"https://api.weixin.qq.com/wxa/generatescheme?access_token="+s,method:"POST",data:{jump_wxa:{path:i,query:o},is_expire:r,expire_time:a},useContent:!0});switch(l=q(l),l.code){case 40001:l.msg="access_token错误";break;case 40165:l.msg="小程序页面不存在!"}return l},j.security={},j.security.msgSecCheck=async function(e={}){let{vk:t}=F,{content:n}=e,r=await j.auth.getAccessToken(e);if(!r)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let a=await t.request({url:"https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+r,method:"POST",data:{content:n},useContent:!0});switch(a=q(a),a.code){case 40001:a.msg="access_token错误";break;case 87014:a.msg="内容含有违法违规内容,请检查!"}return a},j.security.imgSecCheck=async function(e={}){let{vk:t}=F,{dataBuffer:n,formData:r,base64:a}=e,i=await j.auth.getAccessToken(e);if(!i)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};a&&!n&&(n=new Buffer(a,"base64")),n&&!r&&(r=new t.formDataUtil.FormData,r.append("media",n,{filename:Date.now()+".png",contentType:"image/png"}));let o=await t.request({url:"https://api.weixin.qq.com/wxa/img_sec_check?access_token="+i,content:r.getBuffer(),headers:r.getHeaders()});switch(o=q(o),o.code){case 40001:o.msg="access_token错误";break;case 87014:o.msg="图片内容含有违法违规内容,请检查!";break;case 40006:o.msg="图片大小不能超过1M"}return o},j.subscribeMessage={},j.subscribeMessage.send=async function(e={}){let{vk:t}=F,{touser:n,template_id:r,page:a,data:i,miniprogram_state:o="formal",lang:s="zh_CN"}=e,l=await j.auth.getAccessToken(e);if(!l)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let d=await t.request({url:"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+l,method:"POST",data:{touser:n,template_id:r,page:a,data:i,miniprogram_state:o,lang:s},useContent:!0});switch(d=q(d),d.code){case 40003:d.msg="touser字段openid为空或者不正确";break;case 40037:d.msg="订阅模板id为空不正确";break;case 43101:d.msg="用户未订阅该消息";break;case 47003:d.msg="模板参数不准确,可能为空或者不满足规则,errmsg会提示具体是哪个字段出错";break;case 41030:d.msg="page路径不正确,需要保证在现网版本小程序中存在"}return d},j.livebroadcast={},j.livebroadcast.getLiveInfo=async function(e={}){let{vk:t}=F,{pageIndex:n=1,pageSize:r=100}=e,a=await j.auth.getAccessToken(e);if(!a)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};if(n<=0)return{code:-1,msg:"pageIndex必须是大于0的整数"};let i=(n-1)*r,o=r,s=await t.request({url:"https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+a,method:"POST",data:{start:i,limit:o},useContent:!0});switch(s=q(s),s.code){case 941e4:s.msg="直播间列表为空"}return s},j.app={},j.app.auth={},j.app.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"app-plus.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信小程序appid和appsecret");return{appid:t,appsecret:n}},j.app.auth.getAccessToken=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=F,{code:i}=e,o=await r.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${i}&grant_type=authorization_code`,method:"GET"});return o.errcode?(console.error("getAccessToken失败:",o),{code:o.errcode,msg:o.errmsg,err:o}):{...o,code:0,msg:"ok"}},j.app.auth.getUserInfo=async function(e={}){let{appid:t,appsecret:n}=j.app.auth.getAppidInfo(e),{vk:r,config:a}=F,{access_token:i,openid:o,lang:s="zh-CN"}=e;if(!i)return{code:-1,msg:"access_token不能为空"};let l=await r.request({url:`https://api.weixin.qq.com/sns/userinfo?access_token=${i}&openid=${o}$lang=${s}`,method:"GET"});return l.errcode?(console.error("getUserInfo失败:",l),{code:l.errcode,msg:l.errmsg,err:l}):{...l,code:0,msg:"ok",avatar:l.headimgurl,gender:l.sex}},j.h5={},j.h5.auth={},j.h5.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=F;const i=j.getConfig();if(t){if(!n){let e=r.pubfn.getData(a,"vk.oauth.weixin.list")||[],i=r.pubfn.getListItem(e,"appid",t)||{};t=i.appid,n=i.appsecret}}else{let e=r.pubfn.getData(i,"h5-weixin.oauth.weixin")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请先配置微信公众号appid和appsecret");return{appid:t,appsecret:n}},j.h5.auth.code2Session=async function(e={}){let{appid:t,appsecret:n}=j.h5.auth.getAppidInfo(e),{code:r}=e,{vk:a}=F,i=await a.request({url:`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${t}&secret=${n}&code=${r}&grant_type=authorization_code`,method:"GET"});if(i.errcode){let e=i.errmsg;return 40163===i.errcode&&(e="该code已被使用,请重新获取"),40029===i.errcode&&(e="无效code,请重新获取"),{...i,code:i.errcode,msg:e}}return i=a.pubfn.snake2camelJson(i),{...i,code:0,msg:"ok"}},j.loginByWeixin=async function(e={},t){let n,{vk:r,uniID:a,_:i}=F,{code:o,platform:s,type:l,appid:d}=e;s||(s=r.pubfn.getPlatform(t),e.platform=s);try{n=await a.loginByWeixin(e);try{if(n.uid&&!n.msg&&(n.msg="register"===n.type?"注册成功":"登录成功"),n.uid&&"register"===n.type&&["h5-weixin","app-plus"].indexOf(s)>-1){let e=await r.openapi.weixin.app.auth.getUserInfo({access_token:n.accessToken,openid:n.openid});(e.nickname||e.headimgurl)&&(n.userInfo=await r.baseDao.updateAndReturn({dbName:"uni-id-users",whereJson:{_id:n.uid||"___",nickname:i.exists(!1)},dataJson:{nickname:e.nickname,avatar:e.headimgurl}}))}}catch(e){console.error("保存用户头像昵称异常:",e)}}catch(e){console.error("loginByWeixin异常:",e);let t=e.message||"";throw e.message.indexOf("code been used")>-1&&(t="该code已被使用,请重新获取"),e.message.indexOf("invalid code")>-1&&(t="无效code,请重新获取"),new Error("msg:"+t)}return n};var R=j,L={},U={};L.init=function(e){U=e},L.open={},L.open.auth={},L.open.auth.getAppidInfo=function(e={}){let{appid:t,appsecret:n}=e,{vk:r,config:a}=U;if(!t){let e=r.pubfn.getData(a,"vk.service.openapi.baidu")||{};t=e.appid,n=e.appsecret}if(r.pubfn.isNullOne(t,n))throw new Error("请在cloudfunctions/common/config/index.js中配置并检查百度开放平台的appid和appsecret是否正确,参数路径:vk.service.openapi.baidu");return{appid:t,appsecret:n}},L.open.auth.getAccessTokenFn=async function(e={}){let{appid:t,appsecret:n}=L.open.auth.getAppidInfo(e),{vk:r,config:a}=U,i=await r.request({url:`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${t}&client_secret=${n}`,method:"GET"});return i.error_code?(console.error("getAccessToken失败:",i),{code:i.error_code,msg:i.error_msg,err:i}):{...i,code:0,msg:"ok"}},L.open.auth.getAccessToken=async function(e={}){let t,{appid:n,appsecret:r}=L.open.auth.getAppidInfo(e),{cache:a=!0}=e,{vk:i}=U,o="openapi-baidu-"+n;if(a&&(t=await i.globalDataCache.get(o)),i.pubfn.isNull(t)){let n=await L.open.auth.getAccessTokenFn(e);0===n.code&&(t=n.access_token,await i.globalDataCache.set(o,t,n.expires_in-3600),await i.globalDataCache.deleteExpired())}return t},L.open.ocr={},L.open.ocr.business_license=async function(e={}){let{image:t,url:n}=e;return await L.open.request({...e,action:"ocr/v1/business_license",actionVersion:"2.0",data:{image:t,url:n}})},L.open.ocr.idcard=async function(e={}){let{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}=e;return await L.open.request({...e,action:"ocr/v1/idcard",actionVersion:"2.0",data:{image:t,url:n,id_card_side:r,detect_risk:a,detect_photo:i}})},L.open.request=async function(e={}){let{vk:t}=U,n=await L.open.auth.getAccessToken(e);if(!n)return{code:-1,msg:"获取access_token失败,请检查appid和appsecret是否正确"};let{action:r,actionVersion:a="2.0",header:i={"content-type":"application/x-www-form-urlencoded"},data:o}=e,s=await t.request({url:`https://aip.baidubce.com/rest/${a}/${r}?access_token=${n}`,method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},data:o});return s.error_code?{code:s.error_code,msg:s.error_msg,err:s}:{...s,code:0,msg:"ok"}};var z=L,K={};K.weixin=R,K.baidu=z,K.init=function(e){K.weixin.init(e),K.baidu.init(e)};var W=K;const Y=/^multipart\/.+?(?:;\s*boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i,Z=/Content-Disposition:\sform-data;\sname="(.+?)"(?:;\sfilename="(.+?)")?/i,G=/Content-Type:\s(.+?)$/i;var H={FormData:class{constructor(){this._shouldUseCache=!1,this._cachedBuffer=null,this._lineBreak="\r\n",this._boundary="------FormDataBaseBoundary"+Math.random().toString(36).substring(2),this.dataList=[]}_addData(e){if(this._shouldUseCache=!1,0===this.dataList.length)return void this.dataList.push(e);const t=this.dataList[this.dataList.length-1];switch(`${Buffer.isBuffer(t)?"buffer":"other"}_${Buffer.isBuffer(e)?"buffer":"other"}`){case"buffer_buffer":this.dataList.push(this._lineBreak),this.dataList.push(e);break;case"buffer_other":this.dataList.push(this._lineBreak+e);break;case"other_buffer":this.dataList[this.dataList.length-1]=t+"\r\n",this.dataList.push(e);break;case"other_other":this.dataList[this.dataList.length-1]=t+"\r\n"+e}}append(e,t,n){this._addData("--"+this._boundary);let r=`Content-Disposition: form-data; name="${encodeURIComponent(e)}"`;if(Buffer.isBuffer(t)){if(!n.filename||!n.contentType)throw new Error("filename and contentType required");r+=`; filename="${encodeURIComponent(n.filename)}"`,this._addData(r),this._addData("Content-Type: "+n.contentType),this._addData(""),this._addData(t)}else this._addData(r),this._addData(""),this._addData(t)}getHeaders(e){const t={"Content-Type":"multipart/form-data; boundary="+this._boundary};return Object.assign(t,e)}getBuffer(){if(this._shouldUseCache)return this._cachedBuffer;this._shouldUseCache=!0;let e=Buffer.alloc(0);return this.dataList.forEach(t=>{e=Buffer.isBuffer(t)?Buffer.concat([e,t]):Buffer.concat([e,Buffer.from(""+t)])}),e=Buffer.concat([e,Buffer.from(`${this._lineBreak}--${this._boundary}--`)]),this._cachedBuffer=e,e}},formParser:e=>{const t=(e.headers["content-type"]||e.headers["Content-Type"]).match(Y),n=t[1]||t[2],r=function(e,t){let n=0,r=0,a=[];for(;-1!==(r=e.indexOf(t,n));)a.push(e.slice(n,r)),n=r+t.length,r=e.indexOf(t,n);return a}(Buffer.from(e.body,"base64"),Buffer.from("--"+n)).map(e=>function(e){let t=e.indexOf("\r\n")+"\r\n".length,n=t,r=e.lastIndexOf("\r\n"),a=[];for(;-1!==(n=e.indexOf("\r\n",t));)if(a.push(e.slice(t,n)),t=n+"\r\n".length,0===a[a.length-1].length){a.push(e.slice(t,r));break}return a}(e).filter(e=>e.length>0)).filter(e=>2===e.length||3===e.length||4===e.length).map(e=>{const t={},n=e[0].toString().match(Z);switch(t.name=decodeURIComponent(n[1]),e.length){case 2:t.value=e[1].toString();break;case 3:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[2];break;case 4:t.filename=decodeURIComponent(n[2]),t.contentType=e[1].toString().match(G)[1],t.fileContent=e[3]}return t}),a={};return r.forEach(e=>{const t=e.name;delete e.name,a[t]=e.fileContent?e:e.value}),a}};const V="opendb-admin-menus";var Q={},X={};Q.init=function(e){X=e},Q.findRoleById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-roles",whereJson:{role_id:e}}),t},Q.roleBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findRoleById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{permission:r.set(o)}}),a},Q.roleBindMenu=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{role_id:i="___",menuList:o=[],reset:s=!1,addPermission:l=!1}=e,d=[],c=await Q.findRoleById(i),{menu:u=[],permission:f=[]}=c;if(s?d=te(o,u):(o=u.concat(o),o=[...new Set(o)]),a.num=await t.baseDao.update({dbName:"uni-id-roles",whereJson:{role_id:i},dataJson:{menu:r.set(o)}}),l){let e=await Q.findMenuByIdsToPermission(o),n=[];if(s&&t.pubfn.isNotNull(d)){n=te(e,await Q.findMenuByIdsToPermission(d))}f=f.concat(e),f=te(n,f),f=[...new Set(f)],Q.roleBindPermission({role_id:i,permissionList:f,reset:!0})}return a},Q.findPermissionById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:"uni-id-permissions",whereJson:{permission_id:e}}),t},Q.findMenuByIdsToPermission=async e=>{let{vk:t,db:n,_:r}=X,a=await Q.findMenuByIds(e);if(t.pubfn.isNull(a))return[];let i=[];for(let e in a){let n=a[e].permission;t.pubfn.isNotNull(n)&&(i=i.concat(n))}return i=[...new Set(i)],i},Q.listPermissionToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:"uni-id-permissions",pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"permission_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"permission_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e],r="",a="";if(n.pubfn.isNotNull(t.level)){r=` - ${["未分类","子弹级","炸弹级","榴弹级","核弹级"][t.level]}(LV:${t.level})`}if(n.pubfn.isNotNull(t.curd_category)){a=" - "+["未分类","增","删","改","查","特殊"][t.curd_category]}m[e].label=`${t.permission_name}(${t.permission_id})${a}${r}`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t},Q.findMenuById=async(e="___")=>{let t,{vk:n,db:r,_:a}=X;return t=await n.baseDao.findByWhereJson({dbName:V,whereJson:{menu_id:e}}),t},Q.findMenuByIds=async e=>{let t,{vk:n,db:r,_:a}=X;return n.pubfn.isNull(e)?[]:(t=(await n.baseDao.select({dbName:V,pageIndex:1,pageSize:500,whereJson:{menu_id:a.in(e)}})).rows,t)},Q.listMenuByRole=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:"",menus:[],menuList:[]},{role:i}=e,o=[],s={enable:!0},l={enable:!0};if(!(i.indexOf("admin")>-1)){if(t.pubfn.isNull(i))return a;let e=await t.baseDao.select({dbName:"uni-id-roles",pageSize:500,whereJson:{role_id:r.in(i),enable:!0},fieldJson:{menu:!0}});for(let n in e.rows){let{menu:r}=e.rows[n];t.pubfn.isNotNull(r)&&(o=o.concat(r))}if(0==o.length)return a;o=[...new Set(o)],s.menu_id=r.in(o),l.menu_id=r.in(o)}s.parent_id=null;let d=[{name:"sort",type:"asc"}],c=await t.baseDao.selects({dbName:V,pageIndex:1,pageSize:500,whereJson:s,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:3,limit:500,whereJson:l,sortArr:d}});return a.menus=c.rows,a.menuList=t.pubfn.treeToArray(c.rows,{id:"menu_id",parent_id:"parent_id",children:"children"}),a},Q.menuBindPermission=async(e={})=>{let{vk:t,db:n,_:r}=X,a={code:0,msg:""},{menu_id:i="___",permissionList:o=[],reset:s=!1}=e;if(!s){let e=await Q.findMenuById(i),{permission:t=[]}=e;o=t.concat(o),o=[...new Set(o)]}return a.num=await t.baseDao.update({dbName:V,whereJson:{menu_id:i},dataJson:{permission:r.set(o)}}),a},Q.listMenuToTree=async(e={})=>{let t,{vk:n,db:r,_:a}=X,{getCount:i=!1,pageSize:o=500,pageIndex:s=1,whereJson:l={parent_id:null},sortArr:d=[{name:"sort",type:"asc"}],treeProps:c={}}=e,{level:u=3,limit:f=500,whereJson:p}=c;t=await n.baseDao.selects({dbName:V,pageIndex:s,pageSize:o,getCount:i,whereJson:l,sortArr:d,treeProps:{id:"menu_id",parent_id:"parent_id",children:"children",level:u,limit:f,whereJson:p,sortArr:d}});let g={id:"menu_id",parent_id:"parent_id",children:"children"},m=t.rows;m=n.pubfn.treeToArray(m,g),t.list=n.pubfn.copyObject(m);for(let e in m){let t=m[e];m[e].label=`${t.name}(${t.menu_id})`}return m=n.pubfn.arrayToTree(m,g),t.rows=m,t};var ee=Q;function te(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}const ne="opendb-global-data";var re={},ae={};re.init=function(e){ae=e},re.find=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.findById({dbName:ne,id:e}),a},re.del=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.deleteById({dbName:ne,id:e}),a},re.deleteByWhere=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.del({dbName:ne,whereJson:e}),a},re.deleteExpired=async e=>{let{vk:t,db:n,_:r}=ae,a={},i={};"string"==typeof e?i._id=e:"object"==typeof e&&(i=e);let o=(new Date).getTime();return a=await t.baseDao.del({dbName:ne,whereJson:{...i,expired_at:r.gt(0).lte(o)}}),a},re.update=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.updateById({dbName:ne,id:i,dataJson:{value:r.set(o),comment:s,expired_at:l}}),a},re.add=async e=>{let{vk:t,db:n,_:r}=ae,a={},{key:i,value:o,comment:s,expired_at:l}=e;return a=await t.baseDao.add({dbName:ne,dataJson:{_id:i,key:i,value:o,comment:s,expired_at:l}}),a},re.count=async e=>{let{vk:t,db:n,_:r}=ae,a={};return a=await t.baseDao.count({dbName:ne,whereJson:e}),a},re.set=async e=>{let t={code:0,msg:"ok"};return await re.count({_id:e.key})>0?(t.num=await re.update(e),t.mode="update"):(t.id=await re.add(e),t.num=1,t.mode="add"),t},re.inc=async e=>{let{vk:t,db:n,_:r}=ae,{key:a,value:i,expired_at:o}=e,s={},l=await t.baseDao.updateById({dbName:ne,id:a,dataJson:{value:r.inc(i),expired_at:o}});if(0==l){0===await re.count({_id:a})&&(s.id=await re.add(e),s.num=1,s.mode="add")}else s.num=l,s.mode="update";return s},re.list=async e=>{let{vk:t,db:n,_:r}=ae,a={},{pageIndex:i,pageSize:o,whereJson:s,sortArr:l}=e;return a=await t.baseDao.select({dbName:ne,pageIndex:i,pageSize:o,whereJson:s,sortArr:l}),a};var ie=re,oe={},se={init:function(e){oe=e}},le={specialUrlEncode:function(e){return(e=encodeURIComponent(e)).replace(/\+/g,"%20").replace(/\*/g,"%2A").replace(/%7E/g,"~")},sign:function(e,t){let{crypto:n}=oe;return n.createHmac("sha1",e).update(t).digest("base64")}};se.sendSms=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={};if("aliyun"===r){let r=t.pubfn.getData(n,"vk.service.sms.aliyun");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.accessKeyId),o||(e.smsSecret=r.accessKeySecret),s||(e.signName=r.signName)),u=await se.sendSmsByAliyun(e)}else{if("unicloud"!==r)return{code:-1,msg:`暂不支持${r}供应商`};{let r=t.pubfn.getData(n,"uni.service.sms");t.pubfn.isNotNull(r)&&(i||(e.smsKey=r.smsKey),o||(e.smsSecret=r.smsSecret),s||(e.signName=r.signName)),u=await se.sendSmsByUnicloud(e)}}return u.requestParam={provider:r,phone:l},u},se.sendSmsByAliyun=async function(e){let{vk:t,config:n}=oe,{provider:r,appid:a,smsKey:i,smsSecret:o,signName:s,phone:l,templateId:d,data:c}=e,u={code:0,msg:""};try{if(t.pubfn.isNullOne(i,o))return{code:-1,msg:"阿里云短信配置错误,请检查!"};let e="https://dysmsapi.aliyuncs.com",n=t.pubfn.timeFormat(new Date,"yyyy-MM-ddThh:mm:ssZ",0),r=(new Date).getTime().toString().substring(7)+t.pubfn.random(30);"object"==typeof c&&(c=JSON.stringify(c));let a={SignatureMethod:"HMAC-SHA1",SignatureNonce:r,AccessKeyId:i,SignatureVersion:"1.0",Timestamp:n,Format:"json",Action:"SendSms",Version:"2017-05-25",PhoneNumbers:l,SignName:s,TemplateParam:c,TemplateCode:d};delete a.Signature;let f=[];for(let e in a)f.push(e);f.sort();let p=!1,g="";for(let e in f){let t=f[e];g+="&"+le.specialUrlEncode(t)+"="+le.specialUrlEncode(a[t])}g=g.substring(1);let m="GET&"+le.specialUrlEncode("/")+"&"+le.specialUrlEncode(g),h=le.sign(o+"&",m),b=le.specialUrlEncode(h),y="Signature="+b+"&"+g;p&&(console.log("\r\n随机数\r\n"),console.log(a.SignatureNonce),console.log("\r\n=========\r\n"),console.log(a.Timestamp),console.log("\r\n====sortedQueryString====\r\n"),console.log(g),console.log("\r\n=====stringToSign====\r\n"),console.log(m),console.log("\r\n=====sign====\r\n"),console.log(h),console.log("\r\n=====signature====\r\n"),console.log(b),console.log("\r\n=========\r\n"),console.log(e+"/?"+y));t.pubfn.urlStringToJson(y);let w=await t.request({url:`${e}?${y}`,method:"GET"});return u="OK"===w.Code?{code:0,msg:"ok",requestRes:w}:{code:-1,msg:w.Message,requestRes:w},u}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}},se.sendSmsByUnicloud=async function(e){let{provider:t,appid:n,smsKey:r,smsSecret:a,signName:i,phone:o,templateId:s,data:l}=e,d={code:0,msg:""};try{let e=await uniCloud.sendSms({smsKey:r,smsSecret:a,phone:o,templateId:s,data:l});d=0==e.code||0==e.errCode?{code:0,msg:"ok",requestRes:e}:{code:-1,msg:e.errMessage||e.errMsg,requestRes:e}}catch(e){return{code:-1,msg:"短信发送失败",err:{message:e.message,stack:e.stack}}}return d},se.sendSmsVerifyCode=async function(e){let t,{vk:n,config:r,uniID:a}=oe,{provider:i,phone:o,code:s,type:l,expiresIn:d=180}=e,c={code:0,msg:""};if("unicloud"===i){t=n.pubfn.getData(r,"uni.service.sms.templateId");let e=n.pubfn.getData(r,"uni.service.sms.codeExpiresIn");e&&(d=e);let a=n.pubfn.getData(r,"uni.service.sms.name"),l=Math.ceil(d/60).toString();c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s,name:a,action:"身份验证",expMinute:l}})}else t=n.pubfn.getData(r,`vk.service.sms.${i}.templateCode.verifyCode`),c=await n.system.smsUtil.sendSms({provider:i,phone:o,templateId:t,data:{code:s}});return 0===c.code&&await a.setVerifyCode({mobile:o,code:s,expiresIn:d,type:l}),c};var de=se,ce={};ce.sysDao=ee,ce.globalDataDao=ie,ce.smsUtil=de,ce.init=function(e){let t=["sysDao","globalDataDao","smsUtil"];for(let n in t){let r=t[n];"function"==typeof ce[r].init&&ce[r].init(e)}};var ue=ce,fe={};fe.router=s,fe.md5=g,fe.baseDao=b,fe.request=y,fe.pubfn=E,fe.temporaryCache=$,fe.globalDataCache=M,fe.openapi=W,fe.formDataUtil=H,fe.system=ue,fe.requireCache={},fe.require=function(e){if(fe.requireCache&&fe.requireCache[e])return fe.requireCache[e];{const t=fe.unicloud.requireFn(fe.unicloud.baseDir+"/"+e);return fe.requireCache[e]=t,t}},fe.requireFn=function(e){try{return fe.unicloud.requireFn(e)}catch(e){let{message:t=""}=e;return void(-1==t.indexOf("Cannot find module")&&console.error(e))}},fe.use=function(e,t){for(let n in e)e[n]&&"function"==typeof e[n].init&&e[n].init(t),fe[n]=e[n]},fe.unicloud={},fe.init=function(e={}){if(fe.unicloud.requireFn=e.requireFn,e.configCenter||(e.configCenter=fe.requireFn("uni-config-center")),e.uniID||(e.uniID=fe.requireFn("uni-id")),e.uniPay||(e.uniPay=fe.requireFn("uni-pay")),e.middlewareService||(e.middlewareService=fe.requireFn("./middleware/index")),e.daoCenter||(e.daoCenter=fe.requireFn("./dao/index")),e.crypto||(e.crypto=fe.requireFn("crypto")),e.urlrewrite||(e.urlrewrite=fe.requireFn("./util/urlrewrite")),e.config||(e.config=e.configCenter({pluginId:"vk-unicloud"}).requireFile("index.js")),!e.config)throw new Error("配置文件:uniCloud/cloudfunctions/common/uni-config-center/vk-unicloud/index.js \n编译错误,请检查!");if(!e.db)try{e.db=uniCloud.database()}catch(e){}fe.vkPay=fe.requireFn("vk-uni-pay"),e.pubFun||(e.pubFun=fe.requireFn("./util/pubFunction")),e.redis||(e.redis=fe.requireFn("vk-redis")),e.redis&&(fe.redisUtil=e.redis,fe.redis=e.redis.redis,fe.newRedis=e.redis.newRedis),fe.unicloud.configCenter=e.configCenter,fe.unicloud.config=e.config,fe.unicloud.uniID=e.uniID,fe.unicloud.uniPay=e.uniPay,fe.unicloud.db=e.db,fe.unicloud._=e.db.command,fe.unicloud.pubfn=fe.pubfn,fe.unicloud.middlewareService=e.middlewareService,fe.unicloud.pubFun=e.pubFun,fe.unicloud.customUtil=e.customUtil,fe.unicloud.baseDir=e.baseDir,fe.unicloud.crypto=e.crypto,fe.unicloud.urlrewrite=e.urlrewrite;const t={vk:fe,...fe.unicloud};fe.use({daoCenter:e.daoCenter,baseDao:fe.baseDao,openapi:fe.openapi,globalDataCache:fe.globalDataCache,system:fe.system},t)};var pe=fe;module.exports=pe; diff --git a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json index 727bb4e..78c0835 100644 --- a/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json +++ b/uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud/package.json @@ -1,6 +1,6 @@ { "name": "vk-unicloud", - "version": "2.5.3", + "version": "2.5.6", "description": "【云函数端SDK】VK云函数路由模式uniCloud开发框架,在router目录下执行 npm i vk-unicloud 进行安装和升级", "main": "index.js", "homepage": "https://gitee.com/vk-uni/vk-uni-cloud-router.git", diff --git a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js index f7d42ac..8bb203d 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/index.js @@ -68,6 +68,43 @@ pubfn.timeFormat = pubfn.timeUtil.timeFormat; */ pubfn.getFullTime = pubfn.timeUtil.getFullTime; +/** + * 获取时间范围 + * @param {Date} date 日期对象 可以指定时间计算节点,默认使用当前时间进行计算 + * 返回的是时间戳(防止时区问题) + * 返回数据如下: + { + todayStart 今日开始时间 + todayEnd 今日结束时间 + today12End 今日上午结束时间 + monthStart 本月开始时间 + monthEnd 本月结束时间 + yearStart 本年开始时间 + yearEnd 本年结束时间 + weekStart 本周开始时间 + weekEnd 本周结束时间 + now 现在的时间点(含月年日时分秒) + months 本年度每月的开始和结束时间 months[1] 代表1月 + } + * vk.pubfn.getCommonTime(); + */ +pubfn.getCommonTime = pubfn.timeUtil.getCommonTime; + +/** + * 获得指定时间偏移 year年 month月 day天 hours时 minutes分 seconds秒前或后的时间戳 + * 返回时间戳形式 +vk.pubfn.getOffsetTime(new Date(), { + year:0, + month:0, + day:0, + hours:0, + minutes:0, + seconds:0, + mode:"after", // after 之后 before 之前 +}); + */ +pubfn.getOffsetTime = pubfn.timeUtil.getOffsetTime; + /** * 获得相对当前周addWeekCount个周的起止日期 * @param {Number} addWeekCount 默认0 (0代表本周 为-1代表上周 为1代表下周以此类推 为2代表下下周) @@ -101,28 +138,6 @@ pubfn.getMonthOffsetStartAndEnd = pubfn.timeUtil.getMonthOffsetStartAndEnd; */ pubfn.getYearOffsetStartAndEnd = pubfn.timeUtil.getYearOffsetStartAndEnd; -/** - * 获取时间范围 - * @param {Date} date 日期对象 可以指定时间计算节点,默认使用当前时间进行计算 - * 返回的是时间戳(防止时区问题) - * 返回数据如下: - { - todayStart 今日开始时间 - todayEnd 今日结束时间 - today12End 今日上午结束时间 - monthStart 本月开始时间 - monthEnd 本月结束时间 - yearStart 本年开始时间 - yearEnd 本年结束时间 - weekStart 本周开始时间 - weekEnd 本周结束时间 - now 现在的时间点(含月年日时分秒) - months 本年度每月的开始和结束时间 months[1] 代表1月 - } - * vk.pubfn.getCommonTime(); - */ -pubfn.getCommonTime = pubfn.timeUtil.getCommonTime; - /** * 获得指定年份和月份后的该月的开始时间和结束时间 * 返回数据如下:(时间戳形式) @@ -1032,6 +1047,7 @@ pubfn.snake2camelJson = function(obj) { pubfn.camel2snakeJson = function(obj) { return parseObjectKeys(obj, 'camel2snake'); }; + /** * 将能转成数字的字符串转数字(支持字符串、对象、数组) * @param {Any} obj @@ -1040,6 +1056,7 @@ pubfn.camel2snakeJson = function(obj) { * mobile:true 手机号,如 15200000001 * idCard:true 身份证,如 330154202109301214 * startFrom0:true 第一位是0,且长度大于1的,同时第二位不是.的字符串 如 01,057189101254 + * maxLength:14 超过此长度的字符串排除 * vk.pubfn.string2Number(obj, option); */ pubfn.string2Number = function(obj, option = {}) { @@ -1050,9 +1067,12 @@ pubfn.string2Number = function(obj, option = {}) { let { mobile = true, idCard = true, - startFrom0 = true + startFrom0 = true, + maxLength = 14, } = option; - if (mobile && pubfn.test(obj, "mobile")) { + if (obj.length > maxLength) { + return obj; + } else if (mobile && pubfn.test(obj, "mobile")) { return obj; } else if (idCard && pubfn.test(obj, "card")) { return obj; @@ -1079,6 +1099,7 @@ pubfn.string2Number = function(obj, option = {}) { return obj; } }; + /** * 保留小数 * @param {Number} val 原值 @@ -1219,6 +1240,9 @@ pubfn.numStr = function(n) { * vk.pubfn.priceFilter(money); */ pubfn.priceFilter = function(money, nullValue = "") { + if (isNaN(money)){ + return money; + } if (pubfn.isNull(money)) { return nullValue; } @@ -1249,6 +1273,9 @@ pubfn.priceRightFilter = function(n) { * vk.pubfn.priceFilter(money); */ pubfn.percentageFilter = function(value, needShowSymbol = true, nullValue = "") { + if (isNaN(value)){ + return value; + } if (pubfn.isNull(value)) { return nullValue; } diff --git a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/timeUtil.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/timeUtil.js index c3e8b83..befa3d5 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/timeUtil.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/function/timeUtil.js @@ -410,4 +410,61 @@ util.isQingming = function(data = new Date()) { } +/** + * 获得指定时间偏移 year年 month月 day天 hours时 minutes分 seconds秒前或后的时间戳 + * 返回时间戳 +vk.pubfn.getOffsetTime(new Date(), { + year:0, + month:0, + day:0, + hours:0, + minutes:0, + seconds:0, + mode:"after", // after 之后 before 之前 +}); + */ +util.getOffsetTime = function(date = new Date(), obj) { + let time = (typeof date === "number") ? new Date(date) : date; + let year = obj.year || obj.y; + let month = obj.month || obj.m; + let day = obj.day || obj.d; + let hours = obj.hours || obj.hh; + let minutes = obj.minutes || obj.mm; + let seconds = obj.seconds || obj.ss; + let { mode="after" } = obj; + if (mode == "before") { + year *= -1; + month *= -1; + day *= -1; + hours *= -1; + minutes *= -1; + seconds *= -1; + } + if (year) { + time = time.setFullYear(time.getFullYear() + year); + time = new Date(time); + } + if (month) { + time = time.setMonth(time.getMonth() + month); + time = new Date(time); + } + if (day) { + time = time.setDate(time.getDate() + day); + time = new Date(time); + } + if (hours) { + time = time.setHours(time.getHours() + hours); + time = new Date(time); + } + if (minutes) { + time = time.setMinutes(time.getMinutes() + minutes); + time = new Date(time); + } + if (seconds) { + time = time.setSeconds(time.getSeconds() + seconds); + time = new Date(time); + } + return time.getTime(); +} + export default util; diff --git a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js index f68efa6..f8a4570 100644 --- a/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js +++ b/uni_modules/vk-unicloud/vk_modules/vk-unicloud-page/libs/vk-unicloud/vk-unicloud-callFunctionUtil.js @@ -174,6 +174,8 @@ class CallFunctionUtil { let config = this.config; let callFunction = this.callFunction; if (config.debug) console.log("跳登录页面"); + let { tokenExpiredAutoDelete = true } = config; + if (tokenExpiredAutoDelete) this.deleteToken(); setTimeout(() => { if (config.login.url) { let currentPage = getCurrentPages()[getCurrentPages().length - 1]; @@ -231,7 +233,8 @@ class CallFunctionUtil { * @params {Function} complete 无论请求成功与否,都会执行的回调函数 */ this.callFunction = (obj = {}) => { - let config = this.config; + let that = this; + let { config } = that; let { url, data = {}, @@ -240,7 +243,7 @@ class CallFunctionUtil { if (obj.retryCount) { // 系统异常重试机制(表单提交时慎用,建议只用在查询请求中,即无任何数据库修改的请求中) - return this.callFunctionRetry(obj); + return that.callFunctionRetry(obj); } // 去除值为 undefined 的参数 if (typeof data === "object") { @@ -271,7 +274,7 @@ class CallFunctionUtil { } } // 根据指定globalParamName匹配全局请求参数 - let customDate = this.getRequestGlobalParam(globalParamName); + let customDate = that.getRequestGlobalParam(globalParamName); if (customDate && JSON.stringify(customDate) !== "{}") { if (customDate.regExp) { obj.data = Object.assign(customDate.data, obj.data); // 新版本 @@ -280,13 +283,32 @@ class CallFunctionUtil { } } // 注入自定义全局参数结束----------------------------------------------------------- - // 缓存开始 + + // 若执行的函数是kh或sys类型函数,先本地判断下token,可以提高效率。 + if (url.indexOf("/kh/") > -1 || url.indexOf("/sys/") > -1) { + if (!vk.checkToken()) { + // 若本地token校验未通过,则直接执行 interceptor.login 拦截器函数 + return new Promise((resolve, reject) => { + // 执行 interceptor.login 拦截器函数(跳转到页面页面) + let res = { code: 30204, msg: "本地token校验未通过" }; + let params = obj; + if (typeof that.interceptor.login === "function") { + that.interceptor.login({ + res, + params, + vk + }); + } + reject(res); + }); + } + } // 执行请求 if (obj.isRequest) { - return this.runRequest(obj); + return that.runRequest(obj); } else { - return this.runCallFunction(obj); + return that.runCallFunction(obj); } } @@ -607,9 +629,7 @@ class CallFunctionUtil { if (typeof success == "function") success(res); resolve(res); } else if ([1301, 1302, 30201, 30202, 30203, 30204].indexOf(code) > -1 && res.msg.indexOf("token") > -1) { - let { tokenExpiredAutoDelete = true } = config; - if (tokenExpiredAutoDelete) that.deleteToken(); - // 跳转到页面页面 + // 执行 interceptor.login 拦截器函数(跳转到页面页面) if (typeof that.interceptor.login === "function") { that.interceptor.login({ res, -- GitLab