@maximai/maxim-js
Version:
Maxim AI JS SDK. Visit https://getmaxim.ai for more info.
72 lines • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MaximAttachmentAPI = void 0;
const maxim_1 = require("./maxim");
class MaximAttachmentAPI extends maxim_1.MaximAPI {
constructor(baseUrl, apiKey) {
super(baseUrl, apiKey);
}
async getUploadUrl(key, mimeType, size) {
return new Promise((resolve, reject) => {
this.fetch(`/api/sdk/v1/log-repositories/attachments/upload-url?key=${key}&mimeType=${mimeType}&size=${size}`)
.then((response) => {
if ("error" in response) {
reject(response.error);
}
else {
resolve(response.data);
}
})
.catch((error) => {
reject(error);
});
});
}
async uploadToSignedUrl(url, data, mimeType) {
return new Promise((resolve, reject) => {
const parsedUrl = new URL(url);
const isLocalhost = parsedUrl.hostname === "localhost";
const requestModule = isLocalhost ? require("http") : require("https");
const makeRequest = (retryCount = 0) => {
const options = {
hostname: parsedUrl.hostname,
port: isLocalhost ? parsedUrl.port || 3000 : 443,
path: parsedUrl.pathname + parsedUrl.search,
method: "PUT",
headers: {
"Content-Type": mimeType,
"Content-Length": data.length,
},
};
const req = requestModule.request(options, (res) => {
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve();
}
else {
if (retryCount < 3) {
console.warn(`[MaximSDK] Upload failed with status ${res.statusCode}, retrying (${retryCount + 1}/3)...`);
makeRequest(retryCount + 1);
}
else {
reject(new Error(`Failed to upload file: HTTP status ${res.statusCode} after 3 retries`));
}
}
});
req.on("error", (error) => {
if (retryCount < 3) {
console.warn(`[MaximSDK] Upload failed with error: ${error.message}, retrying (${retryCount + 1}/3)...`);
makeRequest(retryCount + 1);
}
else {
reject(error);
}
});
req.write(data);
req.end();
};
makeRequest();
});
}
}
exports.MaximAttachmentAPI = MaximAttachmentAPI;
//# sourceMappingURL=attachment.js.map