@tencent-sdk/capi
Advanced tools
Comparing version 1.1.8 to 2.0.0
export { tencentSign, tencentSignV1 } from './utils'; | ||
export * from './factory'; | ||
export interface CapiOptions { | ||
@@ -11,15 +12,15 @@ isV3?: boolean; | ||
timeout?: number; | ||
ServiceType: string; | ||
Version?: string; | ||
Region: string; | ||
SecretId: string; | ||
SecretKey: string; | ||
Token?: string; | ||
SignatureMethod?: string; | ||
RequestClient?: string; | ||
serviceType: string; | ||
version?: string; | ||
region: string; | ||
secretId: string; | ||
secretKey: string; | ||
token?: string; | ||
signatureMethod?: string; | ||
requestClient?: string; | ||
} | ||
export interface RequestData { | ||
Action: string; | ||
RequestClient?: string; | ||
Version?: string; | ||
action: string; | ||
requestClient?: string; | ||
version?: string; | ||
[propName: string]: any; | ||
@@ -36,3 +37,3 @@ } | ||
timeout?: number; | ||
RequestClient?: string; | ||
requestClient?: string; | ||
} | ||
@@ -46,4 +47,4 @@ export interface CapiInstance { | ||
constructor(options: CapiOptions); | ||
request(data: RequestData, opts?: RequestOptions, isV3?: boolean): any; | ||
request(data: RequestData, opts?: RequestOptions, isV3?: boolean): Promise<any>; | ||
} | ||
//# sourceMappingURL=index.d.ts.map |
import { createHash, createHmac } from 'crypto'; | ||
import { getUnixTime, getDate, flatten, deepClone, cleanEmptyValue, logger, pascalCaseProps, querystring } from '@tencent-sdk/common'; | ||
import got from 'got'; | ||
@@ -17,3 +19,28 @@ /*! ***************************************************************************** | ||
***************************************************************************** */ | ||
/* global Reflect, Promise */ | ||
var extendStatics = function(d, b) { | ||
extendStatics = Object.setPrototypeOf || | ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
return extendStatics(d, b); | ||
}; | ||
function __extends(d, b) { | ||
extendStatics(d, b); | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
} | ||
var __assign = function() { | ||
__assign = Object.assign || function __assign(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
function __rest(s, e) { | ||
@@ -31,23 +58,47 @@ var t = {}; | ||
function logger(topic, content) { | ||
console.log("[DEBUG] " + topic + ": " + content + " "); | ||
function __awaiter(thisArg, _arguments, P, generator) { | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
} | ||
function __generator(thisArg, body) { | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
} | ||
function getHost(_a, isV1) { | ||
var host = _a.host, ServiceType = _a.ServiceType, Region = _a.Region, baseHost = _a.baseHost; | ||
var host = _a.host, serviceType = _a.serviceType, region = _a.region, baseHost = _a.baseHost; | ||
if (isV1 === void 0) { isV1 = false; } | ||
if (!host) { | ||
host = "" + ServiceType + (isV1 ? '' : "." + Region) + "." + baseHost; | ||
host = "" + serviceType + (isV1 ? '' : "." + region) + "." + baseHost; | ||
} | ||
return host; | ||
} | ||
function getUnixTime(date) { | ||
var val = date.getTime(); | ||
return Math.ceil(val / 1000); | ||
} | ||
function getDate(date) { | ||
var year = date.getUTCFullYear(); | ||
var month = date.getUTCMonth() + 1; | ||
var day = date.getUTCDate(); | ||
return year + "-" + (month > 9 ? month : "0" + month) + "-" + (day > 9 ? day : "0" + day); | ||
} | ||
function getUrl(opts, isV1) { | ||
@@ -65,85 +116,2 @@ if (isV1 === void 0) { isV1 = false; } | ||
/** | ||
* is array | ||
* @param obj object | ||
*/ | ||
function isArray(obj) { | ||
return Object.prototype.toString.call(obj) == '[object Array]'; | ||
} | ||
/** | ||
* is object | ||
* @param obj object | ||
*/ | ||
function isObject(obj) { | ||
return obj === Object(obj); | ||
} | ||
/** | ||
* iterate object or array | ||
* @param obj object or array | ||
* @param iterator iterator function | ||
*/ | ||
function _forEach(obj, iterator) { | ||
if (isArray(obj)) { | ||
var arr = obj; | ||
if (arr.forEach) { | ||
arr.forEach(iterator); | ||
return; | ||
} | ||
for (var i = 0; i < arr.length; i += 1) { | ||
iterator(arr[i], i, arr); | ||
} | ||
} | ||
else { | ||
var oo = obj; | ||
for (var key in oo) { | ||
if (obj.hasOwnProperty(key)) { | ||
iterator(oo[key], key, obj); | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* flatter request parameter | ||
* @param obj target object or array | ||
*/ | ||
function flatten(obj) { | ||
if (!isArray(obj) && !isObject(obj)) { | ||
return {}; | ||
} | ||
var ret = {}; | ||
var _dump = function (obj, prefix, parents) { | ||
var checkedParents = []; | ||
if (parents) { | ||
var i = void 0; | ||
for (i = 0; i < parents.length; i++) { | ||
if (parents[i] === obj) { | ||
throw new Error('object has circular references'); | ||
} | ||
checkedParents.push(obj); | ||
} | ||
} | ||
checkedParents.push(obj); | ||
if (!isArray(obj) && !isObject(obj)) { | ||
if (!prefix) { | ||
throw obj + 'is not object or array'; | ||
} | ||
ret[prefix] = obj; | ||
return {}; | ||
} | ||
if (isArray(obj)) { | ||
// it's an array | ||
_forEach(obj, function (obj, i) { | ||
_dump(obj, prefix ? prefix + '.' + i : '' + i, checkedParents); | ||
}); | ||
} | ||
else { | ||
// it's an object | ||
_forEach(obj, function (obj, key) { | ||
_dump(obj, prefix ? prefix + '.' + key : '' + key, checkedParents); | ||
}); | ||
} | ||
}; | ||
_dump(obj, null); | ||
return ret; | ||
} | ||
/** | ||
* generate tencent cloud sign result | ||
@@ -161,42 +129,42 @@ * | ||
baseHost: options.baseHost, | ||
ServiceType: options.ServiceType, | ||
Region: options.Region, | ||
serviceType: options.serviceType, | ||
region: options.region, | ||
}; | ||
var url = getUrl(hostParams); | ||
var Host = getHost(hostParams); | ||
var host = getHost(hostParams); | ||
var d = new Date(); | ||
var Timestamp = String(getUnixTime(d)); | ||
var timestamp = String(getUnixTime(d)); | ||
var date = getDate(d); | ||
var Algorithm = 'TC3-HMAC-SHA256'; | ||
var algorithm = 'TC3-HMAC-SHA256'; | ||
// 1. create Canonical request string | ||
var HTTPRequestMethod = (options.method || 'POST').toUpperCase(); | ||
var CanonicalURI = '/'; | ||
var CanonicalQueryString = ''; | ||
var CanonicalHeaders = "content-type:application/json\nhost:" + Host + "\n"; | ||
var SignedHeaders = 'content-type;host'; | ||
var HashedRequestPayload = createHash('sha256') | ||
var httpRequestMethod = (options.method || 'POST').toUpperCase(); | ||
var canonicalURI = '/'; | ||
var canonicalQueryString = ''; | ||
var canonicalHeaders = "content-type:application/json\nhost:" + host + "\n"; | ||
var signedHeaders = 'content-type;host'; | ||
var hashedRequestPayload = createHash('sha256') | ||
.update(JSON.stringify(payload)) | ||
.digest('hex'); | ||
var CanonicalRequest = HTTPRequestMethod + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders + "\n" + SignedHeaders + "\n" + HashedRequestPayload; | ||
var canonicalRequest = httpRequestMethod + "\n" + canonicalURI + "\n" + canonicalQueryString + "\n" + canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload; | ||
// 2. create string to sign | ||
var CredentialScope = date + "/" + options.ServiceType + "/tc3_request"; | ||
var HashedCanonicalRequest = createHash('sha256') | ||
.update(CanonicalRequest) | ||
var credentialScope = date + "/" + options.serviceType + "/tc3_request"; | ||
var hashedCanonicalRequest = createHash('sha256') | ||
.update(canonicalRequest) | ||
.digest('hex'); | ||
var StringToSign = Algorithm + "\n" + Timestamp + "\n" + CredentialScope + "\n" + HashedCanonicalRequest; | ||
var stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest; | ||
// 3. calculate signature | ||
var SecretDate = sign(date, Buffer.from("TC3" + options.SecretKey, 'utf8')); | ||
var SecretService = sign(options.ServiceType, SecretDate); | ||
var SecretSigning = sign('tc3_request', SecretService); | ||
var Signature = createHmac('sha256', SecretSigning) | ||
.update(Buffer.from(StringToSign, 'utf8')) | ||
var secretDate = sign(date, Buffer.from("TC3" + options.secretKey, 'utf8')); | ||
var secretService = sign(options.serviceType, secretDate); | ||
var secretSigning = sign('tc3_request', secretService); | ||
var signature = createHmac('sha256', secretSigning) | ||
.update(Buffer.from(stringToSign, 'utf8')) | ||
.digest('hex'); | ||
// 4. create authorization | ||
var Authorization = Algorithm + " Credential=" + options.SecretId + "/" + CredentialScope + ", SignedHeaders=" + SignedHeaders + ", Signature=" + Signature; | ||
var authorization = algorithm + " Credential=" + options.secretId + "/" + credentialScope + ", SignedHeaders=" + signedHeaders + ", Signature=" + signature; | ||
return { | ||
url: url, | ||
payload: payload, | ||
Host: Host, | ||
Authorization: Authorization, | ||
Timestamp: Timestamp, | ||
host: host, | ||
authorization: authorization, | ||
timestamp: timestamp, | ||
}; | ||
@@ -217,4 +185,4 @@ } | ||
baseHost: options.baseHost, | ||
ServiceType: options.ServiceType, | ||
Region: options.Region, | ||
serviceType: options.serviceType, | ||
region: options.region, | ||
}; | ||
@@ -226,12 +194,12 @@ var url = getUrl(hostParams, true); | ||
var Nonce = Math.round(Math.random() * 65535); | ||
payload.Region = options.Region; | ||
payload.Region = options.region; | ||
payload.Nonce = Nonce; | ||
payload.Timestamp = Timestamp; | ||
payload.SecretId = options.SecretId; | ||
payload.Version = payload.Version || options.Version; | ||
payload.RequestClient = options.RequestClient; | ||
if (options.Token) { | ||
payload.Token = options.Token; | ||
payload.SecretId = options.secretId; | ||
payload.Version = payload.Version || options.version; | ||
payload.RequestClient = options.requestClient; | ||
if (options.token) { | ||
payload.Token = options.token; | ||
} | ||
if (options.SignatureMethod === 'sha256') { | ||
if (options.signatureMethod === 'sha256') { | ||
payload.SignatureMethod = 'HmacSHA256'; | ||
@@ -260,3 +228,3 @@ } | ||
qstr = qstr.slice(1); | ||
payload.Signature = sign("" + method + Host + options.path + "?" + qstr, Buffer.from(options.SecretKey, 'utf8'), options.SignatureMethod).toString('base64'); | ||
payload.Signature = sign("" + method + Host + options.path + "?" + qstr, Buffer.from(options.secretKey, 'utf8'), options.signatureMethod).toString('base64'); | ||
return { | ||
@@ -268,41 +236,115 @@ url: url, | ||
} | ||
function stringifyPrimitive(v) { | ||
switch (typeof v) { | ||
case 'string': | ||
return v; | ||
case 'boolean': | ||
return v ? 'true' : 'false'; | ||
case 'number': | ||
return isFinite(v) ? v : ''; | ||
default: | ||
return ''; | ||
var ServiceType; | ||
(function (ServiceType) { | ||
/** API 网关服务 (apigateway) */ | ||
ServiceType["apigateway"] = "apigateway"; | ||
ServiceType["apigw"] = "apigw"; | ||
/** 云函数服务 (SCF) */ | ||
ServiceType["faas"] = "scf"; | ||
/** 视频处理服务 (MPS) */ | ||
ServiceType["mps"] = "mps"; | ||
/** 资源标签服务 (TAG) */ | ||
ServiceType["tag"] = "tag"; | ||
/** 内容分发 (CDN) */ | ||
ServiceType["cdn"] = "cdn"; | ||
/** 文件存储 (CFS) */ | ||
ServiceType["cfs"] = "cfs"; | ||
/** 域名解析服务 (CNS) */ | ||
ServiceType["cns"] = "cns"; | ||
/** */ | ||
ServiceType["domain"] = "domain"; | ||
/** MySQL 数据库 (CynosDB) */ | ||
ServiceType["cynosdb"] = "cynosdb"; | ||
/** Postgres 数据库 (Postgres) */ | ||
ServiceType["postgres"] = "postgres"; | ||
/** 私有网络 (VPC) */ | ||
ServiceType["vpc"] = "vpc"; | ||
/* 访问管理 (CAM) */ | ||
ServiceType["cam"] = "cam"; | ||
// 负载均衡 (CLB)*/ | ||
ServiceType["clb"] = "clb"; | ||
// 监控 */ | ||
ServiceType["monitor"] = "monitor"; | ||
})(ServiceType || (ServiceType = {})); | ||
var CommonError = /** @class */ (function (_super) { | ||
__extends(CommonError, _super); | ||
function CommonError(_a) { | ||
var type = _a.type, message = _a.message, stack = _a.stack, reqId = _a.reqId, displayMsg = _a.displayMsg, code = _a.code; | ||
var _this = _super.call(this, message) || this; | ||
_this.type = type; | ||
if (stack) { | ||
_this.stack = stack; | ||
} | ||
if (reqId) { | ||
_this.reqId = reqId; | ||
} | ||
if (code) { | ||
_this.code = code; | ||
} | ||
_this.displayMsg = displayMsg !== null && displayMsg !== void 0 ? displayMsg : message; | ||
return _this; | ||
} | ||
return CommonError; | ||
}(Error)); | ||
function ApiFactory(_a) { | ||
var _this = this; | ||
var _b = _a.debug, debug = _b === void 0 ? false : _b, _c = _a.isV3, isV3 = _c === void 0 ? false : _c, actions = _a.actions, serviceType = _a.serviceType, host = _a.host, path = _a.path, version = _a.version, customHandler = _a.customHandler, _d = _a.responseHandler, responseHandler = _d === void 0 ? function (res) { return res; } : _d, errorHandler = _a.errorHandler, _e = _a.requestClient, requestClient = _e === void 0 ? 'TENCENT_SDK' : _e; | ||
var APIS = {}; | ||
actions.forEach(function (action) { | ||
APIS[action] = function (capi, inputs) { return __awaiter(_this, void 0, void 0, function () { | ||
var reqData, res, Response_1, e_1; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
inputs = deepClone(inputs); | ||
reqData = cleanEmptyValue(__assign({ action: action, | ||
version: version }, inputs)); | ||
inputs = cleanEmptyValue(inputs); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, 3, , 4]); | ||
return [4 /*yield*/, capi.request(reqData, { | ||
isV3: isV3, | ||
debug: debug, | ||
requestClient: requestClient, | ||
host: host || serviceType + ".tencentcloudapi.com", | ||
path: path || '/', | ||
})]; | ||
case 2: | ||
res = _a.sent(); | ||
// Customize response handler | ||
if (customHandler) { | ||
return [2 /*return*/, customHandler(action, res)]; | ||
} | ||
Response_1 = res.Response; | ||
if (Response_1 && Response_1.Error && Response_1.Error.Code) { | ||
if (errorHandler) { | ||
return [2 /*return*/, errorHandler(action, Response_1)]; | ||
} | ||
throw new CommonError({ | ||
type: "API_" + serviceType.toUpperCase() + "_" + action, | ||
message: Response_1.Error.Message + " (reqId: " + Response_1.RequestId + ")", | ||
reqId: Response_1.RequestId, | ||
code: Response_1.Error.Code, | ||
}); | ||
} | ||
return [2 /*return*/, responseHandler(Response_1)]; | ||
case 3: | ||
e_1 = _a.sent(); | ||
throw new CommonError({ | ||
type: "API_" + serviceType.toUpperCase() + "_" + action, | ||
message: e_1.message, | ||
stack: e_1.stack, | ||
reqId: e_1.reqId, | ||
code: e_1.code, | ||
}); | ||
case 4: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }; | ||
}); | ||
return APIS; | ||
} | ||
function querystring(obj) { | ||
var sep = '&'; | ||
var eq = '='; | ||
if (!obj) | ||
return ''; | ||
if (obj && typeof obj === 'object') { | ||
return Object.keys(obj) | ||
.map(function (k) { | ||
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; | ||
if (Array.isArray(obj[k])) { | ||
return obj[k] | ||
.map(function (v) { | ||
return ks + encodeURIComponent(stringifyPrimitive(v)); | ||
}) | ||
.join(sep); | ||
} | ||
else { | ||
return ks + encodeURIComponent(stringifyPrimitive(obj[k])); | ||
} | ||
}) | ||
.filter(Boolean) | ||
.join(sep); | ||
} | ||
return ''; | ||
} | ||
var rp = require('request-promise-native'); | ||
var Capi = /** @class */ (function () { | ||
@@ -315,7 +357,7 @@ function Capi(options) { | ||
baseHost: 'tencentcloudapi.com', | ||
ServiceType: '', | ||
SecretId: '', | ||
SecretKey: '', | ||
Region: 'ap-guangzhou', | ||
SignatureMethod: 'sha1', | ||
serviceType: '', | ||
secretId: '', | ||
secretKey: '', | ||
region: 'ap-guangzhou', | ||
signatureMethod: 'sha1', | ||
}; | ||
@@ -327,61 +369,70 @@ this.options = Object.assign(this.defaultOptions, options); | ||
if (isV3 === void 0) { isV3 = false; } | ||
var options = Object.assign(this.options, opts); | ||
options.RequestClient = | ||
options.RequestClient || data.RequestClient || 'TENCENT_SDK_CAPI'; | ||
var Action = data.Action, Version = data.Version, restData = __rest(data, ["Action", "Version"]); | ||
var reqOption = { | ||
url: '', | ||
method: '', | ||
json: true, | ||
strictSSL: false, | ||
}; | ||
if (isV3 || opts.isV3) { | ||
var _a = tencentSign(restData, options), url = _a.url, payload = _a.payload, Authorization = _a.Authorization, Timestamp = _a.Timestamp, Host = _a.Host; | ||
reqOption = { | ||
url: url, | ||
method: 'POST', | ||
json: true, | ||
strictSSL: false, | ||
headers: { | ||
'Content-Type': 'application/json', | ||
Authorization: Authorization, | ||
Host: Host, | ||
'X-TC-Action': Action, | ||
'X-TC-Version': Version || options.Version, | ||
'X-TC-Timestamp': Timestamp, | ||
'X-TC-Region': options.Region, | ||
}, | ||
body: payload, | ||
}; | ||
if (!reqOption.headers) { | ||
reqOption.headers = {}; | ||
} | ||
reqOption.headers['X-TC-RequestClient'] = options.RequestClient; | ||
if (this.options.Token) { | ||
reqOption.headers['X-TC-Token'] = this.options.Token; | ||
} | ||
} | ||
else { | ||
var _b = tencentSignV1(data, options), url = _b.url, method = _b.method, payload = _b.payload; | ||
reqOption = { | ||
url: url, | ||
method: method, | ||
json: true, | ||
strictSSL: false, | ||
}; | ||
if (method === 'POST') { | ||
reqOption.form = payload; | ||
} | ||
else { | ||
reqOption.url += '?' + querystring(payload); | ||
} | ||
} | ||
if (options.timeout) { | ||
reqOption.timeout = options.timeout; | ||
} | ||
// debug request option | ||
if (options.debug) { | ||
logger('Request Option', JSON.stringify(reqOption)); | ||
} | ||
return rp(reqOption); | ||
return __awaiter(this, void 0, void 0, function () { | ||
var options, action, version, restData, reqOption, _a, url_1, payload, authorization, timestamp, host, _b, url_2, method, payload, url, restOptions, body; | ||
return __generator(this, function (_c) { | ||
switch (_c.label) { | ||
case 0: | ||
options = Object.assign(this.options, opts); | ||
options.requestClient = | ||
options.requestClient || data.requestClient || 'TENCENT_SDK_CAPI'; | ||
action = data.action, version = data.version, restData = __rest(data, ["action", "version"]); | ||
reqOption = { | ||
url: '', | ||
method: 'GET', | ||
responseType: 'json', | ||
}; | ||
if (isV3 || opts.isV3) { | ||
_a = tencentSign(pascalCaseProps(restData), options), url_1 = _a.url, payload = _a.payload, authorization = _a.authorization, timestamp = _a.timestamp, host = _a.host; | ||
reqOption = { | ||
url: url_1, | ||
method: 'POST', | ||
responseType: 'json', | ||
headers: { | ||
'Content-Type': 'application/json', | ||
Authorization: authorization, | ||
Host: host, | ||
'X-TC-Action': action, | ||
'X-TC-Version': version || options.version, | ||
'X-TC-Timestamp': timestamp, | ||
'X-TC-Region': options.region, | ||
}, | ||
json: payload, | ||
}; | ||
reqOption.headers['X-TC-RequestClient'] = options.requestClient; | ||
if (this.options.token) { | ||
reqOption.headers['X-TC-Token'] = this.options.token; | ||
} | ||
} | ||
else { | ||
_b = tencentSignV1(pascalCaseProps(data), options), url_2 = _b.url, method = _b.method, payload = _b.payload; | ||
reqOption = { | ||
url: url_2, | ||
method: method, | ||
responseType: 'json', | ||
headers: { | ||
'Content-Type': 'application/json', | ||
}, | ||
}; | ||
if (method === 'POST') { | ||
reqOption.form = payload; | ||
} | ||
else { | ||
reqOption.url += '?' + querystring(payload); | ||
} | ||
} | ||
if (options.timeout) { | ||
reqOption.timeout = options.timeout; | ||
} | ||
// debug request option | ||
if (options.debug) { | ||
logger('Request Option', JSON.stringify(reqOption)); | ||
} | ||
url = reqOption.url, restOptions = __rest(reqOption, ["url"]); | ||
return [4 /*yield*/, got(url, restOptions)]; | ||
case 1: | ||
body = (_c.sent()).body; | ||
return [2 /*return*/, body]; | ||
} | ||
}); | ||
}); | ||
}; | ||
@@ -391,3 +442,3 @@ return Capi; | ||
export { Capi, tencentSign, tencentSignV1 }; | ||
export { Capi, tencentSign, tencentSignV1, ServiceType, CommonError, ApiFactory }; | ||
//# sourceMappingURL=index.esm.js.map |
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('crypto')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'crypto'], factory) : | ||
(factory((global.capi = {}),global.crypto)); | ||
}(this, (function (exports,crypto) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('crypto'), require('@tencent-sdk/common'), require('got')) : | ||
typeof define === 'function' && define.amd ? define(['exports', 'crypto', '@tencent-sdk/common', 'got'], factory) : | ||
(factory((global.capi = {}),global.crypto,global['@tencent-sdk/common'],global.got)); | ||
}(this, (function (exports,crypto,common,got) { 'use strict'; | ||
got = got && got.hasOwnProperty('default') ? got['default'] : got; | ||
/*! ***************************************************************************** | ||
@@ -21,3 +23,28 @@ Copyright (c) Microsoft Corporation. All rights reserved. | ||
***************************************************************************** */ | ||
/* global Reflect, Promise */ | ||
var extendStatics = function(d, b) { | ||
extendStatics = Object.setPrototypeOf || | ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
return extendStatics(d, b); | ||
}; | ||
function __extends(d, b) { | ||
extendStatics(d, b); | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
} | ||
var __assign = function() { | ||
__assign = Object.assign || function __assign(t) { | ||
for (var s, i = 1, n = arguments.length; i < n; i++) { | ||
s = arguments[i]; | ||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; | ||
} | ||
return t; | ||
}; | ||
return __assign.apply(this, arguments); | ||
}; | ||
function __rest(s, e) { | ||
@@ -35,23 +62,47 @@ var t = {}; | ||
function logger(topic, content) { | ||
console.log("[DEBUG] " + topic + ": " + content + " "); | ||
function __awaiter(thisArg, _arguments, P, generator) { | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
} | ||
function __generator(thisArg, body) { | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
} | ||
function getHost(_a, isV1) { | ||
var host = _a.host, ServiceType = _a.ServiceType, Region = _a.Region, baseHost = _a.baseHost; | ||
var host = _a.host, serviceType = _a.serviceType, region = _a.region, baseHost = _a.baseHost; | ||
if (isV1 === void 0) { isV1 = false; } | ||
if (!host) { | ||
host = "" + ServiceType + (isV1 ? '' : "." + Region) + "." + baseHost; | ||
host = "" + serviceType + (isV1 ? '' : "." + region) + "." + baseHost; | ||
} | ||
return host; | ||
} | ||
function getUnixTime(date) { | ||
var val = date.getTime(); | ||
return Math.ceil(val / 1000); | ||
} | ||
function getDate(date) { | ||
var year = date.getUTCFullYear(); | ||
var month = date.getUTCMonth() + 1; | ||
var day = date.getUTCDate(); | ||
return year + "-" + (month > 9 ? month : "0" + month) + "-" + (day > 9 ? day : "0" + day); | ||
} | ||
function getUrl(opts, isV1) { | ||
@@ -69,85 +120,2 @@ if (isV1 === void 0) { isV1 = false; } | ||
/** | ||
* is array | ||
* @param obj object | ||
*/ | ||
function isArray(obj) { | ||
return Object.prototype.toString.call(obj) == '[object Array]'; | ||
} | ||
/** | ||
* is object | ||
* @param obj object | ||
*/ | ||
function isObject(obj) { | ||
return obj === Object(obj); | ||
} | ||
/** | ||
* iterate object or array | ||
* @param obj object or array | ||
* @param iterator iterator function | ||
*/ | ||
function _forEach(obj, iterator) { | ||
if (isArray(obj)) { | ||
var arr = obj; | ||
if (arr.forEach) { | ||
arr.forEach(iterator); | ||
return; | ||
} | ||
for (var i = 0; i < arr.length; i += 1) { | ||
iterator(arr[i], i, arr); | ||
} | ||
} | ||
else { | ||
var oo = obj; | ||
for (var key in oo) { | ||
if (obj.hasOwnProperty(key)) { | ||
iterator(oo[key], key, obj); | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* flatter request parameter | ||
* @param obj target object or array | ||
*/ | ||
function flatten(obj) { | ||
if (!isArray(obj) && !isObject(obj)) { | ||
return {}; | ||
} | ||
var ret = {}; | ||
var _dump = function (obj, prefix, parents) { | ||
var checkedParents = []; | ||
if (parents) { | ||
var i = void 0; | ||
for (i = 0; i < parents.length; i++) { | ||
if (parents[i] === obj) { | ||
throw new Error('object has circular references'); | ||
} | ||
checkedParents.push(obj); | ||
} | ||
} | ||
checkedParents.push(obj); | ||
if (!isArray(obj) && !isObject(obj)) { | ||
if (!prefix) { | ||
throw obj + 'is not object or array'; | ||
} | ||
ret[prefix] = obj; | ||
return {}; | ||
} | ||
if (isArray(obj)) { | ||
// it's an array | ||
_forEach(obj, function (obj, i) { | ||
_dump(obj, prefix ? prefix + '.' + i : '' + i, checkedParents); | ||
}); | ||
} | ||
else { | ||
// it's an object | ||
_forEach(obj, function (obj, key) { | ||
_dump(obj, prefix ? prefix + '.' + key : '' + key, checkedParents); | ||
}); | ||
} | ||
}; | ||
_dump(obj, null); | ||
return ret; | ||
} | ||
/** | ||
* generate tencent cloud sign result | ||
@@ -165,42 +133,42 @@ * | ||
baseHost: options.baseHost, | ||
ServiceType: options.ServiceType, | ||
Region: options.Region, | ||
serviceType: options.serviceType, | ||
region: options.region, | ||
}; | ||
var url = getUrl(hostParams); | ||
var Host = getHost(hostParams); | ||
var host = getHost(hostParams); | ||
var d = new Date(); | ||
var Timestamp = String(getUnixTime(d)); | ||
var date = getDate(d); | ||
var Algorithm = 'TC3-HMAC-SHA256'; | ||
var timestamp = String(common.getUnixTime(d)); | ||
var date = common.getDate(d); | ||
var algorithm = 'TC3-HMAC-SHA256'; | ||
// 1. create Canonical request string | ||
var HTTPRequestMethod = (options.method || 'POST').toUpperCase(); | ||
var CanonicalURI = '/'; | ||
var CanonicalQueryString = ''; | ||
var CanonicalHeaders = "content-type:application/json\nhost:" + Host + "\n"; | ||
var SignedHeaders = 'content-type;host'; | ||
var HashedRequestPayload = crypto.createHash('sha256') | ||
var httpRequestMethod = (options.method || 'POST').toUpperCase(); | ||
var canonicalURI = '/'; | ||
var canonicalQueryString = ''; | ||
var canonicalHeaders = "content-type:application/json\nhost:" + host + "\n"; | ||
var signedHeaders = 'content-type;host'; | ||
var hashedRequestPayload = crypto.createHash('sha256') | ||
.update(JSON.stringify(payload)) | ||
.digest('hex'); | ||
var CanonicalRequest = HTTPRequestMethod + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders + "\n" + SignedHeaders + "\n" + HashedRequestPayload; | ||
var canonicalRequest = httpRequestMethod + "\n" + canonicalURI + "\n" + canonicalQueryString + "\n" + canonicalHeaders + "\n" + signedHeaders + "\n" + hashedRequestPayload; | ||
// 2. create string to sign | ||
var CredentialScope = date + "/" + options.ServiceType + "/tc3_request"; | ||
var HashedCanonicalRequest = crypto.createHash('sha256') | ||
.update(CanonicalRequest) | ||
var credentialScope = date + "/" + options.serviceType + "/tc3_request"; | ||
var hashedCanonicalRequest = crypto.createHash('sha256') | ||
.update(canonicalRequest) | ||
.digest('hex'); | ||
var StringToSign = Algorithm + "\n" + Timestamp + "\n" + CredentialScope + "\n" + HashedCanonicalRequest; | ||
var stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest; | ||
// 3. calculate signature | ||
var SecretDate = sign(date, Buffer.from("TC3" + options.SecretKey, 'utf8')); | ||
var SecretService = sign(options.ServiceType, SecretDate); | ||
var SecretSigning = sign('tc3_request', SecretService); | ||
var Signature = crypto.createHmac('sha256', SecretSigning) | ||
.update(Buffer.from(StringToSign, 'utf8')) | ||
var secretDate = sign(date, Buffer.from("TC3" + options.secretKey, 'utf8')); | ||
var secretService = sign(options.serviceType, secretDate); | ||
var secretSigning = sign('tc3_request', secretService); | ||
var signature = crypto.createHmac('sha256', secretSigning) | ||
.update(Buffer.from(stringToSign, 'utf8')) | ||
.digest('hex'); | ||
// 4. create authorization | ||
var Authorization = Algorithm + " Credential=" + options.SecretId + "/" + CredentialScope + ", SignedHeaders=" + SignedHeaders + ", Signature=" + Signature; | ||
var authorization = algorithm + " Credential=" + options.secretId + "/" + credentialScope + ", SignedHeaders=" + signedHeaders + ", Signature=" + signature; | ||
return { | ||
url: url, | ||
payload: payload, | ||
Host: Host, | ||
Authorization: Authorization, | ||
Timestamp: Timestamp, | ||
host: host, | ||
authorization: authorization, | ||
timestamp: timestamp, | ||
}; | ||
@@ -221,4 +189,4 @@ } | ||
baseHost: options.baseHost, | ||
ServiceType: options.ServiceType, | ||
Region: options.Region, | ||
serviceType: options.serviceType, | ||
region: options.region, | ||
}; | ||
@@ -228,17 +196,17 @@ var url = getUrl(hostParams, true); | ||
var d = new Date(); | ||
var Timestamp = getUnixTime(d); | ||
var Timestamp = common.getUnixTime(d); | ||
var Nonce = Math.round(Math.random() * 65535); | ||
payload.Region = options.Region; | ||
payload.Region = options.region; | ||
payload.Nonce = Nonce; | ||
payload.Timestamp = Timestamp; | ||
payload.SecretId = options.SecretId; | ||
payload.Version = payload.Version || options.Version; | ||
payload.RequestClient = options.RequestClient; | ||
if (options.Token) { | ||
payload.Token = options.Token; | ||
payload.SecretId = options.secretId; | ||
payload.Version = payload.Version || options.version; | ||
payload.RequestClient = options.requestClient; | ||
if (options.token) { | ||
payload.Token = options.token; | ||
} | ||
if (options.SignatureMethod === 'sha256') { | ||
if (options.signatureMethod === 'sha256') { | ||
payload.SignatureMethod = 'HmacSHA256'; | ||
} | ||
payload = flatten(payload); | ||
payload = common.flatten(payload); | ||
var keys = Object.keys(payload).sort(); | ||
@@ -264,3 +232,3 @@ var method = (options.method || 'POST').toUpperCase(); | ||
qstr = qstr.slice(1); | ||
payload.Signature = sign("" + method + Host + options.path + "?" + qstr, Buffer.from(options.SecretKey, 'utf8'), options.SignatureMethod).toString('base64'); | ||
payload.Signature = sign("" + method + Host + options.path + "?" + qstr, Buffer.from(options.secretKey, 'utf8'), options.signatureMethod).toString('base64'); | ||
return { | ||
@@ -272,41 +240,114 @@ url: url, | ||
} | ||
function stringifyPrimitive(v) { | ||
switch (typeof v) { | ||
case 'string': | ||
return v; | ||
case 'boolean': | ||
return v ? 'true' : 'false'; | ||
case 'number': | ||
return isFinite(v) ? v : ''; | ||
default: | ||
return ''; | ||
(function (ServiceType) { | ||
/** API 网关服务 (apigateway) */ | ||
ServiceType["apigateway"] = "apigateway"; | ||
ServiceType["apigw"] = "apigw"; | ||
/** 云函数服务 (SCF) */ | ||
ServiceType["faas"] = "scf"; | ||
/** 视频处理服务 (MPS) */ | ||
ServiceType["mps"] = "mps"; | ||
/** 资源标签服务 (TAG) */ | ||
ServiceType["tag"] = "tag"; | ||
/** 内容分发 (CDN) */ | ||
ServiceType["cdn"] = "cdn"; | ||
/** 文件存储 (CFS) */ | ||
ServiceType["cfs"] = "cfs"; | ||
/** 域名解析服务 (CNS) */ | ||
ServiceType["cns"] = "cns"; | ||
/** */ | ||
ServiceType["domain"] = "domain"; | ||
/** MySQL 数据库 (CynosDB) */ | ||
ServiceType["cynosdb"] = "cynosdb"; | ||
/** Postgres 数据库 (Postgres) */ | ||
ServiceType["postgres"] = "postgres"; | ||
/** 私有网络 (VPC) */ | ||
ServiceType["vpc"] = "vpc"; | ||
/* 访问管理 (CAM) */ | ||
ServiceType["cam"] = "cam"; | ||
// 负载均衡 (CLB)*/ | ||
ServiceType["clb"] = "clb"; | ||
// 监控 */ | ||
ServiceType["monitor"] = "monitor"; | ||
})(exports.ServiceType || (exports.ServiceType = {})); | ||
var CommonError = /** @class */ (function (_super) { | ||
__extends(CommonError, _super); | ||
function CommonError(_a) { | ||
var type = _a.type, message = _a.message, stack = _a.stack, reqId = _a.reqId, displayMsg = _a.displayMsg, code = _a.code; | ||
var _this = _super.call(this, message) || this; | ||
_this.type = type; | ||
if (stack) { | ||
_this.stack = stack; | ||
} | ||
if (reqId) { | ||
_this.reqId = reqId; | ||
} | ||
if (code) { | ||
_this.code = code; | ||
} | ||
_this.displayMsg = displayMsg !== null && displayMsg !== void 0 ? displayMsg : message; | ||
return _this; | ||
} | ||
return CommonError; | ||
}(Error)); | ||
function ApiFactory(_a) { | ||
var _this = this; | ||
var _b = _a.debug, debug = _b === void 0 ? false : _b, _c = _a.isV3, isV3 = _c === void 0 ? false : _c, actions = _a.actions, serviceType = _a.serviceType, host = _a.host, path = _a.path, version = _a.version, customHandler = _a.customHandler, _d = _a.responseHandler, responseHandler = _d === void 0 ? function (res) { return res; } : _d, errorHandler = _a.errorHandler, _e = _a.requestClient, requestClient = _e === void 0 ? 'TENCENT_SDK' : _e; | ||
var APIS = {}; | ||
actions.forEach(function (action) { | ||
APIS[action] = function (capi, inputs) { return __awaiter(_this, void 0, void 0, function () { | ||
var reqData, res, Response_1, e_1; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
inputs = common.deepClone(inputs); | ||
reqData = common.cleanEmptyValue(__assign({ action: action, | ||
version: version }, inputs)); | ||
inputs = common.cleanEmptyValue(inputs); | ||
_a.label = 1; | ||
case 1: | ||
_a.trys.push([1, 3, , 4]); | ||
return [4 /*yield*/, capi.request(reqData, { | ||
isV3: isV3, | ||
debug: debug, | ||
requestClient: requestClient, | ||
host: host || serviceType + ".tencentcloudapi.com", | ||
path: path || '/', | ||
})]; | ||
case 2: | ||
res = _a.sent(); | ||
// Customize response handler | ||
if (customHandler) { | ||
return [2 /*return*/, customHandler(action, res)]; | ||
} | ||
Response_1 = res.Response; | ||
if (Response_1 && Response_1.Error && Response_1.Error.Code) { | ||
if (errorHandler) { | ||
return [2 /*return*/, errorHandler(action, Response_1)]; | ||
} | ||
throw new CommonError({ | ||
type: "API_" + serviceType.toUpperCase() + "_" + action, | ||
message: Response_1.Error.Message + " (reqId: " + Response_1.RequestId + ")", | ||
reqId: Response_1.RequestId, | ||
code: Response_1.Error.Code, | ||
}); | ||
} | ||
return [2 /*return*/, responseHandler(Response_1)]; | ||
case 3: | ||
e_1 = _a.sent(); | ||
throw new CommonError({ | ||
type: "API_" + serviceType.toUpperCase() + "_" + action, | ||
message: e_1.message, | ||
stack: e_1.stack, | ||
reqId: e_1.reqId, | ||
code: e_1.code, | ||
}); | ||
case 4: return [2 /*return*/]; | ||
} | ||
}); | ||
}); }; | ||
}); | ||
return APIS; | ||
} | ||
function querystring(obj) { | ||
var sep = '&'; | ||
var eq = '='; | ||
if (!obj) | ||
return ''; | ||
if (obj && typeof obj === 'object') { | ||
return Object.keys(obj) | ||
.map(function (k) { | ||
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; | ||
if (Array.isArray(obj[k])) { | ||
return obj[k] | ||
.map(function (v) { | ||
return ks + encodeURIComponent(stringifyPrimitive(v)); | ||
}) | ||
.join(sep); | ||
} | ||
else { | ||
return ks + encodeURIComponent(stringifyPrimitive(obj[k])); | ||
} | ||
}) | ||
.filter(Boolean) | ||
.join(sep); | ||
} | ||
return ''; | ||
} | ||
var rp = require('request-promise-native'); | ||
var Capi = /** @class */ (function () { | ||
@@ -319,7 +360,7 @@ function Capi(options) { | ||
baseHost: 'tencentcloudapi.com', | ||
ServiceType: '', | ||
SecretId: '', | ||
SecretKey: '', | ||
Region: 'ap-guangzhou', | ||
SignatureMethod: 'sha1', | ||
serviceType: '', | ||
secretId: '', | ||
secretKey: '', | ||
region: 'ap-guangzhou', | ||
signatureMethod: 'sha1', | ||
}; | ||
@@ -331,61 +372,70 @@ this.options = Object.assign(this.defaultOptions, options); | ||
if (isV3 === void 0) { isV3 = false; } | ||
var options = Object.assign(this.options, opts); | ||
options.RequestClient = | ||
options.RequestClient || data.RequestClient || 'TENCENT_SDK_CAPI'; | ||
var Action = data.Action, Version = data.Version, restData = __rest(data, ["Action", "Version"]); | ||
var reqOption = { | ||
url: '', | ||
method: '', | ||
json: true, | ||
strictSSL: false, | ||
}; | ||
if (isV3 || opts.isV3) { | ||
var _a = tencentSign(restData, options), url = _a.url, payload = _a.payload, Authorization = _a.Authorization, Timestamp = _a.Timestamp, Host = _a.Host; | ||
reqOption = { | ||
url: url, | ||
method: 'POST', | ||
json: true, | ||
strictSSL: false, | ||
headers: { | ||
'Content-Type': 'application/json', | ||
Authorization: Authorization, | ||
Host: Host, | ||
'X-TC-Action': Action, | ||
'X-TC-Version': Version || options.Version, | ||
'X-TC-Timestamp': Timestamp, | ||
'X-TC-Region': options.Region, | ||
}, | ||
body: payload, | ||
}; | ||
if (!reqOption.headers) { | ||
reqOption.headers = {}; | ||
} | ||
reqOption.headers['X-TC-RequestClient'] = options.RequestClient; | ||
if (this.options.Token) { | ||
reqOption.headers['X-TC-Token'] = this.options.Token; | ||
} | ||
} | ||
else { | ||
var _b = tencentSignV1(data, options), url = _b.url, method = _b.method, payload = _b.payload; | ||
reqOption = { | ||
url: url, | ||
method: method, | ||
json: true, | ||
strictSSL: false, | ||
}; | ||
if (method === 'POST') { | ||
reqOption.form = payload; | ||
} | ||
else { | ||
reqOption.url += '?' + querystring(payload); | ||
} | ||
} | ||
if (options.timeout) { | ||
reqOption.timeout = options.timeout; | ||
} | ||
// debug request option | ||
if (options.debug) { | ||
logger('Request Option', JSON.stringify(reqOption)); | ||
} | ||
return rp(reqOption); | ||
return __awaiter(this, void 0, void 0, function () { | ||
var options, action, version, restData, reqOption, _a, url_1, payload, authorization, timestamp, host, _b, url_2, method, payload, url, restOptions, body; | ||
return __generator(this, function (_c) { | ||
switch (_c.label) { | ||
case 0: | ||
options = Object.assign(this.options, opts); | ||
options.requestClient = | ||
options.requestClient || data.requestClient || 'TENCENT_SDK_CAPI'; | ||
action = data.action, version = data.version, restData = __rest(data, ["action", "version"]); | ||
reqOption = { | ||
url: '', | ||
method: 'GET', | ||
responseType: 'json', | ||
}; | ||
if (isV3 || opts.isV3) { | ||
_a = tencentSign(common.pascalCaseProps(restData), options), url_1 = _a.url, payload = _a.payload, authorization = _a.authorization, timestamp = _a.timestamp, host = _a.host; | ||
reqOption = { | ||
url: url_1, | ||
method: 'POST', | ||
responseType: 'json', | ||
headers: { | ||
'Content-Type': 'application/json', | ||
Authorization: authorization, | ||
Host: host, | ||
'X-TC-Action': action, | ||
'X-TC-Version': version || options.version, | ||
'X-TC-Timestamp': timestamp, | ||
'X-TC-Region': options.region, | ||
}, | ||
json: payload, | ||
}; | ||
reqOption.headers['X-TC-RequestClient'] = options.requestClient; | ||
if (this.options.token) { | ||
reqOption.headers['X-TC-Token'] = this.options.token; | ||
} | ||
} | ||
else { | ||
_b = tencentSignV1(common.pascalCaseProps(data), options), url_2 = _b.url, method = _b.method, payload = _b.payload; | ||
reqOption = { | ||
url: url_2, | ||
method: method, | ||
responseType: 'json', | ||
headers: { | ||
'Content-Type': 'application/json', | ||
}, | ||
}; | ||
if (method === 'POST') { | ||
reqOption.form = payload; | ||
} | ||
else { | ||
reqOption.url += '?' + common.querystring(payload); | ||
} | ||
} | ||
if (options.timeout) { | ||
reqOption.timeout = options.timeout; | ||
} | ||
// debug request option | ||
if (options.debug) { | ||
common.logger('Request Option', JSON.stringify(reqOption)); | ||
} | ||
url = reqOption.url, restOptions = __rest(reqOption, ["url"]); | ||
return [4 /*yield*/, got(url, restOptions)]; | ||
case 1: | ||
body = (_c.sent()).body; | ||
return [2 /*return*/, body]; | ||
} | ||
}); | ||
}); | ||
}; | ||
@@ -398,2 +448,4 @@ return Capi; | ||
exports.tencentSignV1 = tencentSignV1; | ||
exports.CommonError = CommonError; | ||
exports.ApiFactory = ApiFactory; | ||
@@ -400,0 +452,0 @@ Object.defineProperty(exports, '__esModule', { value: true }); |
/// <reference types="node" /> | ||
import { Method } from 'got'; | ||
import { CapiOptions } from './index'; | ||
@@ -11,4 +12,4 @@ export interface Payload { | ||
export interface HostParams { | ||
ServiceType: string; | ||
Region: string; | ||
serviceType: string; | ||
region: string; | ||
host: string | undefined; | ||
@@ -22,43 +23,15 @@ baseHost: string | undefined; | ||
payload: Payload; | ||
Host: string; | ||
Authorization: string; | ||
Timestamp: string | string[] | undefined; | ||
host: string; | ||
authorization: string; | ||
timestamp: string | string[] | undefined; | ||
} | ||
export interface TencentSignResultV1 { | ||
url: string; | ||
method: string; | ||
method: Method; | ||
payload: Payload; | ||
} | ||
export declare function logger(topic: string, content: string): void; | ||
export declare function getHost({ host, ServiceType, Region, baseHost }: HostParams, isV1?: boolean): string; | ||
export declare function getUnixTime(date: Date): number; | ||
export declare function getDate(date: Date): string; | ||
export declare function getHost({ host, serviceType, region, baseHost }: HostParams, isV1?: boolean): string; | ||
export declare function getUrl(opts: HostParams, isV1?: boolean): string; | ||
export declare function sign(str: string, secretKey: Buffer, algorithm?: string): Buffer; | ||
/** | ||
* is array | ||
* @param obj object | ||
*/ | ||
export declare function isArray(obj: any): boolean; | ||
/** | ||
* is object | ||
* @param obj object | ||
*/ | ||
export declare function isObject(obj: any): boolean; | ||
/** | ||
* iterate object or array | ||
* @param obj object or array | ||
* @param iterator iterator function | ||
*/ | ||
export declare function _forEach(obj: object | any[], iterator: (value: any, index: number | string, array: any) => void): void; | ||
/** | ||
* flatter request parameter | ||
* @param obj target object or array | ||
*/ | ||
export declare function flatten(obj: { | ||
[propName: string]: any; | ||
}): { | ||
[propName: string]: any; | ||
}; | ||
/** | ||
* generate tencent cloud sign result | ||
@@ -79,7 +52,2 @@ * | ||
export declare function tencentSignV1(payload: Payload, options: CapiOptions): TencentSignResultV1; | ||
interface ParsedUrlQueryInput { | ||
[key: string]: any; | ||
} | ||
export declare function querystring(obj?: ParsedUrlQueryInput): string; | ||
export {}; | ||
//# sourceMappingURL=utils.d.ts.map |
{ | ||
"name": "@tencent-sdk/capi", | ||
"version": "1.1.8", | ||
"version": "2.0.0", | ||
"description": "Tencent cloud api sdk", | ||
@@ -25,6 +25,4 @@ "main": "dist/index.js", | ||
"dependencies": { | ||
"@types/request": "^2.48.3", | ||
"@types/request-promise-native": "^1.0.17", | ||
"request": "^2.88.0", | ||
"request-promise-native": "^1.0.8" | ||
"@tencent-sdk/common": "1.0.0", | ||
"got": "^11.8.2" | ||
}, | ||
@@ -42,3 +40,3 @@ "directories": { | ||
"homepage": "https://github.com/yugasun/tencent-sdk#readme", | ||
"gitHead": "23d7bc428bb6f4c722d4133463cd59931016e984" | ||
"gitHead": "c7adcdee150423dff1df009aff7417ac2960925a" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
51000
2
8
1005
1
+ Added@tencent-sdk/common@1.0.0
+ Addedgot@^11.8.2
+ Added@sindresorhus/is@4.6.0(transitive)
+ Added@szmarczak/http-timer@4.0.6(transitive)
+ Added@tencent-sdk/common@1.0.0(transitive)
+ Added@types/cacheable-request@6.0.3(transitive)
+ Added@types/http-cache-semantics@4.0.4(transitive)
+ Added@types/keyv@3.1.4(transitive)
+ Added@types/responselike@1.0.3(transitive)
+ Addedcacheable-lookup@5.0.4(transitive)
+ Addedcacheable-request@7.0.4(transitive)
+ Addedcamelcase@6.3.0(transitive)
+ Addedclone-response@1.0.3(transitive)
+ Addeddecompress-response@6.0.0(transitive)
+ Addeddefer-to-connect@2.0.1(transitive)
+ Addedend-of-stream@1.4.4(transitive)
+ Addedget-stream@5.2.0(transitive)
+ Addedgot@11.8.6(transitive)
+ Addedhttp-cache-semantics@4.1.1(transitive)
+ Addedhttp2-wrapper@1.0.3(transitive)
+ Addedjson-buffer@3.0.1(transitive)
+ Addedkeyv@4.5.4(transitive)
+ Addedlowercase-keys@2.0.0(transitive)
+ Addedmimic-response@1.0.13.1.0(transitive)
+ Addednormalize-url@6.1.0(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedp-cancelable@2.1.1(transitive)
+ Addedpump@3.0.2(transitive)
+ Addedquick-lru@5.1.1(transitive)
+ Addedresolve-alpn@1.2.1(transitive)
+ Addedresponselike@2.0.1(transitive)
+ Addedtype-fest@1.4.0(transitive)
+ Addedwrappy@1.0.2(transitive)
- Removed@types/request@^2.48.3
- Removedrequest@^2.88.0
- Removedrequest-promise-native@^1.0.8
- Removed@types/caseless@0.12.5(transitive)
- Removed@types/request@2.48.12(transitive)
- Removed@types/request-promise-native@1.0.21(transitive)
- Removed@types/tough-cookie@4.0.5(transitive)
- Removedajv@6.12.6(transitive)
- Removedasn1@0.2.6(transitive)
- Removedassert-plus@1.0.0(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaws-sign2@0.7.0(transitive)
- Removedaws4@1.13.2(transitive)
- Removedbcrypt-pbkdf@1.0.2(transitive)
- Removedcaseless@0.12.0(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedcore-util-is@1.0.2(transitive)
- Removeddashdash@1.14.1(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removedecc-jsbn@0.1.2(transitive)
- Removedextend@3.0.2(transitive)
- Removedextsprintf@1.3.0(transitive)
- Removedfast-deep-equal@3.1.3(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedforever-agent@0.6.1(transitive)
- Removedform-data@2.3.32.5.1(transitive)
- Removedgetpass@0.1.7(transitive)
- Removedhar-schema@2.0.0(transitive)
- Removedhar-validator@5.1.5(transitive)
- Removedhttp-signature@1.2.0(transitive)
- Removedis-typedarray@1.0.0(transitive)
- Removedisstream@0.1.2(transitive)
- Removedjsbn@0.1.1(transitive)
- Removedjson-schema@0.4.0(transitive)
- Removedjson-schema-traverse@0.4.1(transitive)
- Removedjson-stringify-safe@5.0.1(transitive)
- Removedjsprim@1.4.2(transitive)
- Removedlodash@4.17.21(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedoauth-sign@0.9.0(transitive)
- Removedperformance-now@2.1.0(transitive)
- Removedpsl@1.9.0(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedqs@6.5.3(transitive)
- Removedrequest@2.88.2(transitive)
- Removedrequest-promise-core@1.1.4(transitive)
- Removedrequest-promise-native@1.0.9(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedsafer-buffer@2.1.2(transitive)
- Removedsshpk@1.18.0(transitive)
- Removedstealthy-require@1.1.1(transitive)
- Removedtough-cookie@2.5.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removedtweetnacl@0.14.5(transitive)
- Removeduri-js@4.4.1(transitive)
- Removeduuid@3.4.0(transitive)
- Removedverror@1.10.0(transitive)