@cloudbase/js-sdk 3.5.3 → 3.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/app/dist/index.esm.js +1 -1
- package/app/dist/index.esm.js.map +1 -1
- package/app/dist/index.js +1 -1
- package/app/dist/index.js.map +1 -1
- package/app/dist/index.node.esm.js +1 -1
- package/app/dist/index.node.esm.js.map +1 -1
- package/app/dist/index.node.js +1 -1
- package/app/dist/index.node.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.node.cjs.js +1 -1
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/index.node.esm.js +1 -1
- package/dist/index.node.esm.js.map +1 -1
- package/miniprogram_dist/app.js +1 -1
- package/miniprogram_dist/database.js +1 -1
- package/miniprogram_dist/index.js +1 -1
- package/package.json +1 -1
- package/types/package.json +1 -1
- package/utilities/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.node.js","mappings":"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","sources":["webpack://@cloudbase/js-sdk/webpack/runtime/create fake namespace object","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/index.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/abort.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/async.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/defer.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/iterate.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/state.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/terminator.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/parallel.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/serial.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/serialOrdered.js","webpack://@cloudbase/js-sdk/common.ts","webpack://@cloudbase/js-sdk/index.ts","webpack://@cloudbase/js-sdk/constants.ts","webpack://@cloudbase/js-sdk/context.ts","webpack://@cloudbase/js-sdk/metadata.ts","webpack://@cloudbase/js-sdk/request.ts","webpack://@cloudbase/js-sdk/tool.ts","webpack://@cloudbase/js-sdk/utils.ts","webpack://@cloudbase/js-sdk/wx.ts","webpack://@cloudbase/js-sdk/adapter.ts","webpack://@cloudbase/js-sdk/cache.ts","webpack://@cloudbase/js-sdk/component.ts","webpack://@cloudbase/js-sdk/lang.ts","webpack://@cloudbase/js-sdk/index.node.ts","webpack://@cloudbase/js-sdk/web.ts","webpack://@cloudbase/js-sdk/errors.ts","webpack://@cloudbase/js-sdk/decorators.ts","webpack://@cloudbase/js-sdk/abortController.ts","webpack://@cloudbase/js-sdk/events.ts","webpack://@cloudbase/js-sdk/langEvent.ts","webpack://@cloudbase/js-sdk/util.ts","webpack://@cloudbase/js-sdk/../../node_modules/combined-stream/lib/combined_stream.js","webpack://@cloudbase/js-sdk/../../node_modules/delayed-stream/lib/delayed_stream.js","webpack://@cloudbase/js-sdk/../../node_modules/form-data/lib/form_data.js","webpack://@cloudbase/js-sdk/../../node_modules/form-data/lib/populate.js","webpack://@cloudbase/js-sdk/../../node_modules/mime-db/index.js","webpack://@cloudbase/js-sdk/../../node_modules/mime-types/index.js","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/adapter-interface\",\"commonjs2\":\"@cloudbase/adapter-interface\",\"amd\":\"@cloudbase/adapter-interface\",\"root\":\"@cloudbase/adapter-interface\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/adapter-wx_mp\",\"commonjs2\":\"@cloudbase/adapter-wx_mp\",\"amd\":\"@cloudbase/adapter-wx_mp\",\"root\":\"@cloudbase/adapter-wx_mp\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/signature-nodejs\",\"commonjs2\":\"@cloudbase/signature-nodejs\",\"amd\":\"@cloudbase/signature-nodejs\",\"root\":\"@cloudbase/signature-nodejs\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"jsonwebtoken\",\"commonjs2\":\"jsonwebtoken\",\"amd\":\"jsonwebtoken\",\"root\":\"jsonwebtoken\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"jwt-decode\",\"commonjs2\":\"jwt-decode\",\"amd\":\"jwt-decode\",\"root\":\"jwt-decode\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"web-streams-polyfill\",\"commonjs2\":\"web-streams-polyfill\",\"amd\":\"web-streams-polyfill\",\"root\":\"web-streams-polyfill\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"ws\",\"commonjs2\":\"ws\",\"amd\":\"ws\",\"root\":\"ws\"}","webpack://@cloudbase/js-sdk/external node-commonjs \"fs\"","webpack://@cloudbase/js-sdk/external node-commonjs \"http\"","webpack://@cloudbase/js-sdk/external node-commonjs \"https\"","webpack://@cloudbase/js-sdk/external node-commonjs \"path\"","webpack://@cloudbase/js-sdk/external node-commonjs \"stream\"","webpack://@cloudbase/js-sdk/external node-commonjs \"url\"","webpack://@cloudbase/js-sdk/external node-commonjs \"util\"","webpack://@cloudbase/js-sdk/webpack/bootstrap","webpack://@cloudbase/js-sdk/webpack/runtime/define property getters","webpack://@cloudbase/js-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@cloudbase/js-sdk/webpack/runtime/make namespace object","webpack://@cloudbase/js-sdk/webpack/startup"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","import { EndPointKey } from '@cloudbase/types'\nimport { constants } from '@cloudbase/utilities'\n\n// @ts-ignore\nconst { setSdkName: setUtilitiesSdkName, setProtocol: setUtilitiesProtocol } = constants\n/**\n * SDK\n */\nlet sdkVersion = ''\nlet sdkName = '@cloudbase/js-sdk'\n\nexport function setSdkVersion(version: string) {\n sdkVersion = version\n}\nexport function getSdkVersion() {\n return sdkVersion\n}\nexport function setSdkName(name: string) {\n sdkName = name\n setUtilitiesSdkName(name)\n}\nexport function getSdkName() {\n return sdkName\n}\nexport const DATA_VERSION = '2020-01-10'\n\ninterface EndPointInfo {\n env: string\n endPointKey: EndPointKey\n region?: string\n baseUrl?: string\n protocol?: Protocol\n}\n\ntype Protocol = 'http' | 'https' | 'http:' | 'https:'\n\n/**\n * 所有 endPoint 信息\n * 避免直接操作该数组\n * 使用 setEndPointInfo、 getEndPointInfo\n */\nconst END_POINT_INFO_ARR: Array<EndPointInfo> = []\n\n/** 用来查找 endPoint 的字段 */\nconst END_POINT_INFO_SEARCH_KEYS = ['env', 'endPointKey', 'region']\n\nexport const DEFAULT_PROTOCOL: 'http:' | 'https:' = 'https:'\n\nfunction findMatchedInfo(info: EndPointInfo) {\n // eslint-disable-next-line max-len, eqeqeq\n return END_POINT_INFO_ARR.find(targetInfo => END_POINT_INFO_SEARCH_KEYS.filter(searchKey => info[searchKey] != null).every(searchKey => targetInfo[searchKey] === info[searchKey],),)\n}\n\nexport function setEndPointInfo(newInfo: EndPointInfo) {\n if (newInfo.protocol && !/:$/.test(newInfo.protocol)) {\n newInfo.protocol = `${newInfo.protocol}:` as Protocol\n }\n\n const endPointInfo = findMatchedInfo(newInfo)\n if (endPointInfo) {\n // eslint-disable-next-line eqeqeq\n if (newInfo.baseUrl != null) {\n endPointInfo.baseUrl = newInfo.baseUrl\n }\n // eslint-disable-next-line eqeqeq\n if (newInfo.protocol != null) {\n endPointInfo.protocol = newInfo.protocol\n }\n } else {\n END_POINT_INFO_ARR.push({ ...newInfo, protocol: newInfo.protocol ?? DEFAULT_PROTOCOL })\n }\n\n // 保持旧代码逻辑\n if (newInfo.endPointKey === 'CLOUD_API') {\n setUtilitiesProtocol((newInfo.protocol ?? DEFAULT_PROTOCOL) as 'http:' | 'https:')\n }\n}\n\nexport function getEndPointInfo(env: string, endPointKey: EndPointKey, region?: string) {\n return findMatchedInfo({ env, endPointKey, region })\n}\n\nexport interface ISetEndPointWithKey {\n key: EndPointKey\n url?: string\n protocol?: 'http' | 'https'\n}\n\nexport function setGatewayEndPointWithEnv(env: string, protocol?: Protocol, intl?: boolean) {\n let baseUrl = `//${env}.api.tcloudbasegateway.com/v1`\n\n if (intl) {\n baseUrl = `//${env}.api.intl.tcloudbasegateway.com/v1`\n }\n\n setEndPointInfo({ endPointKey: 'GATEWAY', env, baseUrl, protocol })\n}\nexport function setRegionLevelEndpoint(env: string, region: string, protocol?: Protocol) {\n const baseUrl = `//${env}.${region || 'ap-shanghai'}.tcb-api.tencentcloudapi.com/web`\n setEndPointInfo({ env, region, baseUrl, protocol, endPointKey: 'CLOUD_API' })\n}\n\nexport function getBaseEndPoint(env: string, endPointKey: EndPointKey = 'CLOUD_API') {\n const info = getEndPointInfo(env, endPointKey || 'CLOUD_API')\n\n const { protocol: PROTOCOL, baseUrl: BASE_URL } = info\n const webEndpoint = `${PROTOCOL}${BASE_URL}`\n // @todo 临时兼容小程序\n return webEndpoint.match(/(http(s)?:)?\\/\\/([^/?#]*)/)[0]\n // return `${new URL(webEndpoint).origin}`\n}\n\nexport enum LOGINTYPE {\n NULL = 'NULL',\n ANONYMOUS = 'ANONYMOUS',\n WECHAT = 'WECHAT',\n WECHAT_PUBLIC = 'WECHAT-PUBLIC',\n WECHAT_OPEN = 'WECHAT-OPEN',\n CUSTOM = 'CUSTOM',\n EMAIL = 'EMAIL',\n USERNAME = 'USERNAME',\n PHONE = 'PHONE',\n}\n\nexport const OAUTH2_LOGINTYPE_PREFIX = 'OAUTH2'\n","import { adapters, constants, utils, helpers } from '@cloudbase/utilities'\nimport { SDKAdapterInterface, CloudbaseAdapter, IRequestConfig } from '@cloudbase/adapter-interface'\nimport {\n ICloudbaseConfig,\n ICloudbaseUpgradedConfig,\n ICloudbase,\n ICloudbaseExtension,\n KV,\n ICloudbasePlatformInfo,\n EndPointKey,\n ICloudbaseApis,\n} from '@cloudbase/types'\nimport { ICloudbaseAuth } from '@cloudbase/types/auth'\nimport { registerComponent, registerHook } from './libs/component'\nimport { getWxDefaultAdapter, Platform } from './libs/adapter'\nimport { ICloudbaseComponent, ICloudbaseHook } from '@cloudbase/types/component'\nimport { ICloudbaseCache } from '@cloudbase/types/cache'\nimport { initCache, getCacheByEnvId, getLocalCache } from './libs/cache'\nimport { ICloudbaseRequest } from '@cloudbase/types/request'\nimport { initRequest, getRequestByEnvId } from './libs/request'\nimport {\n getSdkName,\n setSdkVersion,\n setRegionLevelEndpoint,\n setSdkName,\n setGatewayEndPointWithEnv,\n type ISetEndPointWithKey,\n setEndPointInfo,\n getEndPointInfo,\n getSdkVersion,\n DEFAULT_PROTOCOL,\n} from './constants/common'\nimport { i18nProxy, LANGS } from './libs/lang'\nexport { getBaseEndPoint } from './constants/common'\nexport { LANGS } from './libs/lang'\nconst { useAdapters, useDefaultAdapter } = adapters\nconst { ERRORS, COMMUNITY_SITE_URL } = constants\nconst { printWarn } = utils\nconst { catchErrorsDecorator } = helpers\n\n/**\n * @constant 默认配置\n */\nconst DEFAULT_INIT_CONFIG: Partial<ICloudbaseConfig> = {\n timeout: 15000,\n persistence: 'local', // 持久化存储类型\n}\n\n// timeout上限10分钟\nconst MAX_TIMEOUT = 1000 * 60 * 10\n// timeout下限100ms\nconst MIN_TIMEOUT = 100\n\nconst extensionMap: KV<ICloudbaseExtension> = {}\n\nclass Cloudbase implements ICloudbase {\n public authInstance: ICloudbaseAuth\n public oauthInstance: any\n public requestClient: any\n public oauthClient: any\n public version: string\n public auth: ICloudbase['auth'] & ICloudbaseAuth\n public apis: ICloudbaseApis\n private cloudbaseConfig: ICloudbaseConfig\n\n constructor(config?: ICloudbaseConfig) {\n this.cloudbaseConfig = config ? config : this.cloudbaseConfig\n this.authInstance = null\n this.oauthInstance = null\n this.version = getSdkVersion()\n }\n\n get config() {\n return this.cloudbaseConfig\n }\n\n get platform(): ICloudbasePlatformInfo {\n return Platform\n }\n\n get cache(): ICloudbaseCache {\n return getCacheByEnvId(this.cloudbaseConfig.env)\n }\n\n get localCache(): ICloudbaseCache {\n return getLocalCache(this.cloudbaseConfig.env)\n }\n\n get request(): ICloudbaseRequest {\n return getRequestByEnvId(this.cloudbaseConfig.env)\n }\n\n @catchErrorsDecorator({\n mode: 'sync',\n title: 'Cloudbase 初始化失败',\n messages: [\n '请确认以下各项:',\n ' 1 - 调用 cloudbase.init() 的语法或参数是否正确',\n ' 2 - 如果是非浏览器环境,是否配置了安全应用来源(https://docs.cloudbase.net/api-reference/webv3/adapter#%E7%AC%AC-2-%E6%AD%A5%E9%85%8D%E7%BD%AE%E5%AE%89%E5%85%A8%E5%BA%94%E7%94%A8%E6%9D%A5%E6%BA%90)',\n `如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,\n ],\n })\n public init(config: ICloudbaseConfig & { lang?: LANGS } = { env: '' }): Cloudbase {\n config.endPointMode = config.endPointMode || 'GATEWAY'\n\n // 初始化时若未兼容平台,则使用默认adapter\n if (!Platform.adapter) {\n this.useDefaultAdapter()\n }\n\n // 在判断config.env之前,先处理node环境的配置\n config = this.dealNodeAdapterConfig(config)\n\n if (!config.env) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: 'env must not be specified',\n }),)\n }\n\n this.isInitialized(config)\n\n const reqConfig: IRequestConfig & { auth: ICloudbaseConfig['auth'] } = {\n timeout: config.timeout || 15000,\n timeoutMsg: `[${getSdkName()}][REQUEST TIMEOUT] request had been abort since didn't finished within${\n config.timeout / 1000\n }s`,\n auth: config.auth,\n }\n\n this.requestClient = new Platform.adapter.reqClass(reqConfig)\n\n this.cloudbaseConfig = {\n ...DEFAULT_INIT_CONFIG,\n ...config,\n i18n: i18nProxy(Platform, config),\n }\n\n delete (this.cloudbaseConfig as any).lang\n // 修正timeout取值\n this.cloudbaseConfig.timeout = this.formatTimeout(this.cloudbaseConfig.timeout)\n // 初始化cache和request\n const { env, persistence, debug, timeout, oauthClient, i18n } = this.cloudbaseConfig\n initCache({ env, persistence, debug, platformInfo: this.platform })\n\n setRegionLevelEndpoint(env, config.region || '')\n setGatewayEndPointWithEnv(env, DEFAULT_PROTOCOL, config.intl)\n\n const app = new Cloudbase(this.cloudbaseConfig)\n initRequest({\n env,\n region: config.region || '',\n timeout,\n oauthClient,\n _fromApp: app,\n i18n,\n endPointMode: config.endPointMode,\n auth: config.auth,\n })\n app.requestClient = this.requestClient\n ;(this as any)?.fire?.('cloudbase_init', app)\n\n this.try2InitAuth(app)\n\n // node环境可以从adapter获取nodeTool的方法\n if (Platform.adapter?.nodeTool) {\n Platform.adapter?.nodeTool(app, this.cloudbaseConfig)\n }\n\n return app\n }\n\n public updateConfig(config: ICloudbaseUpgradedConfig) {\n const { persistence, debug } = config\n this.cloudbaseConfig.persistence = persistence\n this.cloudbaseConfig.debug = debug\n // persistence改动影响cache\n initCache({ env: this.cloudbaseConfig.env, persistence, debug, platformInfo: this.platform })\n }\n\n public updateLang(lang: LANGS) {\n if (!lang || lang === this.cloudbaseConfig.i18n?.lang) return\n\n this.cloudbaseConfig.i18n.lang = lang\n }\n\n public registerExtension(ext: ICloudbaseExtension) {\n extensionMap[ext.name] = ext\n }\n @catchErrorsDecorator({\n title: '调用扩展能力失败',\n messages: [\n '请确认以下各项:',\n ' 1 - 调用 invokeExtension() 的语法或参数是否正确',\n ' 2 - 被调用的扩展能力是否已经安装并通过 registerExtension() 注册',\n `如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,\n ],\n })\n public async invokeExtension(name: string, opts: any) {\n const ext = extensionMap[name]\n if (!ext) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: `extension:${name} must be registered before invoke`,\n }),)\n }\n\n return await ext.invoke(opts, this)\n }\n\n public useAdapters(adapters: CloudbaseAdapter | CloudbaseAdapter[], options?: any) {\n const { adapter, runtime } = useAdapters(adapters, options) || {}\n adapter && (Platform.adapter = adapter as SDKAdapterInterface)\n runtime && (Platform.runtime = runtime as string)\n }\n\n public registerHook(hook: ICloudbaseHook) {\n registerHook(Cloudbase, hook)\n }\n\n public registerComponent(component: ICloudbaseComponent) {\n registerComponent(Cloudbase, component)\n }\n\n public registerVersion(version: string) {\n setSdkVersion(version)\n this.version = version\n }\n\n public registerSdkName(name: string) {\n setSdkName(name)\n }\n\n /**\n * 检查当前 Cloudbase 实例是否已完成初始化\n *\n * @example\n * ```javascript\n * import cloudbase from '@cloudbase/js-sdk'\n *\n * // 初始化前\n * console.log(cloudbase.isInitialized()) // false\n *\n * const app = cloudbase.init({ env: 'your-env-id' })\n *\n * // 初始化后\n * console.log(app.isInitialized()) // true\n * ```\n *\n * @returns {boolean} 是否已初始化\n */\n public isInitialized(config = this.cloudbaseConfig): boolean {\n // 检测常见占位符 env 值,在开发阶段给出友好提示\n const PLACEHOLDER_PATTERNS = [\n 'your-env-id',\n 'your-envid',\n 'your_env_id',\n 'xxx-yyy',\n 'xxxx-yyy',\n 'envId',\n 'env-id',\n 'your-environment-id',\n 'REPLACE_ME',\n ]\n if (PLACEHOLDER_PATTERNS.some(p => config.env.toLowerCase() === p.toLowerCase())) {\n printWarn(\n ERRORS.INVALID_PARAMS,\n `[CloudBase] 检测到环境 ID \"${config.env}\" 可能是占位符,请替换为真实的环境 ID。\\n`\n + ' 获取方式:登录腾讯云开发平台 → 环境管理 → 环境设置 → 环境 ID\\n'\n + ' 建议通过环境变量配置:process.env.CLOUDBASE_ENV 或 import.meta.env.VITE_CLOUDBASE_ENV',\n )\n }\n\n return !!config?.env\n }\n\n /** 设置 tcb api 的 endpoint */\n public registerEndPoint(url: string, protocol?: 'http' | 'https') {\n setEndPointInfo({ baseUrl: url, protocol, env: this.config.env, endPointKey: 'CLOUD_API' })\n }\n\n /** 设置网关/tcb api的 endPoint,通过 key 指定 */\n public registerEndPointWithKey(props: ISetEndPointWithKey) {\n setEndPointInfo({\n env: this.config.env,\n endPointKey: props.key,\n baseUrl: props.url,\n protocol: props.protocol,\n })\n }\n\n /**\n * 一次性设置所有端点,只需传入 host 地址,自动拼接路径\n * @param host - 主机地址,如 \"43.144.98.4\" 或 \"//43.144.98.4\"\n * @param protocol - 协议,默认 \"http\"\n */\n public registerHost(host: string, protocol: 'http' | 'https' = 'http') {\n // 去掉可能的协议前缀和前导 //\n const cleanHost = host.replace(/^(https?:)?\\/\\//, '')\n const baseHost = `//${cleanHost}`\n // CLOUD_API 端点: /web\n setEndPointInfo({ baseUrl: `${baseHost}/web`, protocol, env: this.config.env, endPointKey: 'CLOUD_API' })\n // GATEWAY 端点: /v1\n setEndPointInfo({ baseUrl: `${baseHost}/v1`, protocol, env: this.config.env, endPointKey: 'GATEWAY' })\n }\n\n /** 拿网关/tcb api的 endPoint,通过 key 指定 */\n public getEndPointWithKey(key: EndPointKey) {\n const info = getEndPointInfo(this.config.env, key)\n return {\n BASE_URL: info.baseUrl,\n PROTOCOL: info.protocol,\n }\n }\n\n // 解析URL参数\n public parseCaptcha(url) {\n return utils.parseCaptcha(url)\n }\n\n private useDefaultAdapter() {\n const { adapter, runtime } = useDefaultAdapter.bind(this)()\n Platform.adapter = adapter as SDKAdapterInterface\n Platform.runtime = runtime as string\n }\n\n private formatTimeout(timeout: number) {\n switch (true) {\n case timeout > MAX_TIMEOUT:\n printWarn(ERRORS.INVALID_PARAMS, 'timeout is greater than maximum value[10min]')\n return MAX_TIMEOUT\n case timeout < MIN_TIMEOUT:\n printWarn(ERRORS.INVALID_PARAMS, 'timeout is less than maximum value[100ms]')\n return MIN_TIMEOUT\n default:\n return timeout\n }\n }\n\n private try2InitAuth(app) {\n try {\n app.auth()\n } catch (error) {\n console.log('try2InitAuth error:', error)\n }\n }\n\n /**\n * 处理 Node 环境下 adapter 的配置信息\n * 在 Node 环境中,通过 adapter 自动获取密钥、环境ID、accessKey 等配置,\n * 减少用户手动传入配置的负担\n * @param config - 云开发初始化配置对象\n * @returns 补充了 Node adapter 信息后的配置对象\n */\n private dealNodeAdapterConfig(config: ICloudbaseConfig) {\n // node环境可以从adapter获取默认的secretId和secretKey\n if (\n typeof process !== 'undefined'\n && typeof process.env !== 'undefined'\n && Platform.adapter?.getSecretInfo\n ) {\n const secretInfo = Platform.adapter?.getSecretInfo(config)\n // 将 adapter 提供的密钥信息写入 config.auth\n config.auth = {\n ...config.auth,\n secretId: secretInfo.secretId,\n secretKey: secretInfo.secretKey,\n sessionToken: secretInfo.sessionToken,\n secretType: secretInfo.secretType as any,\n }\n\n // node 环境可能可以从上下文获取env,用户未显式指定时自动填充\n if (!config.env) {\n config.env = secretInfo.env\n }\n\n // node adapter环境能读取到 process.env.CLOUDBASE_APIKEY 时,在没有传入accessKey时,使用 node adapter 提供的 accessKey(process.env.CLOUDBASE_APIKEY)\n if (!config.accessKey && secretInfo.accessKey) {\n config.accessKey = secretInfo.accessKey\n }\n }\n\n return config\n }\n}\n\n// 类型导出\nexport type { Cloudbase }\n\n// 值导出\nexport const cloudbase: ICloudbase = new Cloudbase()\n\ncloudbase.useAdapters(getWxDefaultAdapter())\n\n// 默认导出实例\nexport default cloudbase\n","/* eslint-disable @typescript-eslint/naming-convention */\n/** 统一错误码定义 */\nexport const ERROR = {\n INVALID_PARAM: {\n code: 'INVALID_PARAM',\n message: 'invalid param',\n },\n SYS_ERR: {\n code: 'SYS_ERR',\n message: 'system error',\n },\n STORAGE_REQUEST_FAIL: {\n code: 'STORAGE_REQUEST_FAIL',\n message: 'storage request fail',\n },\n STORAGE_FILE_NONEXIST: {\n code: 'STORAGE_FILE_NONEXIST',\n message: 'storage file not exist',\n },\n TCB_CLS_UNOPEN: {\n code: 'TCB_CLS_UNOPEN',\n message: '需要先开通日志检索功能',\n },\n INVALID_CONTEXT: {\n code: 'INVALID_CONTEXT',\n message: '无效的context对象,请使用 云函数入口的context参数',\n },\n}\n\n/** 管理端 API 路径,用于替换 /web 路径(需要密钥签名时) */\nexport const ADMIN_PATH = '/admin'\n\n/** 管理端获取客户端凭证 access_token,为管理员权限 */\nexport const CLIENT_AUTH_PATH = '/auth/v1/token/clientCredential'\n\n/** 自定义用户 ID 校验规则:4~32 位,允许字母、数字及部分特殊字符 */\nexport const checkCustomUserIdRegex = /^[a-zA-Z0-9_\\-#@~=*(){}[\\]:.,<>+]{4,32}$/\n\nexport enum SECRET_TYPE {\n 'SECRET' = 'SECRET',\n 'SESSION_SECRET' = 'SESSION_SECRET',\n}\n","/* eslint-disable import/no-mutable-exports */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-restricted-syntax */\nimport { ERROR, SECRET_TYPE } from './constants'\nimport { checkIsInScf, getEnv } from './utils'\nimport type { IContextParam, ICompleteCloudbaseContext } from './types'\nimport { ICloudbaseConfig } from '@cloudbase/types'\n\n/**\n * 解析并校验云函数入口的 Context 参数\n * 将下划线命名的字段转为驼峰格式,并解析环境变量\n *\n * @param context - 云函数入口传入的 context 对象\n * @returns 解析后的上下文对象,包含 environment(新架构)或 environ(老架构)\n * @throws INVALID_CONTEXT - context 不是对象或解析失败时\n */\nexport function parseContext(context: IContextParam) {\n if (typeof context !== 'object') {\n throw { ...ERROR.INVALID_CONTEXT, message: 'context 必须为对象类型' }\n }\n\n const parseResult: any = {}\n\n const {\n memory_limit_in_mb,\n time_limit_in_ms,\n request_id,\n function_version,\n namespace,\n function_name,\n\n environ,\n environment,\n } = context\n\n try {\n parseResult.memoryLimitInMb = memory_limit_in_mb\n parseResult.timeLimitIns = time_limit_in_ms\n parseResult.requestId = request_id\n parseResult.functionVersion = function_version\n parseResult.namespace = namespace\n parseResult.functionName = function_name\n\n if (environment) {\n // 新架构:environment 为 JSON 字符串,直接解析\n parseResult.environment = JSON.parse(environment)\n } else {\n // TODO: 考虑移除老架构的兼容逻辑\n // 老架构:environ 为分号分隔的 key=value 字符串\n // 存在 bug:value 含特殊字符时可能影响解析\n const parseEnviron: any = environ?.split(';')\n const parseEnvironObj: any = {}\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const i in parseEnviron) {\n if (parseEnviron[i].includes('=')) {\n // 只按第一个 = 切割,保留 value 中的 =\n const equalIndex = parseEnviron[i].indexOf('=')\n const key = parseEnviron[i].slice(0, equalIndex)\n let value: any = parseEnviron[i].slice(equalIndex + 1)\n\n // value 含逗号时视为数组\n if (value.indexOf(',') >= 0) {\n value = value.split(',')\n }\n parseEnvironObj[key] = value\n }\n }\n\n parseResult.environ = parseEnvironObj\n }\n } catch (_err: any) {\n throw { ...ERROR.INVALID_CONTEXT }\n }\n\n return parseResult\n}\n\n/**\n * 获取当前云函数内的所有环境变量\n * 统一从 process.env 和 context 两个来源合并取值\n *\n * 取值优先级:context > process.env\n * 通过 TCB_CONTEXT_KEYS / WX_CONTEXT_KEYS 动态扩展需要读取的环境变量列表\n *\n * @param context - 可选,云函数入口的 context 参数\n * @returns 合并后的完整环境变量上下文\n */\nexport const getCloudbaseContext = (context?: IContextParam): ICompleteCloudbaseContext => {\n // 云函数环境下校验必要环境变量\n if (checkIsInScf()) {\n if (!getEnv('TENCENTCLOUD_REGION')) {\n console.error('[TCB][ERROR] missing `TENCENTCLOUD_REGION` environment')\n }\n if (!getEnv('SCF_NAMESPACE')) {\n console.error('[TCB][ERROR] missing `SCF_NAMESPACE` environment')\n }\n }\n\n // 第一步:从 process.env 读取基础环境变量\n const envObj = getEnv()\n const envFromProcessEnv: any = {\n TRIGGER_SRC: envObj.TRIGGER_SRC,\n _SCF_TCB_LOG: envObj._SCF_TCB_LOG,\n SCF_NAMESPACE: envObj.SCF_NAMESPACE,\n TENCENTCLOUD_RUNENV: envObj.TENCENTCLOUD_RUNENV,\n TENCENTCLOUD_SECRETID: envObj.TENCENTCLOUD_SECRETID,\n TENCENTCLOUD_SECRETKEY: envObj.TENCENTCLOUD_SECRETKEY,\n TENCENTCLOUD_SESSIONTOKEN: envObj.TENCENTCLOUD_SESSIONTOKEN,\n WX_CONTEXT_KEYS: envObj.WX_CONTEXT_KEYS,\n WX_TRIGGER_API_TOKEN_V0: envObj.WX_TRIGGER_API_TOKEN_V0,\n WX_CLIENTIP: envObj.WX_CLIENTIP,\n WX_CLIENTIPV6: envObj.WX_CLIENTIPV6,\n TCB_CONTEXT_KEYS: envObj.TCB_CONTEXT_KEYS,\n TCB_CONTEXT_CNFG: envObj.TCB_CONTEXT_CNFG,\n LOGINTYPE: envObj.LOGINTYPE,\n }\n\n // 第二步:从 context 中解析环境变量\n let envFromContext: any = {}\n if (context) {\n const { environment, environ } = parseContext(context)\n envFromContext = environment || environ || {}\n }\n\n // 第三步:根据 CONTEXT_KEYS 动态扩展变量列表(优先取 context 中的值)\n const tcbContextKeys = envFromContext.TCB_CONTEXT_KEYS || envObj.TCB_CONTEXT_KEYS\n const wxContextKeys = envFromContext.WX_CONTEXT_KEYS || envObj.WX_CONTEXT_KEYS\n\n // 根据 CONTEXT_KEYS 动态扩展变量列表\n for (const contextKeys of [tcbContextKeys, wxContextKeys]) {\n if (contextKeys) {\n try {\n for (const item of contextKeys.split(',')) {\n envFromProcessEnv[item] = envFromContext[item] || getEnv(item)\n }\n } catch (_e) {\n //\n }\n }\n }\n\n // 第四步:合并所有来源,context 的值覆盖 process.env,过滤 undefined\n const allContext = { ...envFromProcessEnv, ...envFromContext }\n\n return Object.fromEntries(Object.entries(allContext).filter(([, v]) => v !== undefined)) as any\n}\n\n/**\n * 获取 TCB_CONTEXT_CNFG 配置\n * 解析环境变量中约定的 JSON 配置\n */\nexport function getTcbContextConfig(): any {\n try {\n const context: any = getCloudbaseContext()\n const { TCB_CONTEXT_CNFG } = context\n if (TCB_CONTEXT_CNFG) {\n return JSON.parse(TCB_CONTEXT_CNFG)\n }\n return {}\n } catch (_e) {\n console.error('[TCB][ERROR] parse context error: ', _e)\n return {}\n }\n}\n\n/**\n * 获取服务端注入的 URL\n */\nexport function getServerInjectUrl(): string {\n const tcbContextConfig = getTcbContextConfig()\n return tcbContextConfig.URL || ''\n}\n\n/** 缓存 extendedContext,供其他模块读取(如 tool.ts 中获取 userId) */\nexport let INIT_CONFIG: ICloudbaseConfig = {} as unknown as ICloudbaseConfig\n\n/**\n * 从环境变量 / config 顶层字段 / context 中获取腾讯云密钥信息\n * 兼容 node-sdk 风格的顶层配置(secretId, secretKey, credentials, context 等)\n * 用于 API 请求签名\n */\nexport const getSecretInfo = (config?: ICloudbaseConfig) => {\n INIT_CONFIG = JSON.parse(JSON.stringify(config || INIT_CONFIG))\n\n // --- 环境变量中的密钥 ---\n const { TCB_ENV, SCF_NAMESPACE, TENCENTCLOUD_RUNENV, TENCENTCLOUD_SECRETID, TENCENTCLOUD_SECRETKEY, TENCENTCLOUD_SESSIONTOKEN, CLOUDBASE_APIKEY } = getEnv()\n const topLevel = { ...INIT_CONFIG, ...config } as any\n\n // --- env 处理 ---\n // env 可能为 symbol(SYMBOL_CURRENT_ENV / SYMBOL_DEFAULT_ENV),尝试从环境变量获取\n let env = ''\n if (typeof config?.env === 'symbol' || !config?.env) {\n env = TCB_ENV || SCF_NAMESPACE || ''\n } else {\n env = config.env as string\n }\n\n // 本地调试环境特殊处理\n if (env === 'local' && TENCENTCLOUD_RUNENV === 'WX_LOCAL_SCF') {\n env = ''\n }\n\n const defaultInfo = {\n env,\n secretId: '',\n secretKey: '',\n sessionToken: '',\n accessKey: '',\n secretType: '',\n credentials: undefined as any,\n context: undefined as any,\n }\n\n // --- 顶层 context(functions-framework 上下文) ---\n if (topLevel?.context) {\n defaultInfo.context = topLevel.context\n }\n\n // --- 顶层 credentials(私钥认证) ---\n if (topLevel?.credentials) {\n defaultInfo.credentials = topLevel.credentials\n }\n\n // --- accessKey 优先级:config.accessKey > 环境变量 ---\n if (config?.accessKey || topLevel?.accessKey) {\n defaultInfo.accessKey = config?.accessKey || topLevel?.accessKey\n return defaultInfo\n }\n\n // --- 顶层 secretId/secretKey(node-sdk 风格兼容) ---\n if (topLevel?.secretId && topLevel?.secretKey) {\n return {\n ...defaultInfo,\n secretId: topLevel.secretId,\n secretKey: topLevel.secretKey,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: topLevel.sessionToken ? SECRET_TYPE.SESSION_SECRET : SECRET_TYPE.SECRET,\n }\n }\n\n // --- config.auth 中的密钥 ---\n if (config?.auth?.secretId && config?.auth?.secretKey) {\n return {\n ...defaultInfo,\n secretId: config.auth.secretId,\n secretKey: config.auth.secretKey,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: config.auth.secretType || SECRET_TYPE.SECRET,\n }\n }\n\n if (CLOUDBASE_APIKEY) {\n return {\n ...defaultInfo,\n accessKey: CLOUDBASE_APIKEY,\n }\n }\n\n if (TENCENTCLOUD_SECRETID && TENCENTCLOUD_SECRETKEY) {\n return {\n ...defaultInfo,\n secretId: TENCENTCLOUD_SECRETID,\n secretKey: TENCENTCLOUD_SECRETKEY,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: SECRET_TYPE.SESSION_SECRET,\n }\n }\n\n // --- context.extendedContext 中的临时密钥 ---\n const contextConfig = topLevel?.context || config?.context\n if (contextConfig?.extendedContext) {\n const { extendedContext } = contextConfig\n if (!env) {\n env = extendedContext.envId || ''\n }\n\n return {\n ...defaultInfo,\n env,\n secretId: extendedContext?.tmpSecret?.secretId || '',\n secretKey: extendedContext?.tmpSecret?.secretKey || '',\n sessionToken: extendedContext?.tmpSecret?.token || '',\n }\n }\n\n return { ...defaultInfo }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\n// 注意:改地址已经不是一定可以访问的了\nexport const kMetadataBaseUrl = 'http://metadata.tencentyun.com'\n\nexport const kAppIdPath = 'meta-data/app-id'\nexport const kSecurityCredentialsPath = 'meta-data/cam/security-credentials'\n\nexport enum kMetadataVersions {\n 'v20170919' = '2017-09-19',\n 'v1.0' = '1.0',\n 'latest' = 'latest',\n}\n\nexport function isAppId(appIdStr: string) {\n return /^[1-9][0-9]{4,64}$/gim.test(appIdStr)\n}\n\nexport async function lookup(path: string, options: { timeout?: number } = {}): Promise<string> {\n const url = `${kMetadataBaseUrl}/${kMetadataVersions.latest}/${path}`\n\n const controller = new AbortController()\n let timer: ReturnType<typeof setTimeout> | undefined\n if (options.timeout) {\n timer = setTimeout(() => controller.abort(), options.timeout)\n }\n\n try {\n const resp = await fetch(url, { signal: controller.signal })\n if (resp.status === 200) {\n return await resp.text()\n }\n throw new Error(`[ERROR] GET ${url} status: ${resp.status}`)\n } finally {\n if (timer) clearTimeout(timer)\n }\n}\n\nconst metadataCache: { appId: string | undefined } = {\n appId: undefined,\n}\n/**\n * lookupAppId - 该方法主要用于判断是否在云上环境\n * @returns\n */\nexport async function lookupAppId(): Promise<string> {\n if (metadataCache.appId === undefined) {\n try {\n // 只有首次会请求且要求快速返回,超时时间很短,DNS无法解析将会超时返回\n // 在云环境中,这个时间通常在 10ms 内,部分耗时长(30+ms)的情况是 DNS 解析耗时长(27+ms)\n const appId = await lookup(kAppIdPath, { timeout: 30 })\n if (isAppId(appId)) {\n metadataCache.appId = appId\n } else {\n metadataCache.appId = ''\n }\n } catch (_e) {\n // ignore\n }\n }\n return metadataCache.appId || ''\n}\n\nexport async function lookupCredentials(ruleName: string): Promise<string> {\n // `${kMetadataBaseUrl}/meta-data/cam/security-credentials/TCB_QcsRole`\n // 这里设置了一个较短的超时时间,因为这个请求是在云环境中发起的,通常会很快返回\n return await lookup(`${kSecurityCredentialsPath}/${ruleName}`, {\n timeout: 200,\n })\n}\n","/* eslint-disable no-nested-ternary */\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport {\n IFetchOptions,\n IRequestConfig,\n IRequestMethod,\n IRequestOptions,\n ResponseObject,\n SDKRequestInterface,\n formatUrl,\n} from '@cloudbase/adapter-interface'\nimport { ADMIN_PATH, CLIENT_AUTH_PATH } from './constants'\nimport { getCloudbaseContext, getSecretInfo, INIT_CONFIG } from './context'\nimport type { ICustomReqOpts } from './types'\nimport {\n getEnv,\n isFormData,\n toQueryString,\n safeParseJson,\n obj2StrRecord,\n headersInit2Indexable,\n getCurrRunEnvTag,\n} from './utils'\nimport { ICloudbaseConfig } from '@cloudbase/types'\nimport { getSdkVersion } from '../../constants/common'\n// 延迟加载,避免非 Node 环境打包时引入此包\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet signFn: ((...args: any[]) => any) | null = null\nasync function getSign() {\n if (!signFn) {\n try {\n // @ts-ignore — 该包仅在 Node 运行时存在,开发环境可能未安装\n const mod = await import('@cloudbase/signature-nodejs')\n signFn = mod.sign\n } catch (e) {\n console.error('缺少依赖 @cloudbase/signature-nodejs,请执行以下命令安装:\\n\\n'\n + ' npm install @cloudbase/signature-nodejs\\n\\n'\n + '该依赖用于 Node 环境下的请求签名。')\n }\n }\n return signFn!\n}\n\n/**\n * Node.js 环境下的 HTTP 请求实现\n * 基于原生 fetch,支持 GET/POST/PUT/上传/下载/流式请求\n * 自动处理 V3 签名和 Bearer Token 认证\n */\nexport class NodeRequest implements SDKRequestInterface {\n /** 请求配置,包含认证信息 */\n config: IRequestConfig & ICloudbaseConfig\n\n /** 请求超时时间(毫秒),默认 15000 */\n private readonly timeout: number\n\n /** 受超时控制的请求类型列表 */\n private readonly restrictedMethods: Array<IRequestMethod>\n\n constructor(config: IRequestConfig & ICloudbaseConfig) {\n const { timeout, restrictedMethods } = config\n this.timeout = timeout || 15000\n this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download']\n this.config = config\n }\n\n /**\n * 获取客户端凭证 access_token,为管理员权限\n * 用于不支持 V3 签名的接口(如数据模型、关系型数据库、AI)\n */\n async getClientCredential(opts: { origin: string }): Promise<any> {\n const res = await this.fetch({\n url: `${opts.origin}${CLIENT_AUTH_PATH}`,\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n grant_type: 'client_credentials',\n }),\n })\n\n return res.data?.access_token\n }\n\n /**\n * 获取实际请求 URL\n * 当请求未携带 Authorization 且未自带 access_token 时,\n * 将 /web 路径替换为 /admin(管理端签名路径)\n */\n getRealUrl(url: string, headers: Record<string, any>, body: any) {\n if (headers.Authorization?.replace('Bearer', '')?.trim()) {\n return url\n }\n\n const params = typeof body === 'object' ? body : safeParseJson(body) || ''\n\n if (params.access_token) {\n return url\n }\n\n const urlObj = new URL(url)\n\n if (urlObj.pathname === '/web' && this.config.auth?.secretId && this.config.auth?.secretKey) {\n urlObj.pathname = ADMIN_PATH\n }\n return urlObj.toString()\n }\n\n public getReqOptions = async (\n url: string,\n options: {\n method?: any\n headers: any\n body?: any\n credentials?: string\n withCredentials?: boolean\n signal?: AbortSignal\n url?: any\n },\n ) => {\n const urlObj = new URL(url)\n\n const { TCB_SOURCE } = getCloudbaseContext()\n // Note: 云函数被调用时可能调用端未传递 SOURCE,TCB_SOURCE 可能为空\n const SOURCE = `${INIT_CONFIG.context?.extendedContext?.source || TCB_SOURCE || ''},${await getCurrRunEnvTag()}`\n\n options.headers = {\n ...options.headers,\n 'User-Agent': `adapter-node/${options.headers?.['X-SDK-Version'] || `@cloudbase/js-sdk/${getSdkVersion()}`}`,\n 'X-TCB-Source': SOURCE,\n 'X-Client-Timestamp': new Date().valueOf(),\n 'X-TCB-Region': INIT_CONFIG.region || getEnv('TENCENTCLOUD_REGION') || '',\n Host: urlObj.host,\n }\n\n // 调用方显式声明 withCredentials: false 时,表示这是一次匿名请求\n // (如 Storage 签名直传 / 公开下载,仅凭 token 或 Bucket public 属性鉴权)。\n // 此场景下不应注入登录态或 V3 管理签名,否则会与 token 鉴权冲突,造成「二次签名」。\n if (options.withCredentials === false) {\n return options\n }\n\n // 已携带有效 Authorization,直接返回\n if (options.headers.Authorization?.replace('Bearer', '')?.trim()) {\n return options\n }\n\n // auth 相关接口不需要签名\n if (urlObj.pathname.startsWith('/auth/') && urlObj.pathname !== CLIENT_AUTH_PATH) {\n return options\n }\n\n const isAdminPath = urlObj.pathname === ADMIN_PATH\n\n // 这些路径不支持 V3 签名,改用 clientCredential 获取 Bearer Token\n const UNSUPPORTED_V3_SIGN_PATH = ['/v1/model/', '/v1/rdb/', '/v1/ai/']\n\n if (UNSUPPORTED_V3_SIGN_PATH.some(v => urlObj.pathname.startsWith(v))) {\n const token = await this.getClientCredential({ origin: urlObj.origin })\n options.headers.Authorization = `Bearer ${token}`\n return options\n }\n\n let { secretId, secretKey, sessionToken } = this.config?.auth || {}\n const { secretType } = this.config?.auth || {}\n const { method, body } = options\n const headers = JSON.parse(JSON.stringify(options.headers))\n\n // ========== 处理 npm form-data 包实例 ==========\n // npm form-data 实例(来自 node-sdk 的 sendWxFormDataRequest):\n // - 通过 __plainObj 挂载了签名用的纯对象\n // - 签名时使用 plain object 的 key-value(multipart 签名方式)\n // - 发送时使用 form-data 的 getBuffer()(multipart/form-data 格式)\n const isNpmFormDataBody = this.isNpmFormData(body)\n let params: any\n\n if (isNpmFormDataBody) {\n // 从 form-data 实例上取签名用的纯对象\n params = body.__plainObj ? { ...body.__plainObj } : {}\n } else {\n params = typeof body === 'object' ? body : safeParseJson(body) || {}\n }\n\n params.envName = params?.env || this.config.env || getSecretInfo()?.env || ''\n\n // 参数自带 access_token,无需签名\n if (params.access_token) {\n return options\n }\n\n // GET 请求参数已在 URL 中,签名时 params 置空\n if (method.toLowerCase() === 'get') {\n params = undefined\n }\n\n // SESSION_SECRET 类型或无密钥时,从环境变量获取临时密钥\n if (!secretId || !secretKey || secretType === 'SESSION_SECRET') {\n const secretInfo = getSecretInfo()\n secretId = secretInfo.secretId\n secretKey = secretInfo.secretKey\n sessionToken = secretInfo.sessionToken\n }\n\n // 仍无密钥则跳过签名\n if (!secretId || !secretKey) {\n return options\n }\n\n delete headers.Authorization\n\n // content-type 需与服务端签名验证保持大小写一致\n if (headers['content-type']) {\n headers['content-type'] = headers['content-type'].toLowerCase()\n } else if (headers['Content-Type']) {\n headers['Content-Type'] = headers['Content-Type'].toLowerCase()\n }\n\n if (isAdminPath && !!sessionToken) {\n params.sessionToken = sessionToken\n }\n\n const signedParams = {\n secretId,\n secretKey,\n method,\n url,\n params,\n headers,\n withSignedParams: isAdminPath,\n timestamp: Math.floor(new Date().getTime() / 1000) - 1,\n isCloudApi: !isAdminPath,\n }\n\n if (!headers['content-type'] && !headers['Content-Type']) {\n return options\n }\n\n const sign = await getSign()\n if (!sign) return options\n\n const { authorization, timestamp } = sign(signedParams)\n\n if (typeof sessionToken === 'string' && sessionToken !== '') {\n if (isAdminPath) {\n headers.Authorization = `${authorization}`\n headers['X-Timestamp'] = timestamp\n headers['X-Signature-Expires'] = 600\n } else {\n // 临时密钥需要额外附带 Token\n headers.Authorization = `${authorization}, Timestamp=${timestamp}, Token=${sessionToken}`\n }\n } else {\n headers.Authorization = `${authorization}, Timestamp=${timestamp}`\n\n // admin 路径需要额外的时间戳和过期头\n if (isAdminPath) {\n headers['X-Timestamp'] = timestamp\n headers['X-Signature-Expires'] = 600\n }\n }\n\n // ========== 构建返回的 body ==========\n if (isNpmFormDataBody) {\n // npm form-data: 签名完成后,需要将 envName/sessionToken 等签名时追加的字段\n // 也同步追加到 form-data 实例中(因为服务端需要从 form-data body 中读取这些字段)\n // 然后用 form-data 的 getBuffer() 作为实际发送的 body\n const formDataInstance = body\n const existingKeys = new Set(Object.keys(formDataInstance.__plainObj || {}))\n\n // 把签名过程中追加的字段同步到 form-data 实例(仅追加之前不存在的)\n if (params.envName && !existingKeys.has('envName')) {\n formDataInstance.append('envName', params.envName)\n }\n if (params.sessionToken && !existingKeys.has('sessionToken')) {\n formDataInstance.append('sessionToken', params.sessionToken)\n }\n\n const formBuffer = formDataInstance.getBuffer()\n const formHeaders = formDataInstance.getHeaders()\n\n return {\n ...options,\n headers: {\n ...headers,\n ...formHeaders,\n 'content-length': String(formBuffer.length),\n },\n body: formBuffer,\n }\n }\n\n return {\n ...options,\n headers,\n body: typeof params === 'object' ? JSON.stringify(params) : params,\n }\n }\n\n public get = (options: IRequestOptions): Promise<ResponseObject> => this.request(\n {\n ...options,\n method: 'get',\n },\n this.restrictedMethods.includes('get'),\n )\n\n public post = (options: IRequestOptions): Promise<ResponseObject> => this.request(\n {\n ...options,\n method: 'post',\n },\n this.restrictedMethods.includes('post'),\n )\n\n public put = (options: IRequestOptions): Promise<ResponseObject> => this.request({\n ...options,\n method: 'put',\n })\n\n /**\n * 文件上传\n * POST 方式:构建 FormData 上传\n * PUT 方式:直接将文件作为 body 上传\n */\n public upload = (options: IRequestOptions): Promise<ResponseObject> => {\n const { data, file: rawFile, fileContent, name, method, headers = {} } = options as any\n // 优先使用 file(filePath),没有则回退到 fileContent(Buffer)\n const file = rawFile ?? fileContent\n if (file === undefined || name === undefined) {\n throw new Error('file and name is required')\n }\n const formFields = obj2StrRecord(data ?? {})\n const loweredMethod = method?.toLowerCase()\n const reqMethod = ['post', 'put'].find(m => m === loweredMethod) ?? 'put'\n const formData = new FormData()\n if (reqMethod === 'post') {\n Object.keys(formFields).forEach((key) => {\n formData.append(key, formFields[key])\n })\n formData.append('key', name)\n formData.append('file', file instanceof Blob ? file : new Blob([file]))\n return this.request(\n {\n ...options,\n data: formData,\n method: reqMethod,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n\n return this.request(\n {\n ...options,\n method: 'put',\n headers,\n body: file,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n\n /** 文件下载(Node.js 环境,通过 fetch 获取文件内容并写入本地文件或返回 Buffer) */\n public download = async (options: IRequestOptions): Promise<unknown> => {\n const res = await fetch(options.url!, {\n headers: {},\n signal: AbortSignal.timeout(this.timeout),\n })\n\n if (!res.ok) {\n throw new Error(`Download failed with status ${res.status}`)\n }\n\n const arrayBuffer = await res.arrayBuffer()\n const buffer = Buffer.from(arrayBuffer)\n\n // 如果指定了 tempFilePath,将文件写入本地\n const { tempFilePath } = options\n if (tempFilePath) {\n // 确保目录存在\n const dir = path.dirname(tempFilePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(tempFilePath, buffer)\n return {\n statusCode: 200,\n tempFilePath,\n }\n }\n\n // 未指定路径时返回 Buffer\n return {\n statusCode: 200,\n tempFilePath: options.url,\n fileContent: buffer,\n }\n }\n\n /**\n * 底层 fetch 请求,支持流式响应\n * 超时通过 AbortController + setTimeout 实现\n */\n public fetch = async (options: Omit<IFetchOptions, 'signal'> & { signal?: AbortSignal; customReqOpts?: ICustomReqOpts }): Promise<ResponseObject> => {\n const { enableAbort = false, stream = false, signal, customReqOpts } = options\n const url = this.getRealUrl(options.url, options.headers || {}, options.body)\n const timeout = customReqOpts?.timeout || this.timeout\n const [abortController, cleanup] = this.createAbortController(timeout, enableAbort, signal)\n\n const headers = options.headers ? headersInit2Indexable(options.headers) : undefined\n\n const fetchOptions = await this.getReqOptions(url, {\n ...options,\n headers,\n body: options.body as any as NodeJS.ReadableStream,\n signal: abortController.signal,\n })\n\n this.applyDuplexIfNeeded(fetchOptions)\n\n try {\n const res = await fetch(url, fetchOptions as RequestInit)\n let data: any\n if (+res.status === 204) {\n data = ''\n } else if (stream) {\n data = res.body\n } else {\n // safeParseJson 避免当错误响应体非 JSON(如网关返回纯文本/HTML)时抛异常,\n // 从而保留 statusCode 供上层(如 exists() 判 400/404)使用。\n data = safeParseJson(await res.text())\n }\n return {\n data,\n statusCode: res.status,\n header: res.headers,\n // 透出原始 Response,便于上层按需 .blob() / .arrayBuffer() / 读取 body 流,避免二次包装。\n response: res,\n }\n } finally {\n cleanup()\n }\n }\n\n /**\n * 通用请求方法,被 get/post/put/upload 等调用\n * 负责构建 payload、设置超时、解析响应\n *\n * @param options - 请求选项\n * @param enableAbort - 是否启用超时中断(由 restrictedMethods 决定)\n */\n public request = async (options: IRequestOptions, enableAbort = false): Promise<ResponseObject> => {\n const {\n url,\n headers: rawHeaders = {},\n data,\n responseType,\n withCredentials,\n body,\n method: rawMethod,\n customReqOpts,\n } = options\n const headers = obj2StrRecord(rawHeaders)\n const method = String(rawMethod).toLowerCase() || 'get'\n const timeout = customReqOpts?.timeout || this.timeout\n // 桥接外部 signal 到内部 AbortController,支持调用方取消请求\n const externalSignal = (options as { signal?: AbortSignal }).signal\n const [abortController, cleanup] = this.createAbortController(timeout, enableAbort, externalSignal)\n\n // 构建请求 payload:FormData > urlencoded > raw body > JSON\n let payload\n if (isFormData(data)) {\n payload = data\n } else if (headers['content-type'] === 'application/x-www-form-urlencoded') {\n payload = toQueryString(data ?? {})\n } else if (body) {\n payload = body\n } else {\n payload = data ? JSON.stringify(data) : undefined\n }\n\n const realUrl = this.getRealUrl(\n formatUrl('https', url ?? '', method === 'get' ? data : {}),\n options.headers || {},\n payload,\n )\n\n const requestOptions = await this.getReqOptions(realUrl, {\n method,\n headers,\n body: payload,\n credentials: withCredentials ? 'include' : 'same-origin',\n signal: abortController.signal,\n })\n\n this.applyDuplexIfNeeded(requestOptions)\n\n try {\n const response = await fetch(realUrl, requestOptions as RequestInit)\n const result: ResponseObject = {\n header: {},\n statusCode: response.status,\n }\n\n try {\n if (responseType === 'blob') {\n result.data = await response.blob()\n } else if ((responseType as string) === 'buffer') {\n // 返回 Buffer(兼容旧版 node-sdk 二进制响应格式)\n result.data = Buffer.from(await response.arrayBuffer())\n } else {\n result.data = safeParseJson(await response.text())\n }\n } catch (e) {\n // 上传 POST 请求可能返回 XML 等非 JSON 格式,容错处理\n console.log('catch an error', e)\n if (responseType === 'blob') {\n result.data = await response.blob()\n } else if ((responseType as string) === 'buffer') {\n result.data = Buffer.from(await response.arrayBuffer())\n } else {\n result.data = await response.text()\n }\n }\n\n // 将响应头统一转为小写 key\n const { headers } = response\n headers.forEach((val, key) => (result.header[key.toLowerCase()] = val))\n\n return result\n } finally {\n cleanup()\n }\n }\n\n /**\n * 创建带超时的 AbortController\n * @returns [abortController, cleanup] — cleanup 用于清除定时器\n */\n private createAbortController(\n timeout: number,\n enableAbort: boolean,\n externalSignal?: AbortSignal,\n ): [AbortController, () => void] {\n const controller = new AbortController()\n\n // 桥接外部 signal。用 { once: true } 避免调用方复用同一长生命周期\n // AbortController 多次发请求时累积监听器(轻微泄漏)。\n if (externalSignal) {\n if (externalSignal.aborted) {\n controller.abort()\n } else {\n externalSignal.addEventListener('abort', () => controller.abort(), { once: true })\n }\n }\n\n let timer: ReturnType<typeof setTimeout> | undefined\n if (enableAbort || timeout) {\n timer = setTimeout(() => {\n const timeoutMsg = `请求在${timeout / 1000}s内未完成,已中断`\n console.warn(timeoutMsg)\n controller.abort(new Error(timeoutMsg))\n }, timeout)\n }\n\n return [controller, () => clearTimeout(timer)]\n }\n\n /** Node 18+ 原生 fetch 在 body 为 stream 时要求 duplex: 'half' */\n private applyDuplexIfNeeded(options: any): void {\n if (options.body && typeof options.body?.pipe === 'function') {\n options.duplex = 'half'\n }\n }\n\n /**\n * 判断是否为 npm form-data 包的实例(具有 getHeaders / getBuffer 方法)\n * 区别于全局 FormData(Web API)\n */\n private isNpmFormData(obj: any): boolean {\n return obj && typeof obj === 'object'\n && typeof obj.getHeaders === 'function'\n && typeof obj.getBuffer === 'function'\n }\n}\n","import { ERROR } from './constants'\nimport { getCloudbaseContext, parseContext, getServerInjectUrl } from './context'\nimport { validateUid, E } from './utils'\nimport {\n callWxOpenApi,\n callCompatibleWxOpenApi,\n callWxPayApi,\n wxCallContainerApi,\n getWxOptions,\n type ISendWxRequestOptions,\n} from './wx'\nimport type {\n ICreateTicketOpts,\n IGetUserInfoResult,\n IGetEndUserInfoResult,\n IUserInfoQuery,\n ITemplateNotifyReq,\n ICustomReqOpts,\n ICompleteCloudbaseContext,\n} from './types'\nimport { ICloudbaseConfig } from '@cloudbase/types'\n\n// 延迟加载 jsonwebtoken,避免非 Node 环境打包时引入此包\nlet jwtSign: ((...args: any[]) => any) | null = null\nasync function getJwtSign() {\n if (!jwtSign) {\n try {\n // @ts-ignore — 该包仅在 Node 运行时存在,开发环境可能未安装\n const mod = await import('jsonwebtoken')\n jwtSign = mod.default?.sign || mod.sign\n } catch (e) {\n console.error('缺少依赖 jsonwebtoken,请执行以下命令安装:\\n\\n'\n + ' npm install jsonwebtoken\\n\\n'\n + '该依赖用于 Node 环境下的自定义登录票据生成。')\n }\n }\n return jwtSign!\n}\n\n// ========== 辅助函数 ==========\n\n/**\n * 从云函数运行时上下文中获取当前请求的用户信息\n */\nfunction getDefaultUserInfo(): IGetUserInfoResult {\n const { WX_OPENID, WX_APPID, TCB_UUID, TCB_CUSTOM_USER_ID, TCB_ISANONYMOUS_USER } = getCloudbaseContext()\n\n return {\n openId: WX_OPENID || '',\n appId: WX_APPID || '',\n uid: TCB_UUID || '',\n customUserId: TCB_CUSTOM_USER_ID || '',\n isAnonymous: TCB_ISANONYMOUS_USER === 'true',\n }\n}\n\n/**\n * 调用后端管理接口查询用户信息\n */\nfunction sendUserInfoRequest(app: any, params: Record<string, any>): Promise<any> {\n return app?.request?.send?.('auth.getUserInfoForAdmin', params, {\n pathname: 'web',\n endPointMode: 'CLOUD_API',\n })\n}\n\n// ========== scfContext 存储(静态) ==========\n\nlet _scfContext: any = null\n\n// ========== nodeTool 主函数 ==========\n\n/**\n * 初始化 Node 端全部能力,直接挂载到 js-sdk app 实例上\n * 包含:auth 扩展方法、微信 API、文件操作增强、callFunction/callContainer 增强、\n * 模板消息推送、context 解析等\n *\n * @param app - js-sdk cloudbase 实例(init 返回值)\n * @param config - 配置信息\n */\nexport const nodeTool = (app: any, config: ICloudbaseConfig) => {\n const nodeConfig = config as any\n\n // ========== parseContext / getCloudbaseContext ==========\n\n app.parseContext = (context: any) => {\n const parseResult = parseContext(context)\n _scfContext = parseResult\n return parseResult\n }\n\n app.getCloudbaseContext = (context?: any): ICompleteCloudbaseContext => getCloudbaseContext(context)\n\n // ========== auth 扩展 ==========\n\n if (app.auth) {\n const authMethods: Record<string, any> = {\n /** 获取当前请求的用户信息(从环境变量读取,同步) */\n getUserInfo(): IGetUserInfoResult {\n return getDefaultUserInfo()\n },\n\n /**\n * 获取终端用户信息\n * 不传 uid 时返回当前请求用户信息,传 uid 时查询指定用户\n */\n async getEndUserInfo(uid?: string): Promise<IGetEndUserInfoResult> {\n const defaultUserInfo = getDefaultUserInfo()\n\n if (uid === undefined) {\n return { userInfo: defaultUserInfo }\n }\n validateUid(uid)\n\n return sendUserInfoRequest(app, {\n uuid: uid,\n envName: config.env,\n }).then((result: any) => {\n if (result.code) {\n return result\n }\n return {\n userInfo: { ...defaultUserInfo, ...result.data },\n requestId: result.requestId,\n }\n })\n },\n\n /**\n * 创建自定义登录 Ticket\n */\n async createTicket(uid: string, options: ICreateTicketOpts = {}): Promise<string> {\n validateUid(uid)\n\n const timestamp = new Date().getTime()\n const { credentials } = config.auth || {}\n const { env } = config\n\n if (!env) {\n throw { ...ERROR.INVALID_PARAM, message: 'no env in config' }\n }\n\n if (!credentials?.env_id) {\n throw {\n ...ERROR.INVALID_PARAM,\n message: '当前私钥未包含env_id 信息, 请前往腾讯云云开发控制台,获取自定义登录最新私钥',\n }\n }\n\n if (credentials.env_id !== env) {\n throw {\n ...ERROR.INVALID_PARAM,\n message: '当前私钥所属环境与 init 指定环境不一致!',\n }\n }\n\n const {\n refresh = 3600 * 1000,\n expire = timestamp + 7 * 24 * 60 * 60 * 1000,\n } = options\n const sign = await getJwtSign()\n const token = sign(\n {\n alg: 'RS256',\n env,\n iat: timestamp,\n exp: timestamp + 10 * 60 * 1000,\n uid,\n refresh,\n expire,\n },\n credentials.private_key,\n {\n allowInsecureKeySizes: true,\n algorithm: 'RS256',\n },\n )\n\n return `${credentials.private_key_id}/@@/${token}`\n },\n\n /**\n * 按条件查询用户信息(管理端接口)\n */\n async queryUserInfo(query: IUserInfoQuery): Promise<any> {\n const { uid, platform, platformId } = query\n return sendUserInfoRequest(app, {\n uuid: uid,\n platform,\n platformId,\n envName: config.env,\n }).then((result: any) => {\n if (result.code) {\n return result\n }\n return {\n userInfo: { ...result.data },\n requestId: result.requestId,\n }\n })\n },\n\n /** 获取客户端 IP 地址 */\n getClientIP(): string {\n const { TCB_SOURCE_IP } = getCloudbaseContext()\n return TCB_SOURCE_IP || ''\n },\n\n /** 获取 Auth Context(从运行环境中解析) */\n getAuthContext(context?: any) {\n const fullContext = getCloudbaseContext(context) as any\n const { TCB_UUID, LOGINTYPE, QQ_OPENID, QQ_APPID } = fullContext\n const result: any = {\n uid: TCB_UUID,\n loginType: LOGINTYPE,\n }\n if (LOGINTYPE === 'QQ-MINI') {\n result.appId = QQ_APPID\n result.openId = QQ_OPENID\n }\n return result\n },\n\n /** 获取客户端凭证 */\n async getClientCredential(opts?: ICustomReqOpts) {\n if (nodeConfig.accessKey || config.accessKey) {\n return nodeConfig.accessKey || config.accessKey\n }\n\n const origin = app.request.getBaseEndPoint('GATEWAY')\n const clientAuthPath = '/auth/v1/token/clientCredential'\n\n const res = await app.request.post(\n {\n url: `${origin}${clientAuthPath}`,\n data: { grant_type: 'client_credentials' },\n headers: { 'content-type': 'application/json' },\n },\n opts ? { timeout: opts.timeout } : undefined\n )\n\n return res.data\n },\n }\n\n /**\n * 挂载 auth 扩展方法\n *\n * app.auth 是一个 Proxy 包装的函数对象:\n * - 作为属性访问 app.auth.xxx 时,访问的是这个函数对象本身\n * - 作为函数调用 app.auth() 时,返回的是内部缓存的 authInstance(纯 Auth 实例)\n *\n * 两者是不同的对象,所以需要:\n * 1. 在 app.auth(函数对象)上挂载方法 —— 支持 app.auth.getUserInfo()\n * 2. 用 Proxy 包装 app.auth,在每次调用 app.auth() 时,把方法也同步到返回的 authInstance 上\n * —— 支持 const auth = app.auth(); auth.getUserInfo()\n */\n const originalAuth = app.auth\n\n // 先在 app.auth 函数对象本身上挂载方法\n Object.keys(authMethods).forEach((key) => {\n originalAuth[key] = authMethods[key]\n })\n\n // 用 Proxy 拦截函数调用,确保 app.auth() 返回的实例也带有这些方法\n app.auth = new Proxy(originalAuth, {\n apply(target: any, thisArg: any, argArray: any[]) {\n const authInstance = Reflect.apply(target, thisArg, argArray)\n // 将扩展方法同步到 authInstance 上(如果还没有的话)\n if (authInstance && typeof authInstance === 'object') {\n Object.keys(authMethods).forEach((key) => {\n if (!(key in authInstance)) {\n authInstance[key] = authMethods[key]\n }\n })\n }\n return authInstance\n },\n })\n }\n\n // ========== sendTemplateNotification ==========\n\n app.sendTemplateNotification = (params: ITemplateNotifyReq, opts?: { timeout?: number }) => app?.callFunction?.(\n {\n name: 'lowcode-datasource',\n data: {\n methodName: 'callWedaApi',\n params: {\n action: 'PushNotifyMsg',\n data: {\n NotifyId: params.notifyId,\n Data: JSON.stringify(params.data),\n NotifyUsers: undefined,\n Url: params.url,\n },\n },\n mode: 'c',\n },\n },\n undefined,\n opts,\n )\n\n // ========== 微信 API ==========\n\n function _getWxOptions(): ISendWxRequestOptions {\n const serviceUrl = nodeConfig.serviceUrl || getServerInjectUrl() || undefined\n return getWxOptions(nodeConfig, _scfContext, serviceUrl || '', app.request)\n }\n\n app.callWxOpenApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callWxOpenApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.callWxPayApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callWxPayApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.wxCallContainerApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => wxCallContainerApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.callCompatibleWxOpenApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callCompatibleWxOpenApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n // ========== getFileAuthority ==========\n\n app.getFileAuthority = async ({ fileList }: { fileList: Array<{ type: string; path: string }> }, opts?: ICustomReqOpts) => {\n const { LOGINTYPE } = getCloudbaseContext()\n if (!Array.isArray(fileList)) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] getCosFileAuthority fileList must be a array',\n })\n }\n\n if (\n fileList.some((file) => {\n if (!file?.path) return true\n if (!['READ', 'WRITE', 'READWRITE'].includes(file.type)) return true\n return false\n })\n ) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] getCosFileAuthority fileList param error',\n })\n }\n\n const { userInfo } = await app.auth.getEndUserInfo()\n const { openId, uid } = userInfo\n\n if (!openId && !uid) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] admin do not need getCosFileAuthority.',\n })\n }\n\n const params = {\n openId,\n uid,\n loginType: LOGINTYPE,\n fileList,\n }\n\n const res = await app.request.send(\n 'storage.getFileAuthority',\n params,\n { pathname: 'web', endPointMode: 'GATEWAY' },\n opts ? { timeout: opts.timeout } : undefined\n )\n\n if (res.code) {\n throw E({ ...res, message: `[js-sdk] getCosFileAuthority failed: ${res.code}` })\n } else {\n return res\n }\n }\n\n // ========== callApis ==========\n\n app.callApis = async (callApiOptions: any, opts?: ICustomReqOpts) => {\n if (app.apis) {\n const { name, path: apiPath = '', method = 'POST', header = {}, body, token } = callApiOptions\n const apiMethod = (method || 'POST').toLowerCase()\n return app.apis[name]?.[apiMethod]?.({\n path: apiPath,\n method,\n headers: header,\n body,\n token,\n }, opts)\n }\n throw new Error('callApis is not supported in current configuration')\n }\n}\n","import { utils } from '@cloudbase/utilities'\nimport { ReadableStream } from 'web-streams-polyfill'\nimport { ERROR, checkCustomUserIdRegex } from './constants'\nimport { lookupAppId } from './metadata'\n\n/** 从 @cloudbase/utilities 中提取的表单和查询字符串工具 */\nexport const { isFormData, toQueryString } = utils as {\n isFormData: (obj: unknown) => boolean\n toQueryString: (data: Record<string, any>) => string\n}\n\n/**\n * 跨端安全获取环境变量\n * Web 端、小游戏端等没有 process 全局对象,直接访问 process.env 会报错\n */\nexport function getEnv(): Record<string, string | undefined>\nexport function getEnv(key: string): string | undefined\nexport function getEnv(key?: string): string | undefined | Record<string, string | undefined> {\n if (typeof process === 'undefined' || !process.env) {\n return key !== undefined ? undefined : {}\n }\n return key !== undefined ? process.env[key] : process.env\n}\n\n/** 判断当前是否在 SCF(云函数)运行环境中 */\nexport const checkIsInScf = () => getEnv('TENCENTCLOUD_RUNENV') === 'SCF'\n\nexport function checkIsInCBR() {\n // CBR = CLOUDBASE_RUN\n return !!getEnv('CBR_ENV_ID')\n}\n\nconst kSumeruEnvSet = new Set(['formal', 'pre', 'test'])\nexport function checkIsInSumeru() {\n // SUMERU_ENV=formal | test | pre\n return kSumeruEnvSet.has(getEnv('SUMERU_ENV') || '')\n}\n\nexport async function checkIsInTencentCloud(): Promise<boolean> {\n if (getEnv('TENCENTCLOUD') === 'true') {\n return true\n }\n const appId = await lookupAppId()\n return typeof appId === 'string' && appId !== ''\n}\n\nexport const getCurrRunEnvTag = async (): Promise<string> => {\n if (checkIsInScf()) {\n return 'scf'\n } if (checkIsInCBR()) {\n return 'cbr'\n } if (checkIsInSumeru()) {\n return 'sumeru'\n } if (await checkIsInTencentCloud()) {\n return 'tencentcloud'\n }\n return 'unknown'\n}\n\n/**\n * 校验自定义用户 ID 格式\n * @throws 格式不合法时抛出 INVALID_PARAM 错误\n */\nexport const validateUid = (uid: string): void => {\n if (typeof uid !== 'string') {\n throw { ...ERROR.INVALID_PARAM, message: 'uid must be a string' }\n }\n if (!checkCustomUserIdRegex.test(uid)) {\n throw { ...ERROR.INVALID_PARAM, message: `Invalid uid: \"${uid}\"` }\n }\n}\n\n/**\n * 安全的 JSON 解析,解析失败时返回原始文本而非抛异常\n * @param text - 待解析的字符串\n * @returns 解析后的对象,空字符串返回 null,解析失败返回原始文本\n */\nexport function safeParseJson(text: string): any {\n if (!text || !text.trim()) {\n return null\n }\n try {\n return JSON.parse(text)\n } catch (e) {\n console.warn('catch an error', { e, text })\n return text\n }\n}\n\n/**\n * 将对象的所有值转为字符串类型\n * 用于将 headers 等对象统一为 Record<string, string>\n */\nexport function obj2StrRecord(obj: object): Record<string, string> {\n return Object.entries(obj).reduce<Record<string, string>>((acc, cur: [string, unknown]) => {\n const [key, value] = cur\n acc[key] = String(value)\n return acc\n }, {})\n}\n\n/**\n * 将 HeadersInit 转为可索引的普通对象\n * 兼容 Headers 实例和普通对象两种形式\n */\nexport function headersInit2Indexable(h: HeadersInit) {\n if (isHeaders(h)) {\n const ret: Record<string, string> = {}\n h.forEach((val, key) => {\n ret[key] = val\n })\n return ret\n }\n return h\n\n function isHeaders(h: HeadersInit): h is Headers {\n try {\n // Node 低版本可能没有全局 Headers\n return h instanceof Headers\n } catch (_) {\n return false\n }\n }\n}\n\n/**\n * 手动解析查询字符串,避免 URLSearchParams 的兼容性问题\n * 支持重复 key 自动转为数组\n * @param search - 查询字符串,可带前导 ? 或 #\n */\nexport function parseQueryString(search: string): Record<string, string | string[]> {\n const params: any = {}\n const cleanSearch = search.replace(/^[?#]/, '')\n\n if (!cleanSearch) {\n return params\n }\n\n const pairs = cleanSearch.split('&')\n\n pairs.forEach((item) => {\n let [key, value] = item.split('=')\n key = decodeURIComponent(key)\n value = decodeURIComponent(value || '')\n if (key) {\n if (params[key]) {\n // 已存在同名 key,转为数组\n if (Array.isArray(params[key])) {\n params[key].push(value)\n } else {\n params[key] = [params[key], value]\n }\n } else {\n params[key] = value\n }\n }\n })\n return params\n}\n\n/**\n * 将 Node ReadableStream 转换为 Web ReadableStream (polyfill)\n * 用于 fetch 流式响应在 Node 环境下的适配\n */\nexport function createWebStreamFromNodeReadableStream(stream: NodeJS.ReadableStream): ReadableStream {\n const asyncIterator = stream[Symbol.asyncIterator]()\n\n return new ReadableStream({\n async pull(controller) {\n const next = await asyncIterator.next()\n\n if (next.done) {\n controller.close()\n } else {\n controller.enqueue(next.value)\n }\n },\n })\n}\n\n// ========== 从 node-sdk utils/utils.ts 整合的工具函数 ==========\n\ninterface IErrorInfo {\n requestId?: string\n code?: string\n message?: string\n}\n\nexport class TcbError extends Error {\n public readonly code: string\n public readonly message: string\n public readonly requestId: string\n\n public constructor(error: IErrorInfo) {\n super(error.message)\n this.code = error.code || ''\n this.message = error.message || ''\n this.requestId = error.requestId || ''\n }\n}\n\n/** 创建 TcbError 实例的快捷方法 */\nexport function E(errObj: IErrorInfo) {\n return new TcbError(errObj)\n}\n\nexport function filterValue(o: any, value: any) {\n for (const key in o) {\n if (o[key] === value) {\n /* eslint-disable-next-line @typescript-eslint/no-dynamic-delete */\n delete o[key]\n }\n }\n}\n\nexport function filterUndefined(o: any) {\n filterValue(o, undefined)\n}\n\n// 兼容模式开关,兼容模式下,不抛出异常,直接返回\nlet throwOnCode = true\n\nexport function setThrowOnCode(value: boolean) {\n throwOnCode = value\n}\n\nexport function processReturn(result: any) {\n if (!throwOnCode) {\n return result\n }\n throw E({ ...result })\n}\n\n/**\n * 是否是场景模块名\n * $: 前缀,表示SaaS场景模块名,非实际环境ID\n */\nexport function isPageModuleName(envId = '') {\n return typeof envId === 'string' && envId.startsWith('$:')\n}\n\n// 20 + 1 + 16, 限制长度 40\nconst kEnvRuleReg = /^[a-z0-9_-]{1,40}$/\n\nexport function isValidEnvFormat(env = '') {\n return typeof env === 'string' && kEnvRuleReg.test(env)\n}\n\n// ========== 从 node-sdk const/symbol.ts 整合的常量 ==========\n\nexport const SYMBOL_CURRENT_ENV = Symbol.for('SYMBOL_CURRENT_ENV') // 当前环境\nexport const SYMBOL_DEFAULT_ENV = Symbol.for('SYMBOL_DEFAULT_ENV') // 默认环境\n","/**\n * 微信云开发相关请求辅助函数\n * 从 node-sdk 中提取,整合到 adapter-node 统一管理\n */\nimport * as fs from 'fs'\nimport { getCloudbaseContext } from './context'\nimport type { ICustomReqOpts } from './types'\n\n// ========== 微信业务函数(从 node-sdk wx/index.ts 整合) ==========\n\nimport { E } from './utils'\nimport { ERROR } from './constants'\n\n// ========== 微信 Token 辅助函数 ==========\n\nconst CLOUDBASE_ACCESS_TOKEN_PATH = '/.tencentcloudbase/wx/cloudbase_access_token'\nconst maxCacheAge = 10 * 60 * 1000\nconst cloudbaseAccessTokenInfo = { token: '', timestamp: 0 }\n\nfunction loadWxCloudbaseAccesstoken(): string {\n if (cloudbaseAccessTokenInfo.token && Date.now() - cloudbaseAccessTokenInfo.timestamp < maxCacheAge) {\n return cloudbaseAccessTokenInfo.token\n }\n\n try {\n if (process.env.TENCENTCLOUD_RUNENV === 'WX_LOCAL_SCF' || process.env.TENCENTCLOUD_RUNENV === 'SCF') {\n if (fs.existsSync(CLOUDBASE_ACCESS_TOKEN_PATH)) {\n cloudbaseAccessTokenInfo.token = fs.readFileSync(CLOUDBASE_ACCESS_TOKEN_PATH).toString()\n cloudbaseAccessTokenInfo.timestamp = Date.now()\n return cloudbaseAccessTokenInfo.token\n }\n }\n } catch (e) {\n console.warn('[TCB][ERROR]: loadWxCloudbaseAccesstoken error: ', e)\n }\n\n return ''\n}\n\nexport function getWxCloudToken(): { wxCloudApiToken: string; wxCloudbaseAccesstoken?: string } {\n const context: any = getCloudbaseContext()\n const { TRIGGER_SRC, WX_TRIGGER_API_TOKEN_V0, WX_API_TOKEN, WX_CLOUDBASE_ACCESSTOKEN = '' } = context\n\n const wxCloudToken: any = {}\n\n if (TRIGGER_SRC === 'timer') {\n wxCloudToken.wxCloudApiToken = WX_TRIGGER_API_TOKEN_V0 || WX_API_TOKEN || ''\n } else {\n wxCloudToken.wxCloudApiToken = WX_API_TOKEN || ''\n }\n\n if (!wxCloudToken.wxCloudApiToken) {\n wxCloudToken.wxCloudbaseAccesstoken = WX_CLOUDBASE_ACCESSTOKEN || loadWxCloudbaseAccesstoken()\n }\n\n return wxCloudToken\n}\n\n// ========== buildAdminUrl 辅助函数 ==========\n\n/** 判断 envId 是否可用作域名前缀(比通用格式校验更严格) */\nfunction isValidEnvDomain(envId: string): boolean {\n return /^[a-z][a-z0-9-]*[a-z0-9]$/.test(envId)\n}\n\nlet seqNum = 0\nfunction genSeqId(): string {\n seqNum += 1\n const eventId = `${Date.now().toString(16)}_${(seqNum).toString(16)}`\n const context: any = getCloudbaseContext()\n const { TCB_SEQID = '' } = context\n return TCB_SEQID ? `${TCB_SEQID}-${eventId}` : eventId\n}\n\n/**\n * 构建 /admin 路径的完整 URL\n * @param config - cloudbase 配置\n * @param scfContext - 云函数 context(含 requestId)\n * @param serviceUrl - 自定义服务端 URL(覆盖默认值)\n */\nexport function buildAdminUrl(config: any, scfContext?: any, serviceUrl?: string): string {\n const envId: string = typeof config.env === 'symbol'\n ? (process.env.TCB_ENV || process.env.SCF_NAMESPACE || '')\n : (config.env || '')\n const region = config.region || process.env.TENCENTCLOUD_REGION || ''\n const seqId = genSeqId()\n\n const endpoint = region\n ? `${region}.tcb-api.tencentcloudapi.com`\n : 'tcb-api.tencentcloudapi.com'\n const envEndpoint = isValidEnvDomain(envId) ? `${envId}.${endpoint}` : endpoint\n\n const protocol = 'https'\n const path = '/admin'\n const defaultUrl = `${protocol}://${envEndpoint}${path}`\n\n const url = serviceUrl || defaultUrl\n\n const qs = scfContext\n ? `env=${envId}&seqId=${seqId}&scfRequestId=${scfContext.requestId}`\n : `env=${envId}&seqId=${seqId}`\n\n return url.includes('?') ? `${url}${qs}` : `${url}?${qs}`\n}\n\n// ========== 微信请求函数 ==========\n\n/**\n * 为微信请求 params 补充 token 和 sessionToken 公共字段\n */\nfunction appendWxTokenParams(params: any): void {\n const context: any = getCloudbaseContext()\n const { wxCloudApiToken, wxCloudbaseAccesstoken } = getWxCloudToken()\n params.wxCloudApiToken = wxCloudApiToken\n if (wxCloudbaseAccesstoken) {\n params.wxCloudbaseAccesstoken = wxCloudbaseAccesstoken\n }\n params.tcb_sessionToken = context.TCB_SESSIONTOKEN || ''\n}\n\nexport interface ISendWxRequestOptions {\n /** app.request 实例(NodeRequest),需具有 post 和 send 方法 */\n requestInstance: any\n /** cloudbase 配置 */\n config: any\n /** 云函数入口 scfContext(含 requestId) */\n scfContext?: any\n /** 自定义服务端 URL */\n serviceUrl?: string\n}\n\n/**\n * 使用 JSON 格式发送 wx 请求(用于 callWxOpenApi)\n * @param options - 请求实例和配置\n * @param action - 请求动作(如 'wx.api')\n * @param params - 请求参数\n * @param reqOpts - 自定义请求选项(如 timeout)\n */\nexport async function sendWxRequest(\n options: ISendWxRequestOptions,\n action: string,\n params: any,\n reqOpts?: ICustomReqOpts\n) {\n appendWxTokenParams(params)\n\n return options.requestInstance.send(\n action,\n params,\n { pathname: 'web', endPointMode: 'GATEWAY' },\n reqOpts ? { timeout: reqOpts.timeout } : undefined\n )\n}\n\n/**\n * 使用 multipart/form-data 格式发送 wx 请求(用于 callCompatibleWxOpenApi / callWxPayApi / wxCallContainerApi)\n * 自动处理 form-data 构建、签名和发送\n * 与旧版 SDK 的请求格式(multipart/form-data + /admin 路径)完全一致\n *\n * @param options - 请求实例和配置\n * @param action - 请求动作(如 'wx.openApi'、'wx.wxPayApi'、'wx.wxCallContainerApi')\n * @param params - 请求参数\n * @param reqOpts - 自定义请求选项(如 timeout)\n */\nexport async function sendWxFormDataRequest(\n options: ISendWxRequestOptions,\n action: string,\n params: any,\n reqOpts?: ICustomReqOpts\n): Promise<any> {\n appendWxTokenParams(params)\n\n // 延迟加载 form-data 包\n let FormData: any\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n FormData = require('form-data')\n } catch (e) {\n throw new Error('缺少依赖 form-data,请执行 npm install form-data')\n }\n\n // 使用 form-data 包构建 FormData(兼容 Node.js < 18 的云函数环境)\n const formData = new FormData()\n formData.append('action', action)\n for (const key of Object.keys(params)) {\n if (params[key] !== undefined) {\n formData.append(key, params[key])\n }\n }\n\n // 构建签名用的纯对象(getReqOptions 用它做 multipart 签名)\n const plainObj: any = { action, ...params }\n ;(formData as any).__plainObj = plainObj\n\n // 构建 admin URL\n const url = buildAdminUrl(options.config, options.scfContext, options.serviceUrl)\n\n // 通过 request.post 发送(responseType 为 buffer 以兼容旧版二进制响应格式)\n const res = await options.requestInstance.post(\n {\n url,\n body: formData,\n headers: formData.getHeaders(),\n responseType: 'buffer',\n },\n reqOpts ? { timeout: reqOpts.timeout } : undefined\n )\n\n // 返回 response data\n if (res.data) {\n return res.data\n }\n return res\n}\n\n/**\n * 校验跨帐号调用配置\n */\nfunction validateCrossAccount(config: any, opts: any = {}): void {\n const getCrossAccountInfo = opts.getCrossAccountInfo || config.getCrossAccountInfo\n if (getCrossAccountInfo) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: 'invalid config: getCrossAccountInfo',\n })\n }\n}\n\n/**\n * 获取微信请求所需的 wxOptions 参数\n * @param config - cloudbase 配置\n * @param scfContext - 云函数 context\n * @param serviceUrl - 服务端注入 URL\n * @param requestInstance - request 实例\n */\nexport function getWxOptions(config: any, scfContext: any, serviceUrl: string, requestInstance: any): ISendWxRequestOptions {\n return { requestInstance, config, scfContext, serviceUrl }\n}\n\n/**\n * callWxOpenApi - 调用微信开放接口(JSON 格式)\n */\nexport async function callWxOpenApi(\n wxOptions: ISendWxRequestOptions,\n { apiName, apiOptions, cgiName, requestData }: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) {\n let transformRequestData: any\n try {\n transformRequestData = requestData ? JSON.stringify(requestData) : ''\n } catch (e: any) {\n throw E({ ...e, code: ERROR.INVALID_PARAM.code, message: '对象出现了循环引用' })\n }\n\n validateCrossAccount(wxOptions.config, opts)\n\n const params: any = {\n apiName,\n apiOptions,\n cgiName,\n requestData: transformRequestData,\n }\n\n const res = await sendWxRequest(wxOptions, 'wx.api', params, opts)\n\n if (res.code) {\n return res\n }\n\n let result: any\n try {\n result = JSON.parse(res.responseData)\n } catch (e) {\n result = res.responseData\n }\n return {\n result,\n requestId: res.requestId,\n }\n}\n\n/**\n * 通用的 form-data 格式微信 API 调用(内部复用)\n * callCompatibleWxOpenApi / callWxPayApi / wxCallContainerApi 均委托此函数\n */\nasync function callWxFormDataApi(\n action: string,\n wxOptions: ISendWxRequestOptions,\n { apiName, apiOptions, cgiName, requestData }: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) {\n validateCrossAccount(wxOptions.config, opts)\n return sendWxFormDataRequest(wxOptions, action, { apiName, apiOptions, cgiName, requestData }, opts)\n}\n\n/** callCompatibleWxOpenApi - 调用兼容的微信开放接口(form-data 格式) */\nexport const callCompatibleWxOpenApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.openApi', wxOptions, apiOpts, opts)\n\n/** callWxPayApi - 调用微信支付接口(form-data 格式) */\nexport const callWxPayApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.wxPayApi', wxOptions, apiOpts, opts)\n\n/** wxCallContainerApi - 调用微信云托管容器接口(form-data 格式) */\nexport const wxCallContainerApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.wxCallContainerApi', wxOptions, apiOpts, opts)\n","import { ICloudbasePlatformInfo } from '@cloudbase/types'\nimport adapterForWxMp, { WxRequest, WxMpWebSocket, wxMpStorage, parseQueryString } from '@cloudbase/adapter-wx_mp'\nimport { IUploadRequestOptions, StorageType } from '@cloudbase/adapter-interface'\n\ndeclare const wx: any\ndeclare const App: any\ndeclare const getApp: any\n\nexport const Platform: ICloudbasePlatformInfo = {}\n\nexport const getWxDefaultAdapter = () => {\n WxRequest.prototype.upload = function (options: IUploadRequestOptions) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n return new Promise((resolve) => {\n const { url, file, data, headers } = options\n const fs = wx.getFileSystemManager() // 读取文件 二进制内容\n const task = wx.request({\n url,\n method: options.method,\n header: {\n 'content-type': ' ', // 小程序 content-type 默认为 application/json, 这里一定要强制为 空, 否则签名错误\n ...headers,\n },\n data: fs.readFileSync(file), // 将二进制文件转为字符串直接赋值到 request payload, 不要以 form 的方式传输\n timeout: this._timeout,\n success(res: { statusCode: number; data: unknown }) {\n const result = {\n statusCode: res.statusCode,\n data: res.data || {},\n }\n if (res.statusCode === 200 && data?.success_action_status) {\n result.statusCode = parseInt(data.success_action_status, 10)\n }\n resolve(result)\n },\n fail(err: unknown) {\n resolve(err)\n },\n complete(err: { errMsg: string }) {\n if (!err?.errMsg) {\n return\n }\n if (!self._timeout || self._restrictedMethods.indexOf('upload') === -1) {\n return\n }\n const { errMsg } = err\n if (errMsg === 'request:fail timeout') {\n console.warn(self._timeoutMsg)\n try {\n task.abort()\n } catch (e) {}\n }\n },\n })\n })\n }\n\n function isPlugin() {\n return (\n typeof App === 'undefined'\n && typeof getApp === 'undefined'\n && !wx.onAppHide\n && !wx.offAppHide\n && !wx.onAppShow\n && !wx.offAppShow\n )\n }\n adapterForWxMp.genAdapter = function genAdapter(options) {\n const adapter = {\n root: { globalThis: {} },\n reqClass: WxRequest,\n wsClass: WxMpWebSocket,\n captchaOptions: {\n openURIWithCallback: (_url: string) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { EventBus } = options\n let queryObj: Record<string, string> = {}\n let url = _url\n console.log('openURIWithCallback', _url)\n const matched = _url.match(/^(data:.*?)(\\?[^#\\s]*)?$/)\n if (matched) {\n // eslint-disable-next-line prefer-destructuring\n url = matched[1]\n console.log('openURIWithCallback url', url)\n const search = matched[2]\n if (search) {\n queryObj = parseQueryString(search)\n }\n }\n console.log('openURIWithCallback queryObj', queryObj)\n const { token, ...restQueryObj } = queryObj\n if (/^data:/.test(url) && !token) {\n // 如果是 data: 开头的 URL 且没有 token,则直接返回\n return Promise.reject({\n error: 'invalid_argument',\n error_description: `invalie captcha data: ${_url}`,\n })\n }\n if (!token) {\n return Promise.reject({\n error: 'unimplemented',\n error_description: 'need to impl captcha data',\n })\n }\n return new Promise((resolve) => {\n console.log('wait for captcha...')\n EventBus.$emit('CAPTCHA_DATA_CHANGE', { ...restQueryObj, token, url })\n\n // 监听事件总线,等待验证码数据变化\n EventBus.$once('RESOLVE_CAPTCHA_DATA', (res: { captcha_token: string; expires_in: number }) => {\n resolve(res)\n })\n })\n },\n },\n localStorage: wxMpStorage,\n primaryStorage: StorageType.local,\n getAppSign() {\n const info = wx.getAccountInfoSync()\n if (isPlugin()) {\n // 插件环境返回插件appid\n return info && info.plugin ? info.plugin.appId : ''\n }\n return info && info.miniProgram ? info.miniProgram.appId : ''\n },\n }\n return adapter\n }\n\n return adapterForWxMp\n}\n","import { KV } from '@cloudbase/types'\nimport { cache } from '@cloudbase/utilities'\nimport { ICloudbaseCache, ICacheConfig } from '@cloudbase/types/cache'\n\nconst USER_INFO_KEY = 'user_info'\n\nconst { CloudbaseCache } = cache\n\nconst cacheMap: KV<ICloudbaseCache> = {}\n// 本地存储\nconst localCacheMap: KV<ICloudbaseCache> = {}\n\nexport function initCache(config: ICacheConfig & { env: string }) {\n const { env, platformInfo } = config\n\n const userInfoKey = `${USER_INFO_KEY}_${env}`\n\n const keys = {\n userInfoKey,\n }\n // 若指定env已存在cache则尝试更新persistence\n cacheMap[env] = cacheMap[env] || (new CloudbaseCache({\n ...config,\n keys,\n platformInfo,\n }))\n localCacheMap[env] = localCacheMap[env] || new CloudbaseCache({\n ...config,\n keys,\n platformInfo,\n persistence: 'local',\n })\n}\n\nexport function getCacheByEnvId(env: string): ICloudbaseCache {\n return cacheMap[env]\n}\n\nexport function getLocalCache(env: string): ICloudbaseCache {\n return localCacheMap[env]\n}\n","import { KV } from '@cloudbase/types'\nimport { ICloudbaseComponent, ICloudbaseHook } from '@cloudbase/types/component'\nimport { constants } from '@cloudbase/utilities'\n\nconst { ERRORS } = constants\n\nconst components: KV<ICloudbaseComponent> = {}\n\nexport function registerComponent(app: any, component: ICloudbaseComponent) {\n const { name, namespace, entity, injectEvents, IIFE = false } = component\n // 不允许重复注册或命名空间重名\n if (components[name] || (namespace && app[namespace])) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `Duplicate component ${name}`,\n }))\n }\n // IIFE类型的组件以app为scope执行entity函数,不挂载到app.prototype上\n if (IIFE) {\n if (!entity || typeof entity !== 'function') {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: 'IIFE component\\'s entity must be a function',\n }))\n }\n entity.call(app)\n }\n\n components[name] = component\n\n if (namespace) {\n (app as any).prototype[namespace] = entity\n } else {\n deepExtend((app as any).prototype, entity)\n }\n if (injectEvents) {\n const { bus, events } = injectEvents\n if (!bus || !events || events.length === 0) {\n return\n }\n const originCallback = (app as any).prototype.fire || function () {}\n if (!(app as any).prototype.events) {\n (app as any).prototype.events = {}\n }\n const originEvents: KV<any> = (app as any).prototype.events || {}\n if (originEvents[name]) {\n (app as any).prototype.events[name].events = [...(app as any).prototype.events[name].events, ...events]\n } else {\n (app as any).prototype.events[name] = { bus, events }\n }\n (app as any).prototype.fire = function (eventName: string, data?: any) {\n originCallback(eventName, data)\n const eventNames = Object.keys(this.events)\n for (const name of eventNames) {\n const { bus, events: eventList } = this.events[name]\n if (eventList.includes(eventName)) {\n bus.fire(eventName, data)\n break\n }\n }\n }\n }\n}\n\nfunction deepExtend(target: any, source: any): KV<any> {\n if (!(source instanceof Object)) {\n return source\n }\n\n switch (source.constructor) {\n case Date: {\n const dateValue = source as Date\n return new Date(dateValue.getTime())\n }\n case Object:\n if (target === undefined) {\n target = {}\n }\n break\n case Array:\n target = []\n break\n default:\n return source\n }\n const sourceKeys = Object.keys(source)\n for (const key of sourceKeys) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue\n }\n target[key] = deepExtend(target[key], source[key])\n }\n\n return target\n}\n\nexport function registerHook(app: any, hook: ICloudbaseHook) {\n const { entity, target } = hook\n if (Object.prototype.hasOwnProperty.call(app, target)) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `target:${target} is not exist`,\n }))\n }\n const originMethod = app.prototype[target]\n if (typeof originMethod !== 'function') {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `target:${target} is not a function which is the only type supports hook`,\n }))\n }\n app.prototype[target] = function (...args: any) {\n entity.call(this, ...args)\n return originMethod.call(this, ...args)\n }\n}\n","import { langEvent } from '@cloudbase/utilities'\n\nexport enum LANGS {\n ZH = 'zh-CN',\n EN = 'en-US',\n}\n\nexport const LANG_HEADER_KEY = 'Accept-Language'\n\nexport const langMap = {\n [LANGS.EN]: {\n '请检查调用方式,或前往云开发 AI+ 首页查看文档':\n 'Please check the calling method or visit the AI+ homepage to view the documentation',\n 'AI+ 请求出错,错误码': 'AI+ request error, error code',\n 错误信息: 'error message',\n 未实现: 'not implemented',\n '小程序不支持 wasm 加载': 'wasm loading is not supported in mini programs',\n '小程序不支持动态 js 加载': 'dynamic js loading is not supported in mini programs',\n 请求超时: 'request timeout',\n '缺少 privatelink sdk 地址': 'missing privatelink sdk address',\n },\n}\n\nexport const t = (text: string, lang: LANGS) => langMap[lang]?.[text] || text\n\nconst getLangCacheKey = config => `lang_${config.clientId || config.env}`\n\nexport const i18nProxy = (platform, config) => {\n const cacheKey = getLangCacheKey(config)\n const { localStorage } = platform.adapter || {}\n const lang = config.lang || localStorage?.getItem?.(cacheKey) || LANGS.ZH\n localStorage?.setItem?.(cacheKey, lang)\n\n return new Proxy(\n {\n t: (text: string) => t(text, lang),\n LANG_HEADER_KEY,\n lang,\n },\n {\n get(target, prop) {\n if (prop === 'lang') {\n return localStorage?.getItem?.(cacheKey) || target[prop]\n }\n return target[prop]\n },\n set(target, prop, newValue) {\n if (prop === 'lang' && newValue !== target[prop]) {\n target[prop] = newValue\n target.t = (text: string) => t(text, newValue)\n localStorage?.setItem?.(cacheKey, newValue)\n langEvent.bus.fire(langEvent.LANG_CHANGE_EVENT, { i18n: target })\n }\n\n target[prop] = newValue\n\n return true\n },\n },\n )\n}\n","/**\n * Node.js 入口\n * 引用 base 模块的全部导出,并额外加载 Node adapter\n *\n * 注意:此文件仅通过 webpack 打包(非 tsc 直接编译),\n * webpack alias 会将 @cloudbase/app 解析到 packages/app 源码目录。\n */\n// @ts-ignore - webpack alias resolves this\nimport cloudbase from '@cloudbase/app'\n// @ts-ignore - webpack alias resolves this\nimport pkg from '@cloudbase/app/package.json'\n\ncloudbase.registerVersion(pkg.version)\n\n// Node 环境下加载 Node adapter\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const { getSdkVersion } = require('@cloudbase/app/src/constants/common')\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const nodeAdapter = require('@cloudbase/app/src/libs/adapter-node')\n\n cloudbase.useAdapters(nodeAdapter.default)\n\n // 将 node-sdk 常用的静态属性/方法挂到 cloudbase 实例上\n const cb = cloudbase as any\n cb.version = getSdkVersion()\n cb.SYMBOL_CURRENT_ENV = nodeAdapter.SYMBOL_CURRENT_ENV\n cb.SYMBOL_DEFAULT_ENV = nodeAdapter.SYMBOL_DEFAULT_ENV\n cb.parseContext = nodeAdapter.parseContext\n cb.getCloudbaseContext = nodeAdapter.getCloudbaseContext\n} catch (error) {\n // Node adapter 加载失败时静默处理\n}\n\ndeclare global {\n interface Window {\n cloudbase: any\n }\n}\ntry {\n ;(window as Window).cloudbase = cloudbase\n} catch (e) {}\n// @ts-ignore\nexport = cloudbase\nexport default cloudbase\n","import {\n SDKAdapterInterface,\n AbstractSDKRequest,\n IRequestOptions,\n ResponseObject,\n IUploadRequestOptions,\n IRequestConfig,\n IRequestMethod,\n IFetchOptions,\n} from '@cloudbase/adapter-interface'\nimport { isFormData, formatUrl, toQueryString } from '../../libs/util'\nimport { getProtocol } from '../../constants/common'\n\n/**\n * @class WebRequest\n */\nclass WebRequest extends AbstractSDKRequest {\n // 默认不限超时\n private readonly timeout: number\n // 超时提示文案\n private readonly timeoutMsg: string\n // 超时受限请求类型,默认所有请求均受限\n private readonly restrictedMethods: Array<IRequestMethod>\n constructor(config: IRequestConfig) {\n super()\n const { timeout, timeoutMsg, restrictedMethods } = config\n this.timeout = timeout || 0\n this.timeoutMsg = timeoutMsg || '请求超时'\n this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download']\n }\n public get(options: IRequestOptions): Promise<ResponseObject> {\n return this.request(\n {\n ...options,\n method: 'get',\n },\n this.restrictedMethods.includes('get'),\n )\n }\n public post(options: IRequestOptions): Promise<ResponseObject> {\n return this.request(\n {\n ...options,\n method: 'post',\n },\n this.restrictedMethods.includes('post'),\n )\n }\n public put(options: IRequestOptions): Promise<ResponseObject> {\n return this.request({\n ...options,\n method: 'put',\n })\n }\n public upload(options: IUploadRequestOptions): Promise<ResponseObject> {\n const { data, file, name, method, headers = {} } = options\n const reqMethod = { post: 'post', put: 'put' }[method?.toLowerCase()] || 'put'\n // 上传方式为post时,需转换为FormData\n const formData = new FormData()\n if (reqMethod === 'post') {\n Object.keys(data).forEach((key) => {\n formData.append(key, data[key])\n })\n formData.append('key', name)\n formData.append('file', file)\n return this.request(\n {\n ...options,\n data: formData,\n method: reqMethod,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n return this.request(\n {\n ...options,\n method: 'put',\n headers,\n body: file,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n public async download(options: IRequestOptions): Promise<any> {\n try {\n const { data } = await this.get({\n ...options,\n headers: {}, // 下载资源请求不经过service,header清空\n responseType: 'blob',\n })\n const url = window.URL.createObjectURL(new Blob([data]))\n const fileName = decodeURIComponent(new URL(options.url).pathname.split('/').pop() || '')\n const link = document.createElement('a')\n\n link.href = url\n link.setAttribute('download', fileName)\n link.style.display = 'none'\n\n document.body.appendChild(link)\n link.click()\n // 回收内存\n window.URL.revokeObjectURL(url)\n document.body.removeChild(link)\n } catch (e) {}\n return new Promise((resolve) => {\n resolve({\n statusCode: 200,\n tempFilePath: options.url,\n })\n })\n }\n async fetch(options: IFetchOptions & { shouldThrowOnError?: boolean }): Promise<ResponseObject> {\n const abortController = new AbortController()\n const { url, enableAbort = false, stream = false, signal, timeout: _timeout, shouldThrowOnError = true } = options\n\n const timeout = _timeout ?? this.timeout\n\n // FIXME(内存泄漏): { once: true } 只在 abort 事件【触发后】才解绑监听器。\n // 如果请求正常完成、从未 abort,该监听器会一直残留在外部 signal 上。\n // 当调用方复用同一长生命周期 signal 反复发请求时,监听器仍会持续累积。\n // 根治方式:在请求结束(finally)时 removeEventListener 主动解绑,\n // 而不能仅依赖 { once: true }。此处暂仅记录,不改动逻辑。\n if (signal) {\n if (signal.aborted) abortController.abort()\n signal.addEventListener('abort', () => abortController.abort())\n }\n\n let timer = null\n if (enableAbort && timeout) {\n timer = setTimeout(() => {\n console.warn(this.timeoutMsg)\n abortController.abort(new Error(this.timeoutMsg))\n }, timeout)\n }\n\n const res = await fetch(url, {\n ...options,\n signal: abortController.signal,\n })\n .then(async (response) => {\n clearTimeout(timer)\n if (shouldThrowOnError) {\n // 404 等等也会进 resolve,所以要再通过 ok 判断\n return response.ok ? response : Promise.reject(await response.json())\n }\n return response\n })\n .catch((x) => {\n clearTimeout(timer)\n // 传输级失败(网络中断、CORS 预检被拒、请求被 abort 等)时 fetch 会 reject,\n // 此时没有可解析的 Response。无论 shouldThrowOnError 取值都必须把真实错误抛出,\n // 否则 res 会变成 undefined,下方读取 res.headers 会抛出令人误解的\n // \"Cannot read properties of undefined (reading 'headers')\",掩盖真正的错误原因。\n return Promise.reject(x)\n })\n\n return {\n // eslint-disable-next-line no-nested-ternary\n data: stream ? res.body : res.headers.get('content-type')?.includes('application/json') ? res.json() : res.text(),\n statusCode: res.status,\n header: res.headers,\n // 透出原始 Response,便于上层按需 .blob() / .arrayBuffer() / 读取 body 流,避免二次包装。\n response: res,\n }\n }\n /**\n * @param {IRequestOptions} options\n * @param {boolean} enableAbort 是否超时中断请求\n */\n protected request(options: IRequestOptions, enableAbort = false): Promise<ResponseObject> {\n const method = String(options.method).toLowerCase() || 'get'\n return new Promise((resolve) => {\n const { url, headers = {}, data, responseType, withCredentials, body, onUploadProgress } = options\n const realUrl = formatUrl(getProtocol(), url, method === 'get' ? data : {})\n const ajax = new XMLHttpRequest()\n ajax.open(method, realUrl)\n responseType && (ajax.responseType = responseType)\n // 支持通过 AbortSignal 取消请求:已 abort 立即取消;否则用 { once: true }\n // 监听,触发后自动解绑,避免复用同一 AbortController 多次请求时累积监听器。\n //\n // FIXME(内存泄漏): { once: true } 只在 abort 事件【触发后】才解绑监听器。\n // 如果请求正常完成、从未 abort,该监听器会一直残留在外部 signal 上。\n // 当调用方复用同一长生命周期 signal 反复发请求时,监听器仍会持续累积。\n // 根治方式:在请求结束(readyState===4 / onloadend)时 removeEventListener\n // 主动解绑,而不能仅依赖 { once: true }。此处暂仅记录,不改动逻辑。\n const signal = (options as any).signal as AbortSignal | undefined\n if (signal) {\n if (signal.aborted) {\n ajax.abort()\n } else {\n signal.addEventListener('abort', () => ajax.abort(), { once: true })\n }\n }\n Object.keys(headers).forEach((key) => {\n ajax.setRequestHeader(key, headers[key])\n })\n let timer\n if (onUploadProgress) {\n ajax.upload.addEventListener('progress', onUploadProgress)\n }\n ajax.onreadystatechange = () => {\n const result: ResponseObject = {}\n if (ajax.readyState === 4) {\n const headers = ajax.getAllResponseHeaders()\n const arr = headers.trim().split(/[\\r\\n]+/)\n // Create a map of header names to values\n const headerMap = {}\n arr.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift().toLowerCase()\n const value = parts.join(': ')\n headerMap[header] = value\n })\n result.header = headerMap\n result.statusCode = ajax.status\n try {\n // 上传post请求返回数据格式为xml,此处容错\n result.data = responseType === 'blob' ? ajax.response : JSON.parse(ajax.responseText)\n } catch (e) {\n result.data = responseType === 'blob' ? ajax.response : ajax.responseText\n }\n clearTimeout(timer)\n resolve(result)\n }\n }\n if (enableAbort && this.timeout) {\n timer = setTimeout(() => {\n console.warn(this.timeoutMsg)\n ajax.abort()\n }, this.timeout)\n }\n // 处理 payload\n let payload\n if (isFormData(data)) {\n // FormData,不处理\n payload = data\n } else if (headers['content-type'] === 'application/x-www-form-urlencoded') {\n payload = toQueryString(data)\n } else if (body) {\n payload = body\n } else {\n // 其它情况\n payload = data ? JSON.stringify(data) : undefined\n }\n\n if (withCredentials) {\n ajax.withCredentials = true\n }\n ajax.send(payload)\n })\n }\n}\n\nfunction genAdapter() {\n const adapter: SDKAdapterInterface & { type?: 'default' | '' } = {\n type: 'default',\n root: window,\n reqClass: WebRequest,\n wsClass: WebSocket,\n localStorage,\n }\n return adapter\n}\n\nexport { genAdapter, WebRequest }\n","export const ERRORS = {\n INVALID_PARAMS: 'INVALID_PARAMS',\n INVALID_SYNTAX: 'INVALID_SYNTAX',\n INVALID_OPERATION: 'INVALID_OPERATION',\n OPERATION_FAIL: 'OPERATION_FAIL',\n NETWORK_ERROR: 'NETWORK_ERROR',\n UNKOWN_ERROR: 'UNKOWN_ERROR',\n}\n","import { printGroupLog } from '../libs/util'\nimport { IS_DEBUG_MODE } from '../constants'\n\ninterface ICatchErrorsDecoratorOptions {\n mode?: 'sync' | 'async';\n customInfo?: {\n className?: string;\n methodName?: string;\n };\n title?: string;\n messages?: string[];\n}\n// firefox的stack格式与chrome不同\nlet isFirefox = false\nif (typeof navigator !== 'undefined' && navigator.userAgent) {\n isFirefox = navigator.userAgent.indexOf('Firefox') !== -1\n}\n/**\n * decorate在stack中一般都特定的规范\n */\nconst REG_STACK_DECORATE = isFirefox\n ? /(\\.js\\/)?__decorate(\\$\\d+)?<@.*\\d$/\n : /(\\/\\w+\\.js\\.)?__decorate(\\$\\d+)?\\s*\\(.*\\)$/\nconst REG_STACK_LINK = /https?:\\/\\/.+:\\d*\\/.*\\.js:\\d+:\\d+/\n/**\n * debug模式强化日志信息\n * @param options\n */\nexport function catchErrorsDecorator(options: ICatchErrorsDecoratorOptions) {\n const { mode = 'async', customInfo = {}, title, messages = [] } = options\n\n return function (\n target: any,\n methodName: string,\n descriptor: TypedPropertyDescriptor<Function>\n ) {\n // 生产环境禁用\n if (!IS_DEBUG_MODE) {\n return\n }\n const className = customInfo.className || target.constructor.name\n const fnName = customInfo.methodName || methodName\n const fn = descriptor.value\n\n // 被decorator装饰的源码link\n // 在descriptor.value外部此处创建的stack层次可触达源码\n // 而descriptor.value内部有可能由于stack太深无法触达\n const sourceLink = getSourceLink(new Error())\n\n if (mode === 'sync') {\n descriptor.value = function (...args: any[]) {\n // 此处的stack作用主要是为了获取被decorator装饰的源码class和method名称\n const innerErr: any = getRewritedError({\n err: new Error(),\n className,\n methodName: fnName,\n sourceLink,\n })\n try {\n return fn.apply(this, args)\n } catch (err) {\n let failErr = err\n const { message: errMsg, error, error_description: errorDescription } = err\n const logs: any = {\n title: title || `${className}.${fnName} failed`,\n content: [{\n type: 'error',\n body: err,\n }],\n }\n // 只特殊处理SDK业务逻辑抛出的错误-JSON string\n if (errMsg && /^\\{.*\\}$/.test(errMsg)) {\n const msg = JSON.parse(errMsg)\n logs.subtitle = errMsg\n if (msg.code) {\n if (innerErr) {\n innerErr.code = msg.code\n innerErr.msg = msg.msg\n } else {\n err.code = msg.code\n err.message = msg.msg\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n }\n\n // oauth 错误特殊处理\n if (error && errorDescription) {\n logs.subtitle = errorDescription\n if (innerErr) {\n innerErr.code = error\n innerErr.msg = errorDescription\n } else {\n err.code = error\n err.message = errorDescription\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n printGroupLog(logs)\n throw failErr\n }\n }\n } else {\n descriptor.value = async function (...args: any[]) {\n const innerErr: any = getRewritedError({\n err: new Error(),\n className,\n methodName: fnName,\n sourceLink,\n })\n\n try {\n return await fn.apply(this, args)\n } catch (err) {\n let failErr = err\n const { message: errMsg, error, error_description: errorDescription } = err\n const logs: any = {\n title: title || `${className}.${fnName} failed`,\n content: [{\n type: 'error',\n body: err,\n }],\n }\n // 只特殊处理SDK业务逻辑抛出的错误-JSON string\n if (errMsg && /^\\{.*\\}$/.test(errMsg)) {\n const msg = JSON.parse(errMsg)\n logs.subtitle = msg\n if (msg.code) {\n if (innerErr) {\n innerErr.code = msg.code\n innerErr.message = msg.msg\n } else {\n err.code = msg.code\n err.message = msg.msg\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n }\n\n // oauth 错误特殊处理\n if (error && errorDescription) {\n logs.subtitle = errorDescription\n if (innerErr) {\n innerErr.code = error\n innerErr.msg = errorDescription\n } else {\n err.code = error\n err.message = errorDescription\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n printGroupLog(logs)\n throw failErr\n }\n }\n }\n }\n}\n\n/**\n * 在原始堆栈中查找装饰器条目并返回源码链接link\n * @param err\n */\nfunction getSourceLink(err: Error) {\n let sourceLink = ''\n const outterErrStacks = err.stack.split('\\n')\n const indexOfDecorator = outterErrStacks.findIndex(str => REG_STACK_DECORATE.test(str))\n\n if (indexOfDecorator !== -1) {\n const match = REG_STACK_LINK.exec(outterErrStacks[indexOfDecorator + 1] || '')\n\n sourceLink = match ? match[0] : ''\n }\n return sourceLink\n}\n\n/**\n * 在原始堆栈中查找装饰器条目,剔除其后的无用堆栈,并将链接替换为源码link\n * @param options\n */\nfunction getRewritedError(options: {\n err: Error;\n className: string;\n methodName: string;\n sourceLink: string;\n}) {\n const { err, className, methodName, sourceLink } = options\n // 找不到源码link返回null,后续逻辑将打印原堆栈信息\n if (!sourceLink) {\n return null\n }\n\n const innerErrStack = err.stack.split('\\n')\n const REG_STACK_INNER_METHOD = isFirefox\n ? /^catchErrorsDecorator\\/<\\/descriptor.value@.*\\d$/\n : new RegExp(`${className}\\\\.descriptor.value\\\\s*\\\\[as\\\\s${methodName}\\\\]\\\\s*\\\\(.*\\\\)$`)\n const REG_STACK_INNER_METHOD_WITHOUT_LINK = isFirefox\n ? /^catchErrorsDecorator\\/<\\/descriptor.value/\n : new RegExp(`${className}\\\\.descriptor.value\\\\s*\\\\[as\\\\s${methodName}\\\\]`)\n const indexOfSource = innerErrStack.findIndex(str => REG_STACK_INNER_METHOD.test(str))\n let innerErr: Error\n if (indexOfSource !== -1) {\n // @ts-ignore\n const realErrStack = innerErrStack.filter((v, i) => i > indexOfSource)\n realErrStack.unshift(innerErrStack[indexOfSource]\n .replace(REG_STACK_INNER_METHOD_WITHOUT_LINK, `${className}.${methodName}`)\n .replace(REG_STACK_LINK, sourceLink))\n innerErr = new Error()\n innerErr.stack = `${isFirefox ? '@debugger' : 'Error'}\\n${realErrStack.join('\\n')}`\n }\n return innerErr\n}\n","export default class AbortController {\n listeners: Array<CallableFunction> = []\n signal = {\n aborted: false,\n addEventListener: (e: string, f: CallableFunction) => {\n if (e === 'abort') {\n this.listeners.push(f)\n }\n },\n }\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor() {}\n\n abort() {\n if (this.signal.aborted) return\n\n this.signal.aborted = true\n this.listeners.forEach(f => f())\n }\n}\n","import { isString, isInstanceOf } from './util'\nimport { Listeners, ICloudbaseEventEmitter } from '@cloudbase/types/events'\n\n\n/**\n * @private\n * @function _addEventListener - 添加监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @param {Listeners} listeners - 已存响应函数集合\n */\nfunction customeAddEventListener(name: string, listener: Function, listeners: Listeners) {\n listeners[name] = listeners[name] || []\n listeners[name].push(listener)\n}\n/**\n * @private\n * @function _removeEventListener - 移除监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @param {Listeners} listeners - 已存响应函数集合\n */\nfunction customRemoveEventListener(name: string, listener: Function, listeners: Listeners) {\n if (listeners?.[name]) {\n const index = listeners[name].indexOf(listener)\n if (index !== -1) {\n listeners[name].splice(index, 1)\n }\n }\n}\ninterface IEvent {\n name: string;\n target: any;\n data: any;\n}\n/**\n * 自定义事件\n * @class CloudbaseEvent\n * @param {string} name - 类型\n * @param {any} data - 数据\n */\nexport class CloudbaseEvent implements IEvent {\n public readonly name: string\n public target: any\n public data: any\n\n constructor(name: string, data: any) {\n this.data = data || null\n this.name = name\n }\n}\n/**\n * 自定义错误事件\n * @class IErrorEvent\n * @extends CloudbaseEvent\n * @param {Error} error - 错误信息对象\n * @param {any} data - 数据\n */\nexport class IErrorEvent extends CloudbaseEvent {\n public readonly error: Error\n constructor(error: Error, data?: any) {\n super('error', { error, data })\n this.error = error\n }\n}\n\n/**\n * @class CloudbaseEventEmitter\n */\nexport class CloudbaseEventEmitter implements ICloudbaseEventEmitter {\n /**\n * @private\n * @readonly\n * @property {Listeners} listeners - 响应函数集合\n * @default `{}`\n */\n private readonly listeners: Listeners = {}\n\n /**\n * @public\n * @method on - 添加监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @return `this`\n */\n public on(name: string, listener: Function): this {\n customeAddEventListener(name, listener, this.listeners)\n return this\n }\n /**\n * @public\n * @method off - 移除监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @return `this`\n */\n public off(name: string, listener: Function): this {\n customRemoveEventListener(name, listener, this.listeners)\n return this\n }\n /**\n * @public\n * @method fire - 触发事件\n * @param {string|CloudbaseEvent} event - event\n * @return `this`\n */\n public fire(event: string | CloudbaseEvent, data?: any): this {\n // 打印错误信息\n if (isInstanceOf(event, IErrorEvent)) {\n console.error((event as IErrorEvent).error)\n return this\n }\n\n const ev: CloudbaseEvent = isString(event) ? new CloudbaseEvent(event as string, data || {}) : event as CloudbaseEvent\n\n const { name } = ev\n\n if (this.listens(name)) {\n ev.target = this\n\n const handlers = this.listeners[name] ? [...this.listeners[name]] : []\n for (const fn of handlers) {\n fn.call(this, ev)\n }\n }\n\n return this\n }\n\n /**\n * @private\n * @method listens - 判断是否监听了name事件\n * @param {string} name - event名称\n * @return `boolean`\n */\n private listens(name: string): boolean {\n return this.listeners[name] && this.listeners[name].length > 0\n }\n}\n\n\nconst eventEmitter = new CloudbaseEventEmitter()\n\nexport function addEventListener(event: string, callback: Function) {\n eventEmitter.on(event, callback)\n}\n\nexport function activateEvent(event: string, data: any = {}) {\n eventEmitter.fire(event, data)\n}\n\nexport function removeEventListener(event: string, callback: Function) {\n eventEmitter.off(event, callback)\n}\n","import { CloudbaseEventEmitter } from './events'\n\nexport const bus = new CloudbaseEventEmitter()\n\nexport const LANG_CHANGE_EVENT = 'lang_change'\n","import { KV } from '@cloudbase/types'\nimport { getSdkName } from '../constants'\n\nexport function isArray(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Array]'\n}\nexport function isString(val: any): boolean {\n return typeof val === 'string'\n}\nexport function isUndefined(val: any): boolean {\n return typeof val === 'undefined'\n}\nexport function isPalinObject(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\nexport function isNull(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Null]'\n}\nexport function isInstanceOf(instance: any, construct: any): boolean {\n return instance instanceof construct\n}\nexport function isFormData(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object FormData]'\n}\nexport function genSeqId(): string {\n return Math.random().toString(16)\n .slice(2)\n}\nexport function generateRequestId() {\n let d = new Date().getTime()\n let d2 = (Date?.now && Date.now() * 1000) || 0\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n let r = Math.random() * 16\n if (d > 0) {\n r = (d + r) % 16 | 0\n d = Math.floor(d / 16)\n } else {\n r = (d2 + r) % 16 | 0\n d2 = Math.floor(d2 / 16)\n }\n return (c === 'x' ? r : (r & 0x7) | 0x8).toString(16)\n })\n}\nexport function formatUrl(PROTOCOL: string, url: string, query: KV<any> = {}): string {\n const urlHasQuery = /\\?/.test(url)\n let queryString = ''\n Object.keys(query).forEach((key) => {\n if (queryString === '') {\n !urlHasQuery && (url += '?')\n } else {\n queryString += '&'\n }\n queryString += `${key}=${encodeURIComponent(query[key])}`\n })\n url += queryString\n if (/^http(s)?:\\/\\//.test(url)) {\n return url\n }\n return `${PROTOCOL}${url}`\n}\n\nexport function toQueryString(query: KV<any> = {}) {\n const queryString = []\n Object.keys(query).forEach((key) => {\n queryString.push(`${key}=${encodeURIComponent(query[key])}`)\n })\n return queryString.join('&')\n}\n\nexport function getQuery(name: string, url?: string) {\n if (typeof window === 'undefined') {\n return false\n }\n // 参数:变量名,url为空则表从当前页面的url中取\n const u = url || decodeURIComponent(window.location.search)\n const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`)\n const r = u.substr(u.indexOf('?') + 1).match(reg)\n return r !== null && r !== undefined ? r[2] : ''\n}\n\nexport const getHash = function (name: string) {\n if (typeof window === 'undefined') {\n return ''\n }\n const matches = window.location.hash.match(new RegExp(`[#?&/]${name}=([^&#]*)`))\n return matches ? matches[1] : ''\n}\n\nexport function removeParam(key: string, sourceURL: string) {\n let rtn = sourceURL.split('?')[0]\n let param\n let params = []\n const queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : ''\n if (queryString !== '') {\n params = queryString.split('&')\n for (let i = params.length - 1; i >= 0; i -= 1) {\n /* eslint-disable-next-line */\n param = params[i].split('=')[0]\n if (param === key) {\n params.splice(i, 1)\n }\n }\n rtn = `${rtn}?${params.join('&')}`\n }\n return rtn\n}\n\nexport function createPromiseCallback() {\n let cb: any = {}\n if (!Promise) {\n cb = () => {}\n cb.promise = {}\n\n const throwPromiseNotDefined = () => {\n throw new Error('Your Node runtime does support ES6 Promises. '\n + 'Set \"global.Promise\" to your preferred implementation of promises.',)\n }\n\n Object.defineProperty(cb.promise, 'then', { get: throwPromiseNotDefined })\n Object.defineProperty(cb.promise, 'catch', { get: throwPromiseNotDefined })\n return cb\n }\n\n const promise = new Promise((resolve, reject) => {\n cb = (err, data) => {\n if (err) return reject(err)\n return resolve(data)\n }\n })\n cb.promise = promise\n return cb\n}\n\nexport function execCallback(fn: Function | null | undefined, err: any, data = null) {\n if (fn && typeof fn === 'function') {\n return fn(err, data)\n }\n if (err) {\n throw err\n }\n return data\n}\n\nexport function printWarn(error: string, msg: string) {\n console.warn(`[${getSdkName()}][${error}]:${msg}`)\n}\n\nexport function printError(error: string, msg: string) {\n console.error({\n code: error,\n msg: `[${getSdkName()}][${error}]:${msg}`,\n })\n}\nexport function printInfo(error: string, msg: string) {\n console.log(`[${getSdkName()}][${error}]:${msg}`)\n}\nexport function throwError(error: string, msg: string) {\n throw new Error(JSON.stringify({\n code: error,\n msg: `[${getSdkName()}][${error}]:${msg}`,\n }),)\n}\n\ninterface IPrintGroupLogOptions {\n title: string\n subtitle: string | object\n content: {\n type: 'info' | 'warn' | 'error'\n body: string | Error\n }[]\n printTrace?: boolean\n collapsed?: boolean\n}\nexport function printGroupLog(options: IPrintGroupLogOptions) {\n const { title, subtitle = '', content = [], printTrace = false, collapsed = false } = options\n if (collapsed) {\n (console.groupCollapsed || console.error)(title, subtitle)\n } else {\n (console.group || console.error)(title, subtitle)\n }\n for (const tip of content) {\n const { type, body } = tip\n switch (type) {\n case 'info':\n console.log(body)\n break\n case 'warn':\n console.warn(body)\n break\n case 'error':\n console.error(body)\n break\n }\n }\n if (printTrace) {\n (console.trace || console.log)('stack trace:')\n }\n console.groupEnd?.()\n}\n\nexport const sleep = (ms = 0) => new Promise(r => setTimeout(r, ms))\n\nexport function transformPhone(phoneNumber: string) {\n return `+86${phoneNumber}`\n}\n\nexport const parseQueryString = (queryString) => {\n queryString = queryString.replace(/^\\?/, '')\n const params = {}\n const pairs = queryString.split('&')\n\n pairs.forEach((item) => {\n let [key, value] = item.split('=')\n key = decodeURIComponent(key)\n value = decodeURIComponent(value)\n if (key) {\n if (params[key]) {\n if (Array.isArray(params[key])) {\n params[key].push(value)\n } else {\n params[key] = [params[key], value]\n }\n } else {\n params[key] = value\n }\n }\n })\n\n return params\n}\n\n// 解析URL参数\nexport function parseCaptcha(url) {\n let queryObj: any = {}\n const matched = url.match(/^(data:.*?)(\\?[^#\\s]*)?$/)\n if (matched) {\n // eslint-disable-next-line prefer-destructuring\n url = matched[1]\n const search = matched[2]\n if (search) {\n queryObj = parseQueryString(search)\n }\n }\n const { token, ...restQueryObj } = queryObj\n if (/^data:/.test(url) && !token) {\n return {\n error: 'invalid_argument',\n error_description: `invalid captcha data: ${url}`,\n }\n }\n if (!token) {\n return {\n error: 'unimplemented',\n error_description: 'need to impl captcha data',\n }\n }\n // 解析url得到的参数\n return {\n state: restQueryObj.state,\n token, // 验证码token\n captchaData: url, // 验证码base64图片\n }\n}\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = require(\"@cloudbase/adapter-interface\");","module.exports = require(\"@cloudbase/adapter-wx_mp\");","module.exports = require(\"@cloudbase/signature-nodejs\");","module.exports = require(\"jsonwebtoken\");","module.exports = require(\"jwt-decode\");","module.exports = require(\"web-streams-polyfill\");","module.exports = require(\"ws\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"url\");","module.exports = require(\"util\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(788);\n"],"names":["leafPrototypes","getProto","module","exports","parallel","serial","serialOrdered","clean","key","this","jobs","state","Object","keys","forEach","bind","defer","callback","isAsync","err","result","fn","nextTick","setImmediate","process","setTimeout","async","abort","list","iterator","index","item","length","runJob","error","output","results","sortMethod","isNamedList","Array","isArray","initState","keyedList","size","sort","a","b","iterate","terminator","ascending","iteratorHandler","descending","utilities_1","require","setUtilitiesSdkName","constants","setSdkName","setUtilitiesProtocol","setProtocol","sdkVersion","sdkName","version","name","LOGINTYPE","END_POINT_INFO_ARR","END_POINT_INFO_SEARCH_KEYS","findMatchedInfo","info","find","targetInfo","filter","searchKey","every","setEndPointInfo","newInfo","protocol","test","concat","endPointInfo","baseUrl","push","__assign","_a","DEFAULT_PROTOCOL","endPointKey","_b","getEndPointInfo","env","region","intl","PROTOCOL","BASE_URL","match","component_1","adapter_1","cache_1","request_1","common_1","lang_1","common_2","enumerable","get","getBaseEndPoint","lang_2","LANGS","useAdapters","adapters","useDefaultAdapter","ERRORS","COMMUNITY_SITE_URL","printWarn","utils","catchErrorsDecorator","helpers","DEFAULT_INIT_CONFIG","timeout","persistence","MAX_TIMEOUT","extensionMap","Cloudbase","config","cloudbaseConfig","authInstance","oauthInstance","getSdkVersion","defineProperty","prototype","Platform","getCacheByEnvId","getLocalCache","getRequestByEnvId","init","endPointMode","adapter","dealNodeAdapterConfig","Error","JSON","stringify","code","INVALID_PARAMS","msg","isInitialized","reqConfig","timeoutMsg","getSdkName","auth","requestClient","reqClass","i18n","i18nProxy","lang","formatTimeout","_d","debug","oauthClient","initCache","platformInfo","platform","setRegionLevelEndpoint","setGatewayEndPointWithEnv","app","initRequest","_fromApp","fire","call","try2InitAuth","nodeTool","_c","updateConfig","updateLang","registerExtension","ext","invokeExtension","opts","invoke","sent","options","runtime","registerHook","hook","registerComponent","component","registerVersion","setSdkVersion","registerSdkName","some","p","toLowerCase","registerEndPoint","url","registerEndPointWithKey","props","registerHost","host","cleanHost","replace","baseHost","getEndPointWithKey","parseCaptcha","console","log","getSecretInfo","secretInfo","secretId","secretKey","sessionToken","secretType","accessKey","__decorate","mode","title","messages","cloudbase","getWxDefaultAdapter","SECRET_TYPE","INVALID_PARAM","message","SYS_ERR","STORAGE_REQUEST_FAIL","STORAGE_FILE_NONEXIST","TCB_CLS_UNOPEN","INVALID_CONTEXT","constants_1","utils_1","parseContext","context","ERROR","parseResult","memory_limit_in_mb","time_limit_in_ms","request_id","function_version","namespace","function_name","environ","environment","memoryLimitInMb","timeLimitIns","requestId","functionVersion","functionName","parse","parseEnviron","split","parseEnvironObj","i","includes","equalIndex","indexOf","slice","value","_err","getTcbContextConfig","TCB_CONTEXT_CNFG","getCloudbaseContext","_e","checkIsInScf","getEnv","envObj","envFromProcessEnv","TRIGGER_SRC","_SCF_TCB_LOG","SCF_NAMESPACE","TENCENTCLOUD_RUNENV","TENCENTCLOUD_SECRETID","TENCENTCLOUD_SECRETKEY","TENCENTCLOUD_SESSIONTOKEN","WX_CONTEXT_KEYS","WX_TRIGGER_API_TOKEN_V0","WX_CLIENTIP","WX_CLIENTIPV6","TCB_CONTEXT_KEYS","envFromContext","_i","contextKeys","allContext","fromEntries","entries","undefined","URL","INIT_CONFIG","_g","TCB_ENV","CLOUDBASE_APIKEY","topLevel","defaultInfo","credentials","SESSION_SECRET","SECRET","contextConfig","extendedContext","envId","tmpSecret","_f","token","adapter_interface_1","tool_1","context_1","_WS","getWS","e","request_2","NodeRequest","utils_2","parseQueryString","createWebStreamFromNodeReadableStream","E","TcbError","SYMBOL_CURRENT_ENV","SYMBOL_DEFAULT_ENV","isValidEnvFormat","isPageModuleName","filterValue","filterUndefined","processReturn","setThrowOnCode","context_2","getServerInjectUrl","wx_1","getWxCloudToken","buildAdminUrl","sendWxRequest","sendWxFormDataRequest","callWxOpenApi","callCompatibleWxOpenApi","callWxPayApi","wxCallContainerApi","getWxOptions","db","storage","Map","setItem","set","getItem","removeItem","delete","clear","genAdapter","root","globalThis","wsClass","sessionStorage","localStorage","primaryStorage","StorageType","session","captchaOptions","openURIWithCallback","_url","EventBus","queryObj","matched","search","restQueryObj","__rest","Promise","reject","error_description","resolve","$emit","$once","res","isMatch","versions","node","kMetadataVersions","isAppId","appIdStr","lookup","path","kMetadataBaseUrl","latest","controller","AbortController","timer","fetch","signal","resp","status","text","clearTimeout","metadataCache","appId","kAppIdPath","ruleName","kSecurityCredentialsPath","fs","__importStar","signFn","getSign","mod","sign","_this","getReqOptions","__awaiter","urlObj","TCB_SOURCE","source","getCurrRunEnvTag","SOURCE","apply","_o","headers","Date","valueOf","Host","withCredentials","_j","_h","Authorization","trim","pathname","startsWith","CLIENT_AUTH_PATH","isAdminPath","ADMIN_PATH","v","getClientCredential","origin","_k","_l","method","body","isNpmFormDataBody","isNpmFormData","params","__plainObj","safeParseJson","envName","_m","access_token","signedParams","withSignedParams","timestamp","Math","floor","getTime","isCloudApi","authorization","formDataInstance","existingKeys","Set","has","append","formBuffer","getBuffer","formHeaders","getHeaders","String","request","restrictedMethods","post","put","upload","data","rawFile","file","fileContent","formFields","obj2StrRecord","loweredMethod","reqMethod","m","formData","FormData","Blob","download","AbortSignal","ok","arrayBuffer","buffer","Buffer","from","tempFilePath","dir","dirname","existsSync","mkdirSync","recursive","writeFileSync","statusCode","enableAbort","stream","customReqOpts","getRealUrl","createAbortController","abortController","cleanup","headersInit2Indexable","fetchOptions","applyDuplexIfNeeded","header","response","rawHeaders","responseType","rawMethod","externalSignal","payload","isFormData","toQueryString","realUrl","formatUrl","requestOptions","_p","result_1","blob","e_2","val","grant_type","toString","aborted","addEventListener","once","warn","pipe","duplex","obj","jwtSign","getJwtSign","default","getDefaultUserInfo","openId","WX_OPENID","WX_APPID","uid","TCB_UUID","customUserId","TCB_CUSTOM_USER_ID","isAnonymous","TCB_ISANONYMOUS_USER","sendUserInfoRequest","send","_scfContext","nodeConfig","authMethods_1","getUserInfo","getEndUserInfo","defaultUserInfo","userInfo","validateUid","uuid","then","createTicket","env_id","refresh","expire","alg","iat","exp","private_key","allowInsecureKeySizes","algorithm","private_key_id","queryUserInfo","query","platformId","getClientIP","TCB_SOURCE_IP","getAuthContext","fullContext","QQ_OPENID","QQ_APPID","loginType","originalAuth_1","Proxy","target","thisArg","argArray","Reflect","_getWxOptions","serviceUrl","sendTemplateNotification","callFunction","methodName","action","NotifyId","notifyId","Data","NotifyUsers","Url","wxOpenApiOptions","getFileAuthority","fileList","type","callApis","callApiOptions","apis","apiPath","apiMethod","web_streams_polyfill_1","metadata_1","checkIsInCBR","kSumeruEnvSet","checkIsInSumeru","checkIsInTencentCloud","lookupAppId","checkCustomUserIdRegex","reduce","acc","cur","h","Headers","_","isHeaders","ret_1","cleanSearch","decodeURIComponent","asyncIterator","Symbol","ReadableStream","pull","next","done","close","enqueue","_super","__extends","errObj","o","throwOnCode","kEnvRuleReg","for","CLOUDBASE_ACCESS_TOKEN_PATH","maxCacheAge","cloudbaseAccessTokenInfo","WX_API_TOKEN","WX_CLOUDBASE_ACCESSTOKEN","wxCloudToken","wxCloudApiToken","wxCloudbaseAccesstoken","now","readFileSync","loadWxCloudbaseAccesstoken","seqNum","scfContext","TENCENTCLOUD_REGION","seqId","eventId","TCB_SEQID","genSeqId","endpoint","envEndpoint","isValidEnvDomain","defaultUrl","qs","appendWxTokenParams","tcb_sessionToken","TCB_SESSIONTOKEN","reqOpts","requestInstance","plainObj","validateCrossAccount","getCrossAccountInfo","callWxFormDataApi","wxOptions","apiName","apiOptions","cgiName","requestData","transformRequestData","responseData","apiOpts","adapter_wx_mp_1","WxRequest","self","wx","getFileSystemManager","task","_timeout","success","success_action_status","parseInt","fail","complete","errMsg","_restrictedMethods","_timeoutMsg","WxMpWebSocket","wxMpStorage","local","getAppSign","getAccountInfoSync","App","getApp","onAppHide","offAppHide","onAppShow","offAppShow","miniProgram","plugin","CloudbaseCache","cache","cacheMap","localCacheMap","userInfoKey","components","deepExtend","constructor","sourceKeys_1","hasOwnProperty","entity","injectEvents","IIFE","INVALID_OPERATION","bus","events","originCallback_1","__spreadArray","eventName","eventNames_1","name_1","bus_1","originMethod","args","arguments","EN","错误信息","未实现","请求超时","langMap","cacheKey","clientId","getLangCacheKey","ZH","t","LANG_HEADER_KEY","prop","newValue","langEvent","LANG_CHANGE_EVENT","ACTIONS_WITHOUT_ACCESSTOKEN","bindHooks","instance","hooks","appendedData","appendedHeaders","assign","originData","beforeEach","CloudbaseRequest","throwWhenRequestFail","throw","localCache","on","getAccessToken","oauth2client","getOauthAccessTokenV2","accessToken","getDefaultHeaders","validAccessToken","getCredentials","accessTokenExpire","expires_at","tcbTraceKey","contentType","tmpObj_1","dataVersion","DATA_VERSION","payload_1","onUploadProgress","traceHeader","getStore","inQuery","formatQuery","defaultQuery","url_1","newUrl","resTraceHeader","setStore","Number","err_1","restOptions","doFetch","authHeaders","error_1","err_2","authApi","refreshTokenForce","OPERATION_FAIL","gateWay","jsonData","generateRequestId","isGetAndHead","toUpperCase","dataParse_1","map","join","requestMap","app_1","__importDefault","package_json_1","nodeAdapter","cb","window","RUNTIME","Web","util_1","adapterList_1","WEB","WebRequest","createObjectURL","fileName","pop","link","document","createElement","href","setAttribute","style","display","appendChild","click","revokeObjectURL","removeChild","shouldThrowOnError","json","catch","x","getProtocol","ajax","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","arr","getAllResponseHeaders","headerMap_1","line","parts","shift","responseText","AbstractSDKRequest","WebSocket","INVALID_SYNTAX","NETWORK_ERROR","UNKOWN_ERROR","__exportStar","isFirefox","navigator","userAgent","REG_STACK_DECORATE","REG_STACK_LINK","getRewritedError","className","sourceLink","innerErr","innerErrStack","stack","REG_STACK_INNER_METHOD","RegExp","REG_STACK_INNER_METHOD_WITHOUT_LINK","indexOfSource","findIndex","str","realErrStack","unshift","customInfo","descriptor","IS_DEBUG_MODE","fnName","outterErrStacks","indexOfDecorator","exec","getSourceLink","failErr","errorDescription","logs","content","subtitle","printGroupLog","abortController_1","jwt","decode","listeners","f","TcbCacheObject","tcbCacheObject","AbstractStorage","persistenceTag","createStorage","setStoreAsync","tcb_token","getStoreAsync","removeStore","removeStoreAsync","CloudbaseEvent","IErrorEvent","CloudbaseEventEmitter","listener","customeAddEventListener","off","splice","customRemoveEventListener","event","isInstanceOf","ev","isString","listens","handlers_1","eventEmitter","events_1","construct","random","d","d2","c","r","urlHasQuery","queryString","encodeURIComponent","u","location","reg","substr","matches","hash","sourceURL","rtn","promise","throwPromiseNotDefined","printTrace","collapsed","groupCollapsed","group","content_1","tip","trace","groupEnd","ms","phoneNumber","captchaData","util","Stream","DelayedStream","CombinedStream","writable","readable","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","inherits","create","combinedStream","option","isStreamLike","isBuffer","newStream","Infinity","pauseStream","_checkDataSize","_handleErrors","pause","dest","resume","_getNext","_realGetNext","_pipeNext","end","write","_emitError","emit","_reset","destroy","_updateDataSize","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","configurable","setEncoding","release","_checkIfMaxDataSizeExceeded","http","https","parseUrl","mime","asynckit","populate","_overheadLength","_valueLength","_valuesToMeasure","LINE_BREAK","DEFAULT_CONTENT_TYPE","field","filename","_error","_multiPartHeader","footer","_multiPartFooter","_trackLength","valueLength","knownLength","byteLength","_lengthRetriever","start","stat","fileSize","contentDisposition","_getContentDisposition","_getContentType","contents","getBoundary","filepath","normalize","basename","client","_httpMessage","_lastBoundary","userHeaders","setBoundary","boundary","_boundary","_generateBoundary","dataBuffer","alloc","len","substring","getLengthSync","hasKnownLength","getLength","values","submit","defaults","port","hostname","setHeader","onResponse","responce","removeListener","dst","src","extensions","types","preference","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charset","charsets","extension","exts","to","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getPrototypeOf","__esModule","ns","def","current","getOwnPropertyNames","definition","toStringTag","__webpack_exports__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.node.js","mappings":"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","sources":["webpack://@cloudbase/js-sdk/webpack/runtime/create fake namespace object","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/index.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/abort.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/async.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/defer.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/iterate.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/state.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/lib/terminator.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/parallel.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/serial.js","webpack://@cloudbase/js-sdk/../../node_modules/asynckit/serialOrdered.js","webpack://@cloudbase/js-sdk/common.ts","webpack://@cloudbase/js-sdk/index.ts","webpack://@cloudbase/js-sdk/constants.ts","webpack://@cloudbase/js-sdk/context.ts","webpack://@cloudbase/js-sdk/metadata.ts","webpack://@cloudbase/js-sdk/request.ts","webpack://@cloudbase/js-sdk/tool.ts","webpack://@cloudbase/js-sdk/utils.ts","webpack://@cloudbase/js-sdk/wx.ts","webpack://@cloudbase/js-sdk/adapter.ts","webpack://@cloudbase/js-sdk/cache.ts","webpack://@cloudbase/js-sdk/component.ts","webpack://@cloudbase/js-sdk/lang.ts","webpack://@cloudbase/js-sdk/index.node.ts","webpack://@cloudbase/js-sdk/web.ts","webpack://@cloudbase/js-sdk/errors.ts","webpack://@cloudbase/js-sdk/decorators.ts","webpack://@cloudbase/js-sdk/abortController.ts","webpack://@cloudbase/js-sdk/events.ts","webpack://@cloudbase/js-sdk/langEvent.ts","webpack://@cloudbase/js-sdk/util.ts","webpack://@cloudbase/js-sdk/../../node_modules/combined-stream/lib/combined_stream.js","webpack://@cloudbase/js-sdk/../../node_modules/delayed-stream/lib/delayed_stream.js","webpack://@cloudbase/js-sdk/../../node_modules/form-data/lib/form_data.js","webpack://@cloudbase/js-sdk/../../node_modules/form-data/lib/populate.js","webpack://@cloudbase/js-sdk/../../node_modules/mime-db/index.js","webpack://@cloudbase/js-sdk/../../node_modules/mime-types/index.js","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/adapter-interface\",\"commonjs2\":\"@cloudbase/adapter-interface\",\"amd\":\"@cloudbase/adapter-interface\",\"root\":\"@cloudbase/adapter-interface\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/adapter-wx_mp\",\"commonjs2\":\"@cloudbase/adapter-wx_mp\",\"amd\":\"@cloudbase/adapter-wx_mp\",\"root\":\"@cloudbase/adapter-wx_mp\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"@cloudbase/signature-nodejs\",\"commonjs2\":\"@cloudbase/signature-nodejs\",\"amd\":\"@cloudbase/signature-nodejs\",\"root\":\"@cloudbase/signature-nodejs\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"jsonwebtoken\",\"commonjs2\":\"jsonwebtoken\",\"amd\":\"jsonwebtoken\",\"root\":\"jsonwebtoken\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"jwt-decode\",\"commonjs2\":\"jwt-decode\",\"amd\":\"jwt-decode\",\"root\":\"jwt-decode\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"web-streams-polyfill\",\"commonjs2\":\"web-streams-polyfill\",\"amd\":\"web-streams-polyfill\",\"root\":\"web-streams-polyfill\"}","webpack://@cloudbase/js-sdk/external commonjs2 {\"commonjs\":\"ws\",\"commonjs2\":\"ws\",\"amd\":\"ws\",\"root\":\"ws\"}","webpack://@cloudbase/js-sdk/external node-commonjs \"fs\"","webpack://@cloudbase/js-sdk/external node-commonjs \"http\"","webpack://@cloudbase/js-sdk/external node-commonjs \"https\"","webpack://@cloudbase/js-sdk/external node-commonjs \"path\"","webpack://@cloudbase/js-sdk/external node-commonjs \"stream\"","webpack://@cloudbase/js-sdk/external node-commonjs \"url\"","webpack://@cloudbase/js-sdk/external node-commonjs \"util\"","webpack://@cloudbase/js-sdk/webpack/bootstrap","webpack://@cloudbase/js-sdk/webpack/runtime/define property getters","webpack://@cloudbase/js-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@cloudbase/js-sdk/webpack/runtime/make namespace object","webpack://@cloudbase/js-sdk/webpack/startup"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","import { EndPointKey } from '@cloudbase/types'\nimport { constants } from '@cloudbase/utilities'\n\n// @ts-ignore\nconst { setSdkName: setUtilitiesSdkName, setProtocol: setUtilitiesProtocol } = constants\n/**\n * SDK\n */\nlet sdkVersion = ''\nlet sdkName = '@cloudbase/js-sdk'\n\nexport function setSdkVersion(version: string) {\n sdkVersion = version\n}\nexport function getSdkVersion() {\n return sdkVersion\n}\nexport function setSdkName(name: string) {\n sdkName = name\n setUtilitiesSdkName(name)\n}\nexport function getSdkName() {\n return sdkName\n}\nexport const DATA_VERSION = '2020-01-10'\n\ninterface EndPointInfo {\n env: string\n endPointKey: EndPointKey\n region?: string\n baseUrl?: string\n protocol?: Protocol\n}\n\ntype Protocol = 'http' | 'https' | 'http:' | 'https:'\n\n/**\n * 所有 endPoint 信息\n * 避免直接操作该数组\n * 使用 setEndPointInfo、 getEndPointInfo\n */\nconst END_POINT_INFO_ARR: Array<EndPointInfo> = []\n\n/** 用来查找 endPoint 的字段 */\nconst END_POINT_INFO_SEARCH_KEYS = ['env', 'endPointKey', 'region']\n\nexport const DEFAULT_PROTOCOL: 'http:' | 'https:' = 'https:'\n\nfunction findMatchedInfo(info: EndPointInfo) {\n // eslint-disable-next-line max-len, eqeqeq\n return END_POINT_INFO_ARR.find(targetInfo => END_POINT_INFO_SEARCH_KEYS.filter(searchKey => info[searchKey] != null).every(searchKey => targetInfo[searchKey] === info[searchKey],),)\n}\n\nexport function setEndPointInfo(newInfo: EndPointInfo) {\n if (newInfo.protocol && !/:$/.test(newInfo.protocol)) {\n newInfo.protocol = `${newInfo.protocol}:` as Protocol\n }\n\n const endPointInfo = findMatchedInfo(newInfo)\n if (endPointInfo) {\n // eslint-disable-next-line eqeqeq\n if (newInfo.baseUrl != null) {\n endPointInfo.baseUrl = newInfo.baseUrl\n }\n // eslint-disable-next-line eqeqeq\n if (newInfo.protocol != null) {\n endPointInfo.protocol = newInfo.protocol\n }\n } else {\n END_POINT_INFO_ARR.push({ ...newInfo, protocol: newInfo.protocol ?? DEFAULT_PROTOCOL })\n }\n\n // 保持旧代码逻辑\n if (newInfo.endPointKey === 'CLOUD_API') {\n setUtilitiesProtocol((newInfo.protocol ?? DEFAULT_PROTOCOL) as 'http:' | 'https:')\n }\n}\n\nexport function getEndPointInfo(env: string, endPointKey: EndPointKey, region?: string) {\n return findMatchedInfo({ env, endPointKey, region })\n}\n\nexport interface ISetEndPointWithKey {\n key: EndPointKey\n url?: string\n protocol?: 'http' | 'https'\n}\n\nexport function setGatewayEndPointWithEnv(env: string, protocol?: Protocol, intl?: boolean) {\n let baseUrl = `//${env}.api.tcloudbasegateway.com/v1`\n\n if (intl) {\n baseUrl = `//${env}.api.intl.tcloudbasegateway.com/v1`\n }\n\n setEndPointInfo({ endPointKey: 'GATEWAY', env, baseUrl, protocol })\n}\nexport function setRegionLevelEndpoint(env: string, region: string, protocol?: Protocol) {\n const baseUrl = `//${env}.${region || 'ap-shanghai'}.tcb-api.tencentcloudapi.com/web`\n setEndPointInfo({ env, region, baseUrl, protocol, endPointKey: 'CLOUD_API' })\n}\n\nexport function getBaseEndPoint(env: string, endPointKey: EndPointKey = 'CLOUD_API') {\n const info = getEndPointInfo(env, endPointKey || 'CLOUD_API')\n\n const { protocol: PROTOCOL, baseUrl: BASE_URL } = info\n const webEndpoint = `${PROTOCOL}${BASE_URL}`\n // @todo 临时兼容小程序\n return webEndpoint.match(/(http(s)?:)?\\/\\/([^/?#]*)/)[0]\n // return `${new URL(webEndpoint).origin}`\n}\n\nexport enum LOGINTYPE {\n NULL = 'NULL',\n ANONYMOUS = 'ANONYMOUS',\n WECHAT = 'WECHAT',\n WECHAT_PUBLIC = 'WECHAT-PUBLIC',\n WECHAT_OPEN = 'WECHAT-OPEN',\n CUSTOM = 'CUSTOM',\n EMAIL = 'EMAIL',\n USERNAME = 'USERNAME',\n PHONE = 'PHONE',\n}\n\nexport const OAUTH2_LOGINTYPE_PREFIX = 'OAUTH2'\n","import { adapters, constants, utils, helpers } from '@cloudbase/utilities'\nimport { SDKAdapterInterface, CloudbaseAdapter, IRequestConfig } from '@cloudbase/adapter-interface'\nimport {\n ICloudbaseConfig,\n ICloudbaseUpgradedConfig,\n ICloudbase,\n ICloudbaseExtension,\n KV,\n ICloudbasePlatformInfo,\n EndPointKey,\n ICloudbaseApis,\n} from '@cloudbase/types'\nimport { ICloudbaseAuth } from '@cloudbase/types/auth'\nimport { registerComponent, registerHook } from './libs/component'\nimport { getWxDefaultAdapter, Platform } from './libs/adapter'\nimport { ICloudbaseComponent, ICloudbaseHook } from '@cloudbase/types/component'\nimport { ICloudbaseCache } from '@cloudbase/types/cache'\nimport { initCache, getCacheByEnvId, getLocalCache } from './libs/cache'\nimport { ICloudbaseRequest } from '@cloudbase/types/request'\nimport { initRequest, getRequestByEnvId } from './libs/request'\nimport {\n getSdkName,\n setSdkVersion,\n setRegionLevelEndpoint,\n setSdkName,\n setGatewayEndPointWithEnv,\n type ISetEndPointWithKey,\n setEndPointInfo,\n getEndPointInfo,\n getSdkVersion,\n DEFAULT_PROTOCOL,\n} from './constants/common'\nimport { i18nProxy, LANGS } from './libs/lang'\nexport { getBaseEndPoint } from './constants/common'\nexport { LANGS } from './libs/lang'\nconst { useAdapters, useDefaultAdapter } = adapters\nconst { ERRORS, COMMUNITY_SITE_URL } = constants\nconst { printWarn } = utils\nconst { catchErrorsDecorator } = helpers\n\n/**\n * @constant 默认配置\n */\nconst DEFAULT_INIT_CONFIG: Partial<ICloudbaseConfig> = {\n timeout: 15000,\n persistence: 'local', // 持久化存储类型\n}\n\n// timeout上限10分钟\nconst MAX_TIMEOUT = 1000 * 60 * 10\n// timeout下限100ms\nconst MIN_TIMEOUT = 100\n\nconst extensionMap: KV<ICloudbaseExtension> = {}\n\nclass Cloudbase implements ICloudbase {\n public authInstance: ICloudbaseAuth\n public oauthInstance: any\n public requestClient: any\n public oauthClient: any\n public version: string\n public auth: ICloudbase['auth'] & ICloudbaseAuth\n public apis: ICloudbaseApis\n private cloudbaseConfig: ICloudbaseConfig\n\n constructor(config?: ICloudbaseConfig) {\n this.cloudbaseConfig = config ? config : this.cloudbaseConfig\n this.authInstance = null\n this.oauthInstance = null\n this.version = getSdkVersion()\n }\n\n get config() {\n return this.cloudbaseConfig\n }\n\n get platform(): ICloudbasePlatformInfo {\n return Platform\n }\n\n get cache(): ICloudbaseCache {\n return getCacheByEnvId(this.cloudbaseConfig.env)\n }\n\n get localCache(): ICloudbaseCache {\n return getLocalCache(this.cloudbaseConfig.env)\n }\n\n get request(): ICloudbaseRequest {\n return getRequestByEnvId(this.cloudbaseConfig.env)\n }\n\n @catchErrorsDecorator({\n mode: 'sync',\n title: 'Cloudbase 初始化失败',\n messages: [\n '请确认以下各项:',\n ' 1 - 调用 cloudbase.init() 的语法或参数是否正确',\n ' 2 - 如果是非浏览器环境,是否配置了安全应用来源(https://docs.cloudbase.net/api-reference/webv3/adapter#%E7%AC%AC-2-%E6%AD%A5%E9%85%8D%E7%BD%AE%E5%AE%89%E5%85%A8%E5%BA%94%E7%94%A8%E6%9D%A5%E6%BA%90)',\n `如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,\n ],\n })\n public init(config: ICloudbaseConfig & { lang?: LANGS } = { env: '' }): Cloudbase {\n config.endPointMode = config.endPointMode || 'GATEWAY'\n\n // 初始化时若未兼容平台,则使用默认adapter\n if (!Platform.adapter) {\n this.useDefaultAdapter()\n }\n\n // 在判断config.env之前,先处理node环境的配置\n config = this.dealNodeAdapterConfig(config)\n\n if (!config.env) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: 'env must not be specified',\n }),)\n }\n\n this.isInitialized(config)\n\n const reqConfig: IRequestConfig & { auth: ICloudbaseConfig['auth'] } = {\n timeout: config.timeout || 15000,\n timeoutMsg: `[${getSdkName()}][REQUEST TIMEOUT] request had been abort since didn't finished within${\n config.timeout / 1000\n }s`,\n auth: config.auth,\n }\n\n this.requestClient = new Platform.adapter.reqClass(reqConfig)\n\n this.cloudbaseConfig = {\n ...DEFAULT_INIT_CONFIG,\n ...config,\n i18n: i18nProxy(Platform, config),\n }\n\n delete (this.cloudbaseConfig as any).lang\n // 修正timeout取值\n this.cloudbaseConfig.timeout = this.formatTimeout(this.cloudbaseConfig.timeout)\n // 初始化cache和request\n const { env, persistence, debug, timeout, oauthClient, i18n } = this.cloudbaseConfig\n initCache({ env, persistence, debug, platformInfo: this.platform })\n\n setRegionLevelEndpoint(env, config.region || '')\n setGatewayEndPointWithEnv(env, DEFAULT_PROTOCOL, config.intl)\n\n const app = new Cloudbase(this.cloudbaseConfig)\n initRequest({\n env,\n region: config.region || '',\n timeout,\n oauthClient,\n _fromApp: app,\n i18n,\n endPointMode: config.endPointMode,\n auth: config.auth,\n })\n app.requestClient = this.requestClient\n ;(this as any)?.fire?.('cloudbase_init', app)\n\n this.try2InitAuth(app)\n\n // node环境可以从adapter获取nodeTool的方法\n if (Platform.adapter?.nodeTool) {\n Platform.adapter?.nodeTool(app, this.cloudbaseConfig)\n }\n\n return app\n }\n\n public updateConfig(config: ICloudbaseUpgradedConfig) {\n const { persistence, debug } = config\n this.cloudbaseConfig.persistence = persistence\n this.cloudbaseConfig.debug = debug\n // persistence改动影响cache\n initCache({ env: this.cloudbaseConfig.env, persistence, debug, platformInfo: this.platform })\n }\n\n public updateLang(lang: LANGS) {\n if (!lang || lang === this.cloudbaseConfig.i18n?.lang) return\n\n this.cloudbaseConfig.i18n.lang = lang\n }\n\n public registerExtension(ext: ICloudbaseExtension) {\n extensionMap[ext.name] = ext\n }\n @catchErrorsDecorator({\n title: '调用扩展能力失败',\n messages: [\n '请确认以下各项:',\n ' 1 - 调用 invokeExtension() 的语法或参数是否正确',\n ' 2 - 被调用的扩展能力是否已经安装并通过 registerExtension() 注册',\n `如果问题依然存在,建议到官方问答社区提问或寻找帮助:${COMMUNITY_SITE_URL}`,\n ],\n })\n public async invokeExtension(name: string, opts: any) {\n const ext = extensionMap[name]\n if (!ext) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: `extension:${name} must be registered before invoke`,\n }),)\n }\n\n return await ext.invoke(opts, this)\n }\n\n public useAdapters(adapters: CloudbaseAdapter | CloudbaseAdapter[], options?: any) {\n const { adapter, runtime } = useAdapters(adapters, options) || {}\n adapter && (Platform.adapter = adapter as SDKAdapterInterface)\n runtime && (Platform.runtime = runtime as string)\n }\n\n public registerHook(hook: ICloudbaseHook) {\n registerHook(Cloudbase, hook)\n }\n\n public registerComponent(component: ICloudbaseComponent) {\n registerComponent(Cloudbase, component)\n }\n\n public registerVersion(version: string) {\n setSdkVersion(version)\n this.version = version\n }\n\n public registerSdkName(name: string) {\n setSdkName(name)\n }\n\n /**\n * 检查当前 Cloudbase 实例是否已完成初始化\n *\n * @example\n * ```javascript\n * import cloudbase from '@cloudbase/js-sdk'\n *\n * // 初始化前\n * console.log(cloudbase.isInitialized()) // false\n *\n * const app = cloudbase.init({ env: 'your-env-id' })\n *\n * // 初始化后\n * console.log(app.isInitialized()) // true\n * ```\n *\n * @returns {boolean} 是否已初始化\n */\n public isInitialized(config = this.cloudbaseConfig): boolean {\n // 检测常见占位符 env 值,在开发阶段给出友好提示\n const PLACEHOLDER_PATTERNS = [\n 'your-env-id',\n 'your-envid',\n 'your_env_id',\n 'xxx-yyy',\n 'xxxx-yyy',\n 'envId',\n 'env-id',\n 'your-environment-id',\n 'REPLACE_ME',\n ]\n if (PLACEHOLDER_PATTERNS.some(p => config.env.toLowerCase() === p.toLowerCase())) {\n printWarn(\n ERRORS.INVALID_PARAMS,\n `[CloudBase] 检测到环境 ID \"${config.env}\" 可能是占位符,请替换为真实的环境 ID。\\n`\n + ' 获取方式:登录腾讯云开发平台 → 环境管理 → 环境设置 → 环境 ID\\n'\n + ' 建议通过环境变量配置:process.env.CLOUDBASE_ENV 或 import.meta.env.VITE_CLOUDBASE_ENV',\n )\n }\n\n return !!config?.env\n }\n\n /** 设置 tcb api 的 endpoint */\n public registerEndPoint(url: string, protocol?: 'http' | 'https') {\n setEndPointInfo({ baseUrl: url, protocol, env: this.config.env, endPointKey: 'CLOUD_API' })\n }\n\n /** 设置网关/tcb api的 endPoint,通过 key 指定 */\n public registerEndPointWithKey(props: ISetEndPointWithKey) {\n setEndPointInfo({\n env: this.config.env,\n endPointKey: props.key,\n baseUrl: props.url,\n protocol: props.protocol,\n })\n }\n\n /**\n * 一次性设置所有端点,只需传入 host 地址,自动拼接路径\n * @param host - 主机地址,如 \"43.144.98.4\" 或 \"//43.144.98.4\"\n * @param protocol - 协议,默认 \"http\"\n */\n public registerHost(host: string, protocol: 'http' | 'https' = 'http') {\n // 去掉可能的协议前缀和前导 //\n const cleanHost = host.replace(/^(https?:)?\\/\\//, '')\n const baseHost = `//${cleanHost}`\n // CLOUD_API 端点: /web\n setEndPointInfo({ baseUrl: `${baseHost}/web`, protocol, env: this.config.env, endPointKey: 'CLOUD_API' })\n // GATEWAY 端点: /v1\n setEndPointInfo({ baseUrl: `${baseHost}/v1`, protocol, env: this.config.env, endPointKey: 'GATEWAY' })\n }\n\n /** 拿网关/tcb api的 endPoint,通过 key 指定 */\n public getEndPointWithKey(key: EndPointKey) {\n const info = getEndPointInfo(this.config.env, key)\n return {\n BASE_URL: info.baseUrl,\n PROTOCOL: info.protocol,\n }\n }\n\n // 解析URL参数\n public parseCaptcha(url) {\n return utils.parseCaptcha(url)\n }\n\n private useDefaultAdapter() {\n const { adapter, runtime } = useDefaultAdapter.bind(this)()\n Platform.adapter = adapter as SDKAdapterInterface\n Platform.runtime = runtime as string\n }\n\n private formatTimeout(timeout: number) {\n switch (true) {\n case timeout > MAX_TIMEOUT:\n printWarn(ERRORS.INVALID_PARAMS, 'timeout is greater than maximum value[10min]')\n return MAX_TIMEOUT\n case timeout < MIN_TIMEOUT:\n printWarn(ERRORS.INVALID_PARAMS, 'timeout is less than maximum value[100ms]')\n return MIN_TIMEOUT\n default:\n return timeout\n }\n }\n\n private try2InitAuth(app) {\n try {\n app.auth()\n } catch (error) {\n console.log('try2InitAuth error:', error)\n }\n }\n\n /**\n * 处理 Node 环境下 adapter 的配置信息\n * 在 Node 环境中,通过 adapter 自动获取密钥、环境ID、accessKey 等配置,\n * 减少用户手动传入配置的负担\n * @param config - 云开发初始化配置对象\n * @returns 补充了 Node adapter 信息后的配置对象\n */\n private dealNodeAdapterConfig(config: ICloudbaseConfig) {\n // node环境可以从adapter获取默认的secretId和secretKey\n if (\n typeof process !== 'undefined'\n && typeof process.env !== 'undefined'\n && Platform.adapter?.getSecretInfo\n ) {\n const secretInfo = Platform.adapter?.getSecretInfo(config)\n // 将 adapter 提供的密钥信息写入 config.auth\n config.auth = {\n ...config.auth,\n secretId: secretInfo.secretId,\n secretKey: secretInfo.secretKey,\n sessionToken: secretInfo.sessionToken,\n secretType: secretInfo.secretType as any,\n }\n\n // node 环境可能可以从上下文获取env,用户未显式指定时自动填充\n if (!config.env) {\n config.env = secretInfo.env\n }\n\n // node adapter环境能读取到 process.env.CLOUDBASE_APIKEY 时,在没有传入accessKey时,使用 node adapter 提供的 accessKey(process.env.CLOUDBASE_APIKEY)\n if (!config.accessKey && secretInfo.accessKey) {\n config.accessKey = secretInfo.accessKey\n }\n }\n\n return config\n }\n}\n\n// 类型导出\nexport type { Cloudbase }\n\n// 值导出\nexport const cloudbase: ICloudbase = new Cloudbase()\n\nconst wxAdapter = getWxDefaultAdapter()\nif (wxAdapter) {\n cloudbase.useAdapters(wxAdapter)\n}\n\n// 默认导出实例\nexport default cloudbase\n","/* eslint-disable @typescript-eslint/naming-convention */\n/** 统一错误码定义 */\nexport const ERROR = {\n INVALID_PARAM: {\n code: 'INVALID_PARAM',\n message: 'invalid param',\n },\n SYS_ERR: {\n code: 'SYS_ERR',\n message: 'system error',\n },\n STORAGE_REQUEST_FAIL: {\n code: 'STORAGE_REQUEST_FAIL',\n message: 'storage request fail',\n },\n STORAGE_FILE_NONEXIST: {\n code: 'STORAGE_FILE_NONEXIST',\n message: 'storage file not exist',\n },\n TCB_CLS_UNOPEN: {\n code: 'TCB_CLS_UNOPEN',\n message: '需要先开通日志检索功能',\n },\n INVALID_CONTEXT: {\n code: 'INVALID_CONTEXT',\n message: '无效的context对象,请使用 云函数入口的context参数',\n },\n}\n\n/** 管理端 API 路径,用于替换 /web 路径(需要密钥签名时) */\nexport const ADMIN_PATH = '/admin'\n\n/** 管理端获取客户端凭证 access_token,为管理员权限 */\nexport const CLIENT_AUTH_PATH = '/auth/v1/token/clientCredential'\n\n/** 自定义用户 ID 校验规则:4~32 位,允许字母、数字及部分特殊字符 */\nexport const checkCustomUserIdRegex = /^[a-zA-Z0-9_\\-#@~=*(){}[\\]:.,<>+]{4,32}$/\n\nexport enum SECRET_TYPE {\n 'SECRET' = 'SECRET',\n 'SESSION_SECRET' = 'SESSION_SECRET',\n}\n","/* eslint-disable import/no-mutable-exports */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable no-restricted-syntax */\nimport { ERROR, SECRET_TYPE } from './constants'\nimport { checkIsInScf, getEnv } from './utils'\nimport type { IContextParam, ICompleteCloudbaseContext } from './types'\nimport { ICloudbaseConfig } from '@cloudbase/types'\n\n/**\n * 解析并校验云函数入口的 Context 参数\n * 将下划线命名的字段转为驼峰格式,并解析环境变量\n *\n * @param context - 云函数入口传入的 context 对象\n * @returns 解析后的上下文对象,包含 environment(新架构)或 environ(老架构)\n * @throws INVALID_CONTEXT - context 不是对象或解析失败时\n */\nexport function parseContext(context: IContextParam) {\n if (typeof context !== 'object') {\n throw { ...ERROR.INVALID_CONTEXT, message: 'context 必须为对象类型' }\n }\n\n const parseResult: any = {}\n\n const {\n memory_limit_in_mb,\n time_limit_in_ms,\n request_id,\n function_version,\n namespace,\n function_name,\n\n environ,\n environment,\n } = context\n\n try {\n parseResult.memoryLimitInMb = memory_limit_in_mb\n parseResult.timeLimitIns = time_limit_in_ms\n parseResult.requestId = request_id\n parseResult.functionVersion = function_version\n parseResult.namespace = namespace\n parseResult.functionName = function_name\n\n if (environment) {\n // 新架构:environment 为 JSON 字符串,直接解析\n parseResult.environment = JSON.parse(environment)\n } else {\n // TODO: 考虑移除老架构的兼容逻辑\n // 老架构:environ 为分号分隔的 key=value 字符串\n // 存在 bug:value 含特殊字符时可能影响解析\n const parseEnviron: any = environ?.split(';')\n const parseEnvironObj: any = {}\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const i in parseEnviron) {\n if (parseEnviron[i].includes('=')) {\n // 只按第一个 = 切割,保留 value 中的 =\n const equalIndex = parseEnviron[i].indexOf('=')\n const key = parseEnviron[i].slice(0, equalIndex)\n let value: any = parseEnviron[i].slice(equalIndex + 1)\n\n // value 含逗号时视为数组\n if (value.indexOf(',') >= 0) {\n value = value.split(',')\n }\n parseEnvironObj[key] = value\n }\n }\n\n parseResult.environ = parseEnvironObj\n }\n } catch (_err: any) {\n throw { ...ERROR.INVALID_CONTEXT }\n }\n\n return parseResult\n}\n\n/**\n * 获取当前云函数内的所有环境变量\n * 统一从 process.env 和 context 两个来源合并取值\n *\n * 取值优先级:context > process.env\n * 通过 TCB_CONTEXT_KEYS / WX_CONTEXT_KEYS 动态扩展需要读取的环境变量列表\n *\n * @param context - 可选,云函数入口的 context 参数\n * @returns 合并后的完整环境变量上下文\n */\nexport const getCloudbaseContext = (context?: IContextParam): ICompleteCloudbaseContext => {\n // 云函数环境下校验必要环境变量\n if (checkIsInScf()) {\n if (!getEnv('TENCENTCLOUD_REGION')) {\n console.error('[TCB][ERROR] missing `TENCENTCLOUD_REGION` environment')\n }\n if (!getEnv('SCF_NAMESPACE')) {\n console.error('[TCB][ERROR] missing `SCF_NAMESPACE` environment')\n }\n }\n\n // 第一步:从 process.env 读取基础环境变量\n const envObj = getEnv()\n const envFromProcessEnv: any = {\n TRIGGER_SRC: envObj.TRIGGER_SRC,\n _SCF_TCB_LOG: envObj._SCF_TCB_LOG,\n SCF_NAMESPACE: envObj.SCF_NAMESPACE,\n TENCENTCLOUD_RUNENV: envObj.TENCENTCLOUD_RUNENV,\n TENCENTCLOUD_SECRETID: envObj.TENCENTCLOUD_SECRETID,\n TENCENTCLOUD_SECRETKEY: envObj.TENCENTCLOUD_SECRETKEY,\n TENCENTCLOUD_SESSIONTOKEN: envObj.TENCENTCLOUD_SESSIONTOKEN,\n WX_CONTEXT_KEYS: envObj.WX_CONTEXT_KEYS,\n WX_TRIGGER_API_TOKEN_V0: envObj.WX_TRIGGER_API_TOKEN_V0,\n WX_CLIENTIP: envObj.WX_CLIENTIP,\n WX_CLIENTIPV6: envObj.WX_CLIENTIPV6,\n TCB_CONTEXT_KEYS: envObj.TCB_CONTEXT_KEYS,\n TCB_CONTEXT_CNFG: envObj.TCB_CONTEXT_CNFG,\n LOGINTYPE: envObj.LOGINTYPE,\n }\n\n // 第二步:从 context 中解析环境变量\n let envFromContext: any = {}\n if (context) {\n const { environment, environ } = parseContext(context)\n envFromContext = environment || environ || {}\n }\n\n // 第三步:根据 CONTEXT_KEYS 动态扩展变量列表(优先取 context 中的值)\n const tcbContextKeys = envFromContext.TCB_CONTEXT_KEYS || envObj.TCB_CONTEXT_KEYS\n const wxContextKeys = envFromContext.WX_CONTEXT_KEYS || envObj.WX_CONTEXT_KEYS\n\n // 根据 CONTEXT_KEYS 动态扩展变量列表\n for (const contextKeys of [tcbContextKeys, wxContextKeys]) {\n if (contextKeys) {\n try {\n for (const item of contextKeys.split(',')) {\n envFromProcessEnv[item] = envFromContext[item] || getEnv(item)\n }\n } catch (_e) {\n //\n }\n }\n }\n\n // 第四步:合并所有来源,context 的值覆盖 process.env,过滤 undefined\n const allContext = { ...envFromProcessEnv, ...envFromContext }\n\n return Object.fromEntries(Object.entries(allContext).filter(([, v]) => v !== undefined)) as any\n}\n\n/**\n * 获取 TCB_CONTEXT_CNFG 配置\n * 解析环境变量中约定的 JSON 配置\n */\nexport function getTcbContextConfig(): any {\n try {\n const context: any = getCloudbaseContext()\n const { TCB_CONTEXT_CNFG } = context\n if (TCB_CONTEXT_CNFG) {\n return JSON.parse(TCB_CONTEXT_CNFG)\n }\n return {}\n } catch (_e) {\n console.error('[TCB][ERROR] parse context error: ', _e)\n return {}\n }\n}\n\n/**\n * 获取服务端注入的 URL\n */\nexport function getServerInjectUrl(): string {\n const tcbContextConfig = getTcbContextConfig()\n return tcbContextConfig.URL || ''\n}\n\n/** 缓存 extendedContext,供其他模块读取(如 tool.ts 中获取 userId) */\nexport let INIT_CONFIG: ICloudbaseConfig = {} as unknown as ICloudbaseConfig\n\n/**\n * 从环境变量 / config 顶层字段 / context 中获取腾讯云密钥信息\n * 兼容 node-sdk 风格的顶层配置(secretId, secretKey, credentials, context 等)\n * 用于 API 请求签名\n */\nexport const getSecretInfo = (config?: ICloudbaseConfig) => {\n INIT_CONFIG = JSON.parse(JSON.stringify(config || INIT_CONFIG))\n\n // --- 环境变量中的密钥 ---\n const { TCB_ENV, SCF_NAMESPACE, TENCENTCLOUD_RUNENV, TENCENTCLOUD_SECRETID, TENCENTCLOUD_SECRETKEY, TENCENTCLOUD_SESSIONTOKEN, CLOUDBASE_APIKEY } = getEnv()\n const topLevel = { ...INIT_CONFIG, ...config } as any\n\n // --- env 处理 ---\n // env 可能为 symbol(SYMBOL_CURRENT_ENV / SYMBOL_DEFAULT_ENV),尝试从环境变量获取\n let env = ''\n if (typeof config?.env === 'symbol' || !config?.env) {\n env = TCB_ENV || SCF_NAMESPACE || ''\n } else {\n env = config.env as string\n }\n\n // 本地调试环境特殊处理\n if (env === 'local' && TENCENTCLOUD_RUNENV === 'WX_LOCAL_SCF') {\n env = ''\n }\n\n const defaultInfo = {\n env,\n secretId: '',\n secretKey: '',\n sessionToken: '',\n accessKey: '',\n secretType: '',\n credentials: undefined as any,\n context: undefined as any,\n }\n\n // --- 顶层 context(functions-framework 上下文) ---\n if (topLevel?.context) {\n defaultInfo.context = topLevel.context\n }\n\n // --- 顶层 credentials(私钥认证) ---\n if (topLevel?.credentials) {\n defaultInfo.credentials = topLevel.credentials\n }\n\n // --- accessKey 优先级:config.accessKey > 环境变量 ---\n if (config?.accessKey || topLevel?.accessKey) {\n defaultInfo.accessKey = config?.accessKey || topLevel?.accessKey\n return defaultInfo\n }\n\n // --- 顶层 secretId/secretKey(node-sdk 风格兼容) ---\n if (topLevel?.secretId && topLevel?.secretKey) {\n return {\n ...defaultInfo,\n secretId: topLevel.secretId,\n secretKey: topLevel.secretKey,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: topLevel.sessionToken ? SECRET_TYPE.SESSION_SECRET : SECRET_TYPE.SECRET,\n }\n }\n\n // --- config.auth 中的密钥 ---\n if (config?.auth?.secretId && config?.auth?.secretKey) {\n return {\n ...defaultInfo,\n secretId: config.auth.secretId,\n secretKey: config.auth.secretKey,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: config.auth.secretType || SECRET_TYPE.SECRET,\n }\n }\n\n if (CLOUDBASE_APIKEY) {\n return {\n ...defaultInfo,\n accessKey: CLOUDBASE_APIKEY,\n }\n }\n\n if (TENCENTCLOUD_SECRETID && TENCENTCLOUD_SECRETKEY) {\n return {\n ...defaultInfo,\n secretId: TENCENTCLOUD_SECRETID,\n secretKey: TENCENTCLOUD_SECRETKEY,\n sessionToken: TENCENTCLOUD_SESSIONTOKEN || '',\n secretType: SECRET_TYPE.SESSION_SECRET,\n }\n }\n\n // --- context.extendedContext 中的临时密钥 ---\n const contextConfig = topLevel?.context || config?.context\n if (contextConfig?.extendedContext) {\n const { extendedContext } = contextConfig\n if (!env) {\n env = extendedContext.envId || ''\n }\n\n return {\n ...defaultInfo,\n env,\n secretId: extendedContext?.tmpSecret?.secretId || '',\n secretKey: extendedContext?.tmpSecret?.secretKey || '',\n sessionToken: extendedContext?.tmpSecret?.token || '',\n }\n }\n\n return { ...defaultInfo }\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\n// 注意:改地址已经不是一定可以访问的了\nexport const kMetadataBaseUrl = 'http://metadata.tencentyun.com'\n\nexport const kAppIdPath = 'meta-data/app-id'\nexport const kSecurityCredentialsPath = 'meta-data/cam/security-credentials'\n\nexport enum kMetadataVersions {\n 'v20170919' = '2017-09-19',\n 'v1.0' = '1.0',\n 'latest' = 'latest',\n}\n\nexport function isAppId(appIdStr: string) {\n return /^[1-9][0-9]{4,64}$/gim.test(appIdStr)\n}\n\nexport async function lookup(path: string, options: { timeout?: number } = {}): Promise<string> {\n const url = `${kMetadataBaseUrl}/${kMetadataVersions.latest}/${path}`\n\n const controller = new AbortController()\n let timer: ReturnType<typeof setTimeout> | undefined\n if (options.timeout) {\n timer = setTimeout(() => controller.abort(), options.timeout)\n }\n\n try {\n const resp = await fetch(url, { signal: controller.signal })\n if (resp.status === 200) {\n return await resp.text()\n }\n throw new Error(`[ERROR] GET ${url} status: ${resp.status}`)\n } finally {\n if (timer) clearTimeout(timer)\n }\n}\n\nconst metadataCache: { appId: string | undefined } = {\n appId: undefined,\n}\n/**\n * lookupAppId - 该方法主要用于判断是否在云上环境\n * @returns\n */\nexport async function lookupAppId(): Promise<string> {\n if (metadataCache.appId === undefined) {\n try {\n // 只有首次会请求且要求快速返回,超时时间很短,DNS无法解析将会超时返回\n // 在云环境中,这个时间通常在 10ms 内,部分耗时长(30+ms)的情况是 DNS 解析耗时长(27+ms)\n const appId = await lookup(kAppIdPath, { timeout: 30 })\n if (isAppId(appId)) {\n metadataCache.appId = appId\n } else {\n metadataCache.appId = ''\n }\n } catch (_e) {\n // ignore\n }\n }\n return metadataCache.appId || ''\n}\n\nexport async function lookupCredentials(ruleName: string): Promise<string> {\n // `${kMetadataBaseUrl}/meta-data/cam/security-credentials/TCB_QcsRole`\n // 这里设置了一个较短的超时时间,因为这个请求是在云环境中发起的,通常会很快返回\n return await lookup(`${kSecurityCredentialsPath}/${ruleName}`, {\n timeout: 200,\n })\n}\n","/* eslint-disable no-nested-ternary */\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport {\n IFetchOptions,\n IRequestConfig,\n IRequestMethod,\n IRequestOptions,\n ResponseObject,\n SDKRequestInterface,\n formatUrl,\n} from '@cloudbase/adapter-interface'\nimport { ADMIN_PATH, CLIENT_AUTH_PATH } from './constants'\nimport { getCloudbaseContext, getSecretInfo, INIT_CONFIG } from './context'\nimport type { ICustomReqOpts } from './types'\nimport {\n getEnv,\n isFormData,\n toQueryString,\n safeParseJson,\n obj2StrRecord,\n headersInit2Indexable,\n getCurrRunEnvTag,\n} from './utils'\nimport { ICloudbaseConfig } from '@cloudbase/types'\nimport { getSdkVersion } from '../../constants/common'\n// 延迟加载,避免非 Node 环境打包时引入此包\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet signFn: ((...args: any[]) => any) | null = null\nasync function getSign() {\n if (!signFn) {\n try {\n // @ts-ignore — 该包仅在 Node 运行时存在,开发环境可能未安装\n const mod = await import('@cloudbase/signature-nodejs')\n signFn = mod.sign\n } catch (e) {\n console.error('缺少依赖 @cloudbase/signature-nodejs,请执行以下命令安装:\\n\\n'\n + ' npm install @cloudbase/signature-nodejs\\n\\n'\n + '该依赖用于 Node 环境下的请求签名。')\n }\n }\n return signFn!\n}\n\n/**\n * Node.js 环境下的 HTTP 请求实现\n * 基于原生 fetch,支持 GET/POST/PUT/上传/下载/流式请求\n * 自动处理 V3 签名和 Bearer Token 认证\n */\nexport class NodeRequest implements SDKRequestInterface {\n /** 请求配置,包含认证信息 */\n config: IRequestConfig & ICloudbaseConfig\n\n /** 请求超时时间(毫秒),默认 15000 */\n private readonly timeout: number\n\n /** 受超时控制的请求类型列表 */\n private readonly restrictedMethods: Array<IRequestMethod>\n\n constructor(config: IRequestConfig & ICloudbaseConfig) {\n const { timeout, restrictedMethods } = config\n this.timeout = timeout || 15000\n this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download']\n this.config = config\n }\n\n /**\n * 获取客户端凭证 access_token,为管理员权限\n * 用于不支持 V3 签名的接口(如数据模型、关系型数据库、AI)\n */\n async getClientCredential(opts: { origin: string }): Promise<any> {\n const res = await this.fetch({\n url: `${opts.origin}${CLIENT_AUTH_PATH}`,\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n grant_type: 'client_credentials',\n }),\n })\n\n return res.data?.access_token\n }\n\n /**\n * 获取实际请求 URL\n * 当请求未携带 Authorization 且未自带 access_token 时,\n * 将 /web 路径替换为 /admin(管理端签名路径)\n */\n getRealUrl(url: string, headers: Record<string, any>, body: any) {\n if (headers.Authorization?.replace('Bearer', '')?.trim()) {\n return url\n }\n\n const params = typeof body === 'object' ? body : safeParseJson(body) || ''\n\n if (params.access_token) {\n return url\n }\n\n const urlObj = new URL(url)\n\n if (urlObj.pathname === '/web' && this.config.auth?.secretId && this.config.auth?.secretKey) {\n urlObj.pathname = ADMIN_PATH\n }\n return urlObj.toString()\n }\n\n public getReqOptions = async (\n url: string,\n options: {\n method?: any\n headers: any\n body?: any\n credentials?: string\n withCredentials?: boolean\n signal?: AbortSignal\n url?: any\n },\n ) => {\n const urlObj = new URL(url)\n\n const { TCB_SOURCE } = getCloudbaseContext()\n // Note: 云函数被调用时可能调用端未传递 SOURCE,TCB_SOURCE 可能为空\n const SOURCE = `${INIT_CONFIG.context?.extendedContext?.source || TCB_SOURCE || ''},${await getCurrRunEnvTag()}`\n\n options.headers = {\n ...options.headers,\n 'User-Agent': `adapter-node/${options.headers?.['X-SDK-Version'] || `@cloudbase/js-sdk/${getSdkVersion()}`}`,\n 'X-TCB-Source': SOURCE,\n 'X-Client-Timestamp': new Date().valueOf(),\n 'X-TCB-Region': INIT_CONFIG.region || getEnv('TENCENTCLOUD_REGION') || '',\n Host: urlObj.host,\n }\n\n // 调用方显式声明 withCredentials: false 时,表示这是一次匿名请求\n // (如 Storage 签名直传 / 公开下载,仅凭 token 或 Bucket public 属性鉴权)。\n // 此场景下不应注入登录态或 V3 管理签名,否则会与 token 鉴权冲突,造成「二次签名」。\n if (options.withCredentials === false) {\n return options\n }\n\n // 已携带有效 Authorization,直接返回\n if (options.headers.Authorization?.replace('Bearer', '')?.trim()) {\n return options\n }\n\n // auth 相关接口不需要签名\n if (urlObj.pathname.startsWith('/auth/') && urlObj.pathname !== CLIENT_AUTH_PATH) {\n return options\n }\n\n const isAdminPath = urlObj.pathname === ADMIN_PATH\n\n // 这些路径不支持 V3 签名,改用 clientCredential 获取 Bearer Token\n const UNSUPPORTED_V3_SIGN_PATH = ['/v1/model/', '/v1/rdb/', '/v1/ai/']\n\n if (UNSUPPORTED_V3_SIGN_PATH.some(v => urlObj.pathname.startsWith(v))) {\n const token = await this.getClientCredential({ origin: urlObj.origin })\n options.headers.Authorization = `Bearer ${token}`\n return options\n }\n\n let { secretId, secretKey, sessionToken } = this.config?.auth || {}\n const { secretType } = this.config?.auth || {}\n const { method, body } = options\n const headers = JSON.parse(JSON.stringify(options.headers))\n\n // ========== 处理 npm form-data 包实例 ==========\n // npm form-data 实例(来自 node-sdk 的 sendWxFormDataRequest):\n // - 通过 __plainObj 挂载了签名用的纯对象\n // - 签名时使用 plain object 的 key-value(multipart 签名方式)\n // - 发送时使用 form-data 的 getBuffer()(multipart/form-data 格式)\n const isNpmFormDataBody = this.isNpmFormData(body)\n let params: any\n\n if (isNpmFormDataBody) {\n // 从 form-data 实例上取签名用的纯对象\n params = body.__plainObj ? { ...body.__plainObj } : {}\n } else {\n params = typeof body === 'object' ? body : safeParseJson(body) || {}\n }\n\n params.envName = params?.env || this.config.env || getSecretInfo()?.env || ''\n\n // 参数自带 access_token,无需签名\n if (params.access_token) {\n return options\n }\n\n // GET 请求参数已在 URL 中,签名时 params 置空\n if (method.toLowerCase() === 'get') {\n params = undefined\n }\n\n // SESSION_SECRET 类型或无密钥时,从环境变量获取临时密钥\n if (!secretId || !secretKey || secretType === 'SESSION_SECRET') {\n const secretInfo = getSecretInfo()\n secretId = secretInfo.secretId\n secretKey = secretInfo.secretKey\n sessionToken = secretInfo.sessionToken\n }\n\n // 仍无密钥则跳过签名\n if (!secretId || !secretKey) {\n return options\n }\n\n delete headers.Authorization\n\n // content-type 需与服务端签名验证保持大小写一致\n if (headers['content-type']) {\n headers['content-type'] = headers['content-type'].toLowerCase()\n } else if (headers['Content-Type']) {\n headers['Content-Type'] = headers['Content-Type'].toLowerCase()\n }\n\n if (isAdminPath && !!sessionToken) {\n params.sessionToken = sessionToken\n }\n\n const signedParams = {\n secretId,\n secretKey,\n method,\n url,\n params,\n headers,\n withSignedParams: isAdminPath,\n timestamp: Math.floor(new Date().getTime() / 1000) - 1,\n isCloudApi: !isAdminPath,\n }\n\n if (!headers['content-type'] && !headers['Content-Type']) {\n return options\n }\n\n const sign = await getSign()\n if (!sign) return options\n\n const { authorization, timestamp } = sign(signedParams)\n\n if (typeof sessionToken === 'string' && sessionToken !== '') {\n if (isAdminPath) {\n headers.Authorization = `${authorization}`\n headers['X-Timestamp'] = timestamp\n headers['X-Signature-Expires'] = 600\n } else {\n // 临时密钥需要额外附带 Token\n headers.Authorization = `${authorization}, Timestamp=${timestamp}, Token=${sessionToken}`\n }\n } else {\n headers.Authorization = `${authorization}, Timestamp=${timestamp}`\n\n // admin 路径需要额外的时间戳和过期头\n if (isAdminPath) {\n headers['X-Timestamp'] = timestamp\n headers['X-Signature-Expires'] = 600\n }\n }\n\n // ========== 构建返回的 body ==========\n if (isNpmFormDataBody) {\n // npm form-data: 签名完成后,需要将 envName/sessionToken 等签名时追加的字段\n // 也同步追加到 form-data 实例中(因为服务端需要从 form-data body 中读取这些字段)\n // 然后用 form-data 的 getBuffer() 作为实际发送的 body\n const formDataInstance = body\n const existingKeys = new Set(Object.keys(formDataInstance.__plainObj || {}))\n\n // 把签名过程中追加的字段同步到 form-data 实例(仅追加之前不存在的)\n if (params.envName && !existingKeys.has('envName')) {\n formDataInstance.append('envName', params.envName)\n }\n if (params.sessionToken && !existingKeys.has('sessionToken')) {\n formDataInstance.append('sessionToken', params.sessionToken)\n }\n\n const formBuffer = formDataInstance.getBuffer()\n const formHeaders = formDataInstance.getHeaders()\n\n return {\n ...options,\n headers: {\n ...headers,\n ...formHeaders,\n 'content-length': String(formBuffer.length),\n },\n body: formBuffer,\n }\n }\n\n return {\n ...options,\n headers,\n body: typeof params === 'object' ? JSON.stringify(params) : params,\n }\n }\n\n public get = (options: IRequestOptions): Promise<ResponseObject> => this.request(\n {\n ...options,\n method: 'get',\n },\n this.restrictedMethods.includes('get'),\n )\n\n public post = (options: IRequestOptions): Promise<ResponseObject> => this.request(\n {\n ...options,\n method: 'post',\n },\n this.restrictedMethods.includes('post'),\n )\n\n public put = (options: IRequestOptions): Promise<ResponseObject> => this.request({\n ...options,\n method: 'put',\n })\n\n /**\n * 文件上传\n * POST 方式:构建 FormData 上传\n * PUT 方式:直接将文件作为 body 上传\n */\n public upload = (options: IRequestOptions): Promise<ResponseObject> => {\n const { data, file: rawFile, fileContent, name, method, headers = {} } = options as any\n // 优先使用 file(filePath),没有则回退到 fileContent(Buffer)\n const file = rawFile ?? fileContent\n if (file === undefined || name === undefined) {\n throw new Error('file and name is required')\n }\n const formFields = obj2StrRecord(data ?? {})\n const loweredMethod = method?.toLowerCase()\n const reqMethod = ['post', 'put'].find(m => m === loweredMethod) ?? 'put'\n const formData = new FormData()\n if (reqMethod === 'post') {\n Object.keys(formFields).forEach((key) => {\n formData.append(key, formFields[key])\n })\n formData.append('key', name)\n formData.append('file', file instanceof Blob ? file : new Blob([file]))\n return this.request(\n {\n ...options,\n data: formData,\n method: reqMethod,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n\n return this.request(\n {\n ...options,\n method: 'put',\n headers,\n body: file,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n\n /** 文件下载(Node.js 环境,通过 fetch 获取文件内容并写入本地文件或返回 Buffer) */\n public download = async (options: IRequestOptions): Promise<unknown> => {\n const res = await fetch(options.url!, {\n headers: {},\n signal: AbortSignal.timeout(this.timeout),\n })\n\n if (!res.ok) {\n throw new Error(`Download failed with status ${res.status}`)\n }\n\n const arrayBuffer = await res.arrayBuffer()\n const buffer = Buffer.from(arrayBuffer)\n\n // 如果指定了 tempFilePath,将文件写入本地\n const { tempFilePath } = options\n if (tempFilePath) {\n // 确保目录存在\n const dir = path.dirname(tempFilePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(tempFilePath, buffer)\n return {\n statusCode: 200,\n tempFilePath,\n }\n }\n\n // 未指定路径时返回 Buffer\n return {\n statusCode: 200,\n tempFilePath: options.url,\n fileContent: buffer,\n }\n }\n\n /**\n * 底层 fetch 请求,支持流式响应\n * 超时通过 AbortController + setTimeout 实现\n */\n public fetch = async (options: Omit<IFetchOptions, 'signal'> & { signal?: AbortSignal; customReqOpts?: ICustomReqOpts }): Promise<ResponseObject> => {\n const { enableAbort = false, stream = false, signal, customReqOpts } = options\n const url = this.getRealUrl(options.url, options.headers || {}, options.body)\n const timeout = customReqOpts?.timeout || this.timeout\n const [abortController, cleanup] = this.createAbortController(timeout, enableAbort, signal)\n\n const headers = options.headers ? headersInit2Indexable(options.headers) : undefined\n\n const fetchOptions = await this.getReqOptions(url, {\n ...options,\n headers,\n body: options.body as any as NodeJS.ReadableStream,\n signal: abortController.signal,\n })\n\n this.applyDuplexIfNeeded(fetchOptions)\n\n try {\n const res = await fetch(url, fetchOptions as RequestInit)\n let data: any\n if (+res.status === 204) {\n data = ''\n } else if (stream) {\n data = res.body\n } else {\n // safeParseJson 避免当错误响应体非 JSON(如网关返回纯文本/HTML)时抛异常,\n // 从而保留 statusCode 供上层(如 exists() 判 400/404)使用。\n data = safeParseJson(await res.text())\n }\n return {\n data,\n statusCode: res.status,\n header: res.headers,\n // 透出原始 Response,便于上层按需 .blob() / .arrayBuffer() / 读取 body 流,避免二次包装。\n response: res,\n }\n } finally {\n cleanup()\n }\n }\n\n /**\n * 通用请求方法,被 get/post/put/upload 等调用\n * 负责构建 payload、设置超时、解析响应\n *\n * @param options - 请求选项\n * @param enableAbort - 是否启用超时中断(由 restrictedMethods 决定)\n */\n public request = async (options: IRequestOptions, enableAbort = false): Promise<ResponseObject> => {\n const {\n url,\n headers: rawHeaders = {},\n data,\n responseType,\n withCredentials,\n body,\n method: rawMethod,\n customReqOpts,\n } = options\n const headers = obj2StrRecord(rawHeaders)\n const method = String(rawMethod).toLowerCase() || 'get'\n const timeout = customReqOpts?.timeout || this.timeout\n // 桥接外部 signal 到内部 AbortController,支持调用方取消请求\n const externalSignal = (options as { signal?: AbortSignal }).signal\n const [abortController, cleanup] = this.createAbortController(timeout, enableAbort, externalSignal)\n\n // 构建请求 payload:FormData > urlencoded > raw body > JSON\n let payload\n if (isFormData(data)) {\n payload = data\n } else if (headers['content-type'] === 'application/x-www-form-urlencoded') {\n payload = toQueryString(data ?? {})\n } else if (body) {\n payload = body\n } else {\n payload = data ? JSON.stringify(data) : undefined\n }\n\n const realUrl = this.getRealUrl(\n formatUrl('https', url ?? '', method === 'get' ? data : {}),\n options.headers || {},\n payload,\n )\n\n const requestOptions = await this.getReqOptions(realUrl, {\n method,\n headers,\n body: payload,\n credentials: withCredentials ? 'include' : 'same-origin',\n signal: abortController.signal,\n })\n\n this.applyDuplexIfNeeded(requestOptions)\n\n try {\n const response = await fetch(realUrl, requestOptions as RequestInit)\n const result: ResponseObject = {\n header: {},\n statusCode: response.status,\n }\n\n try {\n if (responseType === 'blob') {\n result.data = await response.blob()\n } else if ((responseType as string) === 'buffer') {\n // 返回 Buffer(兼容旧版 node-sdk 二进制响应格式)\n result.data = Buffer.from(await response.arrayBuffer())\n } else {\n result.data = safeParseJson(await response.text())\n }\n } catch (e) {\n // 上传 POST 请求可能返回 XML 等非 JSON 格式,容错处理\n console.log('catch an error', e)\n if (responseType === 'blob') {\n result.data = await response.blob()\n } else if ((responseType as string) === 'buffer') {\n result.data = Buffer.from(await response.arrayBuffer())\n } else {\n result.data = await response.text()\n }\n }\n\n // 将响应头统一转为小写 key\n const { headers } = response\n headers.forEach((val, key) => (result.header[key.toLowerCase()] = val))\n\n return result\n } finally {\n cleanup()\n }\n }\n\n /**\n * 创建带超时的 AbortController\n * @returns [abortController, cleanup] — cleanup 用于清除定时器\n */\n private createAbortController(\n timeout: number,\n enableAbort: boolean,\n externalSignal?: AbortSignal,\n ): [AbortController, () => void] {\n const controller = new AbortController()\n\n // 桥接外部 signal。用 { once: true } 避免调用方复用同一长生命周期\n // AbortController 多次发请求时累积监听器(轻微泄漏)。\n if (externalSignal) {\n if (externalSignal.aborted) {\n controller.abort()\n } else {\n externalSignal.addEventListener('abort', () => controller.abort(), { once: true })\n }\n }\n\n let timer: ReturnType<typeof setTimeout> | undefined\n if (enableAbort || timeout) {\n timer = setTimeout(() => {\n const timeoutMsg = `请求在${timeout / 1000}s内未完成,已中断`\n console.warn(timeoutMsg)\n controller.abort(new Error(timeoutMsg))\n }, timeout)\n }\n\n return [controller, () => clearTimeout(timer)]\n }\n\n /** Node 18+ 原生 fetch 在 body 为 stream 时要求 duplex: 'half' */\n private applyDuplexIfNeeded(options: any): void {\n if (options.body && typeof options.body?.pipe === 'function') {\n options.duplex = 'half'\n }\n }\n\n /**\n * 判断是否为 npm form-data 包的实例(具有 getHeaders / getBuffer 方法)\n * 区别于全局 FormData(Web API)\n */\n private isNpmFormData(obj: any): boolean {\n return obj && typeof obj === 'object'\n && typeof obj.getHeaders === 'function'\n && typeof obj.getBuffer === 'function'\n }\n}\n","import { ERROR } from './constants'\nimport { getCloudbaseContext, parseContext, getServerInjectUrl } from './context'\nimport { validateUid, E } from './utils'\nimport {\n callWxOpenApi,\n callCompatibleWxOpenApi,\n callWxPayApi,\n wxCallContainerApi,\n getWxOptions,\n type ISendWxRequestOptions,\n} from './wx'\nimport type {\n ICreateTicketOpts,\n IGetUserInfoResult,\n IGetEndUserInfoResult,\n IUserInfoQuery,\n ITemplateNotifyReq,\n ICustomReqOpts,\n ICompleteCloudbaseContext,\n} from './types'\nimport { ICloudbaseConfig } from '@cloudbase/types'\n\n// 延迟加载 jsonwebtoken,避免非 Node 环境打包时引入此包\nlet jwtSign: ((...args: any[]) => any) | null = null\nasync function getJwtSign() {\n if (!jwtSign) {\n try {\n // @ts-ignore — 该包仅在 Node 运行时存在,开发环境可能未安装\n const mod = await import('jsonwebtoken')\n jwtSign = mod.default?.sign || mod.sign\n } catch (e) {\n console.error('缺少依赖 jsonwebtoken,请执行以下命令安装:\\n\\n'\n + ' npm install jsonwebtoken\\n\\n'\n + '该依赖用于 Node 环境下的自定义登录票据生成。')\n }\n }\n return jwtSign!\n}\n\n// ========== 辅助函数 ==========\n\n/**\n * 从云函数运行时上下文中获取当前请求的用户信息\n */\nfunction getDefaultUserInfo(): IGetUserInfoResult {\n const { WX_OPENID, WX_APPID, TCB_UUID, TCB_CUSTOM_USER_ID, TCB_ISANONYMOUS_USER } = getCloudbaseContext()\n\n return {\n openId: WX_OPENID || '',\n appId: WX_APPID || '',\n uid: TCB_UUID || '',\n customUserId: TCB_CUSTOM_USER_ID || '',\n isAnonymous: TCB_ISANONYMOUS_USER === 'true',\n }\n}\n\n/**\n * 调用后端管理接口查询用户信息\n */\nfunction sendUserInfoRequest(app: any, params: Record<string, any>): Promise<any> {\n return app?.request?.send?.('auth.getUserInfoForAdmin', params, {\n pathname: 'web',\n endPointMode: 'CLOUD_API',\n })\n}\n\n// ========== scfContext 存储(静态) ==========\n\nlet _scfContext: any = null\n\n// ========== nodeTool 主函数 ==========\n\n/**\n * 初始化 Node 端全部能力,直接挂载到 js-sdk app 实例上\n * 包含:auth 扩展方法、微信 API、文件操作增强、callFunction/callContainer 增强、\n * 模板消息推送、context 解析等\n *\n * @param app - js-sdk cloudbase 实例(init 返回值)\n * @param config - 配置信息\n */\nexport const nodeTool = (app: any, config: ICloudbaseConfig) => {\n const nodeConfig = config as any\n\n // ========== parseContext / getCloudbaseContext ==========\n\n app.parseContext = (context: any) => {\n const parseResult = parseContext(context)\n _scfContext = parseResult\n return parseResult\n }\n\n app.getCloudbaseContext = (context?: any): ICompleteCloudbaseContext => getCloudbaseContext(context)\n\n // ========== auth 扩展 ==========\n\n if (app.auth) {\n const authMethods: Record<string, any> = {\n /** 获取当前请求的用户信息(从环境变量读取,同步) */\n getUserInfo(): IGetUserInfoResult {\n return getDefaultUserInfo()\n },\n\n /**\n * 获取终端用户信息\n * 不传 uid 时返回当前请求用户信息,传 uid 时查询指定用户\n */\n async getEndUserInfo(uid?: string): Promise<IGetEndUserInfoResult> {\n const defaultUserInfo = getDefaultUserInfo()\n\n if (uid === undefined) {\n return { userInfo: defaultUserInfo }\n }\n validateUid(uid)\n\n return sendUserInfoRequest(app, {\n uuid: uid,\n envName: config.env,\n }).then((result: any) => {\n if (result.code) {\n return result\n }\n return {\n userInfo: { ...defaultUserInfo, ...result.data },\n requestId: result.requestId,\n }\n })\n },\n\n /**\n * 创建自定义登录 Ticket\n */\n async createTicket(uid: string, options: ICreateTicketOpts = {}): Promise<string> {\n validateUid(uid)\n\n const timestamp = new Date().getTime()\n const { credentials } = config.auth || {}\n const { env } = config\n\n if (!env) {\n throw { ...ERROR.INVALID_PARAM, message: 'no env in config' }\n }\n\n if (!credentials?.env_id) {\n throw {\n ...ERROR.INVALID_PARAM,\n message: '当前私钥未包含env_id 信息, 请前往腾讯云云开发控制台,获取自定义登录最新私钥',\n }\n }\n\n if (credentials.env_id !== env) {\n throw {\n ...ERROR.INVALID_PARAM,\n message: '当前私钥所属环境与 init 指定环境不一致!',\n }\n }\n\n const {\n refresh = 3600 * 1000,\n expire = timestamp + 7 * 24 * 60 * 60 * 1000,\n } = options\n const sign = await getJwtSign()\n const token = sign(\n {\n alg: 'RS256',\n env,\n iat: timestamp,\n exp: timestamp + 10 * 60 * 1000,\n uid,\n refresh,\n expire,\n },\n credentials.private_key,\n {\n allowInsecureKeySizes: true,\n algorithm: 'RS256',\n },\n )\n\n return `${credentials.private_key_id}/@@/${token}`\n },\n\n /**\n * 按条件查询用户信息(管理端接口)\n */\n async queryUserInfo(query: IUserInfoQuery): Promise<any> {\n const { uid, platform, platformId } = query\n return sendUserInfoRequest(app, {\n uuid: uid,\n platform,\n platformId,\n envName: config.env,\n }).then((result: any) => {\n if (result.code) {\n return result\n }\n return {\n userInfo: { ...result.data },\n requestId: result.requestId,\n }\n })\n },\n\n /** 获取客户端 IP 地址 */\n getClientIP(): string {\n const { TCB_SOURCE_IP } = getCloudbaseContext()\n return TCB_SOURCE_IP || ''\n },\n\n /** 获取 Auth Context(从运行环境中解析) */\n getAuthContext(context?: any) {\n const fullContext = getCloudbaseContext(context) as any\n const { TCB_UUID, LOGINTYPE, QQ_OPENID, QQ_APPID } = fullContext\n const result: any = {\n uid: TCB_UUID,\n loginType: LOGINTYPE,\n }\n if (LOGINTYPE === 'QQ-MINI') {\n result.appId = QQ_APPID\n result.openId = QQ_OPENID\n }\n return result\n },\n\n /** 获取客户端凭证 */\n async getClientCredential(opts?: ICustomReqOpts) {\n if (nodeConfig.accessKey || config.accessKey) {\n return nodeConfig.accessKey || config.accessKey\n }\n\n const origin = app.request.getBaseEndPoint('GATEWAY')\n const clientAuthPath = '/auth/v1/token/clientCredential'\n\n const res = await app.request.post(\n {\n url: `${origin}${clientAuthPath}`,\n data: { grant_type: 'client_credentials' },\n headers: { 'content-type': 'application/json' },\n },\n opts ? { timeout: opts.timeout } : undefined\n )\n\n return res.data\n },\n }\n\n /**\n * 挂载 auth 扩展方法\n *\n * app.auth 是一个 Proxy 包装的函数对象:\n * - 作为属性访问 app.auth.xxx 时,访问的是这个函数对象本身\n * - 作为函数调用 app.auth() 时,返回的是内部缓存的 authInstance(纯 Auth 实例)\n *\n * 两者是不同的对象,所以需要:\n * 1. 在 app.auth(函数对象)上挂载方法 —— 支持 app.auth.getUserInfo()\n * 2. 用 Proxy 包装 app.auth,在每次调用 app.auth() 时,把方法也同步到返回的 authInstance 上\n * —— 支持 const auth = app.auth(); auth.getUserInfo()\n */\n const originalAuth = app.auth\n\n // 先在 app.auth 函数对象本身上挂载方法\n Object.keys(authMethods).forEach((key) => {\n originalAuth[key] = authMethods[key]\n })\n\n // 用 Proxy 拦截函数调用,确保 app.auth() 返回的实例也带有这些方法\n app.auth = new Proxy(originalAuth, {\n apply(target: any, thisArg: any, argArray: any[]) {\n const authInstance = Reflect.apply(target, thisArg, argArray)\n // 将扩展方法同步到 authInstance 上(如果还没有的话)\n if (authInstance && typeof authInstance === 'object') {\n Object.keys(authMethods).forEach((key) => {\n if (!(key in authInstance)) {\n authInstance[key] = authMethods[key]\n }\n })\n }\n return authInstance\n },\n })\n }\n\n // ========== sendTemplateNotification ==========\n\n app.sendTemplateNotification = (params: ITemplateNotifyReq, opts?: { timeout?: number }) => app?.callFunction?.(\n {\n name: 'lowcode-datasource',\n data: {\n methodName: 'callWedaApi',\n params: {\n action: 'PushNotifyMsg',\n data: {\n NotifyId: params.notifyId,\n Data: JSON.stringify(params.data),\n NotifyUsers: undefined,\n Url: params.url,\n },\n },\n mode: 'c',\n },\n },\n undefined,\n opts,\n )\n\n // ========== 微信 API ==========\n\n function _getWxOptions(): ISendWxRequestOptions {\n const serviceUrl = nodeConfig.serviceUrl || getServerInjectUrl() || undefined\n return getWxOptions(nodeConfig, _scfContext, serviceUrl || '', app.request)\n }\n\n app.callWxOpenApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callWxOpenApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.callWxPayApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callWxPayApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.wxCallContainerApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => wxCallContainerApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n app.callCompatibleWxOpenApi = (wxOpenApiOptions: any, opts?: ICustomReqOpts) => callCompatibleWxOpenApi(_getWxOptions(), wxOpenApiOptions, opts)\n\n // ========== getFileAuthority ==========\n\n app.getFileAuthority = async ({ fileList }: { fileList: Array<{ type: string; path: string }> }, opts?: ICustomReqOpts) => {\n const { LOGINTYPE } = getCloudbaseContext()\n if (!Array.isArray(fileList)) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] getCosFileAuthority fileList must be a array',\n })\n }\n\n if (\n fileList.some((file) => {\n if (!file?.path) return true\n if (!['READ', 'WRITE', 'READWRITE'].includes(file.type)) return true\n return false\n })\n ) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] getCosFileAuthority fileList param error',\n })\n }\n\n const { userInfo } = await app.auth.getEndUserInfo()\n const { openId, uid } = userInfo\n\n if (!openId && !uid) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: '[js-sdk] admin do not need getCosFileAuthority.',\n })\n }\n\n const params = {\n openId,\n uid,\n loginType: LOGINTYPE,\n fileList,\n }\n\n const res = await app.request.send(\n 'storage.getFileAuthority',\n params,\n { pathname: 'web', endPointMode: 'GATEWAY' },\n opts ? { timeout: opts.timeout } : undefined\n )\n\n if (res.code) {\n throw E({ ...res, message: `[js-sdk] getCosFileAuthority failed: ${res.code}` })\n } else {\n return res\n }\n }\n\n // ========== callApis ==========\n\n app.callApis = async (callApiOptions: any, opts?: ICustomReqOpts) => {\n if (app.apis) {\n const { name, path: apiPath = '', method = 'POST', header = {}, body, token } = callApiOptions\n const apiMethod = (method || 'POST').toLowerCase()\n return app.apis[name]?.[apiMethod]?.({\n path: apiPath,\n method,\n headers: header,\n body,\n token,\n }, opts)\n }\n throw new Error('callApis is not supported in current configuration')\n }\n}\n","import { utils } from '@cloudbase/utilities'\nimport { ReadableStream } from 'web-streams-polyfill'\nimport { ERROR, checkCustomUserIdRegex } from './constants'\nimport { lookupAppId } from './metadata'\n\n/** 从 @cloudbase/utilities 中提取的表单和查询字符串工具 */\nexport const { isFormData, toQueryString } = utils as {\n isFormData: (obj: unknown) => boolean\n toQueryString: (data: Record<string, any>) => string\n}\n\n/**\n * 跨端安全获取环境变量\n * Web 端、小游戏端等没有 process 全局对象,直接访问 process.env 会报错\n */\nexport function getEnv(): Record<string, string | undefined>\nexport function getEnv(key: string): string | undefined\nexport function getEnv(key?: string): string | undefined | Record<string, string | undefined> {\n if (typeof process === 'undefined' || !process.env) {\n return key !== undefined ? undefined : {}\n }\n return key !== undefined ? process.env[key] : process.env\n}\n\n/** 判断当前是否在 SCF(云函数)运行环境中 */\nexport const checkIsInScf = () => getEnv('TENCENTCLOUD_RUNENV') === 'SCF'\n\nexport function checkIsInCBR() {\n // CBR = CLOUDBASE_RUN\n return !!getEnv('CBR_ENV_ID')\n}\n\nconst kSumeruEnvSet = new Set(['formal', 'pre', 'test'])\nexport function checkIsInSumeru() {\n // SUMERU_ENV=formal | test | pre\n return kSumeruEnvSet.has(getEnv('SUMERU_ENV') || '')\n}\n\nexport async function checkIsInTencentCloud(): Promise<boolean> {\n if (getEnv('TENCENTCLOUD') === 'true') {\n return true\n }\n const appId = await lookupAppId()\n return typeof appId === 'string' && appId !== ''\n}\n\nexport const getCurrRunEnvTag = async (): Promise<string> => {\n if (checkIsInScf()) {\n return 'scf'\n } if (checkIsInCBR()) {\n return 'cbr'\n } if (checkIsInSumeru()) {\n return 'sumeru'\n } if (await checkIsInTencentCloud()) {\n return 'tencentcloud'\n }\n return 'unknown'\n}\n\n/**\n * 校验自定义用户 ID 格式\n * @throws 格式不合法时抛出 INVALID_PARAM 错误\n */\nexport const validateUid = (uid: string): void => {\n if (typeof uid !== 'string') {\n throw { ...ERROR.INVALID_PARAM, message: 'uid must be a string' }\n }\n if (!checkCustomUserIdRegex.test(uid)) {\n throw { ...ERROR.INVALID_PARAM, message: `Invalid uid: \"${uid}\"` }\n }\n}\n\n/**\n * 安全的 JSON 解析,解析失败时返回原始文本而非抛异常\n * @param text - 待解析的字符串\n * @returns 解析后的对象,空字符串返回 null,解析失败返回原始文本\n */\nexport function safeParseJson(text: string): any {\n if (!text || !text.trim()) {\n return null\n }\n try {\n return JSON.parse(text)\n } catch (e) {\n console.warn('catch an error', { e, text })\n return text\n }\n}\n\n/**\n * 将对象的所有值转为字符串类型\n * 用于将 headers 等对象统一为 Record<string, string>\n */\nexport function obj2StrRecord(obj: object): Record<string, string> {\n return Object.entries(obj).reduce<Record<string, string>>((acc, cur: [string, unknown]) => {\n const [key, value] = cur\n acc[key] = String(value)\n return acc\n }, {})\n}\n\n/**\n * 将 HeadersInit 转为可索引的普通对象\n * 兼容 Headers 实例和普通对象两种形式\n */\nexport function headersInit2Indexable(h: HeadersInit) {\n if (isHeaders(h)) {\n const ret: Record<string, string> = {}\n h.forEach((val, key) => {\n ret[key] = val\n })\n return ret\n }\n return h\n\n function isHeaders(h: HeadersInit): h is Headers {\n try {\n // Node 低版本可能没有全局 Headers\n return h instanceof Headers\n } catch (_) {\n return false\n }\n }\n}\n\n/**\n * 手动解析查询字符串,避免 URLSearchParams 的兼容性问题\n * 支持重复 key 自动转为数组\n * @param search - 查询字符串,可带前导 ? 或 #\n */\nexport function parseQueryString(search: string): Record<string, string | string[]> {\n const params: any = {}\n const cleanSearch = search.replace(/^[?#]/, '')\n\n if (!cleanSearch) {\n return params\n }\n\n const pairs = cleanSearch.split('&')\n\n pairs.forEach((item) => {\n let [key, value] = item.split('=')\n key = decodeURIComponent(key)\n value = decodeURIComponent(value || '')\n if (key) {\n if (params[key]) {\n // 已存在同名 key,转为数组\n if (Array.isArray(params[key])) {\n params[key].push(value)\n } else {\n params[key] = [params[key], value]\n }\n } else {\n params[key] = value\n }\n }\n })\n return params\n}\n\n/**\n * 将 Node ReadableStream 转换为 Web ReadableStream (polyfill)\n * 用于 fetch 流式响应在 Node 环境下的适配\n */\nexport function createWebStreamFromNodeReadableStream(stream: NodeJS.ReadableStream): ReadableStream {\n const asyncIterator = stream[Symbol.asyncIterator]()\n\n return new ReadableStream({\n async pull(controller) {\n const next = await asyncIterator.next()\n\n if (next.done) {\n controller.close()\n } else {\n controller.enqueue(next.value)\n }\n },\n })\n}\n\n// ========== 从 node-sdk utils/utils.ts 整合的工具函数 ==========\n\ninterface IErrorInfo {\n requestId?: string\n code?: string\n message?: string\n}\n\nexport class TcbError extends Error {\n public readonly code: string\n public readonly message: string\n public readonly requestId: string\n\n public constructor(error: IErrorInfo) {\n super(error.message)\n this.code = error.code || ''\n this.message = error.message || ''\n this.requestId = error.requestId || ''\n }\n}\n\n/** 创建 TcbError 实例的快捷方法 */\nexport function E(errObj: IErrorInfo) {\n return new TcbError(errObj)\n}\n\nexport function filterValue(o: any, value: any) {\n for (const key in o) {\n if (o[key] === value) {\n /* eslint-disable-next-line @typescript-eslint/no-dynamic-delete */\n delete o[key]\n }\n }\n}\n\nexport function filterUndefined(o: any) {\n filterValue(o, undefined)\n}\n\n// 兼容模式开关,兼容模式下,不抛出异常,直接返回\nlet throwOnCode = true\n\nexport function setThrowOnCode(value: boolean) {\n throwOnCode = value\n}\n\nexport function processReturn(result: any) {\n if (!throwOnCode) {\n return result\n }\n throw E({ ...result })\n}\n\n/**\n * 是否是场景模块名\n * $: 前缀,表示SaaS场景模块名,非实际环境ID\n */\nexport function isPageModuleName(envId = '') {\n return typeof envId === 'string' && envId.startsWith('$:')\n}\n\n// 20 + 1 + 16, 限制长度 40\nconst kEnvRuleReg = /^[a-z0-9_-]{1,40}$/\n\nexport function isValidEnvFormat(env = '') {\n return typeof env === 'string' && kEnvRuleReg.test(env)\n}\n\n// ========== 从 node-sdk const/symbol.ts 整合的常量 ==========\n\nexport const SYMBOL_CURRENT_ENV = Symbol.for('SYMBOL_CURRENT_ENV') // 当前环境\nexport const SYMBOL_DEFAULT_ENV = Symbol.for('SYMBOL_DEFAULT_ENV') // 默认环境\n","/**\n * 微信云开发相关请求辅助函数\n * 从 node-sdk 中提取,整合到 adapter-node 统一管理\n */\nimport * as fs from 'fs'\nimport { getCloudbaseContext } from './context'\nimport type { ICustomReqOpts } from './types'\n\n// ========== 微信业务函数(从 node-sdk wx/index.ts 整合) ==========\n\nimport { E } from './utils'\nimport { ERROR } from './constants'\n\n// ========== 微信 Token 辅助函数 ==========\n\nconst CLOUDBASE_ACCESS_TOKEN_PATH = '/.tencentcloudbase/wx/cloudbase_access_token'\nconst maxCacheAge = 10 * 60 * 1000\nconst cloudbaseAccessTokenInfo = { token: '', timestamp: 0 }\n\nfunction loadWxCloudbaseAccesstoken(): string {\n if (cloudbaseAccessTokenInfo.token && Date.now() - cloudbaseAccessTokenInfo.timestamp < maxCacheAge) {\n return cloudbaseAccessTokenInfo.token\n }\n\n try {\n if (process.env.TENCENTCLOUD_RUNENV === 'WX_LOCAL_SCF' || process.env.TENCENTCLOUD_RUNENV === 'SCF') {\n if (fs.existsSync(CLOUDBASE_ACCESS_TOKEN_PATH)) {\n cloudbaseAccessTokenInfo.token = fs.readFileSync(CLOUDBASE_ACCESS_TOKEN_PATH).toString()\n cloudbaseAccessTokenInfo.timestamp = Date.now()\n return cloudbaseAccessTokenInfo.token\n }\n }\n } catch (e) {\n console.warn('[TCB][ERROR]: loadWxCloudbaseAccesstoken error: ', e)\n }\n\n return ''\n}\n\nexport function getWxCloudToken(): { wxCloudApiToken: string; wxCloudbaseAccesstoken?: string } {\n const context: any = getCloudbaseContext()\n const { TRIGGER_SRC, WX_TRIGGER_API_TOKEN_V0, WX_API_TOKEN, WX_CLOUDBASE_ACCESSTOKEN = '' } = context\n\n const wxCloudToken: any = {}\n\n if (TRIGGER_SRC === 'timer') {\n wxCloudToken.wxCloudApiToken = WX_TRIGGER_API_TOKEN_V0 || WX_API_TOKEN || ''\n } else {\n wxCloudToken.wxCloudApiToken = WX_API_TOKEN || ''\n }\n\n if (!wxCloudToken.wxCloudApiToken) {\n wxCloudToken.wxCloudbaseAccesstoken = WX_CLOUDBASE_ACCESSTOKEN || loadWxCloudbaseAccesstoken()\n }\n\n return wxCloudToken\n}\n\n// ========== buildAdminUrl 辅助函数 ==========\n\n/** 判断 envId 是否可用作域名前缀(比通用格式校验更严格) */\nfunction isValidEnvDomain(envId: string): boolean {\n return /^[a-z][a-z0-9-]*[a-z0-9]$/.test(envId)\n}\n\nlet seqNum = 0\nfunction genSeqId(): string {\n seqNum += 1\n const eventId = `${Date.now().toString(16)}_${(seqNum).toString(16)}`\n const context: any = getCloudbaseContext()\n const { TCB_SEQID = '' } = context\n return TCB_SEQID ? `${TCB_SEQID}-${eventId}` : eventId\n}\n\n/**\n * 构建 /admin 路径的完整 URL\n * @param config - cloudbase 配置\n * @param scfContext - 云函数 context(含 requestId)\n * @param serviceUrl - 自定义服务端 URL(覆盖默认值)\n */\nexport function buildAdminUrl(config: any, scfContext?: any, serviceUrl?: string): string {\n const envId: string = typeof config.env === 'symbol'\n ? (process.env.TCB_ENV || process.env.SCF_NAMESPACE || '')\n : (config.env || '')\n const region = config.region || process.env.TENCENTCLOUD_REGION || ''\n const seqId = genSeqId()\n\n const endpoint = region\n ? `${region}.tcb-api.tencentcloudapi.com`\n : 'tcb-api.tencentcloudapi.com'\n const envEndpoint = isValidEnvDomain(envId) ? `${envId}.${endpoint}` : endpoint\n\n const protocol = 'https'\n const path = '/admin'\n const defaultUrl = `${protocol}://${envEndpoint}${path}`\n\n const url = serviceUrl || defaultUrl\n\n const qs = scfContext\n ? `env=${envId}&seqId=${seqId}&scfRequestId=${scfContext.requestId}`\n : `env=${envId}&seqId=${seqId}`\n\n return url.includes('?') ? `${url}${qs}` : `${url}?${qs}`\n}\n\n// ========== 微信请求函数 ==========\n\n/**\n * 为微信请求 params 补充 token 和 sessionToken 公共字段\n */\nfunction appendWxTokenParams(params: any): void {\n const context: any = getCloudbaseContext()\n const { wxCloudApiToken, wxCloudbaseAccesstoken } = getWxCloudToken()\n params.wxCloudApiToken = wxCloudApiToken\n if (wxCloudbaseAccesstoken) {\n params.wxCloudbaseAccesstoken = wxCloudbaseAccesstoken\n }\n params.tcb_sessionToken = context.TCB_SESSIONTOKEN || ''\n}\n\nexport interface ISendWxRequestOptions {\n /** app.request 实例(NodeRequest),需具有 post 和 send 方法 */\n requestInstance: any\n /** cloudbase 配置 */\n config: any\n /** 云函数入口 scfContext(含 requestId) */\n scfContext?: any\n /** 自定义服务端 URL */\n serviceUrl?: string\n}\n\n/**\n * 使用 JSON 格式发送 wx 请求(用于 callWxOpenApi)\n * @param options - 请求实例和配置\n * @param action - 请求动作(如 'wx.api')\n * @param params - 请求参数\n * @param reqOpts - 自定义请求选项(如 timeout)\n */\nexport async function sendWxRequest(\n options: ISendWxRequestOptions,\n action: string,\n params: any,\n reqOpts?: ICustomReqOpts\n) {\n appendWxTokenParams(params)\n\n return options.requestInstance.send(\n action,\n params,\n { pathname: 'web', endPointMode: 'GATEWAY' },\n reqOpts ? { timeout: reqOpts.timeout } : undefined\n )\n}\n\n/**\n * 使用 multipart/form-data 格式发送 wx 请求(用于 callCompatibleWxOpenApi / callWxPayApi / wxCallContainerApi)\n * 自动处理 form-data 构建、签名和发送\n * 与旧版 SDK 的请求格式(multipart/form-data + /admin 路径)完全一致\n *\n * @param options - 请求实例和配置\n * @param action - 请求动作(如 'wx.openApi'、'wx.wxPayApi'、'wx.wxCallContainerApi')\n * @param params - 请求参数\n * @param reqOpts - 自定义请求选项(如 timeout)\n */\nexport async function sendWxFormDataRequest(\n options: ISendWxRequestOptions,\n action: string,\n params: any,\n reqOpts?: ICustomReqOpts\n): Promise<any> {\n appendWxTokenParams(params)\n\n // 延迟加载 form-data 包\n let FormData: any\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n FormData = require('form-data')\n } catch (e) {\n throw new Error('缺少依赖 form-data,请执行 npm install form-data')\n }\n\n // 使用 form-data 包构建 FormData(兼容 Node.js < 18 的云函数环境)\n const formData = new FormData()\n formData.append('action', action)\n for (const key of Object.keys(params)) {\n if (params[key] !== undefined) {\n formData.append(key, params[key])\n }\n }\n\n // 构建签名用的纯对象(getReqOptions 用它做 multipart 签名)\n const plainObj: any = { action, ...params }\n ;(formData as any).__plainObj = plainObj\n\n // 构建 admin URL\n const url = buildAdminUrl(options.config, options.scfContext, options.serviceUrl)\n\n // 通过 request.post 发送(responseType 为 buffer 以兼容旧版二进制响应格式)\n const res = await options.requestInstance.post(\n {\n url,\n body: formData,\n headers: formData.getHeaders(),\n responseType: 'buffer',\n },\n reqOpts ? { timeout: reqOpts.timeout } : undefined\n )\n\n // 返回 response data\n if (res.data) {\n return res.data\n }\n return res\n}\n\n/**\n * 校验跨帐号调用配置\n */\nfunction validateCrossAccount(config: any, opts: any = {}): void {\n const getCrossAccountInfo = opts.getCrossAccountInfo || config.getCrossAccountInfo\n if (getCrossAccountInfo) {\n throw E({\n ...ERROR.INVALID_PARAM,\n message: 'invalid config: getCrossAccountInfo',\n })\n }\n}\n\n/**\n * 获取微信请求所需的 wxOptions 参数\n * @param config - cloudbase 配置\n * @param scfContext - 云函数 context\n * @param serviceUrl - 服务端注入 URL\n * @param requestInstance - request 实例\n */\nexport function getWxOptions(config: any, scfContext: any, serviceUrl: string, requestInstance: any): ISendWxRequestOptions {\n return { requestInstance, config, scfContext, serviceUrl }\n}\n\n/**\n * callWxOpenApi - 调用微信开放接口(JSON 格式)\n */\nexport async function callWxOpenApi(\n wxOptions: ISendWxRequestOptions,\n { apiName, apiOptions, cgiName, requestData }: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) {\n let transformRequestData: any\n try {\n transformRequestData = requestData ? JSON.stringify(requestData) : ''\n } catch (e: any) {\n throw E({ ...e, code: ERROR.INVALID_PARAM.code, message: '对象出现了循环引用' })\n }\n\n validateCrossAccount(wxOptions.config, opts)\n\n const params: any = {\n apiName,\n apiOptions,\n cgiName,\n requestData: transformRequestData,\n }\n\n const res = await sendWxRequest(wxOptions, 'wx.api', params, opts)\n\n if (res.code) {\n return res\n }\n\n let result: any\n try {\n result = JSON.parse(res.responseData)\n } catch (e) {\n result = res.responseData\n }\n return {\n result,\n requestId: res.requestId,\n }\n}\n\n/**\n * 通用的 form-data 格式微信 API 调用(内部复用)\n * callCompatibleWxOpenApi / callWxPayApi / wxCallContainerApi 均委托此函数\n */\nasync function callWxFormDataApi(\n action: string,\n wxOptions: ISendWxRequestOptions,\n { apiName, apiOptions, cgiName, requestData }: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) {\n validateCrossAccount(wxOptions.config, opts)\n return sendWxFormDataRequest(wxOptions, action, { apiName, apiOptions, cgiName, requestData }, opts)\n}\n\n/** callCompatibleWxOpenApi - 调用兼容的微信开放接口(form-data 格式) */\nexport const callCompatibleWxOpenApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.openApi', wxOptions, apiOpts, opts)\n\n/** callWxPayApi - 调用微信支付接口(form-data 格式) */\nexport const callWxPayApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.wxPayApi', wxOptions, apiOpts, opts)\n\n/** wxCallContainerApi - 调用微信云托管容器接口(form-data 格式) */\nexport const wxCallContainerApi = (\n wxOptions: ISendWxRequestOptions,\n apiOpts: { apiName: string; apiOptions?: any; cgiName?: string; requestData: any },\n opts?: ICustomReqOpts\n) => callWxFormDataApi('wx.wxCallContainerApi', wxOptions, apiOpts, opts)\n","import { ICloudbasePlatformInfo } from '@cloudbase/types'\nimport adapterForWxMp, { WxRequest, WxMpWebSocket, wxMpStorage, parseQueryString } from '@cloudbase/adapter-wx_mp'\nimport { IUploadRequestOptions, StorageType } from '@cloudbase/adapter-interface'\n\ndeclare const wx: any\ndeclare const App: any\ndeclare const getApp: any\n\nexport const Platform: ICloudbasePlatformInfo = {}\n\nexport const getWxDefaultAdapter = () => {\n // Node.js ESM 环境下 @cloudbase/adapter-wx_mp 的 named exports 不可用\n // WxRequest 会是 undefined,此时直接返回 null(Node 有自己的 adapter-node)\n if (typeof WxRequest === 'undefined') {\n return null\n }\n\n WxRequest.prototype.upload = function (options: IUploadRequestOptions) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this\n return new Promise((resolve) => {\n const { url, file, data, headers } = options\n const fs = wx.getFileSystemManager() // 读取文件 二进制内容\n const task = wx.request({\n url,\n method: options.method,\n header: {\n 'content-type': ' ', // 小程序 content-type 默认为 application/json, 这里一定要强制为 空, 否则签名错误\n ...headers,\n },\n data: fs.readFileSync(file), // 将二进制文件转为字符串直接赋值到 request payload, 不要以 form 的方式传输\n timeout: this._timeout,\n success(res: { statusCode: number; data: unknown }) {\n const result = {\n statusCode: res.statusCode,\n data: res.data || {},\n }\n if (res.statusCode === 200 && data?.success_action_status) {\n result.statusCode = parseInt(data.success_action_status, 10)\n }\n resolve(result)\n },\n fail(err: unknown) {\n resolve(err)\n },\n complete(err: { errMsg: string }) {\n if (!err?.errMsg) {\n return\n }\n if (!self._timeout || self._restrictedMethods.indexOf('upload') === -1) {\n return\n }\n const { errMsg } = err\n if (errMsg === 'request:fail timeout') {\n console.warn(self._timeoutMsg)\n try {\n task.abort()\n } catch (e) {}\n }\n },\n })\n })\n }\n\n function isPlugin() {\n return (\n typeof App === 'undefined'\n && typeof getApp === 'undefined'\n && !wx.onAppHide\n && !wx.offAppHide\n && !wx.onAppShow\n && !wx.offAppShow\n )\n }\n adapterForWxMp.genAdapter = function genAdapter(options) {\n const adapter = {\n root: { globalThis: {} },\n reqClass: WxRequest,\n wsClass: WxMpWebSocket,\n captchaOptions: {\n openURIWithCallback: (_url: string) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { EventBus } = options\n let queryObj: Record<string, string> = {}\n let url = _url\n console.log('openURIWithCallback', _url)\n const matched = _url.match(/^(data:.*?)(\\?[^#\\s]*)?$/)\n if (matched) {\n // eslint-disable-next-line prefer-destructuring\n url = matched[1]\n console.log('openURIWithCallback url', url)\n const search = matched[2]\n if (search) {\n queryObj = parseQueryString(search)\n }\n }\n console.log('openURIWithCallback queryObj', queryObj)\n const { token, ...restQueryObj } = queryObj\n if (/^data:/.test(url) && !token) {\n // 如果是 data: 开头的 URL 且没有 token,则直接返回\n return Promise.reject({\n error: 'invalid_argument',\n error_description: `invalie captcha data: ${_url}`,\n })\n }\n if (!token) {\n return Promise.reject({\n error: 'unimplemented',\n error_description: 'need to impl captcha data',\n })\n }\n return new Promise((resolve) => {\n console.log('wait for captcha...')\n EventBus.$emit('CAPTCHA_DATA_CHANGE', { ...restQueryObj, token, url })\n\n // 监听事件总线,等待验证码数据变化\n EventBus.$once('RESOLVE_CAPTCHA_DATA', (res: { captcha_token: string; expires_in: number }) => {\n resolve(res)\n })\n })\n },\n },\n localStorage: wxMpStorage,\n primaryStorage: StorageType.local,\n getAppSign() {\n const info = wx.getAccountInfoSync()\n if (isPlugin()) {\n // 插件环境返回插件appid\n return info && info.plugin ? info.plugin.appId : ''\n }\n return info && info.miniProgram ? info.miniProgram.appId : ''\n },\n }\n return adapter\n }\n\n return adapterForWxMp\n}\n","import { KV } from '@cloudbase/types'\nimport { cache } from '@cloudbase/utilities'\nimport { ICloudbaseCache, ICacheConfig } from '@cloudbase/types/cache'\n\nconst USER_INFO_KEY = 'user_info'\n\nconst { CloudbaseCache } = cache\n\nconst cacheMap: KV<ICloudbaseCache> = {}\n// 本地存储\nconst localCacheMap: KV<ICloudbaseCache> = {}\n\nexport function initCache(config: ICacheConfig & { env: string }) {\n const { env, platformInfo } = config\n\n const userInfoKey = `${USER_INFO_KEY}_${env}`\n\n const keys = {\n userInfoKey,\n }\n // 若指定env已存在cache则尝试更新persistence\n cacheMap[env] = cacheMap[env] || (new CloudbaseCache({\n ...config,\n keys,\n platformInfo,\n }))\n localCacheMap[env] = localCacheMap[env] || new CloudbaseCache({\n ...config,\n keys,\n platformInfo,\n persistence: 'local',\n })\n}\n\nexport function getCacheByEnvId(env: string): ICloudbaseCache {\n return cacheMap[env]\n}\n\nexport function getLocalCache(env: string): ICloudbaseCache {\n return localCacheMap[env]\n}\n","import { KV } from '@cloudbase/types'\nimport { ICloudbaseComponent, ICloudbaseHook } from '@cloudbase/types/component'\nimport { constants } from '@cloudbase/utilities'\n\nconst { ERRORS } = constants\n\nconst components: KV<ICloudbaseComponent> = {}\n\nexport function registerComponent(app: any, component: ICloudbaseComponent) {\n const { name, namespace, entity, injectEvents, IIFE = false } = component\n // 不允许重复注册或命名空间重名\n if (components[name] || (namespace && app[namespace])) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `Duplicate component ${name}`,\n }))\n }\n // IIFE类型的组件以app为scope执行entity函数,不挂载到app.prototype上\n if (IIFE) {\n if (!entity || typeof entity !== 'function') {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_PARAMS,\n msg: 'IIFE component\\'s entity must be a function',\n }))\n }\n entity.call(app)\n }\n\n components[name] = component\n\n if (namespace) {\n (app as any).prototype[namespace] = entity\n } else {\n deepExtend((app as any).prototype, entity)\n }\n if (injectEvents) {\n const { bus, events } = injectEvents\n if (!bus || !events || events.length === 0) {\n return\n }\n const originCallback = (app as any).prototype.fire || function () {}\n if (!(app as any).prototype.events) {\n (app as any).prototype.events = {}\n }\n const originEvents: KV<any> = (app as any).prototype.events || {}\n if (originEvents[name]) {\n (app as any).prototype.events[name].events = [...(app as any).prototype.events[name].events, ...events]\n } else {\n (app as any).prototype.events[name] = { bus, events }\n }\n (app as any).prototype.fire = function (eventName: string, data?: any) {\n originCallback(eventName, data)\n const eventNames = Object.keys(this.events)\n for (const name of eventNames) {\n const { bus, events: eventList } = this.events[name]\n if (eventList.includes(eventName)) {\n bus.fire(eventName, data)\n break\n }\n }\n }\n }\n}\n\nfunction deepExtend(target: any, source: any): KV<any> {\n if (!(source instanceof Object)) {\n return source\n }\n\n switch (source.constructor) {\n case Date: {\n const dateValue = source as Date\n return new Date(dateValue.getTime())\n }\n case Object:\n if (target === undefined) {\n target = {}\n }\n break\n case Array:\n target = []\n break\n default:\n return source\n }\n const sourceKeys = Object.keys(source)\n for (const key of sourceKeys) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue\n }\n target[key] = deepExtend(target[key], source[key])\n }\n\n return target\n}\n\nexport function registerHook(app: any, hook: ICloudbaseHook) {\n const { entity, target } = hook\n if (Object.prototype.hasOwnProperty.call(app, target)) {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `target:${target} is not exist`,\n }))\n }\n const originMethod = app.prototype[target]\n if (typeof originMethod !== 'function') {\n throw new Error(JSON.stringify({\n code: ERRORS.INVALID_OPERATION,\n msg: `target:${target} is not a function which is the only type supports hook`,\n }))\n }\n app.prototype[target] = function (...args: any) {\n entity.call(this, ...args)\n return originMethod.call(this, ...args)\n }\n}\n","import { langEvent } from '@cloudbase/utilities'\n\nexport enum LANGS {\n ZH = 'zh-CN',\n EN = 'en-US',\n}\n\nexport const LANG_HEADER_KEY = 'Accept-Language'\n\nexport const langMap = {\n [LANGS.EN]: {\n '请检查调用方式,或前往云开发 AI+ 首页查看文档':\n 'Please check the calling method or visit the AI+ homepage to view the documentation',\n 'AI+ 请求出错,错误码': 'AI+ request error, error code',\n 错误信息: 'error message',\n 未实现: 'not implemented',\n '小程序不支持 wasm 加载': 'wasm loading is not supported in mini programs',\n '小程序不支持动态 js 加载': 'dynamic js loading is not supported in mini programs',\n 请求超时: 'request timeout',\n '缺少 privatelink sdk 地址': 'missing privatelink sdk address',\n },\n}\n\nexport const t = (text: string, lang: LANGS) => langMap[lang]?.[text] || text\n\nconst getLangCacheKey = config => `lang_${config.clientId || config.env}`\n\nexport const i18nProxy = (platform, config) => {\n const cacheKey = getLangCacheKey(config)\n const { localStorage } = platform.adapter || {}\n const lang = config.lang || localStorage?.getItem?.(cacheKey) || LANGS.ZH\n localStorage?.setItem?.(cacheKey, lang)\n\n return new Proxy(\n {\n t: (text: string) => t(text, lang),\n LANG_HEADER_KEY,\n lang,\n },\n {\n get(target, prop) {\n if (prop === 'lang') {\n return localStorage?.getItem?.(cacheKey) || target[prop]\n }\n return target[prop]\n },\n set(target, prop, newValue) {\n if (prop === 'lang' && newValue !== target[prop]) {\n target[prop] = newValue\n target.t = (text: string) => t(text, newValue)\n localStorage?.setItem?.(cacheKey, newValue)\n langEvent.bus.fire(langEvent.LANG_CHANGE_EVENT, { i18n: target })\n }\n\n target[prop] = newValue\n\n return true\n },\n },\n )\n}\n","/**\n * Node.js 入口\n * 引用 base 模块的全部导出,并额外加载 Node adapter\n *\n * 注意:此文件仅通过 webpack 打包(非 tsc 直接编译),\n * webpack alias 会将 @cloudbase/app 解析到 packages/app 源码目录。\n */\n// @ts-ignore - webpack alias resolves this\nimport cloudbase from '@cloudbase/app'\n// @ts-ignore - webpack alias resolves this\nimport pkg from '@cloudbase/app/package.json'\n\ncloudbase.registerVersion(pkg.version)\n\n// Node 环境下加载 Node adapter\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const { getSdkVersion } = require('@cloudbase/app/src/constants/common')\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const nodeAdapter = require('@cloudbase/app/src/libs/adapter-node')\n\n cloudbase.useAdapters(nodeAdapter.default)\n\n // 将 node-sdk 常用的静态属性/方法挂到 cloudbase 实例上\n const cb = cloudbase as any\n cb.version = getSdkVersion()\n cb.SYMBOL_CURRENT_ENV = nodeAdapter.SYMBOL_CURRENT_ENV\n cb.SYMBOL_DEFAULT_ENV = nodeAdapter.SYMBOL_DEFAULT_ENV\n cb.parseContext = nodeAdapter.parseContext\n cb.getCloudbaseContext = nodeAdapter.getCloudbaseContext\n} catch (error) {\n // Node adapter 加载失败时静默处理\n}\n\ndeclare global {\n interface Window {\n cloudbase: any\n }\n}\ntry {\n ;(window as Window).cloudbase = cloudbase\n} catch (e) {}\n// @ts-ignore\nexport = cloudbase\nexport default cloudbase\n","import {\n SDKAdapterInterface,\n AbstractSDKRequest,\n IRequestOptions,\n ResponseObject,\n IUploadRequestOptions,\n IRequestConfig,\n IRequestMethod,\n IFetchOptions,\n} from '@cloudbase/adapter-interface'\nimport { isFormData, formatUrl, toQueryString } from '../../libs/util'\nimport { getProtocol } from '../../constants/common'\n\n/**\n * @class WebRequest\n */\nclass WebRequest extends AbstractSDKRequest {\n // 默认不限超时\n private readonly timeout: number\n // 超时提示文案\n private readonly timeoutMsg: string\n // 超时受限请求类型,默认所有请求均受限\n private readonly restrictedMethods: Array<IRequestMethod>\n constructor(config: IRequestConfig) {\n super()\n const { timeout, timeoutMsg, restrictedMethods } = config\n this.timeout = timeout || 0\n this.timeoutMsg = timeoutMsg || '请求超时'\n this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download']\n }\n public get(options: IRequestOptions): Promise<ResponseObject> {\n return this.request(\n {\n ...options,\n method: 'get',\n },\n this.restrictedMethods.includes('get'),\n )\n }\n public post(options: IRequestOptions): Promise<ResponseObject> {\n return this.request(\n {\n ...options,\n method: 'post',\n },\n this.restrictedMethods.includes('post'),\n )\n }\n public put(options: IRequestOptions): Promise<ResponseObject> {\n return this.request({\n ...options,\n method: 'put',\n })\n }\n public upload(options: IUploadRequestOptions): Promise<ResponseObject> {\n const { data, file, name, method, headers = {} } = options\n const reqMethod = { post: 'post', put: 'put' }[method?.toLowerCase()] || 'put'\n // 上传方式为post时,需转换为FormData\n const formData = new FormData()\n if (reqMethod === 'post') {\n Object.keys(data).forEach((key) => {\n formData.append(key, data[key])\n })\n formData.append('key', name)\n formData.append('file', file)\n return this.request(\n {\n ...options,\n data: formData,\n method: reqMethod,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n return this.request(\n {\n ...options,\n method: 'put',\n headers,\n body: file,\n },\n this.restrictedMethods.includes('upload'),\n )\n }\n public async download(options: IRequestOptions): Promise<any> {\n try {\n const { data } = await this.get({\n ...options,\n headers: {}, // 下载资源请求不经过service,header清空\n responseType: 'blob',\n })\n const url = window.URL.createObjectURL(new Blob([data]))\n const fileName = decodeURIComponent(new URL(options.url).pathname.split('/').pop() || '')\n const link = document.createElement('a')\n\n link.href = url\n link.setAttribute('download', fileName)\n link.style.display = 'none'\n\n document.body.appendChild(link)\n link.click()\n // 回收内存\n window.URL.revokeObjectURL(url)\n document.body.removeChild(link)\n } catch (e) {}\n return new Promise((resolve) => {\n resolve({\n statusCode: 200,\n tempFilePath: options.url,\n })\n })\n }\n async fetch(options: IFetchOptions & { shouldThrowOnError?: boolean }): Promise<ResponseObject> {\n const abortController = new AbortController()\n const { url, enableAbort = false, stream = false, signal, timeout: _timeout, shouldThrowOnError = true } = options\n\n const timeout = _timeout ?? this.timeout\n\n // FIXME(内存泄漏): { once: true } 只在 abort 事件【触发后】才解绑监听器。\n // 如果请求正常完成、从未 abort,该监听器会一直残留在外部 signal 上。\n // 当调用方复用同一长生命周期 signal 反复发请求时,监听器仍会持续累积。\n // 根治方式:在请求结束(finally)时 removeEventListener 主动解绑,\n // 而不能仅依赖 { once: true }。此处暂仅记录,不改动逻辑。\n if (signal) {\n if (signal.aborted) abortController.abort()\n signal.addEventListener('abort', () => abortController.abort())\n }\n\n let timer = null\n if (enableAbort && timeout) {\n timer = setTimeout(() => {\n console.warn(this.timeoutMsg)\n abortController.abort(new Error(this.timeoutMsg))\n }, timeout)\n }\n\n const res = await fetch(url, {\n ...options,\n signal: abortController.signal,\n })\n .then(async (response) => {\n clearTimeout(timer)\n if (shouldThrowOnError) {\n // 404 等等也会进 resolve,所以要再通过 ok 判断\n return response.ok ? response : Promise.reject(await response.json())\n }\n return response\n })\n .catch((x) => {\n clearTimeout(timer)\n // 传输级失败(网络中断、CORS 预检被拒、请求被 abort 等)时 fetch 会 reject,\n // 此时没有可解析的 Response。无论 shouldThrowOnError 取值都必须把真实错误抛出,\n // 否则 res 会变成 undefined,下方读取 res.headers 会抛出令人误解的\n // \"Cannot read properties of undefined (reading 'headers')\",掩盖真正的错误原因。\n return Promise.reject(x)\n })\n\n return {\n // eslint-disable-next-line no-nested-ternary\n data: stream ? res.body : res.headers.get('content-type')?.includes('application/json') ? res.json() : res.text(),\n statusCode: res.status,\n header: res.headers,\n // 透出原始 Response,便于上层按需 .blob() / .arrayBuffer() / 读取 body 流,避免二次包装。\n response: res,\n }\n }\n /**\n * @param {IRequestOptions} options\n * @param {boolean} enableAbort 是否超时中断请求\n */\n protected request(options: IRequestOptions, enableAbort = false): Promise<ResponseObject> {\n const method = String(options.method).toLowerCase() || 'get'\n return new Promise((resolve) => {\n const { url, headers = {}, data, responseType, withCredentials, body, onUploadProgress } = options\n const realUrl = formatUrl(getProtocol(), url, method === 'get' ? data : {})\n const ajax = new XMLHttpRequest()\n ajax.open(method, realUrl)\n responseType && (ajax.responseType = responseType)\n // 支持通过 AbortSignal 取消请求:已 abort 立即取消;否则用 { once: true }\n // 监听,触发后自动解绑,避免复用同一 AbortController 多次请求时累积监听器。\n //\n // FIXME(内存泄漏): { once: true } 只在 abort 事件【触发后】才解绑监听器。\n // 如果请求正常完成、从未 abort,该监听器会一直残留在外部 signal 上。\n // 当调用方复用同一长生命周期 signal 反复发请求时,监听器仍会持续累积。\n // 根治方式:在请求结束(readyState===4 / onloadend)时 removeEventListener\n // 主动解绑,而不能仅依赖 { once: true }。此处暂仅记录,不改动逻辑。\n const signal = (options as any).signal as AbortSignal | undefined\n if (signal) {\n if (signal.aborted) {\n ajax.abort()\n } else {\n signal.addEventListener('abort', () => ajax.abort(), { once: true })\n }\n }\n Object.keys(headers).forEach((key) => {\n ajax.setRequestHeader(key, headers[key])\n })\n let timer\n if (onUploadProgress) {\n ajax.upload.addEventListener('progress', onUploadProgress)\n }\n ajax.onreadystatechange = () => {\n const result: ResponseObject = {}\n if (ajax.readyState === 4) {\n const headers = ajax.getAllResponseHeaders()\n const arr = headers.trim().split(/[\\r\\n]+/)\n // Create a map of header names to values\n const headerMap = {}\n arr.forEach((line) => {\n const parts = line.split(': ')\n const header = parts.shift().toLowerCase()\n const value = parts.join(': ')\n headerMap[header] = value\n })\n result.header = headerMap\n result.statusCode = ajax.status\n try {\n // 上传post请求返回数据格式为xml,此处容错\n result.data = responseType === 'blob' ? ajax.response : JSON.parse(ajax.responseText)\n } catch (e) {\n result.data = responseType === 'blob' ? ajax.response : ajax.responseText\n }\n clearTimeout(timer)\n resolve(result)\n }\n }\n if (enableAbort && this.timeout) {\n timer = setTimeout(() => {\n console.warn(this.timeoutMsg)\n ajax.abort()\n }, this.timeout)\n }\n // 处理 payload\n let payload\n if (isFormData(data)) {\n // FormData,不处理\n payload = data\n } else if (headers['content-type'] === 'application/x-www-form-urlencoded') {\n payload = toQueryString(data)\n } else if (body) {\n payload = body\n } else {\n // 其它情况\n payload = data ? JSON.stringify(data) : undefined\n }\n\n if (withCredentials) {\n ajax.withCredentials = true\n }\n ajax.send(payload)\n })\n }\n}\n\nfunction genAdapter() {\n const adapter: SDKAdapterInterface & { type?: 'default' | '' } = {\n type: 'default',\n root: window,\n reqClass: WebRequest,\n wsClass: WebSocket,\n localStorage,\n }\n return adapter\n}\n\nexport { genAdapter, WebRequest }\n","export const ERRORS = {\n INVALID_PARAMS: 'INVALID_PARAMS',\n INVALID_SYNTAX: 'INVALID_SYNTAX',\n INVALID_OPERATION: 'INVALID_OPERATION',\n OPERATION_FAIL: 'OPERATION_FAIL',\n NETWORK_ERROR: 'NETWORK_ERROR',\n UNKOWN_ERROR: 'UNKOWN_ERROR',\n}\n","import { printGroupLog } from '../libs/util'\nimport { IS_DEBUG_MODE } from '../constants'\n\ninterface ICatchErrorsDecoratorOptions {\n mode?: 'sync' | 'async';\n customInfo?: {\n className?: string;\n methodName?: string;\n };\n title?: string;\n messages?: string[];\n}\n// firefox的stack格式与chrome不同\nlet isFirefox = false\nif (typeof navigator !== 'undefined' && navigator.userAgent) {\n isFirefox = navigator.userAgent.indexOf('Firefox') !== -1\n}\n/**\n * decorate在stack中一般都特定的规范\n */\nconst REG_STACK_DECORATE = isFirefox\n ? /(\\.js\\/)?__decorate(\\$\\d+)?<@.*\\d$/\n : /(\\/\\w+\\.js\\.)?__decorate(\\$\\d+)?\\s*\\(.*\\)$/\nconst REG_STACK_LINK = /https?:\\/\\/.+:\\d*\\/.*\\.js:\\d+:\\d+/\n/**\n * debug模式强化日志信息\n * @param options\n */\nexport function catchErrorsDecorator(options: ICatchErrorsDecoratorOptions) {\n const { mode = 'async', customInfo = {}, title, messages = [] } = options\n\n return function (\n target: any,\n methodName: string,\n descriptor: TypedPropertyDescriptor<Function>\n ) {\n // 生产环境禁用\n if (!IS_DEBUG_MODE) {\n return\n }\n const className = customInfo.className || target.constructor.name\n const fnName = customInfo.methodName || methodName\n const fn = descriptor.value\n\n // 被decorator装饰的源码link\n // 在descriptor.value外部此处创建的stack层次可触达源码\n // 而descriptor.value内部有可能由于stack太深无法触达\n const sourceLink = getSourceLink(new Error())\n\n if (mode === 'sync') {\n descriptor.value = function (...args: any[]) {\n // 此处的stack作用主要是为了获取被decorator装饰的源码class和method名称\n const innerErr: any = getRewritedError({\n err: new Error(),\n className,\n methodName: fnName,\n sourceLink,\n })\n try {\n return fn.apply(this, args)\n } catch (err) {\n let failErr = err\n const { message: errMsg, error, error_description: errorDescription } = err\n const logs: any = {\n title: title || `${className}.${fnName} failed`,\n content: [{\n type: 'error',\n body: err,\n }],\n }\n // 只特殊处理SDK业务逻辑抛出的错误-JSON string\n if (errMsg && /^\\{.*\\}$/.test(errMsg)) {\n const msg = JSON.parse(errMsg)\n logs.subtitle = errMsg\n if (msg.code) {\n if (innerErr) {\n innerErr.code = msg.code\n innerErr.msg = msg.msg\n } else {\n err.code = msg.code\n err.message = msg.msg\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n }\n\n // oauth 错误特殊处理\n if (error && errorDescription) {\n logs.subtitle = errorDescription\n if (innerErr) {\n innerErr.code = error\n innerErr.msg = errorDescription\n } else {\n err.code = error\n err.message = errorDescription\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n printGroupLog(logs)\n throw failErr\n }\n }\n } else {\n descriptor.value = async function (...args: any[]) {\n const innerErr: any = getRewritedError({\n err: new Error(),\n className,\n methodName: fnName,\n sourceLink,\n })\n\n try {\n return await fn.apply(this, args)\n } catch (err) {\n let failErr = err\n const { message: errMsg, error, error_description: errorDescription } = err\n const logs: any = {\n title: title || `${className}.${fnName} failed`,\n content: [{\n type: 'error',\n body: err,\n }],\n }\n // 只特殊处理SDK业务逻辑抛出的错误-JSON string\n if (errMsg && /^\\{.*\\}$/.test(errMsg)) {\n const msg = JSON.parse(errMsg)\n logs.subtitle = msg\n if (msg.code) {\n if (innerErr) {\n innerErr.code = msg.code\n innerErr.message = msg.msg\n } else {\n err.code = msg.code\n err.message = msg.msg\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n }\n\n // oauth 错误特殊处理\n if (error && errorDescription) {\n logs.subtitle = errorDescription\n if (innerErr) {\n innerErr.code = error\n innerErr.msg = errorDescription\n } else {\n err.code = error\n err.message = errorDescription\n }\n failErr = innerErr || err\n logs.content = messages.map(msg => ({\n type: 'info',\n body: msg,\n }))\n }\n printGroupLog(logs)\n throw failErr\n }\n }\n }\n }\n}\n\n/**\n * 在原始堆栈中查找装饰器条目并返回源码链接link\n * @param err\n */\nfunction getSourceLink(err: Error) {\n let sourceLink = ''\n const outterErrStacks = err.stack.split('\\n')\n const indexOfDecorator = outterErrStacks.findIndex(str => REG_STACK_DECORATE.test(str))\n\n if (indexOfDecorator !== -1) {\n const match = REG_STACK_LINK.exec(outterErrStacks[indexOfDecorator + 1] || '')\n\n sourceLink = match ? match[0] : ''\n }\n return sourceLink\n}\n\n/**\n * 在原始堆栈中查找装饰器条目,剔除其后的无用堆栈,并将链接替换为源码link\n * @param options\n */\nfunction getRewritedError(options: {\n err: Error;\n className: string;\n methodName: string;\n sourceLink: string;\n}) {\n const { err, className, methodName, sourceLink } = options\n // 找不到源码link返回null,后续逻辑将打印原堆栈信息\n if (!sourceLink) {\n return null\n }\n\n const innerErrStack = err.stack.split('\\n')\n const REG_STACK_INNER_METHOD = isFirefox\n ? /^catchErrorsDecorator\\/<\\/descriptor.value@.*\\d$/\n : new RegExp(`${className}\\\\.descriptor.value\\\\s*\\\\[as\\\\s${methodName}\\\\]\\\\s*\\\\(.*\\\\)$`)\n const REG_STACK_INNER_METHOD_WITHOUT_LINK = isFirefox\n ? /^catchErrorsDecorator\\/<\\/descriptor.value/\n : new RegExp(`${className}\\\\.descriptor.value\\\\s*\\\\[as\\\\s${methodName}\\\\]`)\n const indexOfSource = innerErrStack.findIndex(str => REG_STACK_INNER_METHOD.test(str))\n let innerErr: Error\n if (indexOfSource !== -1) {\n // @ts-ignore\n const realErrStack = innerErrStack.filter((v, i) => i > indexOfSource)\n realErrStack.unshift(innerErrStack[indexOfSource]\n .replace(REG_STACK_INNER_METHOD_WITHOUT_LINK, `${className}.${methodName}`)\n .replace(REG_STACK_LINK, sourceLink))\n innerErr = new Error()\n innerErr.stack = `${isFirefox ? '@debugger' : 'Error'}\\n${realErrStack.join('\\n')}`\n }\n return innerErr\n}\n","export default class AbortController {\n listeners: Array<CallableFunction> = []\n signal = {\n aborted: false,\n addEventListener: (e: string, f: CallableFunction) => {\n if (e === 'abort') {\n this.listeners.push(f)\n }\n },\n }\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor() {}\n\n abort() {\n if (this.signal.aborted) return\n\n this.signal.aborted = true\n this.listeners.forEach(f => f())\n }\n}\n","import { isString, isInstanceOf } from './util'\nimport { Listeners, ICloudbaseEventEmitter } from '@cloudbase/types/events'\n\n\n/**\n * @private\n * @function _addEventListener - 添加监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @param {Listeners} listeners - 已存响应函数集合\n */\nfunction customeAddEventListener(name: string, listener: Function, listeners: Listeners) {\n listeners[name] = listeners[name] || []\n listeners[name].push(listener)\n}\n/**\n * @private\n * @function _removeEventListener - 移除监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @param {Listeners} listeners - 已存响应函数集合\n */\nfunction customRemoveEventListener(name: string, listener: Function, listeners: Listeners) {\n if (listeners?.[name]) {\n const index = listeners[name].indexOf(listener)\n if (index !== -1) {\n listeners[name].splice(index, 1)\n }\n }\n}\ninterface IEvent {\n name: string;\n target: any;\n data: any;\n}\n/**\n * 自定义事件\n * @class CloudbaseEvent\n * @param {string} name - 类型\n * @param {any} data - 数据\n */\nexport class CloudbaseEvent implements IEvent {\n public readonly name: string\n public target: any\n public data: any\n\n constructor(name: string, data: any) {\n this.data = data || null\n this.name = name\n }\n}\n/**\n * 自定义错误事件\n * @class IErrorEvent\n * @extends CloudbaseEvent\n * @param {Error} error - 错误信息对象\n * @param {any} data - 数据\n */\nexport class IErrorEvent extends CloudbaseEvent {\n public readonly error: Error\n constructor(error: Error, data?: any) {\n super('error', { error, data })\n this.error = error\n }\n}\n\n/**\n * @class CloudbaseEventEmitter\n */\nexport class CloudbaseEventEmitter implements ICloudbaseEventEmitter {\n /**\n * @private\n * @readonly\n * @property {Listeners} listeners - 响应函数集合\n * @default `{}`\n */\n private readonly listeners: Listeners = {}\n\n /**\n * @public\n * @method on - 添加监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @return `this`\n */\n public on(name: string, listener: Function): this {\n customeAddEventListener(name, listener, this.listeners)\n return this\n }\n /**\n * @public\n * @method off - 移除监听\n * @param {string} name - event名称\n * @param {Function} listener - 响应函数\n * @return `this`\n */\n public off(name: string, listener: Function): this {\n customRemoveEventListener(name, listener, this.listeners)\n return this\n }\n /**\n * @public\n * @method fire - 触发事件\n * @param {string|CloudbaseEvent} event - event\n * @return `this`\n */\n public fire(event: string | CloudbaseEvent, data?: any): this {\n // 打印错误信息\n if (isInstanceOf(event, IErrorEvent)) {\n console.error((event as IErrorEvent).error)\n return this\n }\n\n const ev: CloudbaseEvent = isString(event) ? new CloudbaseEvent(event as string, data || {}) : event as CloudbaseEvent\n\n const { name } = ev\n\n if (this.listens(name)) {\n ev.target = this\n\n const handlers = this.listeners[name] ? [...this.listeners[name]] : []\n for (const fn of handlers) {\n fn.call(this, ev)\n }\n }\n\n return this\n }\n\n /**\n * @private\n * @method listens - 判断是否监听了name事件\n * @param {string} name - event名称\n * @return `boolean`\n */\n private listens(name: string): boolean {\n return this.listeners[name] && this.listeners[name].length > 0\n }\n}\n\n\nconst eventEmitter = new CloudbaseEventEmitter()\n\nexport function addEventListener(event: string, callback: Function) {\n eventEmitter.on(event, callback)\n}\n\nexport function activateEvent(event: string, data: any = {}) {\n eventEmitter.fire(event, data)\n}\n\nexport function removeEventListener(event: string, callback: Function) {\n eventEmitter.off(event, callback)\n}\n","import { CloudbaseEventEmitter } from './events'\n\nexport const bus = new CloudbaseEventEmitter()\n\nexport const LANG_CHANGE_EVENT = 'lang_change'\n","import { KV } from '@cloudbase/types'\nimport { getSdkName } from '../constants'\n\nexport function isArray(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Array]'\n}\nexport function isString(val: any): boolean {\n return typeof val === 'string'\n}\nexport function isUndefined(val: any): boolean {\n return typeof val === 'undefined'\n}\nexport function isPalinObject(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Object]'\n}\nexport function isNull(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object Null]'\n}\nexport function isInstanceOf(instance: any, construct: any): boolean {\n return instance instanceof construct\n}\nexport function isFormData(val: any): boolean {\n return Object.prototype.toString.call(val) === '[object FormData]'\n}\nexport function genSeqId(): string {\n return Math.random().toString(16)\n .slice(2)\n}\nexport function generateRequestId() {\n let d = new Date().getTime()\n let d2 = (Date?.now && Date.now() * 1000) || 0\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n let r = Math.random() * 16\n if (d > 0) {\n r = (d + r) % 16 | 0\n d = Math.floor(d / 16)\n } else {\n r = (d2 + r) % 16 | 0\n d2 = Math.floor(d2 / 16)\n }\n return (c === 'x' ? r : (r & 0x7) | 0x8).toString(16)\n })\n}\nexport function formatUrl(PROTOCOL: string, url: string, query: KV<any> = {}): string {\n const urlHasQuery = /\\?/.test(url)\n let queryString = ''\n Object.keys(query).forEach((key) => {\n if (queryString === '') {\n !urlHasQuery && (url += '?')\n } else {\n queryString += '&'\n }\n queryString += `${key}=${encodeURIComponent(query[key])}`\n })\n url += queryString\n if (/^http(s)?:\\/\\//.test(url)) {\n return url\n }\n return `${PROTOCOL}${url}`\n}\n\nexport function toQueryString(query: KV<any> = {}) {\n const queryString = []\n Object.keys(query).forEach((key) => {\n queryString.push(`${key}=${encodeURIComponent(query[key])}`)\n })\n return queryString.join('&')\n}\n\nexport function getQuery(name: string, url?: string) {\n if (typeof window === 'undefined') {\n return false\n }\n // 参数:变量名,url为空则表从当前页面的url中取\n const u = url || decodeURIComponent(window.location.search)\n const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`)\n const r = u.substr(u.indexOf('?') + 1).match(reg)\n return r !== null && r !== undefined ? r[2] : ''\n}\n\nexport const getHash = function (name: string) {\n if (typeof window === 'undefined') {\n return ''\n }\n const matches = window.location.hash.match(new RegExp(`[#?&/]${name}=([^&#]*)`))\n return matches ? matches[1] : ''\n}\n\nexport function removeParam(key: string, sourceURL: string) {\n let rtn = sourceURL.split('?')[0]\n let param\n let params = []\n const queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : ''\n if (queryString !== '') {\n params = queryString.split('&')\n for (let i = params.length - 1; i >= 0; i -= 1) {\n /* eslint-disable-next-line */\n param = params[i].split('=')[0]\n if (param === key) {\n params.splice(i, 1)\n }\n }\n rtn = `${rtn}?${params.join('&')}`\n }\n return rtn\n}\n\nexport function createPromiseCallback() {\n let cb: any = {}\n if (!Promise) {\n cb = () => {}\n cb.promise = {}\n\n const throwPromiseNotDefined = () => {\n throw new Error('Your Node runtime does support ES6 Promises. '\n + 'Set \"global.Promise\" to your preferred implementation of promises.',)\n }\n\n Object.defineProperty(cb.promise, 'then', { get: throwPromiseNotDefined })\n Object.defineProperty(cb.promise, 'catch', { get: throwPromiseNotDefined })\n return cb\n }\n\n const promise = new Promise((resolve, reject) => {\n cb = (err, data) => {\n if (err) return reject(err)\n return resolve(data)\n }\n })\n cb.promise = promise\n return cb\n}\n\nexport function execCallback(fn: Function | null | undefined, err: any, data = null) {\n if (fn && typeof fn === 'function') {\n return fn(err, data)\n }\n if (err) {\n throw err\n }\n return data\n}\n\nexport function printWarn(error: string, msg: string) {\n console.warn(`[${getSdkName()}][${error}]:${msg}`)\n}\n\nexport function printError(error: string, msg: string) {\n console.error({\n code: error,\n msg: `[${getSdkName()}][${error}]:${msg}`,\n })\n}\nexport function printInfo(error: string, msg: string) {\n console.log(`[${getSdkName()}][${error}]:${msg}`)\n}\nexport function throwError(error: string, msg: string) {\n throw new Error(JSON.stringify({\n code: error,\n msg: `[${getSdkName()}][${error}]:${msg}`,\n }),)\n}\n\ninterface IPrintGroupLogOptions {\n title: string\n subtitle: string | object\n content: {\n type: 'info' | 'warn' | 'error'\n body: string | Error\n }[]\n printTrace?: boolean\n collapsed?: boolean\n}\nexport function printGroupLog(options: IPrintGroupLogOptions) {\n const { title, subtitle = '', content = [], printTrace = false, collapsed = false } = options\n if (collapsed) {\n (console.groupCollapsed || console.error)(title, subtitle)\n } else {\n (console.group || console.error)(title, subtitle)\n }\n for (const tip of content) {\n const { type, body } = tip\n switch (type) {\n case 'info':\n console.log(body)\n break\n case 'warn':\n console.warn(body)\n break\n case 'error':\n console.error(body)\n break\n }\n }\n if (printTrace) {\n (console.trace || console.log)('stack trace:')\n }\n console.groupEnd?.()\n}\n\nexport const sleep = (ms = 0) => new Promise(r => setTimeout(r, ms))\n\nexport function transformPhone(phoneNumber: string) {\n return `+86${phoneNumber}`\n}\n\nexport const parseQueryString = (queryString) => {\n queryString = queryString.replace(/^\\?/, '')\n const params = {}\n const pairs = queryString.split('&')\n\n pairs.forEach((item) => {\n let [key, value] = item.split('=')\n key = decodeURIComponent(key)\n value = decodeURIComponent(value)\n if (key) {\n if (params[key]) {\n if (Array.isArray(params[key])) {\n params[key].push(value)\n } else {\n params[key] = [params[key], value]\n }\n } else {\n params[key] = value\n }\n }\n })\n\n return params\n}\n\n// 解析URL参数\nexport function parseCaptcha(url) {\n let queryObj: any = {}\n const matched = url.match(/^(data:.*?)(\\?[^#\\s]*)?$/)\n if (matched) {\n // eslint-disable-next-line prefer-destructuring\n url = matched[1]\n const search = matched[2]\n if (search) {\n queryObj = parseQueryString(search)\n }\n }\n const { token, ...restQueryObj } = queryObj\n if (/^data:/.test(url) && !token) {\n return {\n error: 'invalid_argument',\n error_description: `invalid captcha data: ${url}`,\n }\n }\n if (!token) {\n return {\n error: 'unimplemented',\n error_description: 'need to impl captcha data',\n }\n }\n // 解析url得到的参数\n return {\n state: restQueryObj.state,\n token, // 验证码token\n captchaData: url, // 验证码base64图片\n }\n}\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = require(\"@cloudbase/adapter-interface\");","module.exports = require(\"@cloudbase/adapter-wx_mp\");","module.exports = require(\"@cloudbase/signature-nodejs\");","module.exports = require(\"jsonwebtoken\");","module.exports = require(\"jwt-decode\");","module.exports = require(\"web-streams-polyfill\");","module.exports = require(\"ws\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"https\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"url\");","module.exports = require(\"util\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(788);\n"],"names":["leafPrototypes","getProto","module","exports","parallel","serial","serialOrdered","clean","key","this","jobs","state","Object","keys","forEach","bind","defer","callback","isAsync","err","result","fn","nextTick","setImmediate","process","setTimeout","async","abort","list","iterator","index","item","length","runJob","error","output","results","sortMethod","isNamedList","Array","isArray","initState","keyedList","size","sort","a","b","iterate","terminator","ascending","iteratorHandler","descending","utilities_1","require","setUtilitiesSdkName","constants","setSdkName","setUtilitiesProtocol","setProtocol","sdkVersion","sdkName","version","name","LOGINTYPE","END_POINT_INFO_ARR","END_POINT_INFO_SEARCH_KEYS","findMatchedInfo","info","find","targetInfo","filter","searchKey","every","setEndPointInfo","newInfo","protocol","test","concat","endPointInfo","baseUrl","push","__assign","_a","DEFAULT_PROTOCOL","endPointKey","_b","getEndPointInfo","env","region","intl","PROTOCOL","BASE_URL","match","component_1","adapter_1","cache_1","request_1","common_1","lang_1","common_2","enumerable","get","getBaseEndPoint","lang_2","LANGS","useAdapters","adapters","useDefaultAdapter","ERRORS","COMMUNITY_SITE_URL","printWarn","utils","catchErrorsDecorator","helpers","DEFAULT_INIT_CONFIG","timeout","persistence","MAX_TIMEOUT","extensionMap","Cloudbase","config","cloudbaseConfig","authInstance","oauthInstance","getSdkVersion","defineProperty","prototype","Platform","getCacheByEnvId","getLocalCache","getRequestByEnvId","init","endPointMode","adapter","dealNodeAdapterConfig","Error","JSON","stringify","code","INVALID_PARAMS","msg","isInitialized","reqConfig","timeoutMsg","getSdkName","auth","requestClient","reqClass","i18n","i18nProxy","lang","formatTimeout","_d","debug","oauthClient","initCache","platformInfo","platform","setRegionLevelEndpoint","setGatewayEndPointWithEnv","app","initRequest","_fromApp","fire","call","try2InitAuth","nodeTool","_c","updateConfig","updateLang","registerExtension","ext","invokeExtension","opts","invoke","sent","options","runtime","registerHook","hook","registerComponent","component","registerVersion","setSdkVersion","registerSdkName","some","p","toLowerCase","registerEndPoint","url","registerEndPointWithKey","props","registerHost","host","cleanHost","replace","baseHost","getEndPointWithKey","parseCaptcha","console","log","getSecretInfo","secretInfo","secretId","secretKey","sessionToken","secretType","accessKey","__decorate","mode","title","messages","wxAdapter","getWxDefaultAdapter","cloudbase","SECRET_TYPE","INVALID_PARAM","message","SYS_ERR","STORAGE_REQUEST_FAIL","STORAGE_FILE_NONEXIST","TCB_CLS_UNOPEN","INVALID_CONTEXT","constants_1","utils_1","parseContext","context","ERROR","parseResult","memory_limit_in_mb","time_limit_in_ms","request_id","function_version","namespace","function_name","environ","environment","memoryLimitInMb","timeLimitIns","requestId","functionVersion","functionName","parse","parseEnviron","split","parseEnvironObj","i","includes","equalIndex","indexOf","slice","value","_err","getTcbContextConfig","TCB_CONTEXT_CNFG","getCloudbaseContext","_e","checkIsInScf","getEnv","envObj","envFromProcessEnv","TRIGGER_SRC","_SCF_TCB_LOG","SCF_NAMESPACE","TENCENTCLOUD_RUNENV","TENCENTCLOUD_SECRETID","TENCENTCLOUD_SECRETKEY","TENCENTCLOUD_SESSIONTOKEN","WX_CONTEXT_KEYS","WX_TRIGGER_API_TOKEN_V0","WX_CLIENTIP","WX_CLIENTIPV6","TCB_CONTEXT_KEYS","envFromContext","_i","contextKeys","allContext","fromEntries","entries","undefined","URL","INIT_CONFIG","_g","TCB_ENV","CLOUDBASE_APIKEY","topLevel","defaultInfo","credentials","SESSION_SECRET","SECRET","contextConfig","extendedContext","envId","tmpSecret","_f","token","adapter_interface_1","tool_1","context_1","_WS","getWS","e","request_2","NodeRequest","utils_2","parseQueryString","createWebStreamFromNodeReadableStream","E","TcbError","SYMBOL_CURRENT_ENV","SYMBOL_DEFAULT_ENV","isValidEnvFormat","isPageModuleName","filterValue","filterUndefined","processReturn","setThrowOnCode","context_2","getServerInjectUrl","wx_1","getWxCloudToken","buildAdminUrl","sendWxRequest","sendWxFormDataRequest","callWxOpenApi","callCompatibleWxOpenApi","callWxPayApi","wxCallContainerApi","getWxOptions","db","storage","Map","setItem","set","getItem","removeItem","delete","clear","genAdapter","root","globalThis","wsClass","sessionStorage","localStorage","primaryStorage","StorageType","session","captchaOptions","openURIWithCallback","_url","EventBus","queryObj","matched","search","restQueryObj","__rest","Promise","reject","error_description","resolve","$emit","$once","res","isMatch","versions","node","kMetadataVersions","isAppId","appIdStr","lookup","path","kMetadataBaseUrl","latest","controller","AbortController","timer","fetch","signal","resp","status","text","clearTimeout","metadataCache","appId","kAppIdPath","ruleName","kSecurityCredentialsPath","fs","__importStar","signFn","getSign","mod","sign","_this","getReqOptions","__awaiter","urlObj","TCB_SOURCE","source","getCurrRunEnvTag","SOURCE","apply","_o","headers","Date","valueOf","Host","withCredentials","_j","_h","Authorization","trim","pathname","startsWith","CLIENT_AUTH_PATH","isAdminPath","ADMIN_PATH","v","getClientCredential","origin","_k","_l","method","body","isNpmFormDataBody","isNpmFormData","params","__plainObj","safeParseJson","envName","_m","access_token","signedParams","withSignedParams","timestamp","Math","floor","getTime","isCloudApi","authorization","formDataInstance","existingKeys","Set","has","append","formBuffer","getBuffer","formHeaders","getHeaders","String","request","restrictedMethods","post","put","upload","data","rawFile","file","fileContent","formFields","obj2StrRecord","loweredMethod","reqMethod","m","formData","FormData","Blob","download","AbortSignal","ok","arrayBuffer","buffer","Buffer","from","tempFilePath","dir","dirname","existsSync","mkdirSync","recursive","writeFileSync","statusCode","enableAbort","stream","customReqOpts","getRealUrl","createAbortController","abortController","cleanup","headersInit2Indexable","fetchOptions","applyDuplexIfNeeded","header","response","rawHeaders","responseType","rawMethod","externalSignal","payload","isFormData","toQueryString","realUrl","formatUrl","requestOptions","_p","result_1","blob","e_2","val","grant_type","toString","aborted","addEventListener","once","warn","pipe","duplex","obj","jwtSign","getJwtSign","default","getDefaultUserInfo","openId","WX_OPENID","WX_APPID","uid","TCB_UUID","customUserId","TCB_CUSTOM_USER_ID","isAnonymous","TCB_ISANONYMOUS_USER","sendUserInfoRequest","send","_scfContext","nodeConfig","authMethods_1","getUserInfo","getEndUserInfo","defaultUserInfo","userInfo","validateUid","uuid","then","createTicket","env_id","refresh","expire","alg","iat","exp","private_key","allowInsecureKeySizes","algorithm","private_key_id","queryUserInfo","query","platformId","getClientIP","TCB_SOURCE_IP","getAuthContext","fullContext","QQ_OPENID","QQ_APPID","loginType","originalAuth_1","Proxy","target","thisArg","argArray","Reflect","_getWxOptions","serviceUrl","sendTemplateNotification","callFunction","methodName","action","NotifyId","notifyId","Data","NotifyUsers","Url","wxOpenApiOptions","getFileAuthority","fileList","type","callApis","callApiOptions","apis","apiPath","apiMethod","web_streams_polyfill_1","metadata_1","checkIsInCBR","kSumeruEnvSet","checkIsInSumeru","checkIsInTencentCloud","lookupAppId","checkCustomUserIdRegex","reduce","acc","cur","h","Headers","_","isHeaders","ret_1","cleanSearch","decodeURIComponent","asyncIterator","Symbol","ReadableStream","pull","next","done","close","enqueue","_super","__extends","errObj","o","throwOnCode","kEnvRuleReg","for","CLOUDBASE_ACCESS_TOKEN_PATH","maxCacheAge","cloudbaseAccessTokenInfo","WX_API_TOKEN","WX_CLOUDBASE_ACCESSTOKEN","wxCloudToken","wxCloudApiToken","wxCloudbaseAccesstoken","now","readFileSync","loadWxCloudbaseAccesstoken","seqNum","scfContext","TENCENTCLOUD_REGION","seqId","eventId","TCB_SEQID","genSeqId","endpoint","envEndpoint","isValidEnvDomain","defaultUrl","qs","appendWxTokenParams","tcb_sessionToken","TCB_SESSIONTOKEN","reqOpts","requestInstance","plainObj","validateCrossAccount","getCrossAccountInfo","callWxFormDataApi","wxOptions","apiName","apiOptions","cgiName","requestData","transformRequestData","responseData","apiOpts","adapter_wx_mp_1","WxRequest","self","wx","getFileSystemManager","task","_timeout","success","success_action_status","parseInt","fail","complete","errMsg","_restrictedMethods","_timeoutMsg","WxMpWebSocket","wxMpStorage","local","getAppSign","getAccountInfoSync","App","getApp","onAppHide","offAppHide","onAppShow","offAppShow","miniProgram","plugin","CloudbaseCache","cache","cacheMap","localCacheMap","userInfoKey","components","deepExtend","constructor","sourceKeys_1","hasOwnProperty","entity","injectEvents","IIFE","INVALID_OPERATION","bus","events","originCallback_1","__spreadArray","eventName","eventNames_1","name_1","bus_1","originMethod","args","arguments","EN","错误信息","未实现","请求超时","langMap","cacheKey","clientId","getLangCacheKey","ZH","t","LANG_HEADER_KEY","prop","newValue","langEvent","LANG_CHANGE_EVENT","ACTIONS_WITHOUT_ACCESSTOKEN","bindHooks","instance","hooks","appendedData","appendedHeaders","assign","originData","beforeEach","CloudbaseRequest","throwWhenRequestFail","throw","localCache","on","getAccessToken","oauth2client","getOauthAccessTokenV2","accessToken","getDefaultHeaders","validAccessToken","getCredentials","accessTokenExpire","expires_at","tcbTraceKey","contentType","tmpObj_1","dataVersion","DATA_VERSION","payload_1","onUploadProgress","traceHeader","getStore","inQuery","formatQuery","defaultQuery","url_1","newUrl","resTraceHeader","setStore","Number","err_1","restOptions","doFetch","authHeaders","error_1","err_2","authApi","refreshTokenForce","OPERATION_FAIL","gateWay","jsonData","generateRequestId","isGetAndHead","toUpperCase","dataParse_1","map","join","requestMap","app_1","__importDefault","package_json_1","nodeAdapter","cb","window","RUNTIME","Web","util_1","adapterList_1","WEB","WebRequest","createObjectURL","fileName","pop","link","document","createElement","href","setAttribute","style","display","appendChild","click","revokeObjectURL","removeChild","shouldThrowOnError","json","catch","x","getProtocol","ajax","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","arr","getAllResponseHeaders","headerMap_1","line","parts","shift","responseText","AbstractSDKRequest","WebSocket","INVALID_SYNTAX","NETWORK_ERROR","UNKOWN_ERROR","__exportStar","isFirefox","navigator","userAgent","REG_STACK_DECORATE","REG_STACK_LINK","getRewritedError","className","sourceLink","innerErr","innerErrStack","stack","REG_STACK_INNER_METHOD","RegExp","REG_STACK_INNER_METHOD_WITHOUT_LINK","indexOfSource","findIndex","str","realErrStack","unshift","customInfo","descriptor","IS_DEBUG_MODE","fnName","outterErrStacks","indexOfDecorator","exec","getSourceLink","failErr","errorDescription","logs","content","subtitle","printGroupLog","abortController_1","jwt","decode","listeners","f","TcbCacheObject","tcbCacheObject","AbstractStorage","persistenceTag","createStorage","setStoreAsync","tcb_token","getStoreAsync","removeStore","removeStoreAsync","CloudbaseEvent","IErrorEvent","CloudbaseEventEmitter","listener","customeAddEventListener","off","splice","customRemoveEventListener","event","isInstanceOf","ev","isString","listens","handlers_1","eventEmitter","events_1","construct","random","d","d2","c","r","urlHasQuery","queryString","encodeURIComponent","u","location","reg","substr","matches","hash","sourceURL","rtn","promise","throwPromiseNotDefined","printTrace","collapsed","groupCollapsed","group","content_1","tip","trace","groupEnd","ms","phoneNumber","captchaData","util","Stream","DelayedStream","CombinedStream","writable","readable","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","inherits","create","combinedStream","option","isStreamLike","isBuffer","newStream","Infinity","pauseStream","_checkDataSize","_handleErrors","pause","dest","resume","_getNext","_realGetNext","_pipeNext","end","write","_emitError","emit","_reset","destroy","_updateDataSize","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","configurable","setEncoding","release","_checkIfMaxDataSizeExceeded","http","https","parseUrl","mime","asynckit","populate","_overheadLength","_valueLength","_valuesToMeasure","LINE_BREAK","DEFAULT_CONTENT_TYPE","field","filename","_error","_multiPartHeader","footer","_multiPartFooter","_trackLength","valueLength","knownLength","byteLength","_lengthRetriever","start","stat","fileSize","contentDisposition","_getContentDisposition","_getContentType","contents","getBoundary","filepath","normalize","basename","client","_httpMessage","_lastBoundary","userHeaders","setBoundary","boundary","_boundary","_generateBoundary","dataBuffer","alloc","len","substring","getLengthSync","hasKnownLength","getLength","values","submit","defaults","port","hostname","setHeader","onResponse","responce","removeListener","dst","src","extensions","types","preference","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charset","charsets","extension","exts","to","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getPrototypeOf","__esModule","ns","def","current","getOwnPropertyNames","definition","toStringTag","__webpack_exports__"],"sourceRoot":""}
|