UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

87 lines (82 loc) 3.5 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var json_jsonParse = require('../json/json-parse.js'); /** * 通过七彩石 SDK 拉取配置(适用于 Node.js 服务端) * 支持 v3Get 和 v3GetGroup 两种模式,内置内存缓存和文件缓存 * @param {object} config 配置信息 * @param {ISecretInfo} config.secretInfo 密钥信息,包含 appId、userId、secretKey、groupName、envName * @param {any} config.sdk 七彩石 SDK 实例(需包含 Rainbow、AccessType、AddrType) * @param {string} config.key 要获取的配置 key * @param {Record<string, any>} [config.initOptions] Rainbow 初始化额外选项 * @param {boolean} [config.isFetchGroup=false] 是否使用 v3GetGroup 获取整组配置 * @param {boolean} [config.tryJsonParse=true] 是否尝试 JSON.parse 解析返回值 * @param {any} [config.rainbow] 外部传入的 Rainbow 实例(传入后不会自动 exit) * @returns {Promise<any>} 配置值 * @example * ```ts * import * as sdk from 'rainbow-sdk'; * * const config = await fetchRainbowConfigFromSdk({ * secretInfo: { * appId: 'xxx', * userId: 'xxx', * secretKey: 'xxx', * groupName: 'default', * envName: 'prod', * }, * sdk, * key: 'my_config_key', * }); * ``` */ function fetchRainbowConfigFromSdk(_ref) { var secretInfo = _ref.secretInfo, sdk = _ref.sdk, initOptions = _ref.initOptions, key = _ref.key, _ref$isFetchGroup = _ref.isFetchGroup, isFetchGroup = _ref$isFetchGroup === void 0 ? false : _ref$isFetchGroup, _ref$tryJsonParse = _ref.tryJsonParse, tryJsonParse = _ref$tryJsonParse === void 0 ? true : _ref$tryJsonParse, rainbow = _ref.rainbow; return new Promise(function (resolve, reject) { var Rainbow = sdk.Rainbow, AccessType = sdk.AccessType, AddrType = sdk.AddrType; var httpOptions = Object.assign({ accessType: AccessType.Default, // 一次性脚本时,防止 exit 不生效 addrType: rainbow ? undefined : AddrType.Domain, // 0.4.0 及以上版本默认开启缓存 // //【可选】使用内存缓存,无特殊情况都要开启。业务需严格按照规范打开本地内存缓存,保证当七彩石后端出现异常后,线上业务服务还可以正常运行。若用户强制关闭本地缓存,将实时强依赖七彩石,业务需自己做好兜底措施,否则会有风险隐患。 isUsingLocalCache: true, // //【可选】使用文件缓存,无特殊情况都要开启。原因同上 isUsingFileCache: true }, initOptions || {}); var innerRainbow = rainbow || new Rainbow(httpOptions); var api = isFetchGroup ? 'v3GetGroup' : 'v3Get'; innerRainbow[api]({ appID: secretInfo.appId || secretInfo.appID, userID: secretInfo.userId || secretInfo.userID, secretKey: secretInfo.secretKey, group: secretInfo.groupName, envName: secretInfo.envName || 'Default' }, key).then(function (res) { if (tryJsonParse) { var result = json_jsonParse.safeJsonParse(res, res); resolve(result); return; } resolve(res); })["catch"](function (err) { reject(err); })["finally"](function () { var _a; if (!rainbow) { (_a = innerRainbow.exit) === null || _a === void 0 ? void 0 : _a.call(innerRainbow); } })["catch"](function () {}); }); } exports.fetchRainbowConfigFromSdk = fetchRainbowConfigFromSdk;