UNPKG

@translated/lara

Version:

Official Lara SDK for JavaScript and Node.js

113 lines (112 loc) 4.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeLaraClient = void 0; const node_fs_1 = __importDefault(require("node:fs")); const node_http_1 = __importDefault(require("node:http")); const node_https_1 = __importDefault(require("node:https")); const node_stream_1 = require("node:stream"); const form_data_1 = __importDefault(require("form-data")); const client_1 = require("./client"); /** @internal */ class NodeLaraClient extends client_1.LaraClient { constructor(baseUrl, accessKeyId, accessKeySecret, keepAlive = true) { super(accessKeyId, accessKeySecret); this.baseUrl = baseUrl; this.agent = baseUrl.secure ? new node_https_1.default.Agent({ keepAlive }) : new node_http_1.default.Agent({ keepAlive }); } async send(path, headers, body) { let requestBody; if (body) { if (headers["Content-Type"] === "multipart/form-data") { const formBody = new form_data_1.default(); for (const [key, value] of Object.entries(body)) { if (!value) continue; if (Array.isArray(value)) { for (const v of value) formBody.append(key, v); } else { formBody.append(key, value); } } headers = { ...headers, ...formBody.getHeaders() }; requestBody = formBody; } else { requestBody = JSON.stringify(body, undefined, 0); } } return new Promise((resolve, reject) => { const options = { host: this.baseUrl.hostname, port: this.baseUrl.port, path: path, method: "POST", headers: headers, agent: this.agent }; const req = (this.baseUrl.secure ? node_https_1.default : node_http_1.default).request(options, (res) => { let data = ""; // biome-ignore lint/suspicious/noAssignInExpressions: store response data res.on("data", (chunk) => (data += chunk)); res.on("end", () => { var _a; let json; if ((_a = res.headers["content-type"]) === null || _a === void 0 ? void 0 : _a.includes("text/csv")) { return resolve({ statusCode: res.statusCode, body: { content: data } }); } try { json = JSON.parse(data); } catch (_e) { return reject(new SyntaxError("Invalid JSON response")); } resolve({ statusCode: res.statusCode, body: json }); }); // close connection on error res.on("error", (err) => { req.destroy(); return reject(err); }); }); // close connection on error req.on("error", (err) => { req.destroy(); return reject(err); }); if (requestBody instanceof form_data_1.default) { requestBody.pipe(req); } else if (requestBody) { req.write(requestBody); req.end(); } else { req.end(); } }); } wrapMultiPartFile(file) { if (typeof file === "string") file = node_fs_1.default.createReadStream(file); if (file instanceof node_stream_1.Readable) return file; throw new TypeError(`Invalid file input in Node.js. Expected a Readable stream or a valid file path, but received ${typeof file}.`); } } exports.NodeLaraClient = NodeLaraClient;