UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

115 lines (108 loc) 4.23 kB
'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;