@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.
- package/README.md +14 -0
- package/dist/cjs/createIrysUploader.cjs +3 -86
- package/dist/cjs/createIrysUploader.cjs.map +1 -1
- package/dist/cjs/index.cjs +5 -3
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/nodePlugin.cjs +33 -0
- package/dist/cjs/nodePlugin.cjs.map +1 -0
- package/dist/cjs/webIndex.cjs +22 -0
- package/dist/cjs/webIndex.cjs.map +1 -0
- package/dist/cjs/webPlugin.cjs +56 -0
- package/dist/cjs/webPlugin.cjs.map +1 -0
- package/dist/esm/createIrysUploader.mjs +5 -70
- package/dist/esm/createIrysUploader.mjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/nodePlugin.mjs +23 -0
- package/dist/esm/nodePlugin.mjs.map +1 -0
- package/dist/esm/webIndex.mjs +4 -0
- package/dist/esm/webIndex.mjs.map +1 -0
- package/dist/esm/webPlugin.mjs +50 -0
- package/dist/esm/webPlugin.mjs.map +1 -0
- package/dist/types/createIrysUploader.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/nodePlugin.d.ts +6 -0
- package/dist/types/webIndex.d.ts +3 -0
- package/dist/types/webPlugin.d.ts +7 -0
- package/package.json +31 -2
- package/src/createIrysUploader.ts +10 -135
- package/src/index.ts +1 -1
- package/src/nodePlugin.ts +44 -0
- package/src/webIndex.ts +3 -0
- package/src/webPlugin.ts +103 -0
- package/dist/cjs/plugin.cjs +0 -14
- package/dist/cjs/plugin.cjs.map +0 -1
- package/dist/esm/plugin.mjs +0 -10
- package/dist/esm/plugin.mjs.map +0 -1
- package/dist/types/plugin.d.ts +0 -3
- package/src/plugin.ts +0 -8
|
@@ -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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"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createBaseIrysUploader, isIrysUploader } from './createIrysUploader.mjs';
|
|
2
2
|
export { AssetUploadFailedError, FailedToConnectToIrysAddressError, FailedToInitializeIrysError, IrysAbortError, IrysError, IrysWithdrawError } from './errors.mjs';
|
|
3
|
-
export { irysUploader } from './
|
|
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
|
|
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;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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,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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
@@ -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
|
+
};
|
package/src/webIndex.ts
ADDED