UNPKG

zwdd

Version:
55 lines 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const node_fetch_1 = require("node-fetch"); const qs_1 = require("qs"); const crypto_1 = require("./crypto"); async function request(url, init) { const timestamp = new Date().toISOString(); const nonce = (0, crypto_1.createNonce)(); const { endpoint, method = 'GET', appKey, appSecret, hostIp, hostMac, query, body, ...extraInit } = init; const signature = (0, crypto_1.sign)({ appSecret, method, nonce, timestamp, url, params: method === 'GET' ? init.query : (init.body || init.query), }); const headers = new node_fetch_1.Headers(init.headers); headers.set('X-Hmac-Auth-IP', hostIp); headers.set('X-Hmac-Auth-MAC', hostMac); headers.set('X-Hmac-Auth-Timestamp', timestamp); headers.set('X-Hmac-Auth-Version', '1.0'); headers.set('X-Hmac-Auth-Nonce', nonce); headers.set('apiKey', appKey); headers.set('X-Hmac-Auth-Signature', signature); if (!headers.has('content-type')) { headers.set('content-type', 'application/json'); } if (query) { url += '?' + (0, qs_1.stringify)(query); } const res = await (0, node_fetch_1.default)(`${endpoint}${url}`, { method, headers, ...extraInit, body: body ? JSON.stringify(body) : body, }); const data = await res.json(); if (!data) { if (res.status >= 400) { throw new node_fetch_1.FetchError(`request to ${endpoint}${url} failed, reason: ${res.status}(${res.statusText})`, res.statusText); } return data; } if (!('success' in data)) { return data; } if (data.success) { return data.content.data; } const error = new Error(`${data.Code}: ${data.Message} ${data._RequestId} (${data.bizErrorCode})`); throw error; } exports.default = request; //# sourceMappingURL=request.js.map