Socket
Socket
Sign inDemoInstall

@tencent-sdk/capi

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tencent-sdk/capi - npm Package Compare versions

Comparing version 1.1.8 to 2.0.0

dist/factory.d.ts

27

dist/index.d.ts
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"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc