@cloudbase/node-sdk
Version:
tencent cloud base server sdk for node.js
41 lines (40 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildUrl = void 0;
const cloudbase_1 = require("../cloudbase");
const utils_1 = require("./utils");
const tcbcontext_1 = require("./tcbcontext");
/* eslint-disable complexity */
function buildUrl(options = { isInternal: false }) {
// 优先级:用户配置 > 环境变量
const region = options.region || process.env.TENCENTCLOUD_REGION || '';
// 有地域信息则访问地域级别域名,无地域信息则访问默认域名,默认域名固定解析到上海地域保持兼容
const internetRegionEndpoint = region
? `${region}.tcb-api.tencentcloudapi.com`
: 'tcb-api.tencentcloudapi.com';
const internalRegionEndpoint = region
? `internal.${region}.tcb-api.tencentcloudapi.com`
: 'internal.tcb-api.tencentcloudapi.com';
// 同地域走内网,跨地域走公网
const isSameRegionVisit = region
? region === process.env.TENCENTCLOUD_REGION
: true;
const endpoint = isSameRegionVisit && (options.isInternal)
? internalRegionEndpoint
: internetRegionEndpoint;
const envId = options.envId || '';
// 注意:特殊环境ID不能拼在请求地址的域名中,所以这里需要特殊处理
const envEndpoint = (0, utils_1.isValidEnvFormat)(envId) ? `${envId}.${endpoint}` : endpoint;
const protocol = options.isInternal ? 'http' : options.protocol;
// 注意:云函数环境下有地域信息,云应用环境下不确定是否有,如果没有,用户必须显式的传入
const path = '/admin';
const defaultUrl = `${protocol}://${envEndpoint}${path}`;
const serverInjectUrl = (0, tcbcontext_1.getServerInjectUrl)();
const url = options.serviceUrl || serverInjectUrl || defaultUrl;
const seqId = options.seqId;
const qs = cloudbase_1.CloudBase.scfContext
? `env=${envId}&seqId=${seqId}&scfRequestId=${cloudbase_1.CloudBase.scfContext.requestId}`
: `env=${envId}&seqId=${seqId}`;
return url.includes('?') ? `${url}${qs}` : `${url}?${qs}`;
}
exports.buildUrl = buildUrl;