@hubspot/api-client
Version:
NodeJS v3 [HubSpot API](https://developers.hubspot.com/docs/api/overview) SDK(Client) files
200 lines • 7.96 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendBufferedRequest = exports.sendFetchRequest = void 0;
const http = __importStar(require("http"));
const https = __importStar(require("https"));
const url_1 = require("url");
const form_data_1 = __importDefault(require("form-data"));
function sendFetchRequest(url, options) {
return __awaiter(this, void 0, void 0, function* () {
if (isFormDataBody(options.body)) {
const response = yield sendNodeRequest(url, options);
const responseBody = shouldOmitResponseBody(response.status) ? null : yield response.binary();
return new Response(responseBody, {
headers: response.headers,
status: response.status,
});
}
return yield fetch(url, buildRequestInit(options));
});
}
exports.sendFetchRequest = sendFetchRequest;
function sendBufferedRequest(url, options) {
return __awaiter(this, void 0, void 0, function* () {
if (options.agent) {
return yield sendNodeRequest(url, options);
}
const response = yield sendFetchRequest(url, options);
return createBufferedResponse(response.status, getHeadersFromFetchResponse(response), () => __awaiter(this, void 0, void 0, function* () {
return Buffer.from(yield response.arrayBuffer());
}));
});
}
exports.sendBufferedRequest = sendBufferedRequest;
function buildRequestInit(options) {
const requestInit = {
method: options.method,
headers: normalizeHeaders(options.headers, options.body),
};
if (options.body !== undefined) {
requestInit.body = options.body;
}
if (isPipeableBody(options.body)) {
requestInit.duplex = 'half';
}
return requestInit;
}
function normalizeHeaders(headers, body) {
if (isFormDataBody(body)) {
return mergeHeaders(headers, body.getHeaders());
}
if (!headers) {
return undefined;
}
return Object.assign({}, headers);
}
function mergeHeaders(headers, nextHeaders) {
const mergedHeaders = headers ? Object.assign({}, headers) : {};
for (const [nextHeaderName, nextHeaderValue] of Object.entries(nextHeaders)) {
const existingHeaderName = Object.keys(mergedHeaders).find((headerName) => headerName.toLowerCase() === nextHeaderName.toLowerCase());
if (existingHeaderName) {
delete mergedHeaders[existingHeaderName];
}
mergedHeaders[nextHeaderName] = nextHeaderValue;
}
return mergedHeaders;
}
function isFormDataBody(body) {
return body instanceof form_data_1.default;
}
function isPipeableBody(body) {
return typeof body === 'object' && body !== null && 'pipe' in body && 'on' in body;
}
function sendNodeRequest(url, options) {
return __awaiter(this, void 0, void 0, function* () {
const targetUrl = typeof url === 'string' ? new URL(url) : url;
const requestHeaders = normalizeHeaders(options.headers, options.body);
const requestBody = serializeBody(options.body);
const transport = targetUrl.protocol === 'https:' ? https : http;
return yield new Promise((resolve, reject) => {
const request = transport.request(targetUrl, {
agent: options.agent,
headers: requestHeaders,
method: options.method,
}, (response) => {
const chunks = [];
response.on('data', (chunk) => {
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
});
response.on('end', () => {
var _a;
const body = Buffer.concat(chunks);
resolve(createBufferedResponse((_a = response.statusCode) !== null && _a !== void 0 ? _a : 0, getHeadersFromNodeResponse(response), () => __awaiter(this, void 0, void 0, function* () { return body; })));
});
response.on('error', reject);
});
request.on('error', reject);
if (requestBody === undefined) {
request.end();
return;
}
if (isPipeableBody(requestBody)) {
requestBody.on('error', reject);
requestBody.pipe(request);
return;
}
request.end(requestBody);
});
});
}
function serializeBody(body) {
if (body === undefined) {
return undefined;
}
if (typeof body === 'string' || Buffer.isBuffer(body) || isPipeableBody(body)) {
return body;
}
if (body instanceof url_1.URLSearchParams) {
return body.toString();
}
throw new TypeError('Unsupported HTTP request body for Node transport.');
}
function getHeadersFromFetchResponse(response) {
const headers = {};
response.headers.forEach((value, name) => {
headers[name] = value;
});
return headers;
}
function getHeadersFromNodeResponse(response) {
const headers = {};
for (const [name, value] of Object.entries(response.headers)) {
if (value === undefined) {
continue;
}
headers[name] = Array.isArray(value) ? value.join(', ') : value;
}
return headers;
}
function createBufferedResponse(status, headers, getBody) {
let bodyPromise;
const readBody = () => __awaiter(this, void 0, void 0, function* () {
if (!bodyPromise) {
bodyPromise = getBody();
}
return yield bodyPromise;
});
return {
status,
headers,
binary() {
return __awaiter(this, void 0, void 0, function* () {
return yield readBody();
});
},
text() {
return __awaiter(this, void 0, void 0, function* () {
return (yield readBody()).toString();
});
},
};
}
function shouldOmitResponseBody(status) {
return status === 101 || status === 204 || status === 205 || status === 304;
}
//# sourceMappingURL=Transport.js.map