@whop/api
Version:
Whop API client
106 lines (103 loc) • 2.69 kB
JavaScript
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