UNPKG

@whop/api

Version:
106 lines (103 loc) 2.69 kB
import { MULTIPART_UPLOAD_CHUNK_SIZE, getUserToken, makeUploadAttachmentFunction, makeUserTokenVerifier, makeWebhookValidator, makeWhopClientSdk, makeWhopServerSdk, proto_exports, verifyUserToken } from "./chunk-F7JWVUDN.mjs"; // src/attachments/upload-part-node.ts import { request } from "https"; import { Readable } from "stream"; async function uploadPartImpl({ url, fullData, partNumber, headers, onProgress, signal }) { const offset = (partNumber - 1) * MULTIPART_UPLOAD_CHUNK_SIZE; const data = fullData.slice( offset, Math.min(offset + MULTIPART_UPLOAD_CHUNK_SIZE, fullData.size) ); signal?.throwIfAborted(); return new Promise((resolve, reject) => { const fullURL = new URL(url); const req = request(fullURL, { method: "PUT", headers: { ...headers, host: fullURL.host, "content-length": data.size.toString() }, signal }); let uploadedBytes = 0; req.on("response", async (res) => { const statusCode = res.statusCode ?? 0; if (statusCode >= 200 && statusCode < 300) { const etag = res.headers.etag; if (!etag) { reject(new Error("Missing etag on upload response")); return; } resolve(etag.slice(1, -1)); } else { let chunks = ""; for await (const chunk of res) { chunks += chunk.toString(); } reject( new Error( `Failed to upload part with ${statusCode}: ${res.statusMessage}`, { cause: chunks } ) ); } }); req.on("error", (error) => { reject(error); }); req.on("drain", () => { onProgress?.({ total: data.size, loaded: uploadedBytes }); }); Readable.fromWeb(data.stream()).on("data", (chunk) => { uploadedBytes += chunk.length; onProgress?.({ total: data.size, loaded: uploadedBytes }); }).pipe(req); onProgress?.({ total: data.size, loaded: 0 }); }); } // src/sdk/client-sdk-node.ts var uploadFile = makeUploadAttachmentFunction({ uploadPart: uploadPartImpl }); var sdk = makeWhopClientSdk({ uploadFile }); function WhopClientSdk(options) { return sdk(options); } // src/sdk/server-sdk-node.ts var uploadFile2 = makeUploadAttachmentFunction({ uploadPart: uploadPartImpl }); var sdk2 = makeWhopServerSdk({ uploadFile: uploadFile2 }); function WhopServerSdk(options) { return sdk2(options); } export { WhopClientSdk, WhopServerSdk, getUserToken, makeUserTokenVerifier, makeWebhookValidator, proto_exports as proto, verifyUserToken }; //# sourceMappingURL=index.node.mjs.map