@cloudbase/node-sdk
Version:
tencent cloud base server sdk for node.js
66 lines (65 loc) • 2.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.lookupCredentials = exports.lookupAppId = exports.lookup = exports.isAppId = exports.kMetadataVersions = exports.kSecurityCredentialsPath = exports.kAppIdPath = exports.kMetadataBaseUrl = void 0;
const axios_1 = __importDefault(require("axios"));
// 注意:改地址已经不是一定可以访问的了
exports.kMetadataBaseUrl = 'http://metadata.tencentyun.com';
exports.kAppIdPath = 'meta-data/app-id';
exports.kSecurityCredentialsPath = 'meta-data/cam/security-credentials';
var kMetadataVersions;
(function (kMetadataVersions) {
kMetadataVersions["v20170919"] = "2017-09-19";
kMetadataVersions["v1.0"] = "1.0";
kMetadataVersions["latest"] = "latest";
})(kMetadataVersions = exports.kMetadataVersions || (exports.kMetadataVersions = {}));
function isAppId(appIdStr) {
return /^[1-9][0-9]{4,64}$/gim.test(appIdStr);
}
exports.isAppId = isAppId;
async function lookup(path, options = {}) {
const url = `${exports.kMetadataBaseUrl}/${kMetadataVersions.latest}/${path}`;
const resp = await axios_1.default.get(url, options);
if (resp.status === 200) {
return resp.data;
}
else {
throw new Error(`[ERROR] GET ${url} status: ${resp.status}`);
}
}
exports.lookup = lookup;
const metadataCache = {
appId: undefined
};
/**
* lookupAppId - 该方法主要用于判断是否在云上环境
* @returns
*/
async function lookupAppId() {
if (metadataCache.appId === undefined) {
try {
// 只有首次会请求且要求快速返回,超时时间很短,DNS无法解析将会超时返回
// 在云环境中,这个时间通常在 10ms 内,部分耗时长(30+ms)的情况是 DNS 解析耗时长(27+ms)
const appId = await lookup(exports.kAppIdPath, { timeout: 30 });
if (isAppId(appId)) {
metadataCache.appId = appId;
}
else {
metadataCache.appId = '';
}
}
catch (e) {
// ignore
}
}
return metadataCache.appId || '';
}
exports.lookupAppId = lookupAppId;
async function lookupCredentials(ruleName) {
// `${kMetadataBaseUrl}/meta-data/cam/security-credentials/TCB_QcsRole`
// 这里设置了一个较短的超时时间,因为这个请求是在云环境中发起的,通常会很快返回
return await lookup(`${exports.kSecurityCredentialsPath}/${ruleName}`, { timeout: 200 });
}
exports.lookupCredentials = lookupCredentials;