@metaplex-foundation/umi-uploader-irys 1.4.1 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"createIrysUploader.mjs","sources":["../../src/createIrysUploader.ts"],"sourcesContent":["import type { BaseWebIrys } from '@irys/web-upload/dist/types/base';\nimport type { BaseNodeIrys } from '@irys/upload/dist/types/base';\nimport {\n Commitment,\n Context,\n GenericFile,\n GenericFileTag,\n Keypair,\n Signer,\n SolAmount,\n UploaderInterface,\n UploaderUploadOptions,\n base58,\n createGenericFileFromJson,\n createSignerFromKeypair,\n isKeypairSigner,\n lamports,\n publicKey,\n signTransaction,\n} from '@metaplex-foundation/umi';\nimport {\n fromWeb3JsKeypair,\n fromWeb3JsLegacyTransaction,\n toWeb3JsLegacyTransaction,\n toWeb3JsPublicKey,\n} from '@metaplex-foundation/umi-web3js-adapters';\nimport {\n Connection as Web3JsConnection,\n Keypair as Web3JsKeypair,\n PublicKey as Web3JsPublicKey,\n SendOptions as Web3JsSendOptions,\n Signer as Web3JsSigner,\n Transaction as Web3JsTransaction,\n TransactionSignature as Web3JsTransactionSignature,\n} from '@solana/web3.js';\nimport BigNumber from 'bignumber.js';\nimport { Buffer } from 'buffer';\nimport { PromisePool } from '@supercharge/promise-pool';\nimport {\n AssetUploadFailedError,\n IrysWithdrawError,\n FailedToConnectToIrysAddressError,\n FailedToInitializeIrysError,\n IrysAbortError,\n} from './errors';\n// PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.\n\n/**\n * This method is necessary to import the Irys package on both ESM and CJS modules.\n * Without this, we get a different structure on each module:\n * - CJS: { default: [Getter], WebIrys: [Getter] }\n * - ESM: { default: { default: [Getter], WebIrys: [Getter] } }\n * This method fixes this by ensure there is not double default in the imported package.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction _removeDoubleDefault<T>(pkg: T): T {\n if (\n pkg &&\n typeof pkg === 'object' &&\n 'default' in pkg &&\n 'default' in (pkg as any).default\n ) {\n return (pkg as any).default;\n }\n\n return pkg;\n}\n\nexport type IrysUploader = UploaderInterface & {\n irys: () => Promise<BaseNodeIrys | BaseWebIrys>;\n getUploadPriceFromBytes: (bytes: number) => Promise<SolAmount>;\n getBalance: () => Promise<SolAmount>;\n fund: (amount: SolAmount, skipBalanceCheck: boolean) => Promise<void>;\n withdrawAll: (amount: SolAmount) => Promise<void>;\n withdraw: (amount: SolAmount) => Promise<void>;\n};\n\nexport type IrysUploaderOptions = {\n address?: string;\n timeout?: number;\n providerUrl?: string;\n priceMultiplier?: number;\n payer?: Signer;\n uploadConcurrency?: number;\n};\n\nexport type IrysWalletAdapter = {\n publicKey: Web3JsPublicKey | null;\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n signTransaction?: (\n transaction: Web3JsTransaction\n ) => Promise<Web3JsTransaction>;\n signAllTransactions?: (\n transactions: Web3JsTransaction[]\n ) => Promise<Web3JsTransaction[]>;\n sendTransaction: (\n transaction: Web3JsTransaction,\n connection: Web3JsConnection,\n options?: Web3JsSendOptions & { signers?: Web3JsSigner[] }\n ) => Promise<Web3JsTransactionSignature>;\n};\n\n// Size of Irys transaction header.\nconst HEADER_SIZE = 2_000;\n\n// Minimum file size for cost calculation.\nconst MINIMUM_SIZE = 80_000;\n\nconst gatewayUrl = (id: string) => `https://gateway.irys.xyz/${id}`;\n\nexport function createIrysUploader(\n context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,\n uploaderOptions: IrysUploaderOptions = {}\n): IrysUploader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let _irys: BaseNodeIrys | BaseWebIrys | null = null;\n uploaderOptions = {\n providerUrl: context.rpc.getEndpoint(),\n ...uploaderOptions,\n };\n\n const getUploadPriceFromBytes = async (bytes: number): Promise<SolAmount> => {\n const irys = await getIrys();\n const price = await irys.getPrice(bytes);\n\n return bigNumberToAmount(\n price.multipliedBy(uploaderOptions.priceMultiplier ?? 1.1)\n );\n };\n\n const getUploadPrice = async (files: GenericFile[]): Promise<SolAmount> => {\n const bytes: number = files.reduce(\n (sum, file) =>\n sum + HEADER_SIZE + Math.max(MINIMUM_SIZE, file.buffer.byteLength),\n 0\n );\n\n return getUploadPriceFromBytes(bytes);\n };\n\n const upload = async (\n files: GenericFile[],\n options?: UploaderUploadOptions\n ): Promise<string[]> => {\n const irys = await getIrys();\n const amount = await getUploadPrice(files);\n await fund(amount);\n\n const manifestMap = options?.manifest === true ? new Map() : undefined;\n\n const result = await PromisePool.for(files)\n .withConcurrency(uploaderOptions.uploadConcurrency ?? 10)\n .onTaskFinished((_, pool) =>\n options?.onProgress?.(pool.processedPercentage())\n )\n .process(async (file) => {\n if (options?.signal?.aborted) throw new IrysAbortError();\n\n const buffer = Buffer.from(file.buffer);\n const irysTx = irys.createTransaction(buffer, {\n tags: getGenericFileTagsWithContentType(file),\n });\n await irysTx.sign();\n const {\n status,\n data: { id },\n } = await irys.uploader.uploadTransaction(irysTx);\n\n if (status >= 300) throw new AssetUploadFailedError(status);\n\n manifestMap?.set(file.fileName, id);\n\n return id;\n });\n\n if (manifestMap) {\n const manifest = await irys.uploader.generateFolder({\n items: manifestMap,\n });\n const { id } = await irys.upload(JSON.stringify(manifest), {\n tags: [\n { name: 'Type', value: 'manifest' },\n { name: 'Content-Type', value: 'application/x.irys-manifest+json' },\n // ...(options?.manifestTags ?? []),\n ],\n });\n return [gatewayUrl(id)];\n }\n\n return result.results.map(gatewayUrl);\n };\n\n const uploadJson = async <T>(json: T): Promise<string> => {\n const file = createGenericFileFromJson(json);\n const uris = await upload([file]);\n return uris[0];\n };\n\n const getBalance = async (): Promise<SolAmount> => {\n const irys = await getIrys();\n const balance = await irys.getBalance();\n\n return bigNumberToAmount(balance);\n };\n\n const fund = async (\n amount: SolAmount,\n skipBalanceCheck = false\n ): Promise<void> => {\n const irys = await getIrys();\n let toFund = amountToBigNumber(amount);\n\n if (!skipBalanceCheck) {\n const balance = await irys.getBalance();\n\n toFund = toFund.isGreaterThan(balance)\n ? toFund.minus(balance)\n : new BigNumber(0);\n }\n\n if (toFund.isLessThanOrEqualTo(0)) {\n return;\n }\n\n await irys.fund(toFund);\n };\n\n const withdrawAll = async (): Promise<void> => {\n const irys = await getIrys();\n const balance = await irys.getBalance();\n const minimumBalance = new BigNumber(5000);\n\n if (balance.isLessThan(minimumBalance)) {\n return;\n }\n\n await irys.withdrawAll();\n };\n\n const withdraw = async (amount: SolAmount): Promise<void> => {\n const irys = await getIrys();\n try {\n await irys.withdrawBalance(amountToBigNumber(amount));\n } catch (e: any) {\n throw new IrysWithdrawError(\n e instanceof Error ? e.message : e.toString()\n );\n }\n };\n\n const getIrys = async (): Promise<BaseWebIrys | BaseNodeIrys> => {\n const oldPayer = _irys?.getSigner().publicKey;\n const newPayer = uploaderOptions.payer ?? context.payer;\n if (\n oldPayer &&\n publicKey(new Uint8Array(oldPayer)) !== newPayer.publicKey\n ) {\n _irys = null;\n }\n\n if (!_irys) {\n _irys = await initIrys();\n }\n\n return _irys;\n };\n\n const initIrys = async (): Promise<BaseWebIrys | BaseNodeIrys> => {\n const token = 'solana';\n const defaultAddress =\n context.rpc.getCluster() === 'devnet'\n ? 'https://devnet.irys.xyz'\n : 'https://uploader.irys.xyz';\n const address = uploaderOptions?.address ?? defaultAddress;\n const irysOptions = {\n timeout: uploaderOptions.timeout,\n providerUrl: uploaderOptions.providerUrl,\n };\n\n const payer: Signer = uploaderOptions.payer ?? context.payer;\n\n // If in node use node irys, else use web irys.\n const isNode =\n // eslint-disable-next-line no-prototype-builtins\n typeof window === 'undefined' || window.process?.hasOwnProperty('type');\n\n let irys;\n if (isNode && isKeypairSigner(payer))\n irys = await initNodeIrys(address, payer, irysOptions);\n else {\n irys = await initWebIrys(address, payer, irysOptions);\n }\n\n try {\n // Check for valid irys node.\n await irys.utils.getBundlerAddress(token);\n } catch (error) {\n throw new FailedToConnectToIrysAddressError(address, error as Error);\n }\n\n return irys;\n };\n\n const initNodeIrys = async (\n address: string,\n keypair: Keypair,\n options: any\n ): Promise<BaseNodeIrys> => {\n const bPackage = _removeDoubleDefault(await import('@irys/upload'));\n const cPackage = _removeDoubleDefault(await import('@irys/upload-solana'));\n return bPackage\n .Uploader(cPackage.Solana)\n .bundlerUrl(address)\n .withWallet(keypair.secretKey)\n .withIrysConfig(options)\n .build();\n };\n\n const initWebIrys = async (\n address: string,\n payer: Signer,\n options: any\n ): Promise<BaseWebIrys> => {\n const wallet: IrysWalletAdapter = {\n publicKey: toWeb3JsPublicKey(payer.publicKey),\n signMessage: (message: Uint8Array) => payer.signMessage(message),\n signTransaction: async (web3JsTransaction: Web3JsTransaction) =>\n toWeb3JsLegacyTransaction(\n await payer.signTransaction(\n fromWeb3JsLegacyTransaction(web3JsTransaction)\n )\n ),\n signAllTransactions: async (web3JsTransactions: Web3JsTransaction[]) => {\n const transactions = web3JsTransactions.map(\n fromWeb3JsLegacyTransaction\n );\n const signedTransactions = await payer.signAllTransactions(\n transactions\n );\n return signedTransactions.map(toWeb3JsLegacyTransaction);\n },\n sendTransaction: async (\n web3JsTransaction: Web3JsTransaction,\n connection: Web3JsConnection,\n options: Web3JsSendOptions & { signers?: Web3JsSigner[] } = {}\n ): Promise<Web3JsTransactionSignature> => {\n const { signers: web3JsSigners = [], ...sendOptions } = options;\n const signers = web3JsSigners.map((web3JsSigner) =>\n createSignerFromKeypair(\n context,\n fromWeb3JsKeypair(\n Web3JsKeypair.fromSecretKey(web3JsSigner.secretKey)\n )\n )\n );\n\n let transaction = fromWeb3JsLegacyTransaction(web3JsTransaction);\n transaction = await signTransaction(transaction, [payer, ...signers]);\n\n const signature = await context.rpc.sendTransaction(transaction, {\n ...sendOptions,\n preflightCommitment: sendOptions.preflightCommitment as Commitment,\n });\n\n return base58.deserialize(signature)[0];\n },\n };\n\n const bPackage = _removeDoubleDefault(await import('@irys/web-upload'));\n const cPackage = _removeDoubleDefault(\n await import('@irys/web-upload-solana')\n );\n\n const irys = await bPackage\n .WebUploader(cPackage.WebSolana)\n .withProvider(wallet)\n .bundlerUrl(address)\n .withIrysConfig(options)\n .build();\n\n try {\n // Try to initiate irys.\n await irys.ready();\n } catch (error) {\n throw new FailedToInitializeIrysError(error as Error);\n }\n\n return irys;\n };\n\n return {\n getUploadPriceFromBytes,\n getUploadPrice,\n upload,\n uploadJson,\n getBalance,\n fund,\n withdrawAll,\n withdraw,\n irys: getIrys,\n };\n}\n\nexport const isIrysUploader = (\n uploader: UploaderInterface\n): uploader is IrysUploader =>\n 'irys' in uploader &&\n 'getBalance' in uploader &&\n 'fund' in uploader &&\n 'withdrawAll' in uploader;\n\nconst bigNumberToAmount = (bigNumber: BigNumber): SolAmount =>\n lamports(bigNumber.decimalPlaces(0).toString());\n\nconst amountToBigNumber = (amount: SolAmount): BigNumber =>\n new BigNumber(amount.basisPoints.toString());\n\nconst getGenericFileTagsWithContentType = (\n file: GenericFile\n): GenericFileTag[] => {\n if (!file.contentType) {\n return file.tags;\n }\n\n return [{ name: 'Content-Type', value: file.contentType }, ...file.tags];\n};\n"],"names":["_removeDoubleDefault","pkg","default","HEADER_SIZE","MINIMUM_SIZE","gatewayUrl","id","createIrysUploader","context","uploaderOptions","_irys","providerUrl","rpc","getEndpoint","getUploadPriceFromBytes","bytes","irys","getIrys","price","getPrice","bigNumberToAmount","multipliedBy","priceMultiplier","getUploadPrice","files","reduce","sum","file","Math","max","buffer","byteLength","upload","options","amount","fund","manifestMap","manifest","Map","undefined","result","PromisePool","for","withConcurrency","uploadConcurrency","onTaskFinished","_","pool","onProgress","processedPercentage","process","signal","aborted","IrysAbortError","Buffer","from","irysTx","createTransaction","tags","getGenericFileTagsWithContentType","sign","status","data","uploader","uploadTransaction","AssetUploadFailedError","set","fileName","generateFolder","items","JSON","stringify","name","value","results","map","uploadJson","json","createGenericFileFromJson","uris","getBalance","balance","skipBalanceCheck","toFund","amountToBigNumber","isGreaterThan","minus","BigNumber","isLessThanOrEqualTo","withdrawAll","minimumBalance","isLessThan","withdraw","withdrawBalance","e","IrysWithdrawError","Error","message","toString","oldPayer","getSigner","publicKey","newPayer","payer","Uint8Array","initIrys","token","defaultAddress","getCluster","address","irysOptions","timeout","isNode","window","hasOwnProperty","isKeypairSigner","initNodeIrys","initWebIrys","utils","getBundlerAddress","error","FailedToConnectToIrysAddressError","keypair","bPackage","cPackage","Uploader","Solana","bundlerUrl","withWallet","secretKey","withIrysConfig","build","wallet","toWeb3JsPublicKey","signMessage","signTransaction","web3JsTransaction","toWeb3JsLegacyTransaction","fromWeb3JsLegacyTransaction","signAllTransactions","web3JsTransactions","transactions","signedTransactions","sendTransaction","connection","signers","web3JsSigners","sendOptions","web3JsSigner","createSignerFromKeypair","fromWeb3JsKeypair","Web3JsKeypair","fromSecretKey","transaction","signature","preflightCommitment","base58","deserialize","WebUploader","WebSolana","withProvider","ready","FailedToInitializeIrysError","isIrysUploader","bigNumber","lamports","decimalPlaces","basisPoints","contentType"],"mappings":"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"}
1
+ {"version":3,"file":"createIrysUploader.mjs","sources":["../../src/createIrysUploader.ts"],"sourcesContent":["import type { BaseWebIrys } from '@irys/web-upload/dist/types/base';\nimport type { BaseNodeIrys } from '@irys/upload/dist/types/base';\nimport {\n Context,\n GenericFile,\n GenericFileTag,\n Signer,\n SolAmount,\n UploaderInterface,\n UploaderUploadOptions,\n createGenericFileFromJson,\n lamports,\n publicKey,\n} from '@metaplex-foundation/umi';\n\nimport {\n Connection as Web3JsConnection,\n PublicKey as Web3JsPublicKey,\n SendOptions as Web3JsSendOptions,\n Signer as Web3JsSigner,\n Transaction as Web3JsTransaction,\n TransactionSignature as Web3JsTransactionSignature,\n} from '@solana/web3.js';\nimport BigNumber from 'bignumber.js';\nimport { Buffer } from 'buffer';\nimport { PromisePool } from '@supercharge/promise-pool';\nimport {\n AssetUploadFailedError,\n IrysWithdrawError,\n FailedToConnectToIrysAddressError,\n IrysAbortError,\n} from './errors';\n\n// PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.\n\nexport type IrysUploader = UploaderInterface & {\n irys: () => Promise<BaseNodeIrys | BaseWebIrys>;\n getUploadPriceFromBytes: (bytes: number) => Promise<SolAmount>;\n getBalance: () => Promise<SolAmount>;\n fund: (amount: SolAmount, skipBalanceCheck: boolean) => Promise<void>;\n withdrawAll: (amount: SolAmount) => Promise<void>;\n withdraw: (amount: SolAmount) => Promise<void>;\n};\n\nexport type IrysUploaderOptions = {\n address?: string;\n timeout?: number;\n providerUrl?: string;\n priceMultiplier?: number;\n payer?: Signer;\n uploadConcurrency?: number;\n};\n\nexport type IrysWalletAdapter = {\n publicKey: Web3JsPublicKey | null;\n signMessage?: (message: Uint8Array) => Promise<Uint8Array>;\n signTransaction?: (\n transaction: Web3JsTransaction\n ) => Promise<Web3JsTransaction>;\n signAllTransactions?: (\n transactions: Web3JsTransaction[]\n ) => Promise<Web3JsTransaction[]>;\n sendTransaction: (\n transaction: Web3JsTransaction,\n connection: Web3JsConnection,\n options?: Web3JsSendOptions & { signers?: Web3JsSigner[] }\n ) => Promise<Web3JsTransactionSignature>;\n};\n\n// Size of Irys transaction header.\nconst HEADER_SIZE = 2_000;\n\n// Minimum file size for cost calculation.\nconst MINIMUM_SIZE = 80_000;\n\nconst gatewayUrl = (id: string) => `https://gateway.irys.xyz/${id}`;\n\nexport function createBaseIrysUploader(\n initFn: (\n address: string,\n payer: Signer,\n options: any,\n context: any\n ) => Promise<BaseWebIrys | BaseNodeIrys>,\n context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,\n uploaderOptions: IrysUploaderOptions = {}\n): IrysUploader {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let _irys: BaseNodeIrys | BaseWebIrys | null = null;\n uploaderOptions = {\n providerUrl: context.rpc.getEndpoint(),\n ...uploaderOptions,\n };\n\n const getUploadPriceFromBytes = async (bytes: number): Promise<SolAmount> => {\n const irys = await getIrys();\n const price = await irys.getPrice(bytes);\n\n return bigNumberToAmount(\n price.multipliedBy(uploaderOptions.priceMultiplier ?? 1.1)\n );\n };\n\n const getUploadPrice = async (files: GenericFile[]): Promise<SolAmount> => {\n const bytes: number = files.reduce(\n (sum, file) =>\n sum + HEADER_SIZE + Math.max(MINIMUM_SIZE, file.buffer.byteLength),\n 0\n );\n\n return getUploadPriceFromBytes(bytes);\n };\n\n const upload = async (\n files: GenericFile[],\n options?: UploaderUploadOptions\n ): Promise<string[]> => {\n const irys = await getIrys();\n const amount = await getUploadPrice(files);\n await fund(amount);\n\n const manifestMap = options?.manifest === true ? new Map() : undefined;\n\n const result = await PromisePool.for(files)\n .withConcurrency(uploaderOptions.uploadConcurrency ?? 10)\n .onTaskFinished((_, pool) =>\n options?.onProgress?.(pool.processedPercentage())\n )\n .process(async (file) => {\n if (options?.signal?.aborted) throw new IrysAbortError();\n\n const buffer = Buffer.from(file.buffer);\n const irysTx = irys.createTransaction(buffer, {\n tags: getGenericFileTagsWithContentType(file),\n });\n await irysTx.sign();\n const {\n status,\n data: { id },\n } = await irys.uploader.uploadTransaction(irysTx);\n\n if (status >= 300) throw new AssetUploadFailedError(status);\n\n manifestMap?.set(file.fileName, id);\n\n return id;\n });\n\n if (manifestMap) {\n const manifest = await irys.uploader.generateFolder({\n items: manifestMap,\n });\n const { id } = await irys.upload(JSON.stringify(manifest), {\n tags: [\n { name: 'Type', value: 'manifest' },\n { name: 'Content-Type', value: 'application/x.irys-manifest+json' },\n // ...(options?.manifestTags ?? []),\n ],\n });\n return [gatewayUrl(id)];\n }\n\n return result.results.map(gatewayUrl);\n };\n\n const uploadJson = async <T>(json: T): Promise<string> => {\n const file = createGenericFileFromJson(json);\n const uris = await upload([file]);\n return uris[0];\n };\n\n const getBalance = async (): Promise<SolAmount> => {\n const irys = await getIrys();\n const balance = await irys.getBalance();\n\n return bigNumberToAmount(balance);\n };\n\n const fund = async (\n amount: SolAmount,\n skipBalanceCheck = false\n ): Promise<void> => {\n const irys = await getIrys();\n let toFund = amountToBigNumber(amount);\n\n if (!skipBalanceCheck) {\n const balance = await irys.getBalance();\n\n toFund = toFund.isGreaterThan(balance)\n ? toFund.minus(balance)\n : new BigNumber(0);\n }\n\n if (toFund.isLessThanOrEqualTo(0)) {\n return;\n }\n\n await irys.fund(toFund);\n };\n\n const withdrawAll = async (): Promise<void> => {\n const irys = await getIrys();\n const balance = await irys.getBalance();\n const minimumBalance = new BigNumber(5000);\n\n if (balance.isLessThan(minimumBalance)) {\n return;\n }\n\n await irys.withdrawAll();\n };\n\n const withdraw = async (amount: SolAmount): Promise<void> => {\n const irys = await getIrys();\n try {\n await irys.withdrawBalance(amountToBigNumber(amount));\n } catch (e: any) {\n throw new IrysWithdrawError(\n e instanceof Error ? e.message : e.toString()\n );\n }\n };\n\n const getIrys = async (): Promise<BaseWebIrys | BaseNodeIrys> => {\n const oldPayer = _irys?.getSigner().publicKey;\n const newPayer = uploaderOptions.payer ?? context.payer;\n if (\n oldPayer &&\n publicKey(new Uint8Array(oldPayer)) !== newPayer.publicKey\n ) {\n _irys = null;\n }\n\n if (!_irys) {\n _irys = await initIrys();\n }\n\n return _irys;\n };\n\n const initIrys = async (): Promise<BaseWebIrys | BaseNodeIrys> => {\n const token = 'solana';\n const defaultAddress =\n context.rpc.getCluster() === 'devnet'\n ? 'https://devnet.irys.xyz'\n : 'https://uploader.irys.xyz';\n const address = uploaderOptions?.address ?? defaultAddress;\n const irysOptions = {\n timeout: uploaderOptions.timeout,\n providerUrl: uploaderOptions.providerUrl,\n };\n\n const payer: Signer = uploaderOptions.payer ?? context.payer;\n\n const irys = await initFn(address, payer, irysOptions, context);\n try {\n // Check for valid irys node.\n await irys.utils.getBundlerAddress(token);\n } catch (error) {\n throw new FailedToConnectToIrysAddressError(address, error as Error);\n }\n\n return irys;\n };\n\n return {\n getUploadPriceFromBytes,\n getUploadPrice,\n upload,\n uploadJson,\n getBalance,\n fund,\n withdrawAll,\n withdraw,\n irys: getIrys,\n };\n}\n\nexport const isIrysUploader = (\n uploader: UploaderInterface\n): uploader is IrysUploader =>\n 'irys' in uploader &&\n 'getBalance' in uploader &&\n 'fund' in uploader &&\n 'withdrawAll' in uploader;\n\nconst bigNumberToAmount = (bigNumber: BigNumber): SolAmount =>\n lamports(bigNumber.decimalPlaces(0).toString());\n\nconst amountToBigNumber = (amount: SolAmount): BigNumber =>\n new BigNumber(amount.basisPoints.toString());\n\nconst getGenericFileTagsWithContentType = (\n file: GenericFile\n): GenericFileTag[] => {\n if (!file.contentType) {\n return file.tags;\n }\n\n return [{ name: 'Content-Type', value: file.contentType }, ...file.tags];\n};\n"],"names":["HEADER_SIZE","MINIMUM_SIZE","gatewayUrl","id","createBaseIrysUploader","initFn","context","uploaderOptions","_irys","providerUrl","rpc","getEndpoint","getUploadPriceFromBytes","bytes","irys","getIrys","price","getPrice","bigNumberToAmount","multipliedBy","priceMultiplier","getUploadPrice","files","reduce","sum","file","Math","max","buffer","byteLength","upload","options","amount","fund","manifestMap","manifest","Map","undefined","result","PromisePool","for","withConcurrency","uploadConcurrency","onTaskFinished","_","pool","onProgress","processedPercentage","process","signal","aborted","IrysAbortError","Buffer","from","irysTx","createTransaction","tags","getGenericFileTagsWithContentType","sign","status","data","uploader","uploadTransaction","AssetUploadFailedError","set","fileName","generateFolder","items","JSON","stringify","name","value","results","map","uploadJson","json","createGenericFileFromJson","uris","getBalance","balance","skipBalanceCheck","toFund","amountToBigNumber","isGreaterThan","minus","BigNumber","isLessThanOrEqualTo","withdrawAll","minimumBalance","isLessThan","withdraw","withdrawBalance","e","IrysWithdrawError","Error","message","toString","oldPayer","getSigner","publicKey","newPayer","payer","Uint8Array","initIrys","token","defaultAddress","getCluster","address","irysOptions","timeout","utils","getBundlerAddress","error","FailedToConnectToIrysAddressError","isIrysUploader","bigNumber","lamports","decimalPlaces","basisPoints","contentType"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { createIrysUploader, isIrysUploader } from './createIrysUploader.mjs';
1
+ export { createBaseIrysUploader, isIrysUploader } from './createIrysUploader.mjs';
2
2
  export { AssetUploadFailedError, FailedToConnectToIrysAddressError, FailedToInitializeIrysError, IrysAbortError, IrysError, IrysWithdrawError } from './errors.mjs';
3
- export { irysUploader } from './plugin.mjs';
3
+ export { createIrysUploader, initNodeIrys, irysUploader } from './nodePlugin.mjs';
4
4
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,23 @@
1
+ import { Uploader } from '@irys/upload';
2
+ import Solana from '@irys/upload-solana';
3
+ import { isKeypairSigner } from '@metaplex-foundation/umi';
4
+ import { createBaseIrysUploader } from './createIrysUploader.mjs';
5
+ import { FailedToInitializeIrysError } from './errors.mjs';
6
+
7
+ const irysUploader = options => ({
8
+ install(umi) {
9
+ umi.uploader = createIrysUploader(umi, options);
10
+ }
11
+ });
12
+ function createIrysUploader(context, uploaderOptions = {}) {
13
+ return createBaseIrysUploader(initNodeIrys, context, uploaderOptions);
14
+ }
15
+ const initNodeIrys = async (address, payer, options) => {
16
+ if (isKeypairSigner(payer)) {
17
+ return Uploader(Solana).bundlerUrl(address).withWallet(payer.secretKey).withIrysConfig(options).build();
18
+ }
19
+ throw new FailedToInitializeIrysError(new Error('Expected signer to be a keypair (try importing @metaplex-foundation/umi-uploader-irys/web to use a browser/external wallet?)'));
20
+ };
21
+
22
+ export { createIrysUploader, initNodeIrys, irysUploader };
23
+ //# sourceMappingURL=nodePlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodePlugin.mjs","sources":["../../src/nodePlugin.ts"],"sourcesContent":["import { Uploader } from '@irys/upload';\nimport Solana from '@irys/upload-solana';\nimport BaseNodeIrys from '@irys/upload/dist/types/base';\nimport { isKeypairSigner } from '@metaplex-foundation/umi';\n\nimport type { Context, Signer, UmiPlugin } from '@metaplex-foundation/umi';\nimport {\n IrysUploaderOptions,\n createBaseIrysUploader as CIU,\n IrysUploader,\n} from './createIrysUploader';\nimport { FailedToInitializeIrysError } from './errors';\n\nexport const irysUploader = (options?: IrysUploaderOptions): UmiPlugin => ({\n install(umi) {\n umi.uploader = createIrysUploader(umi, options);\n },\n});\n\nexport function createIrysUploader(\n context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,\n uploaderOptions: IrysUploaderOptions = {}\n): IrysUploader {\n return CIU(initNodeIrys, context, uploaderOptions);\n}\n\nexport const initNodeIrys = async (\n address: string,\n payer: Signer,\n options: any\n): Promise<BaseNodeIrys> => {\n if (isKeypairSigner(payer)) {\n return Uploader(Solana)\n .bundlerUrl(address)\n .withWallet(payer.secretKey)\n .withIrysConfig(options)\n .build();\n }\n throw new FailedToInitializeIrysError(\n new Error(\n 'Expected signer to be a keypair (try importing @metaplex-foundation/umi-uploader-irys/web to use a browser/external wallet?)'\n )\n );\n};\n"],"names":["irysUploader","options","install","umi","uploader","createIrysUploader","context","uploaderOptions","CIU","initNodeIrys","address","payer","isKeypairSigner","Uploader","Solana","bundlerUrl","withWallet","secretKey","withIrysConfig","build","FailedToInitializeIrysError","Error"],"mappings":";;;;;;AAaaA,MAAAA,YAAY,GAAIC,OAA6B,KAAiB;EACzEC,OAAO,CAACC,GAAG,EAAE;IACXA,GAAG,CAACC,QAAQ,GAAGC,kBAAkB,CAACF,GAAG,EAAEF,OAAO,CAAC,CAAA;AACjD,GAAA;AACF,CAAC,EAAC;AAEK,SAASI,kBAAkB,CAChCC,OAAiD,EACjDC,eAAoC,GAAG,EAAE,EAC3B;AACd,EAAA,OAAOC,sBAAG,CAACC,YAAY,EAAEH,OAAO,EAAEC,eAAe,CAAC,CAAA;AACpD,CAAA;AAEO,MAAME,YAAY,GAAG,OAC1BC,OAAe,EACfC,KAAa,EACbV,OAAY,KACc;AAC1B,EAAA,IAAIW,eAAe,CAACD,KAAK,CAAC,EAAE;IAC1B,OAAOE,QAAQ,CAACC,MAAM,CAAC,CACpBC,UAAU,CAACL,OAAO,CAAC,CACnBM,UAAU,CAACL,KAAK,CAACM,SAAS,CAAC,CAC3BC,cAAc,CAACjB,OAAO,CAAC,CACvBkB,KAAK,EAAE,CAAA;AACZ,GAAA;EACA,MAAM,IAAIC,2BAA2B,CACnC,IAAIC,KAAK,CACP,8HAA8H,CAC/H,CACF,CAAA;AACH;;;;"}
@@ -0,0 +1,4 @@
1
+ export { createBaseIrysUploader, isIrysUploader } from './createIrysUploader.mjs';
2
+ export { AssetUploadFailedError, FailedToConnectToIrysAddressError, FailedToInitializeIrysError, IrysAbortError, IrysError, IrysWithdrawError } from './errors.mjs';
3
+ export { createIrysUploader, initWebIrys, irysUploader } from './webPlugin.mjs';
4
+ //# sourceMappingURL=webIndex.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webIndex.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,50 @@
1
+ import { createSignerFromKeypair, signTransaction, base58 } from '@metaplex-foundation/umi';
2
+ import { toWeb3JsPublicKey, toWeb3JsLegacyTransaction, fromWeb3JsLegacyTransaction, fromWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
3
+ import { Keypair } from '@solana/web3.js';
4
+ import { WebUploader } from '@irys/web-upload';
5
+ import { WebSolana } from '@irys/web-upload-solana';
6
+ import { createBaseIrysUploader } from './createIrysUploader.mjs';
7
+ import { FailedToInitializeIrysError } from './errors.mjs';
8
+
9
+ const irysUploader = options => ({
10
+ install(umi) {
11
+ umi.uploader = createIrysUploader(umi, options);
12
+ }
13
+ });
14
+ function createIrysUploader(context, uploaderOptions = {}) {
15
+ return createBaseIrysUploader(initWebIrys, context, uploaderOptions);
16
+ }
17
+ const initWebIrys = async (address, payer, options, context) => {
18
+ const wallet = {
19
+ publicKey: toWeb3JsPublicKey(payer.publicKey),
20
+ signMessage: message => payer.signMessage(message),
21
+ signTransaction: async web3JsTransaction => toWeb3JsLegacyTransaction(await payer.signTransaction(fromWeb3JsLegacyTransaction(web3JsTransaction))),
22
+ signAllTransactions: async web3JsTransactions => {
23
+ const transactions = web3JsTransactions.map(fromWeb3JsLegacyTransaction);
24
+ const signedTransactions = await payer.signAllTransactions(transactions);
25
+ return signedTransactions.map(toWeb3JsLegacyTransaction);
26
+ },
27
+ sendTransaction: async (web3JsTransaction, connection, options = {}) => {
28
+ const {
29
+ signers: web3JsSigners = [],
30
+ ...sendOptions
31
+ } = options;
32
+ const signers = web3JsSigners.map(web3JsSigner => createSignerFromKeypair(context, fromWeb3JsKeypair(Keypair.fromSecretKey(web3JsSigner.secretKey))));
33
+ let transaction = fromWeb3JsLegacyTransaction(web3JsTransaction);
34
+ transaction = await signTransaction(transaction, [payer, ...signers]);
35
+ const signature = await context.rpc.sendTransaction(transaction, {
36
+ ...sendOptions,
37
+ preflightCommitment: sendOptions.preflightCommitment
38
+ });
39
+ return base58.deserialize(signature)[0];
40
+ }
41
+ };
42
+ try {
43
+ return await WebUploader(WebSolana).withProvider(wallet).bundlerUrl(address).withIrysConfig(options).build();
44
+ } catch (error) {
45
+ throw new FailedToInitializeIrysError(error);
46
+ }
47
+ };
48
+
49
+ export { createIrysUploader, initWebIrys, irysUploader };
50
+ //# sourceMappingURL=webPlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webPlugin.mjs","sources":["../../src/webPlugin.ts"],"sourcesContent":["import {\n Commitment,\n Signer,\n base58,\n createSignerFromKeypair,\n signTransaction,\n Context,\n} from '@metaplex-foundation/umi';\nimport {\n fromWeb3JsKeypair,\n fromWeb3JsLegacyTransaction,\n toWeb3JsLegacyTransaction,\n toWeb3JsPublicKey,\n} from '@metaplex-foundation/umi-web3js-adapters';\nimport {\n Connection as Web3JsConnection,\n Keypair as Web3JsKeypair,\n SendOptions as Web3JsSendOptions,\n Signer as Web3JsSigner,\n Transaction as Web3JsTransaction,\n TransactionSignature as Web3JsTransactionSignature,\n} from '@solana/web3.js';\n\nimport { WebUploader } from '@irys/web-upload';\nimport { WebSolana } from '@irys/web-upload-solana';\nimport BaseWebIrys from '@irys/web-upload/dist/types/base';\nimport type { UmiPlugin } from '@metaplex-foundation/umi';\nimport {\n IrysWalletAdapter,\n createBaseIrysUploader as CIU,\n IrysUploaderOptions,\n IrysUploader,\n} from './createIrysUploader';\nimport { FailedToInitializeIrysError } from './errors';\n\nexport const irysUploader = (options?: IrysUploaderOptions): UmiPlugin => ({\n install(umi) {\n umi.uploader = createIrysUploader(umi, options);\n },\n});\n\nexport function createIrysUploader(\n context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,\n uploaderOptions: IrysUploaderOptions = {}\n): IrysUploader {\n return CIU(initWebIrys, context, uploaderOptions);\n}\n\nexport const initWebIrys = async (\n address: string,\n payer: Signer,\n options: any,\n context: any\n): Promise<BaseWebIrys> => {\n const wallet: IrysWalletAdapter = {\n publicKey: toWeb3JsPublicKey(payer.publicKey),\n signMessage: (message: Uint8Array) => payer.signMessage(message),\n signTransaction: async (web3JsTransaction: Web3JsTransaction) =>\n toWeb3JsLegacyTransaction(\n await payer.signTransaction(\n fromWeb3JsLegacyTransaction(web3JsTransaction)\n )\n ),\n signAllTransactions: async (web3JsTransactions: Web3JsTransaction[]) => {\n const transactions = web3JsTransactions.map(fromWeb3JsLegacyTransaction);\n const signedTransactions = await payer.signAllTransactions(transactions);\n return signedTransactions.map(toWeb3JsLegacyTransaction);\n },\n sendTransaction: async (\n web3JsTransaction: Web3JsTransaction,\n connection: Web3JsConnection,\n options: Web3JsSendOptions & { signers?: Web3JsSigner[] } = {}\n ): Promise<Web3JsTransactionSignature> => {\n const { signers: web3JsSigners = [], ...sendOptions } = options;\n const signers = web3JsSigners.map((web3JsSigner) =>\n createSignerFromKeypair(\n context,\n fromWeb3JsKeypair(Web3JsKeypair.fromSecretKey(web3JsSigner.secretKey))\n )\n );\n\n let transaction = fromWeb3JsLegacyTransaction(web3JsTransaction);\n transaction = await signTransaction(transaction, [payer, ...signers]);\n\n const signature = await context.rpc.sendTransaction(transaction, {\n ...sendOptions,\n preflightCommitment: sendOptions.preflightCommitment as Commitment,\n });\n\n return base58.deserialize(signature)[0];\n },\n };\n\n try {\n return await WebUploader(WebSolana)\n .withProvider(wallet)\n .bundlerUrl(address)\n .withIrysConfig(options)\n .build();\n } catch (error) {\n throw new FailedToInitializeIrysError(error as Error);\n }\n};\n"],"names":["irysUploader","options","install","umi","uploader","createIrysUploader","context","uploaderOptions","CIU","initWebIrys","address","payer","wallet","publicKey","toWeb3JsPublicKey","signMessage","message","signTransaction","web3JsTransaction","toWeb3JsLegacyTransaction","fromWeb3JsLegacyTransaction","signAllTransactions","web3JsTransactions","transactions","map","signedTransactions","sendTransaction","connection","signers","web3JsSigners","sendOptions","web3JsSigner","createSignerFromKeypair","fromWeb3JsKeypair","Web3JsKeypair","fromSecretKey","secretKey","transaction","signature","rpc","preflightCommitment","base58","deserialize","WebUploader","WebSolana","withProvider","bundlerUrl","withIrysConfig","build","error","FailedToInitializeIrysError"],"mappings":";;;;;;;;AAmCaA,MAAAA,YAAY,GAAIC,OAA6B,KAAiB;EACzEC,OAAO,CAACC,GAAG,EAAE;IACXA,GAAG,CAACC,QAAQ,GAAGC,kBAAkB,CAACF,GAAG,EAAEF,OAAO,CAAC,CAAA;AACjD,GAAA;AACF,CAAC,EAAC;AAEK,SAASI,kBAAkB,CAChCC,OAAiD,EACjDC,eAAoC,GAAG,EAAE,EAC3B;AACd,EAAA,OAAOC,sBAAG,CAACC,WAAW,EAAEH,OAAO,EAAEC,eAAe,CAAC,CAAA;AACnD,CAAA;AAEO,MAAME,WAAW,GAAG,OACzBC,OAAe,EACfC,KAAa,EACbV,OAAY,EACZK,OAAY,KACa;AACzB,EAAA,MAAMM,MAAyB,GAAG;AAChCC,IAAAA,SAAS,EAAEC,iBAAiB,CAACH,KAAK,CAACE,SAAS,CAAC;IAC7CE,WAAW,EAAGC,OAAmB,IAAKL,KAAK,CAACI,WAAW,CAACC,OAAO,CAAC;AAChEC,IAAAA,eAAe,EAAE,MAAOC,iBAAoC,IAC1DC,yBAAyB,CACvB,MAAMR,KAAK,CAACM,eAAe,CACzBG,2BAA2B,CAACF,iBAAiB,CAAC,CAC/C,CACF;IACHG,mBAAmB,EAAE,MAAOC,kBAAuC,IAAK;AACtE,MAAA,MAAMC,YAAY,GAAGD,kBAAkB,CAACE,GAAG,CAACJ,2BAA2B,CAAC,CAAA;MACxE,MAAMK,kBAAkB,GAAG,MAAMd,KAAK,CAACU,mBAAmB,CAACE,YAAY,CAAC,CAAA;AACxE,MAAA,OAAOE,kBAAkB,CAACD,GAAG,CAACL,yBAAyB,CAAC,CAAA;KACzD;IACDO,eAAe,EAAE,OACfR,iBAAoC,EACpCS,UAA4B,EAC5B1B,OAAyD,GAAG,EAAE,KACtB;MACxC,MAAM;QAAE2B,OAAO,EAAEC,aAAa,GAAG,EAAE;QAAE,GAAGC,WAAAA;AAAY,OAAC,GAAG7B,OAAO,CAAA;MAC/D,MAAM2B,OAAO,GAAGC,aAAa,CAACL,GAAG,CAAEO,YAAY,IAC7CC,uBAAuB,CACrB1B,OAAO,EACP2B,iBAAiB,CAACC,OAAa,CAACC,aAAa,CAACJ,YAAY,CAACK,SAAS,CAAC,CAAC,CACvE,CACF,CAAA;AAED,MAAA,IAAIC,WAAW,GAAGjB,2BAA2B,CAACF,iBAAiB,CAAC,CAAA;AAChEmB,MAAAA,WAAW,GAAG,MAAMpB,eAAe,CAACoB,WAAW,EAAE,CAAC1B,KAAK,EAAE,GAAGiB,OAAO,CAAC,CAAC,CAAA;MAErE,MAAMU,SAAS,GAAG,MAAMhC,OAAO,CAACiC,GAAG,CAACb,eAAe,CAACW,WAAW,EAAE;AAC/D,QAAA,GAAGP,WAAW;QACdU,mBAAmB,EAAEV,WAAW,CAACU,mBAAAA;AACnC,OAAC,CAAC,CAAA;MAEF,OAAOC,MAAM,CAACC,WAAW,CAACJ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,KAAA;GACD,CAAA;EAED,IAAI;IACF,OAAO,MAAMK,WAAW,CAACC,SAAS,CAAC,CAChCC,YAAY,CAACjC,MAAM,CAAC,CACpBkC,UAAU,CAACpC,OAAO,CAAC,CACnBqC,cAAc,CAAC9C,OAAO,CAAC,CACvB+C,KAAK,EAAE,CAAA;GACX,CAAC,OAAOC,KAAK,EAAE;AACd,IAAA,MAAM,IAAIC,2BAA2B,CAACD,KAAK,CAAU,CAAA;AACvD,GAAA;AACF;;;;"}
@@ -27,5 +27,5 @@ export type IrysWalletAdapter = {
27
27
  signers?: Web3JsSigner[];
28
28
  }) => Promise<Web3JsTransactionSignature>;
29
29
  };
30
- export declare function createIrysUploader(context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>, uploaderOptions?: IrysUploaderOptions): IrysUploader;
30
+ export declare function createBaseIrysUploader(initFn: (address: string, payer: Signer, options: any, context: any) => Promise<BaseWebIrys | BaseNodeIrys>, context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>, uploaderOptions?: IrysUploaderOptions): IrysUploader;
31
31
  export declare const isIrysUploader: (uploader: UploaderInterface) => uploader is IrysUploader;
@@ -1,3 +1,3 @@
1
1
  export * from './createIrysUploader';
2
2
  export * from './errors';
3
- export * from './plugin';
3
+ export * from './nodePlugin';
@@ -0,0 +1,6 @@
1
+ import BaseNodeIrys from '@irys/upload/dist/types/base';
2
+ import type { Context, Signer, UmiPlugin } from '@metaplex-foundation/umi';
3
+ import { IrysUploaderOptions, IrysUploader } from './createIrysUploader';
4
+ export declare const irysUploader: (options?: IrysUploaderOptions) => UmiPlugin;
5
+ export declare function createIrysUploader(context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>, uploaderOptions?: IrysUploaderOptions): IrysUploader;
6
+ export declare const initNodeIrys: (address: string, payer: Signer, options: any) => Promise<BaseNodeIrys>;
@@ -0,0 +1,3 @@
1
+ export * from './createIrysUploader';
2
+ export * from './errors';
3
+ export * from './webPlugin';
@@ -0,0 +1,7 @@
1
+ import { Signer, Context } from '@metaplex-foundation/umi';
2
+ import BaseWebIrys from '@irys/web-upload/dist/types/base';
3
+ import type { UmiPlugin } from '@metaplex-foundation/umi';
4
+ import { IrysUploaderOptions, IrysUploader } from './createIrysUploader';
5
+ export declare const irysUploader: (options?: IrysUploaderOptions) => UmiPlugin;
6
+ export declare function createIrysUploader(context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>, uploaderOptions?: IrysUploaderOptions): IrysUploader;
7
+ export declare const initWebIrys: (address: string, payer: Signer, options: any, context: any) => Promise<BaseWebIrys>;
package/package.json CHANGED
@@ -1,17 +1,46 @@
1
1
  {
2
2
  "name": "@metaplex-foundation/umi-uploader-irys",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "An uploader implementation relying on Irys",
5
5
  "license": "MIT",
6
6
  "sideEffects": false,
7
+ "browser": "dist/esm/webIndex.mjs",
7
8
  "module": "dist/esm/index.mjs",
8
9
  "main": "dist/cjs/index.cjs",
9
10
  "types": "dist/types/index.d.ts",
10
11
  "exports": {
11
12
  ".": {
12
13
  "types": "./dist/types/index.d.ts",
14
+ "browser": "./dist/esm/webIndex.mjs",
13
15
  "import": "./dist/esm/index.mjs",
14
16
  "require": "./dist/cjs/index.cjs"
17
+ },
18
+ "./web": {
19
+ "types": "./dist/types/webIndex.d.ts",
20
+ "browser": "./dist/esm/webIndex.mjs",
21
+ "import": "./dist/esm/webIndex.mjs",
22
+ "require": "./dist/cjs/webIndex.cjs"
23
+ },
24
+ "./node": {
25
+ "types": "./dist/types/index.d.ts",
26
+ "import": "./dist/esm/index.mjs",
27
+ "require": "./dist/cjs/index.cjs"
28
+ },
29
+ "./plugin": {
30
+ "types": "./dist/types/index.d.ts",
31
+ "browser": "./dist/esm/pluginWeb.mjs",
32
+ "import": "./dist/esm/node.mjs",
33
+ "require": "./dist/cjs/node.cjs"
34
+ },
35
+ "./plugin/node": {
36
+ "types": "./dist/types/index.d.ts",
37
+ "import": "./dist/esm/node.mjs",
38
+ "require": "./dist/cjs/node.cjs"
39
+ },
40
+ "./plugin/web": {
41
+ "types": "./dist/types/index.d.ts",
42
+ "import": "./dist/esm/web.mjs",
43
+ "require": "./dist/cjs/web.cjs"
15
44
  }
16
45
  },
17
46
  "files": [
@@ -39,8 +68,8 @@
39
68
  "@solana/web3.js": "^1.72.0",
40
69
  "ava": "^5.1.0",
41
70
  "@metaplex-foundation/umi": "^1.4.1",
42
- "@metaplex-foundation/umi-downloader-http": "^1.4.1",
43
71
  "@metaplex-foundation/umi-eddsa-web3js": "^1.4.1",
72
+ "@metaplex-foundation/umi-downloader-http": "^1.4.1",
44
73
  "@metaplex-foundation/umi-rpc-web3js": "^1.4.1",
45
74
  "@metaplex-foundation/umi-http-fetch": "^1.4.1"
46
75
  },
@@ -1,32 +1,20 @@
1
1
  import type { BaseWebIrys } from '@irys/web-upload/dist/types/base';
2
2
  import type { BaseNodeIrys } from '@irys/upload/dist/types/base';
3
3
  import {
4
- Commitment,
5
4
  Context,
6
5
  GenericFile,
7
6
  GenericFileTag,
8
- Keypair,
9
7
  Signer,
10
8
  SolAmount,
11
9
  UploaderInterface,
12
10
  UploaderUploadOptions,
13
- base58,
14
11
  createGenericFileFromJson,
15
- createSignerFromKeypair,
16
- isKeypairSigner,
17
12
  lamports,
18
13
  publicKey,
19
- signTransaction,
20
14
  } from '@metaplex-foundation/umi';
21
- import {
22
- fromWeb3JsKeypair,
23
- fromWeb3JsLegacyTransaction,
24
- toWeb3JsLegacyTransaction,
25
- toWeb3JsPublicKey,
26
- } from '@metaplex-foundation/umi-web3js-adapters';
15
+
27
16
  import {
28
17
  Connection as Web3JsConnection,
29
- Keypair as Web3JsKeypair,
30
18
  PublicKey as Web3JsPublicKey,
31
19
  SendOptions as Web3JsSendOptions,
32
20
  Signer as Web3JsSigner,
@@ -40,31 +28,10 @@ import {
40
28
  AssetUploadFailedError,
41
29
  IrysWithdrawError,
42
30
  FailedToConnectToIrysAddressError,
43
- FailedToInitializeIrysError,
44
31
  IrysAbortError,
45
32
  } from './errors';
46
- // PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.
47
-
48
- /**
49
- * This method is necessary to import the Irys package on both ESM and CJS modules.
50
- * Without this, we get a different structure on each module:
51
- * - CJS: { default: [Getter], WebIrys: [Getter] }
52
- * - ESM: { default: { default: [Getter], WebIrys: [Getter] } }
53
- * This method fixes this by ensure there is not double default in the imported package.
54
- */
55
- // eslint-disable-next-line @typescript-eslint/naming-convention
56
- function _removeDoubleDefault<T>(pkg: T): T {
57
- if (
58
- pkg &&
59
- typeof pkg === 'object' &&
60
- 'default' in pkg &&
61
- 'default' in (pkg as any).default
62
- ) {
63
- return (pkg as any).default;
64
- }
65
33
 
66
- return pkg;
67
- }
34
+ // PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.
68
35
 
69
36
  export type IrysUploader = UploaderInterface & {
70
37
  irys: () => Promise<BaseNodeIrys | BaseWebIrys>;
@@ -108,7 +75,13 @@ const MINIMUM_SIZE = 80_000;
108
75
 
109
76
  const gatewayUrl = (id: string) => `https://gateway.irys.xyz/${id}`;
110
77
 
111
- export function createIrysUploader(
78
+ export function createBaseIrysUploader(
79
+ initFn: (
80
+ address: string,
81
+ payer: Signer,
82
+ options: any,
83
+ context: any
84
+ ) => Promise<BaseWebIrys | BaseNodeIrys>,
112
85
  context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,
113
86
  uploaderOptions: IrysUploaderOptions = {}
114
87
  ): IrysUploader {
@@ -279,18 +252,7 @@ export function createIrysUploader(
279
252
 
280
253
  const payer: Signer = uploaderOptions.payer ?? context.payer;
281
254
 
282
- // If in node use node irys, else use web irys.
283
- const isNode =
284
- // eslint-disable-next-line no-prototype-builtins
285
- typeof window === 'undefined' || window.process?.hasOwnProperty('type');
286
-
287
- let irys;
288
- if (isNode && isKeypairSigner(payer))
289
- irys = await initNodeIrys(address, payer, irysOptions);
290
- else {
291
- irys = await initWebIrys(address, payer, irysOptions);
292
- }
293
-
255
+ const irys = await initFn(address, payer, irysOptions, context);
294
256
  try {
295
257
  // Check for valid irys node.
296
258
  await irys.utils.getBundlerAddress(token);
@@ -301,93 +263,6 @@ export function createIrysUploader(
301
263
  return irys;
302
264
  };
303
265
 
304
- const initNodeIrys = async (
305
- address: string,
306
- keypair: Keypair,
307
- options: any
308
- ): Promise<BaseNodeIrys> => {
309
- const bPackage = _removeDoubleDefault(await import('@irys/upload'));
310
- const cPackage = _removeDoubleDefault(await import('@irys/upload-solana'));
311
- return bPackage
312
- .Uploader(cPackage.Solana)
313
- .bundlerUrl(address)
314
- .withWallet(keypair.secretKey)
315
- .withIrysConfig(options)
316
- .build();
317
- };
318
-
319
- const initWebIrys = async (
320
- address: string,
321
- payer: Signer,
322
- options: any
323
- ): Promise<BaseWebIrys> => {
324
- const wallet: IrysWalletAdapter = {
325
- publicKey: toWeb3JsPublicKey(payer.publicKey),
326
- signMessage: (message: Uint8Array) => payer.signMessage(message),
327
- signTransaction: async (web3JsTransaction: Web3JsTransaction) =>
328
- toWeb3JsLegacyTransaction(
329
- await payer.signTransaction(
330
- fromWeb3JsLegacyTransaction(web3JsTransaction)
331
- )
332
- ),
333
- signAllTransactions: async (web3JsTransactions: Web3JsTransaction[]) => {
334
- const transactions = web3JsTransactions.map(
335
- fromWeb3JsLegacyTransaction
336
- );
337
- const signedTransactions = await payer.signAllTransactions(
338
- transactions
339
- );
340
- return signedTransactions.map(toWeb3JsLegacyTransaction);
341
- },
342
- sendTransaction: async (
343
- web3JsTransaction: Web3JsTransaction,
344
- connection: Web3JsConnection,
345
- options: Web3JsSendOptions & { signers?: Web3JsSigner[] } = {}
346
- ): Promise<Web3JsTransactionSignature> => {
347
- const { signers: web3JsSigners = [], ...sendOptions } = options;
348
- const signers = web3JsSigners.map((web3JsSigner) =>
349
- createSignerFromKeypair(
350
- context,
351
- fromWeb3JsKeypair(
352
- Web3JsKeypair.fromSecretKey(web3JsSigner.secretKey)
353
- )
354
- )
355
- );
356
-
357
- let transaction = fromWeb3JsLegacyTransaction(web3JsTransaction);
358
- transaction = await signTransaction(transaction, [payer, ...signers]);
359
-
360
- const signature = await context.rpc.sendTransaction(transaction, {
361
- ...sendOptions,
362
- preflightCommitment: sendOptions.preflightCommitment as Commitment,
363
- });
364
-
365
- return base58.deserialize(signature)[0];
366
- },
367
- };
368
-
369
- const bPackage = _removeDoubleDefault(await import('@irys/web-upload'));
370
- const cPackage = _removeDoubleDefault(
371
- await import('@irys/web-upload-solana')
372
- );
373
-
374
- const irys = await bPackage
375
- .WebUploader(cPackage.WebSolana)
376
- .withProvider(wallet)
377
- .bundlerUrl(address)
378
- .withIrysConfig(options)
379
- .build();
380
-
381
- try {
382
- // Try to initiate irys.
383
- await irys.ready();
384
- } catch (error) {
385
- throw new FailedToInitializeIrysError(error as Error);
386
- }
387
-
388
- return irys;
389
- };
390
-
391
266
  return {
392
267
  getUploadPriceFromBytes,
393
268
  getUploadPrice,
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './createIrysUploader';
2
2
  export * from './errors';
3
- export * from './plugin';
3
+ export * from './nodePlugin';
@@ -0,0 +1,44 @@
1
+ import { Uploader } from '@irys/upload';
2
+ import Solana from '@irys/upload-solana';
3
+ import BaseNodeIrys from '@irys/upload/dist/types/base';
4
+ import { isKeypairSigner } from '@metaplex-foundation/umi';
5
+
6
+ import type { Context, Signer, UmiPlugin } from '@metaplex-foundation/umi';
7
+ import {
8
+ IrysUploaderOptions,
9
+ createBaseIrysUploader as CIU,
10
+ IrysUploader,
11
+ } from './createIrysUploader';
12
+ import { FailedToInitializeIrysError } from './errors';
13
+
14
+ export const irysUploader = (options?: IrysUploaderOptions): UmiPlugin => ({
15
+ install(umi) {
16
+ umi.uploader = createIrysUploader(umi, options);
17
+ },
18
+ });
19
+
20
+ export function createIrysUploader(
21
+ context: Pick<Context, 'rpc' | 'payer' | 'eddsa'>,
22
+ uploaderOptions: IrysUploaderOptions = {}
23
+ ): IrysUploader {
24
+ return CIU(initNodeIrys, context, uploaderOptions);
25
+ }
26
+
27
+ export const initNodeIrys = async (
28
+ address: string,
29
+ payer: Signer,
30
+ options: any
31
+ ): Promise<BaseNodeIrys> => {
32
+ if (isKeypairSigner(payer)) {
33
+ return Uploader(Solana)
34
+ .bundlerUrl(address)
35
+ .withWallet(payer.secretKey)
36
+ .withIrysConfig(options)
37
+ .build();
38
+ }
39
+ throw new FailedToInitializeIrysError(
40
+ new Error(
41
+ 'Expected signer to be a keypair (try importing @metaplex-foundation/umi-uploader-irys/web to use a browser/external wallet?)'
42
+ )
43
+ );
44
+ };
@@ -0,0 +1,3 @@
1
+ export * from './createIrysUploader';
2
+ export * from './errors';
3
+ export * from './webPlugin';