{"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"]}