@xyo-network/crypto-nft-witness-wallet-plugin 2.79.2 → 2.79.3

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.
Files changed (93) hide show
  1. package/dist/browser/Plugin.d.cts +1 -1
  2. package/dist/browser/Plugin.d.mts +1 -1
  3. package/dist/browser/Plugin.d.ts +1 -1
  4. package/dist/browser/Witness.d.cts +3 -4
  5. package/dist/browser/Witness.d.cts.map +1 -1
  6. package/dist/browser/Witness.d.mts +3 -4
  7. package/dist/browser/Witness.d.mts.map +1 -1
  8. package/dist/browser/Witness.d.ts +3 -4
  9. package/dist/browser/Witness.d.ts.map +1 -1
  10. package/dist/browser/index.cjs +87 -99
  11. package/dist/browser/index.cjs.map +1 -1
  12. package/dist/browser/index.js +78 -100
  13. package/dist/browser/index.js.map +1 -1
  14. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.cts +2 -1
  15. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.cts.map +1 -1
  16. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.mts +2 -1
  17. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.mts.map +1 -1
  18. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.ts +2 -1
  19. package/dist/browser/lib/getAssetsFromWalletFromOpenSea.d.ts.map +1 -1
  20. package/dist/browser/lib/getNftMetadata.d.cts +1 -8
  21. package/dist/browser/lib/getNftMetadata.d.cts.map +1 -1
  22. package/dist/browser/lib/getNftMetadata.d.mts +1 -8
  23. package/dist/browser/lib/getNftMetadata.d.mts.map +1 -1
  24. package/dist/browser/lib/getNftMetadata.d.ts +1 -8
  25. package/dist/browser/lib/getNftMetadata.d.ts.map +1 -1
  26. package/dist/browser/lib/getNftsOwnedByAddress.d.cts +5 -12
  27. package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  28. package/dist/browser/lib/getNftsOwnedByAddress.d.mts +5 -12
  29. package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  30. package/dist/browser/lib/getNftsOwnedByAddress.d.ts +5 -12
  31. package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  32. package/dist/browser/lib/getProvider.d.cts +3 -0
  33. package/dist/browser/lib/getProvider.d.cts.map +1 -0
  34. package/dist/browser/lib/getProvider.d.mts +3 -0
  35. package/dist/browser/lib/getProvider.d.mts.map +1 -0
  36. package/dist/browser/lib/getProvider.d.ts +3 -0
  37. package/dist/browser/lib/getProvider.d.ts.map +1 -0
  38. package/dist/node/Plugin.d.cts +1 -1
  39. package/dist/node/Plugin.d.mts +1 -1
  40. package/dist/node/Plugin.d.ts +1 -1
  41. package/dist/node/Witness.d.cts +3 -4
  42. package/dist/node/Witness.d.cts.map +1 -1
  43. package/dist/node/Witness.d.mts +3 -4
  44. package/dist/node/Witness.d.mts.map +1 -1
  45. package/dist/node/Witness.d.ts +3 -4
  46. package/dist/node/Witness.d.ts.map +1 -1
  47. package/dist/node/index.js +87 -100
  48. package/dist/node/index.js.map +1 -1
  49. package/dist/node/index.mjs +78 -100
  50. package/dist/node/index.mjs.map +1 -1
  51. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.cts +2 -1
  52. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.cts.map +1 -1
  53. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.mts +2 -1
  54. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.mts.map +1 -1
  55. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.ts +2 -1
  56. package/dist/node/lib/getAssetsFromWalletFromOpenSea.d.ts.map +1 -1
  57. package/dist/node/lib/getNftMetadata.d.cts +1 -8
  58. package/dist/node/lib/getNftMetadata.d.cts.map +1 -1
  59. package/dist/node/lib/getNftMetadata.d.mts +1 -8
  60. package/dist/node/lib/getNftMetadata.d.mts.map +1 -1
  61. package/dist/node/lib/getNftMetadata.d.ts +1 -8
  62. package/dist/node/lib/getNftMetadata.d.ts.map +1 -1
  63. package/dist/node/lib/getNftsOwnedByAddress.d.cts +5 -12
  64. package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  65. package/dist/node/lib/getNftsOwnedByAddress.d.mts +5 -12
  66. package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  67. package/dist/node/lib/getNftsOwnedByAddress.d.ts +5 -12
  68. package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  69. package/dist/node/lib/getProvider.d.cts +3 -0
  70. package/dist/node/lib/getProvider.d.cts.map +1 -0
  71. package/dist/node/lib/getProvider.d.mts +3 -0
  72. package/dist/node/lib/getProvider.d.mts.map +1 -0
  73. package/dist/node/lib/getProvider.d.ts +3 -0
  74. package/dist/node/lib/getProvider.d.ts.map +1 -0
  75. package/package.json +14 -12
  76. package/src/Witness.ts +6 -10
  77. package/src/lib/getAssetsFromWalletFromOpenSea.ts +2 -1
  78. package/src/lib/getNftMetadata.ts +71 -44
  79. package/src/lib/getNftsOwnedByAddress.ts +42 -41
  80. package/src/lib/getProvider.ts +5 -0
  81. package/dist/browser/lib/getInfuraProvider.d.cts +0 -9
  82. package/dist/browser/lib/getInfuraProvider.d.cts.map +0 -1
  83. package/dist/browser/lib/getInfuraProvider.d.mts +0 -9
  84. package/dist/browser/lib/getInfuraProvider.d.mts.map +0 -1
  85. package/dist/browser/lib/getInfuraProvider.d.ts +0 -9
  86. package/dist/browser/lib/getInfuraProvider.d.ts.map +0 -1
  87. package/dist/node/lib/getInfuraProvider.d.cts +0 -9
  88. package/dist/node/lib/getInfuraProvider.d.cts.map +0 -1
  89. package/dist/node/lib/getInfuraProvider.d.mts +0 -9
  90. package/dist/node/lib/getInfuraProvider.d.mts.map +0 -1
  91. package/dist/node/lib/getInfuraProvider.d.ts +0 -9
  92. package/dist/node/lib/getInfuraProvider.d.ts.map +0 -1
  93. package/src/lib/getInfuraProvider.ts +0 -26
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
54
54
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
55
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
56
56
  } & {
57
- provider: import("@ethersproject/providers").BaseProvider;
57
+ providers: import("@ethersproject/providers").BaseProvider[];
58
58
  }>>;
