UNPKG

@whop/api

Version:
1 lines 5.32 kB
{"version":3,"sources":["../src/attachments/upload-part-node.ts","../src/sdk/client-sdk-node.ts","../src/sdk/server-sdk-node.ts"],"sourcesContent":["import { request } from \"node:https\";\nimport { Readable } from \"node:stream\";\nimport type { ReadableStream as NodeReadableStream } from \"node:stream/web\";\nimport {\n\tMULTIPART_UPLOAD_CHUNK_SIZE,\n\ttype MultipartUploadTask,\n} from \"@/attachments/common\";\n\n/**\n * Uploads a part of a file in a node.js environment.\n * @param task The task to upload.\n * @returns The etag of the uploaded part.\n */\nexport async function uploadPartImpl({\n\turl,\n\tfullData,\n\tpartNumber,\n\theaders,\n\tonProgress,\n\tsignal,\n}: MultipartUploadTask) {\n\tconst offset = (partNumber - 1) * MULTIPART_UPLOAD_CHUNK_SIZE;\n\tconst data = fullData.slice(\n\t\toffset,\n\t\tMath.min(offset + MULTIPART_UPLOAD_CHUNK_SIZE, fullData.size),\n\t);\n\n\tsignal?.throwIfAborted();\n\n\treturn new Promise<string>((resolve, reject) => {\n\t\tconst fullURL = new URL(url);\n\t\tconst req = request(fullURL, {\n\t\t\tmethod: \"PUT\",\n\t\t\theaders: {\n\t\t\t\t...headers,\n\t\t\t\thost: fullURL.host,\n\t\t\t\t\"content-length\": data.size.toString(),\n\t\t\t},\n\t\t\tsignal,\n\t\t});\n\n\t\tlet uploadedBytes = 0;\n\n\t\treq.on(\"response\", async (res) => {\n\t\t\tconst statusCode = res.statusCode ?? 0;\n\t\t\tif (statusCode >= 200 && statusCode < 300) {\n\t\t\t\tconst etag = res.headers.etag;\n\t\t\t\tif (!etag) {\n\t\t\t\t\treject(new Error(\"Missing etag on upload response\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(etag.slice(1, -1));\n\t\t\t} else {\n\t\t\t\tlet chunks = \"\";\n\t\t\t\tfor await (const chunk of res) {\n\t\t\t\t\tchunks += chunk.toString();\n\t\t\t\t}\n\t\t\t\treject(\n\t\t\t\t\tnew Error(\n\t\t\t\t\t\t`Failed to upload part with ${statusCode}: ${res.statusMessage}`,\n\t\t\t\t\t\t{ cause: chunks },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treq.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\n\t\treq.on(\"drain\", () => {\n\t\t\tonProgress?.({\n\t\t\t\ttotal: data.size,\n\t\t\t\tloaded: uploadedBytes,\n\t\t\t});\n\t\t});\n\n\t\tReadable.fromWeb(data.stream() as NodeReadableStream)\n\t\t\t.on(\"data\", (chunk) => {\n\t\t\t\tuploadedBytes += chunk.length;\n\t\t\t\tonProgress?.({\n\t\t\t\t\ttotal: data.size,\n\t\t\t\t\tloaded: uploadedBytes,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.pipe(req);\n\n\t\tonProgress?.({ total: data.size, loaded: 0 });\n\t});\n}\n","import { makeUploadAttachmentFunction } from \"@/attachments/upload\";\nimport { uploadPartImpl } from \"@/attachments/upload-part-node\";\nimport { makeWhopClientSdk } from \"./client-sdk-shared\";\n\nconst uploadFile = makeUploadAttachmentFunction({ uploadPart: uploadPartImpl });\n\nconst sdk = makeWhopClientSdk({ uploadFile });\n\nimport type { WhopClientSdkOptions } from \"./client-sdk-shared\";\n\nexport function WhopClientSdk(options?: WhopClientSdkOptions) {\n\treturn sdk(options);\n}\n\nexport type WhopClientSdk = ReturnType<typeof WhopClientSdk>;\nexport type { WhopClientSdkOptions };\n","import { makeUploadAttachmentFunction } from \"@/attachments/upload\";\nimport { uploadPartImpl } from \"@/attachments/upload-part-node\";\n\nconst uploadFile = makeUploadAttachmentFunction({ uploadPart: uploadPartImpl });\n\nconst sdk = makeWhopServerSdk({ uploadFile });\n\nimport type { WhopServerSdkOptions } from \"./server-sdk-shared\";\nimport { makeWhopServerSdk } from \"./server-sdk-shared\";\n\nexport function WhopServerSdk(options: WhopServerSdkOptions) {\n\treturn sdk(options);\n}\n\nexport type WhopServerSdk = ReturnType<typeof WhopServerSdk>;\nexport type { WhopServerSdkOptions };\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,eAAe;AACxB,SAAS,gBAAgB;AAYzB,eAAsB,eAAe;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwB;AACvB,QAAM,UAAU,aAAa,KAAK;AAClC,QAAM,OAAO,SAAS;AAAA,IACrB;AAAA,IACA,KAAK,IAAI,SAAS,6BAA6B,SAAS,IAAI;AAAA,EAC7D;AAEA,UAAQ,eAAe;AAEvB,SAAO,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC/C,UAAM,UAAU,IAAI,IAAI,GAAG;AAC3B,UAAM,MAAM,QAAQ,SAAS;AAAA,MAC5B,QAAQ;AAAA,MACR,SAAS;AAAA,QACR,GAAG;AAAA,QACH,MAAM,QAAQ;AAAA,QACd,kBAAkB,KAAK,KAAK,SAAS;AAAA,MACtC;AAAA,MACA;AAAA,IACD,CAAC;AAED,QAAI,gBAAgB;AAEpB,QAAI,GAAG,YAAY,OAAO,QAAQ;AACjC,YAAM,aAAa,IAAI,cAAc;AACrC,UAAI,cAAc,OAAO,aAAa,KAAK;AAC1C,cAAM,OAAO,IAAI,QAAQ;AACzB,YAAI,CAAC,MAAM;AACV,iBAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD;AAAA,QACD;AACA,gBAAQ,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MAC1B,OAAO;AACN,YAAI,SAAS;AACb,yBAAiB,SAAS,KAAK;AAC9B,oBAAU,MAAM,SAAS;AAAA,QAC1B;AACA;AAAA,UACC,IAAI;AAAA,YACH,8BAA8B,UAAU,KAAK,IAAI,aAAa;AAAA,YAC9D,EAAE,OAAO,OAAO;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAED,QAAI,GAAG,SAAS,CAAC,UAAU;AAC1B,aAAO,KAAK;AAAA,IACb,CAAC;AAED,QAAI,GAAG,SAAS,MAAM;AACrB,mBAAa;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,QAAQ;AAAA,MACT,CAAC;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,KAAK,OAAO,CAAuB,EAClD,GAAG,QAAQ,CAAC,UAAU;AACtB,uBAAiB,MAAM;AACvB,mBAAa;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,QAAQ;AAAA,MACT,CAAC;AAAA,IACF,CAAC,EACA,KAAK,GAAG;AAEV,iBAAa,EAAE,OAAO,KAAK,MAAM,QAAQ,EAAE,CAAC;AAAA,EAC7C,CAAC;AACF;;;ACrFA,IAAM,aAAa,6BAA6B,EAAE,YAAY,eAAe,CAAC;AAE9E,IAAM,MAAM,kBAAkB,EAAE,WAAW,CAAC;AAIrC,SAAS,cAAc,SAAgC;AAC7D,SAAO,IAAI,OAAO;AACnB;;;ACTA,IAAMA,cAAa,6BAA6B,EAAE,YAAY,eAAe,CAAC;AAE9E,IAAMC,OAAM,kBAAkB,EAAE,YAAAD,YAAW,CAAC;AAKrC,SAAS,cAAc,SAA+B;AAC5D,SAAOC,KAAI,OAAO;AACnB;","names":["uploadFile","sdk"]}