@metaplex-foundation/umi-uploader-irys 1.4.0 → 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 CHANGED
@@ -7,3 +7,17 @@ An uploader implementation relying on Irys.
7
7
  ```sh
8
8
  npm install @metaplex-foundation/umi-uploader-irys
9
9
  ```
10
+ ## Fixes
11
+ `Module not found: Can't resolve 'fs'`
12
+ This is due to the node plugin being imported, instead of the correct web plugin, try:
13
+ ```diff
14
+ - import { irysUploader } from "@metaplex-foundation/umi-uploader-irys"
15
+ + import { irysUploader } from "@metaplex-foundation/umi-uploader-irys/web"
16
+ ```
17
+
18
+ `Expected signer to key a keypair`
19
+ This is due to importing the browser plugin instead of the node plugin, try:
20
+ ```diff
21
+ - import { irysUploader } from "@metaplex-foundation/umi-uploader-irys"
22
+ + import { irysUploader } from "@metaplex-foundation/umi-uploader-irys/node"
23
+ ```
@@ -3,8 +3,6 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var umi = require('@metaplex-foundation/umi');
6
- var umiWeb3jsAdapters = require('@metaplex-foundation/umi-web3js-adapters');
7
- var web3_js = require('@solana/web3.js');
8
6
  var BigNumber = require('bignumber.js');
9
7
  var buffer = require('buffer');
10
8
  var promisePool = require('@supercharge/promise-pool');
@@ -12,49 +10,17 @@ var errors = require('./errors.cjs');
12
10
 
13
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
12
 
15
- function _interopNamespace(e) {
16
- if (e && e.__esModule) return e;
17
- var n = Object.create(null);
18
- if (e) {
19
- Object.keys(e).forEach(function (k) {
20
- if (k !== 'default') {
21
- var d = Object.getOwnPropertyDescriptor(e, k);
22
- Object.defineProperty(n, k, d.get ? d : {
23
- enumerable: true,
24
- get: function () { return e[k]; }
25
- });
26
- }
27
- });
28
- }
29
- n["default"] = e;
30
- return Object.freeze(n);
31
- }
32
-
33
13
  var BigNumber__default = /*#__PURE__*/_interopDefaultLegacy(BigNumber);
34
14
 
35
15
  // PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.
36
16
 
37
- /**
38
- * This method is necessary to import the Irys package on both ESM and CJS modules.
39
- * Without this, we get a different structure on each module:
40
- * - CJS: { default: [Getter], WebIrys: [Getter] }
41
- * - ESM: { default: { default: [Getter], WebIrys: [Getter] } }
42
- * This method fixes this by ensure there is not double default in the imported package.
43
- */
44
- // eslint-disable-next-line @typescript-eslint/naming-convention
45
- function _removeDoubleDefault(pkg) {
46
- if (pkg && typeof pkg === 'object' && 'default' in pkg && 'default' in pkg.default) {
47
- return pkg.default;
48
- }
49
- return pkg;
50
- }
51
17
  // Size of Irys transaction header.
52
18
  const HEADER_SIZE = 2_000;
53
19
 
54
20
  // Minimum file size for cost calculation.
55
21
  const MINIMUM_SIZE = 80_000;
56
22
  const gatewayUrl = id => `https://gateway.irys.xyz/${id}`;
