UNPKG

@cloudbase/node-sdk

Version:

tencent cloud base server sdk for node.js

66 lines (65 loc) 2.7 kB
"use strict"; 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;