@translated/lara
Version:
Official Lara SDK for JavaScript and Node.js
91 lines (90 loc) • 3.43 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 http_1 = __importDefault(require("http"));
const https_1 = __importDefault(require("https"));
const form_data_1 = __importDefault(require("form-data"));
const client_1 = require("./client");
const stream_1 = require("stream");
const fs_1 = __importDefault(require("fs"));
/** @internal */
class NodeLaraClient extends client_1.LaraClient {
constructor(baseUrl, accessKeyId, accessKeySecret) {
super(accessKeyId, accessKeySecret);
this.baseUrl = baseUrl;
this.agent = baseUrl.secure ? new https_1.default.Agent({ keepAlive: true }) : new http_1.default.Agent({ keepAlive: true });
}
async send(path, headers, body) {
let requestBody = undefined;
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))
value.forEach(v => 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 ? https_1.default : http_1.default).request(options, (res) => {
let data = "";
res.on("data", (chunk) => data += chunk);
res.on("end", () => {
let json;
try {
json = JSON.parse(data);
}
catch (e) {
reject(new Error("Invalid JSON response"));
}
resolve({
statusCode: res.statusCode,
body: json
});
});
});
req.on("error", reject);
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 = fs_1.default.createReadStream(file);
if (file instanceof 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;