57
- function createIrysUploader(context, uploaderOptions = {}) {
23
+ function createBaseIrysUploader(initFn, context, uploaderOptions = {}) {
58
24
  // eslint-disable-next-line @typescript-eslint/naming-convention
59
25
  let _irys = null;
60
26
  uploaderOptions = {
@@ -173,15 +139,7 @@ function createIrysUploader(context, uploaderOptions = {}) {
173
139
  providerUrl: uploaderOptions.providerUrl
174
140
  };
175
141
  const payer = uploaderOptions.payer ?? context.payer;
176
-
177
- // If in node use node irys, else use web irys.
178
- const isNode =
179
- // eslint-disable-next-line no-prototype-builtins
180
- typeof window === 'undefined' || window.process?.hasOwnProperty('type');
181
- let irys;
182
- if (isNode && umi.isKeypairSigner(payer)) irys = await initNodeIrys(address, payer, irysOptions);else {
183
- irys = await initWebIrys(address, payer, irysOptions);
184
- }
142
+ const irys = await initFn(address, payer, irysOptions, context);
185
143
  try {
186
144
  // Check for valid irys node.
187
145
  await irys.utils.getBundlerAddress(token);
@@ -190,47 +148,6 @@ function createIrysUploader(context, uploaderOptions = {}) {
190
148
  }
191
149
  return irys;
192
150
  };
193
- const initNodeIrys = async (address, keypair, options) => {
194
- const bPackage = _removeDoubleDefault(await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@irys/upload')); }));
195
- const cPackage = _removeDoubleDefault(await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@irys/upload-solana')); }));
196
- return bPackage.Uploader(cPackage.Solana).bundlerUrl(address).withWallet(keypair.secretKey).withIrysConfig(options).build();
197
- };
198
- const initWebIrys = async (address, payer, options) => {
199
- const wallet = {
200
- publicKey: umiWeb3jsAdapters.toWeb3JsPublicKey(payer.publicKey),
201
- signMessage: message => payer.signMessage(message),
202
- signTransaction: async web3JsTransaction => umiWeb3jsAdapters.toWeb3JsLegacyTransaction(await payer.signTransaction(umiWeb3jsAdapters.fromWeb3JsLegacyTransaction(web3JsTransaction))),
203
- signAllTransactions: async web3JsTransactions => {
204
- const transactions = web3JsTransactions.map(umiWeb3jsAdapters.fromWeb3JsLegacyTransaction);
205
- const signedTransactions = await payer.signAllTransactions(transactions);
206
- return signedTransactions.map(umiWeb3jsAdapters.toWeb3JsLegacyTransaction);
207
- },
208
- sendTransaction: async (web3JsTransaction, connection, options = {}) => {
209
- const {
210
- signers: web3JsSigners = [],
211
- ...sendOptions
212
- } = options;
213
- const signers = web3JsSigners.map(web3JsSigner => umi.createSignerFromKeypair(context, umiWeb3jsAdapters.fromWeb3JsKeypair(web3_js.Keypair.fromSecretKey(web3JsSigner.secretKey))));
214
- let transaction = umiWeb3jsAdapters.fromWeb3JsLegacyTransaction(web3JsTransaction);
215
- transaction = await umi.signTransaction(transaction, [payer, ...signers]);
216
- const signature = await context.rpc.sendTransaction(transaction, {
217
- ...sendOptions,
218
- preflightCommitment: sendOptions.preflightCommitment
219
- });
220
- return umi.base58.deserialize(signature)[0];
221
- }
222
- };
223
- const bPackage = _removeDoubleDefault(await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@irys/web-upload')); }));
224
- const cPackage = _removeDoubleDefault(await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@irys/web-upload-solana')); }));
225
- const irys = await bPackage.WebUploader(cPackage.WebSolana).withProvider(wallet).bundlerUrl(address).withIrysConfig(options).build();
226
- try {
227
- // Try to initiate irys.
228
- await irys.ready();
229
- } catch (error) {
230
- throw new errors.FailedToInitializeIrysError(error);
231
- }
232
- return irys;
233
- };
234
151
  return {
235
152
  getUploadPriceFromBytes,
236
153
  getUploadPrice,
@@ -256,6 +173,6 @@ const getGenericFileTagsWithContentType = file => {
256
173
  }, ...file.tags];
257
174
  };
258
175
 
259
- exports.createIrysUploader = createIrysUploader;
176
+ exports.createBaseIrysUploader = createBaseIrysUploader;
260
177
  exports.isIrysUploader = isIrysUploader;
261
178
  //# sourceMappingURL=createIrysUploader.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createIrysUploader.cjs","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.cjs","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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"}
@@ -4,11 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var createIrysUploader = require('./createIrysUploader.cjs');
6
6
  var errors = require('./errors.cjs');
7
- var plugin = require('./plugin.cjs');
7
+ var nodePlugin = require('./nodePlugin.cjs');
8
8
 
9
9
 
10
10
 
11
- exports.createIrysUploader = createIrysUploader.createIrysUploader;
11
+ exports.createBaseIrysUploader = createIrysUploader.createBaseIrysUploader;
12
12
  exports.isIrysUploader = createIrysUploader.isIrysUploader;
13
13
  exports.AssetUploadFailedError = errors.AssetUploadFailedError;
14
14
  exports.FailedToConnectToIrysAddressError = errors.FailedToConnectToIrysAddressError;
@@ -16,5 +16,7 @@ exports.FailedToInitializeIrysError = errors.FailedToInitializeIrysError;
16
16
  exports.IrysAbortError = errors.IrysAbortError;
17
17
  exports.IrysError = errors.IrysError;
18
18
  exports.IrysWithdrawError = errors.IrysWithdrawError;
19
- exports.irysUploader = plugin.irysUploader;
19
+ exports.createIrysUploader = nodePlugin.createIrysUploader;
20
+ exports.initNodeIrys = nodePlugin.initNodeIrys;
21
+ exports.irysUploader = nodePlugin.irysUploader;
20
22
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var upload = require('@irys/upload');
6
+ var Solana = require('@irys/upload-solana');
7
+ var umi = require('@metaplex-foundation/umi');
8
+ var createIrysUploader$1 = require('./createIrysUploader.cjs');
9
+ var errors = require('./errors.cjs');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var Solana__default = /*#__PURE__*/_interopDefaultLegacy(Solana);
14
+
15
+ const irysUploader = options => ({
16
+ install(umi) {
17
+ umi.uploader = createIrysUploader(umi, options);
18
+ }
19
+ });
20
+ function createIrysUploader(context, uploaderOptions = {}) {
21
+ return createIrysUploader$1.createBaseIrysUploader(initNodeIrys, context, uploaderOptions);
22
+ }
23
+ const initNodeIrys = async (address, payer, options) => {
24
+ if (umi.isKeypairSigner(payer)) {
25
+ return upload.Uploader(Solana__default["default"]).bundlerUrl(address).withWallet(payer.secretKey).withIrysConfig(options).build();
26
+ }
27
+ throw new errors.FailedToInitializeIrysError(new Error('Expected signer to be a keypair (try importing @metaplex-foundation/umi-uploader-irys/web to use a browser/external wallet?)'));
28
+ };
29
+
30
+ exports.createIrysUploader = createIrysUploader;
31
+ exports.initNodeIrys = initNodeIrys;
32
+ exports.irysUploader = irysUploader;
33
+ //# sourceMappingURL=nodePlugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodePlugin.cjs","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,2CAAG,CAACC,YAAY,EAAEH,OAAO,EAAEC,eAAe,CAAC,CAAA;AACpD,CAAA;AAEO,MAAME,YAAY,GAAG,OAC1BC,OAAe,EACfC,KAAa,EACbV,OAAY,KACc;AAC1B,EAAA,IAAIW,mBAAe,CAACD,KAAK,CAAC,EAAE;IAC1B,OAAOE,eAAQ,CAACC,0BAAM,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,kCAA2B,CACnC,IAAIC,KAAK,CACP,8HAA8H,CAC/H,CACF,CAAA;AACH;;;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var createIrysUploader = require('./createIrysUploader.cjs');
6
+ var errors = require('./errors.cjs');
7
+ var webPlugin = require('./webPlugin.cjs');
8
+
9
+
10
+
11
+ exports.createBaseIrysUploader = createIrysUploader.createBaseIrysUploader;
12
+ exports.isIrysUploader = createIrysUploader.isIrysUploader;
13
+ exports.AssetUploadFailedError = errors.AssetUploadFailedError;
14
+ exports.FailedToConnectToIrysAddressError = errors.FailedToConnectToIrysAddressError;
15
+ exports.FailedToInitializeIrysError = errors.FailedToInitializeIrysError;
16
+ exports.IrysAbortError = errors.IrysAbortError;
17
+ exports.IrysError = errors.IrysError;
18
+ exports.IrysWithdrawError = errors.IrysWithdrawError;
19
+ exports.createIrysUploader = webPlugin.createIrysUploader;
20
+ exports.initWebIrys = webPlugin.initWebIrys;
21
+ exports.irysUploader = webPlugin.irysUploader;
22
+ //# sourceMappingURL=webIndex.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webIndex.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var umi = require('@metaplex-foundation/umi');
6
+ var umiWeb3jsAdapters = require('@metaplex-foundation/umi-web3js-adapters');
7
+ var web3_js = require('@solana/web3.js');
8
+ var webUpload = require('@irys/web-upload');
9
+ var webUploadSolana = require('@irys/web-upload-solana');
10
+ var createIrysUploader$1 = require('./createIrysUploader.cjs');
11
+ var errors = require('./errors.cjs');
12
+
13
+ const irysUploader = options => ({
14
+ install(umi) {
15
+ umi.uploader = createIrysUploader(umi, options);
16
+ }
17
+ });
18
+ function createIrysUploader(context, uploaderOptions = {}) {
19
+ return createIrysUploader$1.createBaseIrysUploader(initWebIrys, context, uploaderOptions);
20
+ }
21
+ const initWebIrys = async (address, payer, options, context) => {
22
+ const wallet = {
23
+ publicKey: umiWeb3jsAdapters.toWeb3JsPublicKey(payer.publicKey),
24
+ signMessage: message => payer.signMessage(message),
25
+ signTransaction: async web3JsTransaction => umiWeb3jsAdapters.toWeb3JsLegacyTransaction(await payer.signTransaction(umiWeb3jsAdapters.fromWeb3JsLegacyTransaction(web3JsTransaction))),
26
+ signAllTransactions: async web3JsTransactions => {
27
+ const transactions = web3JsTransactions.map(umiWeb3jsAdapters.fromWeb3JsLegacyTransaction);
28
+ const signedTransactions = await payer.signAllTransactions(transactions);
29
+ return signedTransactions.map(umiWeb3jsAdapters.toWeb3JsLegacyTransaction);
30
+ },
31
+ sendTransaction: async (web3JsTransaction, connection, options = {}) => {
32
+ const {
33
+ signers: web3JsSigners = [],
34
+ ...sendOptions
35
+ } = options;
36
+ const signers = web3JsSigners.map(web3JsSigner => umi.createSignerFromKeypair(context, umiWeb3jsAdapters.fromWeb3JsKeypair(web3_js.Keypair.fromSecretKey(web3JsSigner.secretKey))));
37
+ let transaction = umiWeb3jsAdapters.fromWeb3JsLegacyTransaction(web3JsTransaction);
38
+ transaction = await umi.signTransaction(transaction, [payer, ...signers]);
39
+ const signature = await context.rpc.sendTransaction(transaction, {
40
+ ...sendOptions,
41
+ preflightCommitment: sendOptions.preflightCommitment
42
+ });
43
+ return umi.base58.deserialize(signature)[0];
44
+ }
45
+ };
46
+ try {
47
+ return await webUpload.WebUploader(webUploadSolana.WebSolana).withProvider(wallet).bundlerUrl(address).withIrysConfig(options).build();
48
+ } catch (error) {
49
+ throw new errors.FailedToInitializeIrysError(error);
50
+ }
51
+ };
52
+
53
+ exports.createIrysUploader = createIrysUploader;
54
+ exports.initWebIrys = initWebIrys;
55
+ exports.irysUploader = irysUploader;
56
+ //# sourceMappingURL=webPlugin.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webPlugin.cjs","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,2CAAG,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,mCAAiB,CAACH,KAAK,CAACE,SAAS,CAAC;IAC7CE,WAAW,EAAGC,OAAmB,IAAKL,KAAK,CAACI,WAAW,CAACC,OAAO,CAAC;AAChEC,IAAAA,eAAe,EAAE,MAAOC,iBAAoC,IAC1DC,2CAAyB,CACvB,MAAMR,KAAK,CAACM,eAAe,CACzBG,6CAA2B,CAACF,iBAAiB,CAAC,CAC/C,CACF;IACHG,mBAAmB,EAAE,MAAOC,kBAAuC,IAAK;AACtE,MAAA,MAAMC,YAAY,GAAGD,kBAAkB,CAACE,GAAG,CAACJ,6CAA2B,CAAC,CAAA;MACxE,MAAMK,kBAAkB,GAAG,MAAMd,KAAK,CAACU,mBAAmB,CAACE,YAAY,CAAC,CAAA;AACxE,MAAA,OAAOE,kBAAkB,CAACD,GAAG,CAACL,2CAAyB,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,2BAAuB,CACrB1B,OAAO,EACP2B,mCAAiB,CAACC,eAAa,CAACC,aAAa,CAACJ,YAAY,CAACK,SAAS,CAAC,CAAC,CACvE,CACF,CAAA;AAED,MAAA,IAAIC,WAAW,GAAGjB,6CAA2B,CAACF,iBAAiB,CAAC,CAAA;AAChEmB,MAAAA,WAAW,GAAG,MAAMpB,mBAAe,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,UAAM,CAACC,WAAW,CAACJ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,KAAA;GACD,CAAA;EAED,IAAI;IACF,OAAO,MAAMK,qBAAW,CAACC,yBAAS,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,kCAA2B,CAACD,KAAK,CAAU,CAAA;AACvD,GAAA;AACF;;;;;;"}
@@ -1,34 +1,18 @@
1
- import { createGenericFileFromJson, publicKey, isKeypairSigner, createSignerFromKeypair, signTransaction, base58, lamports } from '@metaplex-foundation/umi';
2
- import { toWeb3JsPublicKey, toWeb3JsLegacyTransaction, fromWeb3JsLegacyTransaction, fromWeb3JsKeypair } from '@metaplex-foundation/umi-web3js-adapters';
3
- import { Keypair } from '@solana/web3.js';
1
+ import { createGenericFileFromJson, publicKey, lamports } from '@metaplex-foundation/umi';
4
2
  import BigNumber from 'bignumber.js';
5
3
  import { Buffer } from 'buffer';
6
4
  import { PromisePool } from '@supercharge/promise-pool';
7
- import { IrysAbortError, AssetUploadFailedError, IrysWithdrawError, FailedToConnectToIrysAddressError, FailedToInitializeIrysError } from './errors.mjs';
5
+ import { IrysAbortError, AssetUploadFailedError, IrysWithdrawError, FailedToConnectToIrysAddressError } from './errors.mjs';
8
6
 
9
7
  // PromisePool is a dependency the Irys client already requires, so using it here has no extra cost.
10
8
 
11
- /**
12
- * This method is necessary to import the Irys package on both ESM and CJS modules.
13
- * Without this, we get a different structure on each module:
14
- * - CJS: { default: [Getter], WebIrys: [Getter] }
15
- * - ESM: { default: { default: [Getter], WebIrys: [Getter] } }
16
- * This method fixes this by ensure there is not double default in the imported package.
17
- */
18
- // eslint-disable-next-line @typescript-eslint/naming-convention
19
- function _removeDoubleDefault(pkg) {
20
- if (pkg && typeof pkg === 'object' && 'default' in pkg && 'default' in pkg.default) {
21
- return pkg.default;
22
- }
23
- return pkg;
24
- }
25
9
  // Size of Irys transaction header.
26
10
  const HEADER_SIZE = 2_000;
27
11
 
28
12
  // Minimum file size for cost calculation.
29
13
  const MINIMUM_SIZE = 80_000;
30
14
  const gatewayUrl = id => `https://gateway.irys.xyz/${id}`;
31
- function createIrysUploader(context, uploaderOptions = {}) {
15
+ function createBaseIrysUploader(initFn, context, uploaderOptions = {}) {
32
16
  // eslint-disable-next-line @typescript-eslint/naming-convention
33
17
  let _irys = null;
34
18
  uploaderOptions = {
@@ -147,15 +131,7 @@ function createIrysUploader(context, uploaderOptions = {}) {
147
131
  providerUrl: uploaderOptions.providerUrl
148
132
  };
149
133
  const payer = uploaderOptions.payer ?? context.payer;
150
-
151
- // If in node use node irys, else use web irys.
152
- const isNode =
153
- // eslint-disable-next-line no-prototype-builtins
154
- typeof window === 'undefined' || window.process?.hasOwnProperty('type');
155
- let irys;
156
- if (isNode && isKeypairSigner(payer)) irys = await initNodeIrys(address, payer, irysOptions);else {
157
- irys = await initWebIrys(address, payer, irysOptions);
158
- }
134
+ const irys = await initFn(address, payer, irysOptions, context);
159
135
  try {
160
136
  // Check for valid irys node.
161
137
  await irys.utils.getBundlerAddress(token);
@@ -164,47 +140,6 @@ function createIrysUploader(context, uploaderOptions = {}) {
164
140
  }
165
141
  return irys;
166
142
  };
167
- const initNodeIrys = async (address, keypair, options) => {
168
- const bPackage = _removeDoubleDefault(await import('@irys/upload'));
169
- const cPackage = _removeDoubleDefault(await import('@irys/upload-solana'));
170
- return bPackage.Uploader(cPackage.Solana).bundlerUrl(address).withWallet(keypair.secretKey).withIrysConfig(options).build();
171
- };
172
- const initWebIrys = async (address, payer, options) => {
173
- const wallet = {
174
- publicKey: toWeb3JsPublicKey(payer.publicKey),
175
- signMessage: message => payer.signMessage(message),
176
- signTransaction: async web3JsTransaction => toWeb3JsLegacyTransaction(await payer.signTransaction(fromWeb3JsLegacyTransaction(web3JsTransaction))),
177
- signAllTransactions: async web3JsTransactions => {
178
- const transactions = web3JsTransactions.map(fromWeb3JsLegacyTransaction);
179
- const signedTransactions = await payer.signAllTransactions(transactions);
180
- return signedTransactions.map(toWeb3JsLegacyTransaction);
181
- },
182
- sendTransaction: async (web3JsTransaction, connection, options = {}) => {
183
- const {
184
- signers: web3JsSigners = [],
185
- ...sendOptions
186
- } = options;
187
- const signers = web3JsSigners.map(web3JsSigner => createSignerFromKeypair(context, fromWeb3JsKeypair(Keypair.fromSecretKey(web3JsSigner.secretKey))));
188
- let transaction = fromWeb3JsLegacyTransaction(web3JsTransaction);
189
- transaction = await signTransaction(transaction, [payer, ...signers]);
190
- const signature = await context.rpc.sendTransaction(transaction, {
191
- ...sendOptions,
192
- preflightCommitment: sendOptions.preflightCommitment
193
- });
194
- return base58.deserialize(signature)[0];
195
- }
196
- };
197
- const bPackage = _removeDoubleDefault(await import('@irys/web-upload'));
198
- const cPackage = _removeDoubleDefault(await import('@irys/web-upload-solana'));
199
- const irys = await bPackage.WebUploader(cPackage.WebSolana).withProvider(wallet).bundlerUrl(address).withIrysConfig(options).build();
200
- try {
201
- // Try to initiate irys.
202
- await irys.ready();
203
- } catch (error) {
204
- throw new FailedToInitializeIrysError(error);
205
- }
206
- return irys;
207
- };
208
143
  return {
209
144
  getUploadPriceFromBytes,
210
145
  getUploadPrice,
@@ -230,5 +165,5 @@ const getGenericFileTagsWithContentType = file => {
230
165
  }, ...file.tags];
231
166
  };
232
167
 
233
- export { createIrysUploader, isIrysUploader };
168
+ export { createBaseIrysUploader, isIrysUploader };
234
169
  //# sourceMappingURL=createIrysUploader.mjs.map