zwdd
Version:
专有钉钉node-sdk
55 lines • 1.95 kB
JavaScript
;
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