t-comm
Version:
专业、稳定、纯粹的工具库
87 lines (82 loc) • 3.5 kB
JavaScript
;
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;