59
59
  //# sourceMappingURL=Plugin.d.ts.map
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
54
54
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
55
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
56
56
  } & {
57
- provider: import("@ethersproject/providers").BaseProvider;
57
+ providers: import("@ethersproject/providers").BaseProvider[];
58
58
  }>>;
59
59
  //# sourceMappingURL=Plugin.d.ts.map
@@ -54,6 +54,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
54
54
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
55
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
56
56
  } & {
57
- provider: import("@ethersproject/providers").BaseProvider;
57
+ providers: import("@ethersproject/providers").BaseProvider[];
58
58
  }>>;
59
59
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1,15 +1,14 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
- import { AbstractWitness } from '@xyo-network/abstract-witness';
3
2
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
3
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
+ import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: BaseProvider;
7
+ providers: BaseProvider[];
8
8
  }>;
9
- export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
9
+ export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
11
  get loadMetadata(): boolean;
12
- get provider(): BaseProvider;
13
12
  get timeout(): number;
14
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
15
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,YAAY,CAAA;CACvB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,QAAQ,iBAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
@@ -1,15 +1,14 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
- import { AbstractWitness } from '@xyo-network/abstract-witness';
3
2
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
3
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
+ import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: BaseProvider;
7
+ providers: BaseProvider[];
8
8
  }>;
9
- export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
9
+ export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
11
  get loadMetadata(): boolean;
12
- get provider(): BaseProvider;
13
12
  get timeout(): number;
14
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
15
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,YAAY,CAAA;CACvB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,QAAQ,iBAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
@@ -1,15 +1,14 @@
1
1
  import { BaseProvider } from '@ethersproject/providers';
2
- import { AbstractWitness } from '@xyo-network/abstract-witness';
3
2
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
3
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
+ import { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: BaseProvider;
7
+ providers: BaseProvider[];
8
8
  }>;
9
- export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
9
+ export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
11
  get loadMetadata(): boolean;
12
- get provider(): BaseProvider;
13
12
  get timeout(): number;
