UNPKG

@cloudbase/node-sdk

Version:

tencent cloud base server sdk for node.js

41 lines (40 loc) 2.13 kB
"use strict"; 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;