@translated/lara
Version:
Official Lara SDK for JavaScript and Node.js
113 lines (112 loc) • 4.4 kB
JavaScript
;
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;