{"version":3,"file":"index.mjs","sources":["../src/types.ts","../src/utils.ts","../src/index.ts"],"sourcesContent":["import type { ReadStream } from 'node:fs';\nimport type { JWKInterface } from 'arweave/node/lib/wallet';\nimport { z } from 'zod';\n\nconst fileSchema = z.object({\n  name: z.string(),\n  alternativeText: z.string().optional(),\n  caption: z.string().optional(),\n  width: z.number().optional(),\n  height: z.number().optional(),\n  formats: z.record(z.string(), z.unknown()).optional(),\n  hash: z.string(),\n  ext: z.string().optional(),\n  mime: z.string(),\n  size: z.number(),\n  sizeInBytes: z.number(),\n  url: z.string(),\n  previewUrl: z.string().optional(),\n  path: z.string().optional(),\n  provider: z.string().optional(),\n  provider_metadata: z.record(z.string(), z.unknown()).optional(),\n  stream: z.unknown().optional(), // `ReadStream` can't be validated easily, so `any` or skip\n  buffer: z.unknown().optional(), // same for `Buffer`\n});\n\nexport type File = z.infer<typeof fileSchema> & {\n  stream?: ReadStream;\n  buffer?: Buffer;\n};\n\nconst jwkSchema = z.object({\n\t\"kty\": z.string({ error: \"Invalid JWK format. Please check the content of your Arweave Wallet JWK\" }),\n\t\"e\": z.string({ error: \"Invalid JWK format. Please check the content of your Arweave Wallet JWK\" }),\n\t\"n\": z.string({ error: \"Invalid JWK format. Please check the content of your Arweave Wallet JWK\" }),\n  \"d\": z.string().optional(),\n\t\"dp\": z.string().optional(),\n\t\"dq\": z.string().optional(),\n\t\"ext\": z.boolean().optional(),\n\t\"p\": z.string().optional(),\n\t\"q\": z.string().optional(),\n\t\"qi\": z.string().optional(),\n});\n\ntype GetContentTypeFn = (file: File) => string;\n\nconst defaultGetContentType = (file: File) => file.mime;\n\nexport const defaultGateway = 'https://arweave.net';\n\nexport const optionsSchema = z.object({\n  arweaveWallet: z\n    .preprocess((input) => {\n      if (typeof input === 'string') {\n        try {\n          return JSON.parse(input);\n        } catch {\n          throw new Error(\n            'Arweave Wallet provided is not a valid JSON. Please ensure it is a valid JWK format.'\n          );\n        }\n      }\n      \n      return input;\n    }, jwkSchema),\n  gateway: z.url().default(defaultGateway),\n  getContentType: z\n    .custom<GetContentTypeFn>((val) => typeof val === 'function')\n    .optional()\n    .default(() => defaultGetContentType),\n});\n\nexport type Options = z.infer<typeof optionsSchema>;\n\nexport type DefaultOptions = Partial<Omit<Options, 'arweaveWallet'>> & {\n  arweaveWallet: JWKInterface | string;\n};\n","import z from 'zod';\nimport {\n  optionsSchema,\n  type DefaultOptions,\n  type File,\n  type Options,\n} from './types';\n\nexport const getConfigDefaultValues = (config: DefaultOptions) => {\n  try {\n    return optionsSchema.parse(config);\n  } catch (err) {\n    if (err instanceof z.ZodError) {\n      throw new Error(err.issues[0]?.message);\n    } else {\n      throw err;\n    }\n  }\n};\n\nexport const prepareUploadFile = async (\n  file: File,\n  config: Options,\n) => {\n  let fileBuffer : Buffer;\n  if (file.stream) { // convert stream to buffer\n    const buffers = []\n    for await (const chunk of file.stream) {\n      buffers.push(chunk);\n    }\n\n    fileBuffer = Buffer.concat(buffers);\n  } else if (file.buffer) {\n    fileBuffer = file.buffer;\n  } else {\n    throw new Error('File must have either a stream or a buffer.');\n  }\n\n  const fileSize = fileBuffer.length\n\n  const fileContentType = config.getContentType(file);\n\n  return { fileBuffer, fileSize, fileContentType };\n};\n","import type { DefaultOptions, File } from './types';\nimport { TurboFactory } from '@ardrive/turbo-sdk';\nimport { getConfigDefaultValues, prepareUploadFile } from './utils';\n\nexport default {\n  init(providedConfig: DefaultOptions) {\n    const config = getConfigDefaultValues(providedConfig);\n    const { arweaveWallet } = config;\n    const turbo = TurboFactory.authenticated({ privateKey: arweaveWallet });\n\n    // const arweave = Arweave.init({});\n    // let jwk = arweaveWallet;\n    // if (!jwk) {\n    //   console.log(__dirname);\n    //   try {\n    //     const arweaveJson = fs.readFileSync('arweave.json', 'utf-8');\n    //     jwk = JSON.parse(arweaveJson);\n    //   } catch (error) {\n    //     // If reading the file failed, log the error\n    //     console.error('Error reading arweave.json:', error);\n    //   }\n    // }\n\n    // if (!jwk) {\n    //   throw new Error('Arweave wallet JSON is required. Please set the arweaveWallet option, or have wallet as \"arweave.json\" file in the project root.');\n    // }\n\n    const upload = async (file: File) => {\n      try {\n        const { fileBuffer, fileSize, fileContentType } = await prepareUploadFile(file, config);\n\n        const res = await turbo.uploadFile({\n          fileStreamFactory: () => fileBuffer,\n          fileSizeFactory: () => fileSize,\n          dataItemOpts: {\n            tags: [\n              {\n                name: \"Content-Type\",\n                value: fileContentType,\n              },\n            ],\n          },\n        });\n\n        file.url = `${res.id}`;\n      } catch (error: any) {\n        if (error.status === 402) {\n          const message = `Insufficient balance. Please follow the documentation on how to top up your ArDrive Turbo account (https://github.com/longview-labs/strapi-provider-upload-arweave?tab=readme-ov-file#how-to-pay-for-uploads)`;\n          console.error(message)\n          throw new Error(message);\n        } else if (error instanceof Error && 'message' in error) {\n          const message = `Error uploading file to Arweave: ${error.message}`;\n          console.error(message);\n          throw new Error(message);\n        } else {\n          throw error;\n        }\n      }\n    };\n\n    return {\n      async upload(file: File) {\n        return upload(file);\n      },\n      async uploadStream(file: File) {\n        return upload(file);\n      },\n      async delete(file: File) {\n        return \"Files save on Arweave cannot be deleted as they are immutable.\";\n      },\n      isPrivate() {\n        return true;\n      },\n      async getSignedUrl(file: File) {\n        // transform url to specific gateway\n        return {\n          url: `${config.gateway}/${file.url}`\n        };\n      },\n    };\n  },\n};\n"],"names":["z","object","name","string","alternativeText","optional","caption","width","number","height","formats","record","unknown","hash","ext","mime","size","sizeInBytes","url","previewUrl","path","provider","provider_metadata","stream","buffer","jwkSchema","error","boolean","defaultGetContentType","file","defaultGateway","optionsSchema","arweaveWallet","preprocess","input","JSON","parse","Error","gateway","default","getContentType","custom","val","getConfigDefaultValues","config","err","ZodError","issues","message","prepareUploadFile","fileBuffer","buffers","chunk","push","Buffer","concat","fileSize","length","fileContentType","init","providedConfig","turbo","TurboFactory","authenticated","privateKey","upload","res","uploadFile","fileStreamFactory","fileSizeFactory","dataItemOpts","tags","value","id","status","console","uploadStream","delete","isPrivate","getSignedUrl"],"mappings":"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"}