@codex-storage/sdk-js
Version:
Codex SDK to interact with the Codex decentralized storage network.
1 lines • 3.76 kB
Source Map (JSON)
{"version":3,"sources":["../src/data/node-upload.ts"],"names":[],"mappings":";;;;AAQO,IAAM,oBAAN,MAAiD;AAAA,EACrC,IAAA;AAAA,EAOA,QAAA;AAAA,EAGT,eAAA;AAAA,EAER,WAAA,CACE,MACA,QACA,EAAA;AACA,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAAA;AAClB,EAEA,MAAM,MAAA,CACJ,GACA,EAAA,EAAE,MAC0B,EAAA;AAhChC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiCI,IAAM,MAAA,OAAA,GAAkC,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAA;AAEnE,IAAI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,QAAU,EAAA;AAC3B,MAAA,OAAA,CAAQ,qBAAqB,CAC3B,GAAA,wBAAA,IAAA,CAA2B,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,mBAAe,QAAW,CAAA,GAAA,GAAA;AAAA;AAGzD,IAAI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,QAAU,EAAA;AAC3B,MAAA,OAAA,CAAQ,cAAc,CAAA,GAAA,CAAI,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,IAAe,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA;AAAA;AAG3C,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAA,IAAA,CAAK,eAAkB,GAAA,UAAA;AAEvB,IAAA,MAAM,GAAM,GAAA,MAAM,MAAO,CAAA,OAAA,CAAQ,GAAK,EAAA;AAAA,MACpC,MAAQ,EAAA,MAAA;AAAA,MACR,OAAA;AAAA,MACA,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,QAAQ,UAAW,CAAA;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,GAAI,CAAA,UAAA,GAAa,GAAO,IAAA,GAAA,CAAI,cAAc,GAAK,EAAA;AACjD,MAAM,MAAA,GAAA,GAAM,kCAAkC,GAAI,CAAA,UAAU,MAAM,MAAM,GAAA,CAAI,IAAK,CAAA,IAAA,EAAM,CAAA,CAAA,CAAA;AACvF,MAAO,OAAA;AAAA,QACL,KAAO,EAAA,IAAA;AAAA,QACP,IAAA,EAAM,IAAI,UAAW,CAAA,GAAA,EAAK,EAAE,IAAM,EAAA,GAAA,CAAI,YAAY;AAAA,OACpD;AAAA;AAGF,IAAO,OAAA,EAAE,OAAO,KAAO,EAAA,IAAA,EAAM,MAAM,GAAI,CAAA,IAAA,CAAK,MAAO,EAAA;AAAA;AACrD,EAEA,KAAc,GAAA;AAjEhB,IAAA,IAAA,EAAA;AAkEI,IAAI,IAAA;AACF,MAAA,CAAA,EAAA,GAAA,IAAA,CAAK,oBAAL,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA;AAAA,aACf,CAAG,EAAA;AAAA;AAEZ;AAEJ","file":"node.mjs","sourcesContent":["import type { Readable } from \"node:stream\";\nimport { CodexError } from \"../errors/errors\";\nimport type { SafeValue } from \"../values/values\";\nimport Undici from \"undici\";\nimport { type FormData } from \"undici\";\nimport type { UploadStategy, UploadStategyOptions } from \"./types\";\nimport { FetchAuthBuilder } from \"../fetch-safe/fetch-safe\";\n\nexport class NodeUploadStategy implements UploadStategy {\n private readonly body:\n | string\n | Buffer\n | Uint8Array\n | null\n | Readable\n | FormData;\n private readonly metadata:\n | { filename?: string; mimetype?: string }\n | undefined;\n private abortController: AbortController | undefined;\n\n constructor(\n body: string | Buffer | Uint8Array | null | Readable | FormData,\n metadata?: { filename?: string; mimetype?: string }\n ) {\n this.body = body;\n this.metadata = metadata;\n }\n\n async upload(\n url: string,\n { auth }: UploadStategyOptions\n ): Promise<SafeValue<string>> {\n const headers: Record<string, string> = FetchAuthBuilder.build(auth);\n\n if (this.metadata?.filename) {\n headers[\"Content-Disposition\"] =\n 'attachment; filename=\"' + this.metadata?.filename + '\"';\n }\n\n if (this.metadata?.mimetype) {\n headers[\"Content-Type\"] = this.metadata?.mimetype;\n }\n\n const controller = new AbortController();\n this.abortController = controller;\n\n const res = await Undici.request(url, {\n method: \"POST\",\n headers,\n body: this.body,\n signal: controller.signal,\n });\n\n if (res.statusCode < 200 || res.statusCode >= 300) {\n const msg = `The status code is invalid got ${res.statusCode} - ${await res.body.text()} `;\n return {\n error: true,\n data: new CodexError(msg, { code: res.statusCode }),\n };\n }\n\n return { error: false, data: await res.body.text() };\n }\n\n abort(): void {\n try {\n this.abortController?.abort();\n } catch (_) {\n // Nothing to do\n }\n }\n}\n"]}