14
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
15
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,QAAQ,EAAE,YAAY,CAAA;CACvB,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,QAAQ,iBAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,OAAO,EACL,4BAA4B,EAE5B,OAAO,EAGP,eAAe,EAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACtD,eAAe,CAAC,4BAA4B,CAAC,EAC7C;IACE,SAAS,EAAE,YAAY,EAAE,CAAA;CAC1B,CACF,CAAA;AAMD,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,yBAAyB,CAChJ,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,YAAY,YAEf;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAiC1F"}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/index.ts
@@ -22,7 +32,6 @@ var src_exports = {};
22
32
  __export(src_exports, {
23
33
  CryptoWalletNftWitness: () => CryptoWalletNftWitness,
24
34
  CryptoWalletNftWitnessPlugin: () => CryptoWalletNftWitnessPlugin,
25
- checkIpfsUrl: () => checkIpfsUrl2,
26
35
  contractHasFunctions: () => contractHasFunctions,
27
36
  default: () => src_default,
28
37
  getErc1155MetadataUri: () => getErc1155MetadataUri,
@@ -43,10 +52,10 @@ var import_payload_model = require("@xyo-network/payload-model");
43
52
  var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
44
53
 
45
54
  // src/Witness.ts
46
- var import_assert3 = require("@xylabs/assert");
55
+ var import_assert2 = require("@xylabs/assert");
47
56
  var import_eth_address = require("@xylabs/eth-address");
48
- var import_abstract_witness = require("@xyo-network/abstract-witness");
49
57
  var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
58
+ var import_witness_blockchain_abstract3 = require("@xyo-network/witness-blockchain-abstract");
50
59
 
51
60
  // src/lib/contractHasFunctions.ts
52
61
  var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
@@ -69,38 +78,24 @@ var contractHasFunctions = async (provider, address, contractInterface, function
69
78
 
70
79
  // src/lib/getNftsOwnedByAddress.ts
71
80
  var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
81
+ var import_witness_blockchain_abstract2 = require("@xyo-network/witness-blockchain-abstract");
72
82
  var import_lru_cache = require("lru-cache");
73
83
 
74
84
  // src/lib/getAssetsFromWalletFromOpenSea.ts
75
85
  var import_assert = require("@xylabs/assert");
76
86
  var import_axios = require("@xyo-network/axios");
77
- var getNftsFromWalletFromOpenSea = async (chainId, address, maxNfts = 200, timeout = 2e3) => {
87
+ var getNftsFromWalletFromOpenSea = async (providers, address, maxNfts = 200, timeout = 2e3) => {
78
88
  const apiKey = (0, import_assert.assertEx)(process.env.OPENSEA_API_KEY, "No opensea key found");
79
89
  const axios = new import_axios.AxiosJson({ headers: { "x-api-key": apiKey }, timeout });
80
90
  const nfts = (await axios.get(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data.nfts;
81
91
  return nfts;
82
92
  };
83
93
 
84
- // src/lib/getInfuraProvider.ts
85
- var import_providers = require("@ethersproject/providers");
86
- var import_assert2 = require("@xylabs/assert");
87
- var instance = void 0;
88
- var getInfuraProvider = () => {
89
- if (instance)
90
- return instance;
91
- const config = getInfuraProviderConfig();
92
- instance = new import_providers.InfuraProvider("homestead", config);
93
- return instance;
94
- };
95
- var getInfuraProviderConfig = () => {
96
- const projectId = (0, import_assert2.assertEx)(process.env.INFURA_PROJECT_ID, "Missing INFURA_PROJECT_ID ENV VAR");
97
- const projectSecret = (0, import_assert2.assertEx)(process.env.INFURA_PROJECT_SECRET, "Missing INFURA_PROJECT_SECRET ENV VAR");
98
- return { projectId, projectSecret };
99
- };
100
-
101
94
  // src/lib/getNftMetadata.ts
102
95
  var import_axios2 = require("@xyo-network/axios");
103
96
  var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
97
+ var import_witness_blockchain_abstract = require("@xyo-network/witness-blockchain-abstract");
98
+ var import_parse_data_url = __toESM(require("parse-data-url"));
104
99
 
105
100
  // src/lib/tokenTypes.ts
106
101
  var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
@@ -124,57 +119,57 @@ var tokenTypes = async (provider, address) => {
124
119
 
125
120
  // src/lib/getNftMetadata.ts
126
121
  var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
127
- var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
128
- const url = new URL(urlToCheck);
129
- let protocol = url.protocol;
130
- let host = url.host;
131
- let path = url.pathname;
132
- const query = url.search;
133
- if (protocol === "ipfs:") {
134
- protocol = "https:";
135
- host = ipfsGateway2;
136
- path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
137
- const root = `${protocol}//${host}/${path}`;
138
- return query?.length > 0 ? `${root}?${query}` : root;
139
- } else {
140
- return urlToCheck;
141
- }
142
- };
143
- var getNftMetadata = async (contractAddress, provider, tokenId) => {
144
- const axios = new import_axios2.AxiosJson({ timeout: 2e3 });
145
- const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
122
+ var getNftMetadata = async (contractAddress, provider, tokenId, load = false, defaultUri) => {
146
123
  const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
147
124
  const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
148
- const is1155 = await isErc1155(provider, contractAddress);
149
- let uri1155;
150
- if (is1155) {
151
- try {
152
- uri1155 = await storage1155.uri(tokenId);
153
- } catch (ex) {
154
- }
155
- }
125
+ let uri721 = void 0;
156
126
  const is721 = await isErc721(provider, contractAddress);
157
- let metadataUri;
158
127
  if (is721) {
159
128
  try {
160
- metadataUri = await enumerable721.tokenURI(tokenId);
129
+ uri721 = await storage721.tokenURI(tokenId);
161
130
  } catch (ex) {
131
+ }
132
+ }
133
+ let uri1155 = void 0;
134
+ if (!uri721) {
135
+ const is1155 = await isErc1155(provider, contractAddress);
136
+ if (is1155) {
162
137
  try {
163
- metadataUri = await storage721.tokenURI(tokenId);
164
- } catch (ex2) {
138
+ uri1155 = await storage1155.uri(tokenId);
139
+ } catch (ex) {
165
140
  }
166
141
  }
167
142
  }
168
- const tokenMetadataUri = metadataUri ?? uri1155;
169
- const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
143
+ const tokenMetadataUri = uri721 || uri1155 || defaultUri;
170
144
  let metadata = void 0;
171
- try {
172
- metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
173
- } catch (ex) {
145
+ if (load) {
146
+ if (tokenMetadataUri?.startsWith("data:")) {
147
+ const parsedDataUrl = (0, import_parse_data_url.default)(tokenMetadataUri);
148
+ if (parsedDataUrl !== false && parsedDataUrl.contentType === "application/json") {
149
+ const buf = parsedDataUrl.toBuffer();
150
+ const value = buf.toString("utf8");
151
+ metadata = JSON.parse(value);
152
+ }
153
+ } else {
154
+ let checkedMetaDataUri;
155
+ if (tokenMetadataUri && tokenMetadataUri.length > 5) {
156
+ checkedMetaDataUri = tokenMetadataUri ? (0, import_witness_blockchain_abstract.checkIpfsUrl)(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
157
+ }
158
+ try {
159
+ const axios = new import_axios2.AxiosJson({ timeout: 5e3 });
160
+ metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
161
+ } catch (ex) {
162
+ }
163
+ }
174
164
  }
175
165
  return [tokenMetadataUri, metadata];
176
166
  };
177
167
 
168
+ // src/lib/getProvider.ts
169
+ var getProvider = (providers) => {
170
+ return providers[Date.now() % providers.length];
171
+ };
172
+
178
173
  // src/lib/tryCall.ts
179
174
  var tryCall = async (func, name) => {
180
175
  try {
@@ -189,22 +184,6 @@ var tryCall = async (func, name) => {
189
184
  };
190
185
 
191
186
  // src/lib/getNftsOwnedByAddress.ts
192
- var checkIpfsUrl2 = (urlToCheck, ipfsGateway2) => {
193
- const url = new URL(urlToCheck);
194
- let protocol = url.protocol;
195
- let host = url.host;
196
- let path = url.pathname;
197
- const query = url.search;
198
- if (protocol === "ipfs:") {
199
- protocol = "https:";
200
- host = ipfsGateway2;
201
- path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
202
- const root = `${protocol}//${host}/${path}`;
203
- return query?.length > 0 ? `${root}?${query}` : root;
204
- } else {
205
- return urlToCheck;
206
- }
207
- };
208
187
  var tokenTypeCache = new import_lru_cache.LRUCache({ max: 100 });
209
188
  var getTokenTypes = async (provider, address) => {
210
189
  const key = `${address}|${(await provider.getNetwork()).chainId}`;
@@ -217,36 +196,42 @@ var getTokenTypes = async (provider, address) => {
217
196
  return types;
218
197
  }
219
198
  };
220
- var getErc721MetadataUri = async (address, tokenId) => {
199
+ var getErc721MetadataUri = async (address, tokenId, provider) => {
221
200
  try {
222
- const contract = import_open_zeppelin_typechain3.ERC721__factory.connect(address, getInfuraProvider());
201
+ const contract = import_open_zeppelin_typechain3.ERC721__factory.connect(address, provider);
223
202
  return [await contract.tokenURI(tokenId), void 0];
224
203
  } catch (ex) {
225
204
  return [void 0, ex];
226
205
  }
227
206
  };
228
- var getErc1155MetadataUri = async (address, tokenId) => {
207
+ var getErc1155MetadataUri = async (address, tokenId, provider) => {
229
208
  try {
230
- const contract = import_open_zeppelin_typechain3.ERC1155__factory.connect(address, getInfuraProvider());
209
+ const contract = import_open_zeppelin_typechain3.ERC1155__factory.connect(address, provider);
231
210
  return [await contract.uri(tokenId), void 0];
232
211
  } catch (ex) {
233
212
  return [void 0, ex];
234
213
  }
235
214
  };
236
- var getNftMetadataUri = async (address, tokenId) => {
237
- const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
215
+ var getNftMetadataUri = async (address, tokenId, provider) => {
216
+ const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)]);
238
217
  return results[0][0] ?? results[1][0];
239
218
  };
240
- var getNftsOwnedByAddressWithMetadata = async (publicAddress, provider, maxNfts = 200, timeout = 5e3) => {
241
- const nfts = await getNftsOwnedByAddress(publicAddress, provider, maxNfts, timeout);
219
+ var getNftsOwnedByAddressWithMetadata = async (publicAddress, providers, maxNfts = 200, timeout = 5e3) => {
220
+ const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout);
242
221
  const nftResult = await Promise.all(
243
222
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
244
223
  nfts.map(async (nft) => {
245
224
  try {
246
225
  if (!nft.metadataUri || !nft.metadata) {
247
- const [metadataUri, metadata] = await getNftMetadata(nft.address, provider, nft.tokenId);
248
- nft.metadata = metadata;
249
- nft.metadataUri = metadataUri;
226
+ const [metadataUri, metadata] = await getNftMetadata(
227
+ nft.implementation ?? nft.address,
228
+ getProvider(providers),
229
+ nft.tokenId,
230
+ true,
231
+ nft.metadataUri
232
+ );
233
+ nft.metadata = nft.metadata ?? metadata;
234
+ nft.metadataUri = nft.metadataUri ?? metadataUri;
250
235
  }
251
236
  return nft;
252
237
  } catch (ex) {
@@ -259,27 +244,33 @@ var getNftsOwnedByAddressWithMetadata = async (publicAddress, provider, maxNfts
259
244
  );
260
245
  return nftResult;
261
246
  };
262
- var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 100, timeout = 5e3) => {
263
- const nfts = await getNftsFromWalletFromOpenSea(provider.network.chainId, publicAddress, maxNfts, timeout);
247
+ var getNftsOwnedByAddress = async (publicAddress, providers, maxNfts = 100, timeout = 5e3) => {
248
+ const nfts = await getNftsFromWalletFromOpenSea(providers, publicAddress, maxNfts, timeout);
264
249
  const nftResult = await Promise.all(
265
250
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
266
251
  nfts.map(async (nft) => {
267
252
  try {
268
253
  const { contract, identifier } = nft;
254
+ const erc1976Status = await (0, import_witness_blockchain_abstract2.getErc1967Status)(getProvider(providers), contract);
255
+ const { implementation } = erc1976Status;
269
256
  let supply = "0x01";
270
- const types = await getTokenTypes(provider, contract);
257
+ const types = await getTokenTypes(getProvider(providers), implementation);
271
258
  if (types.includes("ERC1155")) {
272
- const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(contract, provider);
273
- supply = await tryCall(async () => (await supply1155.totalSupply(contract)).toHexString()) ?? "0x01";
259
+ const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(implementation, getProvider(providers));
260
+ supply = await tryCall(async () => (await supply1155.totalSupply(erc1976Status.address)).toHexString()) ?? "0x01";
274
261
  }
275
262
  const fields = {
276
263
  address: contract,
277
- chainId: provider.network.chainId,
264
+ chainId: getProvider(providers).network.chainId,
265
+ metadataUri: nft.metadata_url ?? void 0,
278
266
  supply,
279
267
  tokenId: identifier,
280
268
  type: types.at(0),
281
269
  types
282
270
  };
271
+ if (implementation !== contract) {
272
+ fields.implementation = implementation;
273
+ }
283
274
  return fields;
284
275
  } catch (ex) {
285
276
  const error = ex;
@@ -294,15 +285,12 @@ var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 100, timeo
294
285
 
295
286
  // src/Witness.ts
296
287
  var schema = import_crypto_nft_payload_plugin.NftSchema;
297
- var defaultMaxNfts = 100;
298
- var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitness {
288
+ var defaultMaxNfts = 200;
289
+ var CryptoWalletNftWitness = class extends import_witness_blockchain_abstract3.AbstractBlockchainWitness {
299
290
  static configSchemas = [import_crypto_nft_payload_plugin.NftWitnessConfigSchema];
300
291
  get loadMetadata() {
301
292
  return this.config.loadMetadata ?? true;
302
293
  }
303
- get provider() {
304
- return this.params.provider;
305
- }
306
294
  get timeout() {
307
295
  return this.config.timeout ?? 1e4;
308
296
  }
@@ -312,14 +300,14 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
312
300
  try {
313
301
  const observations = await Promise.all(
314
302
  queries.map(async (query) => {
315
- const addressValue = (0, import_assert3.assertEx)(query?.address ?? this.config.address, "params.address is required");
303
+ const addressValue = (0, import_assert2.assertEx)(query?.address ?? this.config.address, "params.address is required");
316
304
  const parsedAddressValue = import_eth_address.EthAddress.parse(addressValue);
317
- const address = (0, import_assert3.assertEx)(parsedAddressValue?.toString(), "Failed to parse params.address");
305
+ const address = (0, import_assert2.assertEx)(parsedAddressValue?.toString(), "Failed to parse params.address");
318
306
  const network = this.provider.network;
319
- const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
307
+ const chainId = (0, import_assert2.assertEx)(network.chainId, "params.chainId is required");
320
308
  const maxNfts = query?.maxNfts || defaultMaxNfts;
321
309
  try {
322
- const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, this.provider, maxNfts, this.timeout) : await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
310
+ const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, this.params.providers, maxNfts, this.timeout) : await getNftsOwnedByAddress(address, this.params.providers, maxNfts, this.timeout);
323
311
  const observation = nfts.map((nft) => {
324
312
  return { ...nft, schema };
325
313
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getAssetsFromWalletFromOpenSea.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts"],"sourcesContent":["import { CryptoWalletNftWitnessPlugin } from './Plugin'\n\nexport * from './lib'\nexport * from './Witness'\n\nexport { CryptoWalletNftWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoWalletNftWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness'\n\nexport const CryptoWalletNftWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoWalletNftWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoWalletNftWitness.create(params)\n return result\n },\n },\n )\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n provider: BaseProvider\n }\n>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 100\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override configSchemas = [NftWitnessConfigSchema]\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get provider() {\n return this.params.provider\n }\n\n get timeout() {\n return this.config.timeout ?? 10000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const addressValue = assertEx(query?.address ?? this.config.address, 'params.address is required')\n const parsedAddressValue = EthAddress.parse(addressValue)\n const address = assertEx(parsedAddressValue?.toString(), 'Failed to parse params.address')\n const network = this.provider.network\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, this.provider, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`)\n }\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.error(error)\n return []\n }\n }\n}\n","import { Interface } from '@ethersproject/abi'\nimport { Provider } from '@ethersproject/providers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (let i = 0; i < functionNames.length; i++) {\n const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)\n if (!bytecode.includes(nameSig)) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftsFromWalletFromOpenSea } from './getAssetsFromWalletFromOpenSea'\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftMetadata } from './getNftMetadata'\nimport { tokenTypes } from './tokenTypes'\nimport { tryCall } from './tryCall'\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n}\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: BaseProvider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (address: string, tokenId: string): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, getInfuraProvider())\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (address: string, tokenId: string): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, getInfuraProvider())\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n provider: BaseProvider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, provider, maxNfts, timeout)\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(nft.address, provider, nft.tokenId)\n nft.metadata = metadata\n nft.metadataUri = metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n provider: BaseProvider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n //const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(provider.network.chainId, publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n const { contract, identifier } = nft\n let supply = '0x01'\n const types = await getTokenTypes(provider, contract)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(contract, provider)\n supply = (await tryCall(async () => (await supply1155.totalSupply(contract)).toHexString())) ?? '0x01'\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: provider.network.chainId,\n supply,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xyo-network/axios'\n\ninterface OpenSeaNFT {\n collection: string\n contract: string\n created_at: string\n description: string | null\n identifier: string\n image_url: string | null\n is_disabled: boolean\n is_nsfw: boolean\n metadata_url: string | null\n name: string | null\n token_standard: string\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (chainId: number, address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","import { InfuraProvider, Provider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\n\nexport interface InfuraProviderConfig {\n projectId: string\n projectSecret: string\n}\n\nlet instance: InfuraProvider | undefined = undefined\n\nexport const getInfuraProvider = (): Provider => {\n if (instance) return instance\n const config = getInfuraProviderConfig()\n instance = new InfuraProvider('homestead', config)\n return instance\n}\n\nexport const canUseInfuraProvider = (): boolean => {\n return !!process.env.INFURA_PROJECT_ID && !!process.env.INFURA_PROJECT_SECRET ? true : false\n}\n\nexport const getInfuraProviderConfig = (): InfuraProviderConfig => {\n const projectId = assertEx(process.env.INFURA_PROJECT_ID, 'Missing INFURA_PROJECT_ID ENV VAR')\n const projectSecret = assertEx(process.env.INFURA_PROJECT_SECRET, 'Missing INFURA_PROJECT_SECRET ENV VAR')\n return { projectId, projectSecret }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { isErc721, isErc1155 } from './tokenTypes'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway: string) => {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = ipfsGateway\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n}\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: BaseProvider,\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n tokenId: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable721 = ERC721Enumerable__factory.connect(contractAddress, provider)\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n const is1155 = await isErc1155(provider, contractAddress)\n let uri1155: string | undefined\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri: ${error.message}`)\n }\n }\n\n const is721 = await isErc721(provider, contractAddress)\n let metadataUri: string | undefined\n if (is721) {\n try {\n metadataUri = await enumerable721.tokenURI(tokenId)\n } catch (ex) {\n try {\n metadataUri = await storage721.tokenURI(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadataUri[${contractAddress}][${error.name}]: ${error.message}`)\n }\n }\n }\n\n const tokenMetadataUri = metadataUri ?? uri1155\n\n const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n let metadata: NftMetadata | undefined = undefined\n try {\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadata: ${error.message}`)\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { Provider } from '@ethersproject/providers'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { contractHasFunctions } from './contractHasFunctions'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_open_zeppelin_typechain","import_assert","import_axios","import_open_zeppelin_typechain","ipfsGateway","ex","checkIpfsUrl","ipfsGateway"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getAssetsFromWalletFromOpenSea.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getProvider.ts","../../src/lib/tryCall.ts"],"sourcesContent":["import { CryptoWalletNftWitnessPlugin } from './Plugin'\n\nexport * from './lib'\nexport * from './Witness'\n\nexport { CryptoWalletNftWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoWalletNftWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness'\n\nexport const CryptoWalletNftWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoWalletNftWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoWalletNftWitness.create(params)\n return result\n },\n },\n )\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { AbstractBlockchainWitness } from '@xyo-network/witness-blockchain-abstract'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n providers: BaseProvider[]\n }\n>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 200\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractBlockchainWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override configSchemas = [NftWitnessConfigSchema]\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get timeout() {\n return this.config.timeout ?? 10000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const addressValue = assertEx(query?.address ?? this.config.address, 'params.address is required')\n const parsedAddressValue = EthAddress.parse(addressValue)\n const address = assertEx(parsedAddressValue?.toString(), 'Failed to parse params.address')\n const network = this.provider.network\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, this.params.providers, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, this.params.providers, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`)\n }\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.error(error)\n return []\n }\n }\n}\n","import { Interface } from '@ethersproject/abi'\nimport { Provider } from '@ethersproject/providers'\n\nexport const contractHasFunctions = async (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => {\n try {\n const bytecode = await provider.getCode(address, 'latest')\n for (let i = 0; i < functionNames.length; i++) {\n const nameSig = contractInterface.getSighash(functionNames[i]).substring(2)\n if (!bytecode.includes(nameSig)) {\n return false\n }\n return true\n }\n return false\n } catch (ex) {\n const error = ex as Error\n console.log(error)\n return false\n }\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { getErc1967Status } from '@xyo-network/witness-blockchain-abstract'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftsFromWalletFromOpenSea } from './getAssetsFromWalletFromOpenSea'\nimport { getNftMetadata } from './getNftMetadata'\nimport { getProvider } from './getProvider'\nimport { tokenTypes } from './tokenTypes'\nimport { tryCall } from './tryCall'\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: BaseProvider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (\n address: string,\n tokenId: string,\n provider: BaseProvider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, provider)\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (\n address: string,\n tokenId: string,\n provider: BaseProvider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, provider)\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string, provider: BaseProvider) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: BaseProvider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout)\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(\n nft.implementation ?? nft.address,\n getProvider(providers),\n nft.tokenId,\n true,\n nft.metadataUri,\n )\n nft.metadata = nft.metadata ?? metadata\n nft.metadataUri = nft.metadataUri ?? metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: BaseProvider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n //const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(providers, publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nfts.map(async (nft) => {\n try {\n const { contract, identifier } = nft\n //Check if ERC-1967 Upgradeable\n const erc1976Status = await getErc1967Status(getProvider(providers), contract)\n //console.log(`1976: ${JSON.stringify(erc1976Status, null, 2)}`)\n const { implementation } = erc1976Status\n\n let supply = '0x01'\n const types = await getTokenTypes(getProvider(providers), implementation)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers))\n supply = (await tryCall(async () => (await supply1155.totalSupply(erc1976Status.address)).toHexString())) ?? '0x01'\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: getProvider(providers).network.chainId,\n metadataUri: nft.metadata_url ?? undefined,\n supply,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n if (implementation !== contract) {\n fields.implementation = implementation\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","import { BaseProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xyo-network/axios'\n\ninterface OpenSeaNFT {\n collection: string\n contract: string\n created_at: string\n description: string | null\n identifier: string\n image_url: string | null\n is_disabled: boolean\n is_nsfw: boolean\n metadata_url: string | null\n name: string | null\n token_standard: string\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (providers: BaseProvider[], address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { BaseProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Contract } from 'ethers'\nimport parseDataUrl from 'parse-data-url'\n\nimport { isErc721, isErc1155 } from './tokenTypes'\n\nconst baseUrlAbi = [\n {\n inputs: [],\n name: 'baseUrl',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n]\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: BaseProvider,\n /**\n * The maximum number of NFTs to return. Configurable to prevent\n * large wallets from exhausting Infura API credits. Ideally a\n * multiple of 100 as that appears to be the default page size.\n */\n tokenId: string,\n load = false,\n defaultUri?: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n let uri721: string | undefined = undefined\n const is721 = await isErc721(provider, contractAddress)\n if (is721) {\n try {\n uri721 = await storage721.tokenURI(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri[${error.name}][${contractAddress}]: storage721.tokenURI(tokenId) failed`)\n }\n }\n\n /*let baseUrl: string | undefined = undefined\n if (is721) {\n try {\n const baseUrlContract = new Contract(contractAddress, baseUrlAbi, provider)\n baseUrl = await baseUrlContract.bareUrl()\n } catch (ex) {\n const error = ex as Error\n console.error(`baseUrl[${error.name}][${contractAddress}]: baseUrl() failed`)\n }\n }\n\n if (baseUrl && !uri721?.startsWith(baseUrl)) {\n uri721 = `${baseUrl}${uri721 ?? tokenId}`\n }\n */\n\n let uri1155: string | undefined = undefined\n if (!uri721) {\n const is1155 = await isErc1155(provider, contractAddress)\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metaDataUri[${error.name}][${contractAddress}]: storage1155.uri(tokenId) failed`)\n //console.log(error.message)\n }\n }\n }\n\n const tokenMetadataUri = uri721 || uri1155 || defaultUri\n let metadata: NftMetadata | undefined = undefined\n if (load) {\n if (tokenMetadataUri?.startsWith('data:')) {\n const parsedDataUrl = parseDataUrl(tokenMetadataUri)\n if (parsedDataUrl !== false && parsedDataUrl.contentType === 'application/json') {\n const buf = parsedDataUrl.toBuffer()\n const value = buf.toString('utf8')\n metadata = JSON.parse(value)\n }\n } else {\n let checkedMetaDataUri: string | undefined\n if (tokenMetadataUri && tokenMetadataUri.length > 5) {\n checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n }\n try {\n const axios = new AxiosJson({ timeout: 5000 })\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch (ex) {\n //const error = ex as Error\n //console.error(`metadata: ${error.message}`)\n }\n }\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { Provider } from '@ethersproject/providers'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { contractHasFunctions } from './contractHasFunctions'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","import { BaseProvider } from '@ethersproject/providers'\n\nexport const getProvider = (providers: BaseProvider[]) => {\n return providers[Date.now() % providers.length] //pick a random provider\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["import_crypto_nft_payload_plugin","import_assert","import_witness_blockchain_abstract","import_open_zeppelin_typechain","import_witness_blockchain_abstract","import_axios","import_open_zeppelin_typechain","parseDataUrl"]}