t-comm
Version:
专业、稳定、纯粹的工具库
115 lines (108 loc) • 4.23 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var axios = require('axios');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
/* eslint-disable @typescript-eslint/no-require-imports */
var DEFAULT_RUM_INFO = {
ENDPOINT: 'rum.tencentcloudapi.com',
REGION: 'ap-guangzhou',
VERSION: '2021-06-22',
SERVICE: 'rum'
};
function sha256(message, secret, encoding) {
if (secret === void 0) {
secret = '';
}
if (encoding === void 0) {
encoding = undefined;
}
var crypto = require('crypto');
var hmac = crypto.createHmac('sha256', secret);
return hmac.update(message).digest(encoding);
}
function getHash(message, encoding) {
if (encoding === void 0) {
encoding = 'hex';
}
var crypto = require('crypto');
var hash = crypto.createHash('sha256');
return hash.update(message).digest(encoding);
}
function getDate(timestamp) {
var date = new Date(timestamp * 1000);
var year = date.getUTCFullYear();
var month = "0".concat(date.getUTCMonth() + 1).slice(-2);
var day = "0".concat(date.getUTCDate()).slice(-2);
return "".concat(year, "-").concat(month, "-").concat(day);
}
function getAuthorization(_a) {
var secretId = _a.secretId,
secretKey = _a.secretKey,
payload = _a.payload,
action = _a.action,
endpoint = _a.endpoint,
timestamp = _a.timestamp,
service = _a.service;
// 时间处理, 获取世界时间日期
var date = getDate(timestamp);
var hashedRequestPayload = getHash(payload);
var httpRequestMethod = 'POST';
var canonicalUri = '/';
var canonicalQueryString = '';
var canonicalHeaders = 'content-type:application/json; charset=utf-8\n' + "host:".concat(endpoint, "\n") + "x-tc-action:".concat(action.toLowerCase(), "\n");
var signedHeaders = 'content-type;host;x-tc-action';
var canonicalRequest = "".concat(httpRequestMethod, "\n").concat(canonicalUri, "\n").concat(canonicalQueryString, "\n").concat(canonicalHeaders, "\n").concat(signedHeaders, "\n").concat(hashedRequestPayload);
// ************* 步骤 2:拼接待签名字符串 *************
var algorithm = 'TC3-HMAC-SHA256';
var hashedCanonicalRequest = getHash(canonicalRequest);
var credentialScope = "".concat(date, "/").concat(service, "/") + 'tc3_request';
var stringToSign = "".concat(algorithm, "\n").concat(timestamp, "\n").concat(credentialScope, "\n").concat(hashedCanonicalRequest);
// ************* 步骤 3:计算签名 *************
var kDate = sha256(date, "TC3".concat(secretKey));
var kService = sha256(service, kDate);
var kSigning = sha256('tc3_request', kService);
var signature = sha256(stringToSign, kSigning, 'hex');
// ************* 步骤 4:拼接 Authorization *************
var authorization = "".concat(algorithm, " ") + "Credential=".concat(secretId, "/").concat(credentialScope, ", ") + "SignedHeaders=".concat(signedHeaders, ", ") + "Signature=".concat(signature);
return authorization;
}
function fetchCloudData(_a) {
var secretId = _a.secretId,
secretKey = _a.secretKey,
payload = _a.payload,
action = _a.action,
_b = _a.endpoint,
endpoint = _b === void 0 ? DEFAULT_RUM_INFO.ENDPOINT : _b,
_c = _a.region,
region = _c === void 0 ? DEFAULT_RUM_INFO.REGION : _c,
_d = _a.version,
version = _d === void 0 ? DEFAULT_RUM_INFO.VERSION : _d,
_e = _a.service,
service = _e === void 0 ? DEFAULT_RUM_INFO.SERVICE : _e;
var timestamp = Math.round(Date.now() / 1000);
var authorization = getAuthorization({
secretId: secretId,
secretKey: secretKey,
endpoint: endpoint,
action: action,
payload: payload,
timestamp: timestamp,
service: service
});
return axios__default["default"]({
url: "https://".concat(endpoint),
method: 'POST',
data: payload,
headers: {
Authorization: authorization,
'Content-Type': 'application/json; charset=utf-8',
Host: endpoint,
'X-TC-Action': action,
'X-TC-Timestamp': timestamp.toString(),
'X-TC-Version': version,
'X-TC-Region': region
}
});
}
exports.fetchCloudData = fetchCloudData;