@xyo-network/crypto-nft-witness-wallet-plugin 2.78.1 → 2.78.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 (102) hide show
  1. package/dist/browser/Plugin.d.cts +2 -1
  2. package/dist/browser/Plugin.d.cts.map +1 -1
  3. package/dist/browser/Plugin.d.mts +2 -1
  4. package/dist/browser/Plugin.d.mts.map +1 -1
  5. package/dist/browser/Plugin.d.ts +2 -1
  6. package/dist/browser/Plugin.d.ts.map +1 -1
  7. package/dist/browser/Witness.d.cts +5 -1
  8. package/dist/browser/Witness.d.cts.map +1 -1
  9. package/dist/browser/Witness.d.mts +5 -1
  10. package/dist/browser/Witness.d.mts.map +1 -1
  11. package/dist/browser/Witness.d.ts +5 -1
  12. package/dist/browser/Witness.d.ts.map +1 -1
  13. package/dist/browser/index.cjs +140 -124
  14. package/dist/browser/index.cjs.map +1 -1
  15. package/dist/browser/index.js +142 -126
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/lib/getNftCollectionMetadata.d.cts.map +1 -1
  18. package/dist/browser/lib/getNftCollectionMetadata.d.mts.map +1 -1
  19. package/dist/browser/lib/getNftCollectionMetadata.d.ts.map +1 -1
  20. package/dist/browser/lib/{getNftFields.d.cts → getNftMetadata.d.cts} +4 -4
  21. package/dist/browser/lib/getNftMetadata.d.cts.map +1 -0
  22. package/dist/browser/lib/{getNftFields.d.ts → getNftMetadata.d.mts} +4 -4
  23. package/dist/browser/lib/getNftMetadata.d.mts.map +1 -0
  24. package/dist/browser/lib/{getNftFields.d.mts → getNftMetadata.d.ts} +4 -4
  25. package/dist/browser/lib/getNftMetadata.d.ts.map +1 -0
  26. package/dist/browser/lib/getNftsOwnedByAddress.d.cts +2 -1
  27. package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  28. package/dist/browser/lib/getNftsOwnedByAddress.d.mts +2 -1
  29. package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  30. package/dist/browser/lib/getNftsOwnedByAddress.d.ts +2 -1
  31. package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  32. package/dist/browser/lib/index.d.cts +2 -0
  33. package/dist/browser/lib/index.d.cts.map +1 -1
  34. package/dist/browser/lib/index.d.mts +2 -0
  35. package/dist/browser/lib/index.d.mts.map +1 -1
  36. package/dist/browser/lib/index.d.ts +2 -0
  37. package/dist/browser/lib/index.d.ts.map +1 -1
  38. package/dist/browser/lib/tokenTypes.d.cts +8 -0
  39. package/dist/browser/lib/tokenTypes.d.cts.map +1 -0
  40. package/dist/browser/lib/tokenTypes.d.mts +8 -0
  41. package/dist/browser/lib/tokenTypes.d.mts.map +1 -0
  42. package/dist/browser/lib/tokenTypes.d.ts +8 -0
  43. package/dist/browser/lib/tokenTypes.d.ts.map +1 -0
  44. package/dist/node/Plugin.d.cts +2 -1
  45. package/dist/node/Plugin.d.cts.map +1 -1
  46. package/dist/node/Plugin.d.mts +2 -1
  47. package/dist/node/Plugin.d.mts.map +1 -1
  48. package/dist/node/Plugin.d.ts +2 -1
  49. package/dist/node/Plugin.d.ts.map +1 -1
  50. package/dist/node/Witness.d.cts +5 -1
  51. package/dist/node/Witness.d.cts.map +1 -1
  52. package/dist/node/Witness.d.mts +5 -1
  53. package/dist/node/Witness.d.mts.map +1 -1
  54. package/dist/node/Witness.d.ts +5 -1
  55. package/dist/node/Witness.d.ts.map +1 -1
  56. package/dist/node/index.js +147 -125
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/node/index.mjs +143 -126
  59. package/dist/node/index.mjs.map +1 -1
  60. package/dist/node/lib/getNftCollectionMetadata.d.cts.map +1 -1
  61. package/dist/node/lib/getNftCollectionMetadata.d.mts.map +1 -1
  62. package/dist/node/lib/getNftCollectionMetadata.d.ts.map +1 -1
  63. package/dist/node/lib/{getNftFields.d.cts → getNftMetadata.d.cts} +4 -4
  64. package/dist/node/lib/getNftMetadata.d.cts.map +1 -0
  65. package/dist/node/lib/getNftMetadata.d.mts +11 -0
  66. package/dist/node/lib/getNftMetadata.d.mts.map +1 -0
  67. package/dist/node/lib/getNftMetadata.d.ts +11 -0
  68. package/dist/node/lib/getNftMetadata.d.ts.map +1 -0
  69. package/dist/node/lib/getNftsOwnedByAddress.d.cts +2 -1
  70. package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  71. package/dist/node/lib/getNftsOwnedByAddress.d.mts +2 -1
  72. package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  73. package/dist/node/lib/getNftsOwnedByAddress.d.ts +2 -1
  74. package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  75. package/dist/node/lib/index.d.cts +2 -0
  76. package/dist/node/lib/index.d.cts.map +1 -1
  77. package/dist/node/lib/index.d.mts +2 -0
  78. package/dist/node/lib/index.d.mts.map +1 -1
  79. package/dist/node/lib/index.d.ts +2 -0
  80. package/dist/node/lib/index.d.ts.map +1 -1
  81. package/dist/node/lib/tokenTypes.d.cts +8 -0
  82. package/dist/node/lib/tokenTypes.d.cts.map +1 -0
  83. package/dist/node/lib/tokenTypes.d.mts +8 -0
  84. package/dist/node/lib/tokenTypes.d.mts.map +1 -0
  85. package/dist/node/lib/tokenTypes.d.ts +8 -0
  86. package/dist/node/lib/tokenTypes.d.ts.map +1 -0
  87. package/package.json +14 -10
  88. package/src/Witness.ts +14 -3
  89. package/src/lib/getNftCollectionMetadata.ts +0 -2
  90. package/src/lib/getNftMetadata.ts +92 -0
  91. package/src/lib/getNftsOwnedByAddress.ts +62 -32
  92. package/src/lib/index.ts +2 -0
  93. package/src/lib/tokenTypes.ts +36 -0
  94. package/dist/browser/lib/getNftFields.d.cts.map +0 -1
  95. package/dist/browser/lib/getNftFields.d.mts.map +0 -1
  96. package/dist/browser/lib/getNftFields.d.ts.map +0 -1
  97. package/dist/node/lib/getNftFields.d.cts.map +0 -1
  98. package/dist/node/lib/getNftFields.d.mts +0 -11
  99. package/dist/node/lib/getNftFields.d.mts.map +0 -1
  100. package/dist/node/lib/getNftFields.d.ts +0 -11
  101. package/dist/node/lib/getNftFields.d.ts.map +0 -1
  102. package/src/lib/getNftFields.ts +0 -90
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
41
41
  }) | undefined;
42
42
  } & {
43
43
  address?: string | undefined;
44
- chainId?: number | undefined;
45
44
  schema: "network.xyo.crypto.nft.witness.config";
46
45
  timeout?: number | undefined;
47
46
  }, "schema"> & {
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
52
  };
54
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
+ } & {
56
+ provider: import("@ethersproject/abstract-provider").Provider;
56
57
  }>>;
57
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
41
41
  }) | undefined;
42
42
  } & {
43
43
  address?: string | undefined;
44
- chainId?: number | undefined;
45
44
  schema: "network.xyo.crypto.nft.witness.config";
46
45
  timeout?: number | undefined;
47
46
  }, "schema"> & {
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
52
  };
54
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
+ } & {
56
+ provider: import("@ethersproject/abstract-provider").Provider;
56
57
  }>>;
57
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
@@ -41,7 +41,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
41
41
  }) | undefined;
42
42
  } & {
43
43
  address?: string | undefined;
44
- chainId?: number | undefined;
45
44
  schema: "network.xyo.crypto.nft.witness.config";
46
45
  timeout?: number | undefined;
47
46
  }, "schema"> & {
@@ -53,5 +52,7 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
52
  };
54
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
55
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
+ } & {
56
+ provider: import("@ethersproject/abstract-provider").Provider;
56
57
  }>>;
57
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAStC,CAAA"}
@@ -1,10 +1,14 @@
1
+ import { Provider } from '@ethersproject/providers';
1
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
2
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
3
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
5
  import { WitnessParams } from '@xyo-network/witness-model';
5
- export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>>;
6
+ export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
+ provider: Provider;
8
+ }>;
6
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
7
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
+ get provider(): Provider;
8
12
  get timeout(): number;
9
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAEA,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,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAMvG,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAwB1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,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,QAAQ,CAAA;CACnB,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,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
@@ -1,10 +1,14 @@
1
+ import { Provider } from '@ethersproject/providers';
1
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
2
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
3
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
5
  import { WitnessParams } from '@xyo-network/witness-model';
5
- export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>>;
6
+ export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
+ provider: Provider;
8
+ }>;
6
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
7
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
+ get provider(): Provider;
8
12
  get timeout(): number;
9
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAEA,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,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAMvG,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAwB1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,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,QAAQ,CAAA;CACnB,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,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
@@ -1,10 +1,14 @@
1
+ import { Provider } from '@ethersproject/providers';
1
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
2
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
3
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
4
5
  import { WitnessParams } from '@xyo-network/witness-model';
5
- export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>>;
6
+ export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
+ provider: Provider;
8
+ }>;
6
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
7
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
+ get provider(): Provider;
8
12
  get timeout(): number;
9
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAEA,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,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAMvG,qBAAa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAAE,SAAQ,eAAe,CACtI,OAAO,EACP,eAAe,EACf,OAAO,CACR;IACC,OAAgB,aAAa,4CAA2B;IAExD,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAwB1F"}
1
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAGnD,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,QAAQ,CAAA;CACnB,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,QAAQ,aAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAyB1F"}
@@ -27,23 +27,30 @@ __export(src_exports, {
27
27
  getErc1155MetadataUri: () => getErc1155MetadataUri,
28
28
  getErc721MetadataUri: () => getErc721MetadataUri,
29
29
  getNftMetadataUri: () => getNftMetadataUri,
30
- getNftsOwnedByAddress: () => getNftsOwnedByAddress
30
+ getNftsOwnedByAddress: () => getNftsOwnedByAddress,
31
+ getProviderFromEnv: () => getProviderFromEnv,
32
+ hasFunctions: () => hasFunctions,
33
+ isErc1155: () => isErc1155,
34
+ isErc721: () => isErc721,
35
+ tokenTypes: () => tokenTypes
31
36
  });
32
37
  module.exports = __toCommonJS(src_exports);
33
38
 
34
39
  // src/Plugin.ts
35
- var import_crypto_nft_payload_plugin3 = require("@xyo-network/crypto-nft-payload-plugin");
40
+ var import_crypto_nft_payload_plugin2 = require("@xyo-network/crypto-nft-payload-plugin");
36
41
  var import_payload_model = require("@xyo-network/payload-model");
37
42
  var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
38
43
 
39
44
  // src/Witness.ts
40
- var import_assert2 = require("@xylabs/assert");
45
+ var import_assert3 = require("@xylabs/assert");
41
46
  var import_eth_address = require("@xylabs/eth-address");
42
47
  var import_abstract_witness = require("@xyo-network/abstract-witness");
43
- var import_crypto_nft_payload_plugin2 = require("@xyo-network/crypto-nft-payload-plugin");
48
+ var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
44
49
 
45
50
  // src/lib/getNftsOwnedByAddress.ts
46
- var import_axios2 = require("@xyo-network/axios");
51
+ var import_assert2 = require("@xylabs/assert");
52
+ var import_account = require("@xyo-network/account");
53
+ var import_api_graphql_plugin = require("@xyo-network/api-graphql-plugin");
47
54
  var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
48
55
 
49
56
  // src/lib/getInfuraProvider.ts
@@ -63,57 +70,42 @@ var getInfuraProviderConfig = () => {
63
70
  return { projectId, projectSecret };
64
71
  };
65
72
 
66
- // src/lib/getNftFields.ts
73
+ // src/lib/getNftMetadata.ts
67
74
  var import_axios = require("@xyo-network/axios");
68
- var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
69
75
  var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typechain");
70
76
 
71
- // src/lib/getNftCollectionMetadata.ts
77
+ // src/lib/tokenTypes.ts
72
78
  var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
73
- var import_ethers = require("ethers");
74
- function getInterfaceID(contractInterface) {
75
- let interfaceID = import_ethers.constants.Zero;
76
- const functions = Object.keys(contractInterface.functions);
77
- for (let i = 0; i < functions.length; i++) {
78
- interfaceID = interfaceID.xor(contractInterface.getSighash(functions[i]));
79
- }
80
- return interfaceID.toHexString();
81
- }
82
- var getNftCollectionMetadata = async (contractAddress, provider) => {
83
- try {
84
- const contract721 = import_open_zeppelin_typechain.ERC721Enumerable__factory.connect(contractAddress, provider);
85
- const contract1155 = import_open_zeppelin_typechain.ERC1155__factory.connect(contractAddress, provider);
86
- let name = "";
87
- try {
88
- name = await contract721.name();
89
- } catch (ex) {
90
- const error = ex;
91
- console.log(`name: ${error.message}`);
92
- }
93
- let symbol = "";
94
- try {
95
- symbol = await contract721.symbol();
96
- } catch (ex) {
97
- const error = ex;
98
- console.log(`symbol: ${error.message}`);
99
- }
100
- let is1155 = false;
101
- try {
102
- is1155 = await contract1155.supportsInterface(getInterfaceID(import_open_zeppelin_typechain.ERC1155__factory.getInterface(import_open_zeppelin_typechain.ERC1155__factory.abi)));
103
- } catch (ex) {
104
- const error = ex;
105
- console.log(`is1155: ${error.message}`);
106
- is1155 = false;
79
+ var isErc1155 = async (contract) => {
80
+ return await hasFunctions(contract, import_open_zeppelin_typechain.ERC1155URIStorage__factory.createInterface(), ["uri"]);
81
+ };
82
+ var isErc721 = async (contract) => {
83
+ return await hasFunctions(contract, import_open_zeppelin_typechain.IERC721Metadata__factory.createInterface(), ["name", "symbol", "tokenURI"]);
84
+ };
85
+ var hasFunctions = async (contract, contractInterface, functionNames) => {
86
+ const bytecode = await contract.provider.getCode(contract.address);
87
+ for (let i = 0; i < functionNames.length; i++) {
88
+ const nameSig = contractInterface.getSighash(functionNames[i]).substring(2);
89
+ if (!bytecode.includes(nameSig)) {
90
+ return false;
107
91
  }
108
- return { address: contractAddress, chainId: provider.network.chainId, name, symbol, type: is1155 ? "ERC1155" : "ERC721" };
109
- } catch (ex) {
110
- const error = ex;
111
- console.error(`getNftCollectionMetadata: ${error.message}`);
112
- throw ex;
92
+ return true;
113
93
  }
94
+ return false;
95
+ };
96
+ var tokenTypes = async (contract) => {
97
+ const [erc721, erc1155] = await Promise.all([isErc721(contract), isErc1155(contract)]);
98
+ const result = [];
99
+ if (erc721) {
100
+ result.push("ERC721");
101
+ }
102
+ if (erc1155) {
103
+ result.push("ERC1155");
104
+ }
105
+ return result;
114
106
  };
115
107
 
116
- // src/lib/getNftFields.ts
108
+ // src/lib/getNftMetadata.ts
117
109
  var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
118
110
  var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
119
111
  const url = new URL(urlToCheck);
@@ -131,59 +123,39 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway2) => {
131
123
  return urlToCheck;
132
124
  }
133
125
  };
134
- var getNftFields = async (contractAddress, provider, tokenId) => {
135
- const axios = new import_axios.AxiosJson({ timeout: 500 });
136
- const storage = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
137
- const supply1155 = import_open_zeppelin_typechain2.ERC1155Supply__factory.connect(contractAddress, provider);
138
- const { type: nftType } = await getNftCollectionMetadata(contractAddress, provider);
139
- let supply;
140
- try {
141
- supply = nftType === (0, import_crypto_nft_payload_plugin.toTokenType)("ERC1155") ? (await supply1155.totalSupply(tokenId)).toHexString() : "0x01";
142
- } catch (ex) {
143
- const error = ex;
144
- console.error(`supply: ${error.message}`);
126
+ var getNftMetadata = async (contractAddress, provider, tokenId) => {
127
+ const axios = new import_axios.AxiosJson({ timeout: 2e3 });
128
+ const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
129
+ const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
130
+ const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
131
+ const is1155 = await isErc1155(storage1155);
132
+ let uri1155;
133
+ if (is1155) {
134
+ try {
135
+ uri1155 = await storage1155.uri(tokenId);
136
+ } catch (ex) {
137
+ }
145
138
  }
146
- let metaDataUri;
147
- try {
148
- metaDataUri = await storage.tokenURI(tokenId);
149
- } catch (ex) {
150
- const error = ex;
151
- console.error(`metaDataUri: ${error.message}`);
139
+ const is721 = await isErc721(enumerable721);
140
+ let metadataUri;
141
+ if (is721) {
142
+ try {
143
+ metadataUri = await enumerable721.tokenURI(tokenId);
144
+ } catch (ex) {
145
+ try {
146
+ metadataUri = await storage721.tokenURI(tokenId);
147
+ } catch (ex2) {
148
+ }
149
+ }
152
150
  }
153
- const checkedMetaDataUri = metaDataUri ? checkIpfsUrl(metaDataUri, ipfsGateway) : metaDataUri;
151
+ const tokenMetadataUri = metadataUri ?? uri1155;
152
+ const checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
154
153
  let metadata = void 0;
155
154
  try {
156
155
  metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : void 0;
157
156
  } catch (ex) {
158
- const error = ex;
159
- console.error(`metadata: ${error.message}`);
160
157
  }
161
- const info = {
162
- address: contractAddress,
163
- chainId: provider.network.chainId,
164
- metaDataUri,
165
- metadata,
166
- schema: import_crypto_nft_payload_plugin.NftSchema,
167
- supply: supply ?? "1",
168
- tokenId,
169
- type: nftType
170
- };
171
- return info;
172
- };
173
-
174
- // src/lib/getProvider.ts
175
- var import_providers2 = require("@ethersproject/providers");
176
- var getProviderFromEnv = (chainId = "homestead") => {
177
- const infuraWssUri = process.env.INFURA_WSS_URI;
178
- const infuraProvider = new import_providers2.InfuraProvider("homestead", {
179
- projectId: process.env.INFURA_PROJECT_ID,
180
- projectSecret: process.env.INFURA_PROJECT_SECRET
181
- });
182
- const infuraWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
183
- const quickNodeUri = process.env.QUICKNODE_WSS_URI;
184
- const quickNodeProvider = quickNodeUri ? new import_providers2.WebSocketProvider(quickNodeUri, chainId) : void 0;
185
- const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider;
186
- return provider;
158
+ return [tokenMetadataUri, metadata];
187
159
  };
188
160
 
189
161
  // src/lib/getNftsOwnedByAddress.ts
@@ -223,43 +195,68 @@ var getNftMetadataUri = async (address, tokenId) => {
223
195
  const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
224
196
  return results[0][0] ?? results[1][0];
225
197
  };
226
- var getNftsOwnedByAddress = async (publicAddress, chainId, privateKey, maxNfts = 1e3, timeout = 2e3) => {
227
- const axios = new import_axios2.AxiosJson();
228
- const nfts = [];
229
- const provider = getProviderFromEnv();
230
- const qnUri = "https://api.quicknode.com/graphql";
231
- const result = await axios.post(qnUri, {
198
+ var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 1e3, timeout = 2e3) => {
199
+ const endpoint = "https://api.quicknode.com/graphql";
200
+ const witness = await import_api_graphql_plugin.ApiGraphqlWitness.create({
201
+ account: import_account.Account.randomSync(),
202
+ config: { schema: import_api_graphql_plugin.ApiGraphqlWitnessConfigSchema, timeout },
203
+ endpoint
204
+ });
205
+ const query = {
232
206
  query: `query Query {
233
- ethereum {
234
- walletByAddress(address: "${publicAddress}") {
235
- walletNFTs {
236
- edges {
237
- node {
238
- nft {
239
- contractAddress
240
- tokenId
207
+ ethereum {
208
+ walletByAddress(address: "${publicAddress}") {
209
+ walletNFTs (first: ${maxNfts}) {
210
+ edges {
211
+ node {
212
+ nft {
213
+ contractAddress
214
+ metadata
215
+ tokenId
216
+ externalUrl
217
+ name
218
+ }
241
219
  }
242
220
  }
243
221
  }
244
222
  }
245
223
  }
246
- }
247
- }`,
224
+ }`,
225
+ schema: import_api_graphql_plugin.GraphqlQuerySchema,
248
226
  variables: {}
249
- });
227
+ };
228
+ const results = await witness.observe([query]);
229
+ const witnessResult = (0, import_assert2.assertEx)(results.at(0), "ApiGraphqlWitness failed");
250
230
  const nftResult = await Promise.all(
251
231
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
252
- Object.values(result.data.data.ethereum.walletByAddress.walletNFTs.edges).map(async (nft) => {
232
+ Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft) => {
253
233
  try {
254
- const { contractAddress, tokenId } = nft.node.nft;
255
- const { supply, type } = await getNftFields(contractAddress, provider, tokenId);
234
+ const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft;
235
+ let supply = "0x01";
236
+ const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(contractAddress, provider);
237
+ const storage1155 = import_open_zeppelin_typechain3.ERC1155URIStorage__factory.connect(contractAddress, provider);
238
+ const types = await tokenTypes(storage1155);
239
+ if (types.includes("ERC1155")) {
240
+ try {
241
+ supply = (await supply1155.totalSupply(tokenId)).toHexString();
242
+ } catch (ex) {
243
+ }
244
+ }
256
245
  const fields = {
257
246
  address: contractAddress,
258
- chainId,
247
+ chainId: (await provider.getNetwork()).chainId,
248
+ metadata,
249
+ metadataUri: externalUrl,
259
250
  supply,
260
251
  tokenId,
261
- type
252
+ type: types.at(0),
253
+ types
262
254
  };
255
+ if (!fields.metadataUri || !fields.metadata) {
256
+ const [metadataUri, metadata2] = await getNftMetadata(contractAddress, provider, fields.tokenId);
257
+ fields.metadata = metadata2;
258
+ fields.metadataUri = metadataUri;
259
+ }
263
260
  return fields;
264
261
  } catch (ex) {
265
262
  const error = ex;
@@ -272,27 +269,46 @@ var getNftsOwnedByAddress = async (publicAddress, chainId, privateKey, maxNfts =
272
269
  return nftResult;
273
270
  };
274
271
 
272
+ // src/lib/getProvider.ts
273
+ var import_providers2 = require("@ethersproject/providers");
274
+ var getProviderFromEnv = (chainId = "homestead") => {
275
+ const infuraWssUri = process.env.INFURA_WSS_URI;
276
+ const infuraProvider = new import_providers2.InfuraProvider("homestead", {
277
+ projectId: process.env.INFURA_PROJECT_ID,
278
+ projectSecret: process.env.INFURA_PROJECT_SECRET
279
+ });
280
+ const infuraWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
281
+ const quickNodeUri = process.env.QUICKNODE_WSS_URI;
282
+ const quickNodeProvider = quickNodeUri ? new import_providers2.WebSocketProvider(quickNodeUri, chainId) : void 0;
283
+ const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider;
284
+ return provider;
285
+ };
286
+
275
287
  // src/Witness.ts
276
- var schema = import_crypto_nft_payload_plugin2.NftSchema;
288
+ var schema = import_crypto_nft_payload_plugin.NftSchema;
277
289
  var defaultMaxNfts = 100;
278
290
  var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitness {
279
- static configSchemas = [import_crypto_nft_payload_plugin2.NftWitnessConfigSchema];
291
+ static configSchemas = [import_crypto_nft_payload_plugin.NftWitnessConfigSchema];
292
+ get provider() {
293
+ return this.params.provider;
294
+ }
280
295
  get timeout() {
281
296
  return this.config.timeout ?? 2e3;
282
297
  }
283
298
  async observeHandler(payloads) {
284
299
  await this.started("throw");
285
- const queries = payloads?.filter(import_crypto_nft_payload_plugin2.isNftWitnessQuery) ?? [];
300
+ const queries = payloads?.filter(import_crypto_nft_payload_plugin.isNftWitnessQuery) ?? [];
286
301
  const observations = await Promise.all(
287
302
  queries.map(async (query) => {
288
- const address = (0, import_assert2.assertEx)(
289
- import_eth_address.EthAddress.parse((0, import_assert2.assertEx)(query?.address || this.config.address, "params.address is required")),
303
+ const address = (0, import_assert3.assertEx)(
304
+ import_eth_address.EthAddress.parse((0, import_assert3.assertEx)(query?.address || this.config.address, "params.address is required")),
290
305
  "Failed to parse params.address"
291
306
  ).toString();
292
- const chainId = (0, import_assert2.assertEx)(query?.chainId || this.config.chainId, "params.chainId is required");
307
+ const network = await this.provider.getNetwork();
308
+ const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
293
309
  const maxNfts = query?.maxNfts || defaultMaxNfts;
294
310
  try {
295
- const nfts = await getNftsOwnedByAddress(address, chainId, this.account.private.hex, maxNfts, this.timeout);
311
+ const nfts = await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
296
312
  const observation = nfts.map((nft) => {
297
313
  return { ...nft, schema };
298
314
  });
@@ -308,7 +324,7 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
308
324
 
309
325
  // src/Plugin.ts
310
326
  var CryptoWalletNftWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
311
- { required: { [import_crypto_nft_payload_plugin3.NftSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
327
+ { required: { [import_crypto_nft_payload_plugin2.NftSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
312
328
  {
313
329
  witness: async (params) => {
314
330
  const result = await CryptoWalletNftWitness.create(params);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftFields.ts","../../src/lib/getNftCollectionMetadata.ts","../../src/lib/getProvider.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 { 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 } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>>\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 timeout() {\n return this.config.timeout ?? 2000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map(async (query) => {\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, 'params.address is required')),\n 'Failed to parse params.address',\n ).toString()\n const chainId = assertEx(query?.chainId || this.config.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = await getNftsOwnedByAddress(address, chainId, this.account.private.hex, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (error) {\n throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}`)\n }\n }),\n )\n return observations.flat()\n }\n}\n","import { AxiosJson } from '@xyo-network/axios'\nimport { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftFields } from './getNftFields'\nimport { getProviderFromEnv } from './getProvider'\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 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\ninterface QuickNodeNft {\n contractAddress: string\n tokenId: string\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param chainId The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on */\n chainId: number,\n /** @param privateKey The private key of the wallet to use to search for NFTs */\n privateKey: string,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 1000,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 2000,\n): Promise<NftInfoFields[]> => {\n const axios = new AxiosJson()\n const nfts: NftInfoFields[] = []\n const provider = getProviderFromEnv()\n\n const qnUri = 'https://api.quicknode.com/graphql'\n\n const result = await axios.post(qnUri, {\n query: `query Query {\n ethereum {\n walletByAddress(address: \"${publicAddress}\") {\n walletNFTs {\n edges {\n node {\n nft {\n contractAddress\n tokenId\n }\n }\n }\n }\n }\n }\n }`,\n variables: {},\n })\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(result.data.data.ethereum.walletByAddress.walletNFTs.edges).map(async (nft: any) => {\n try {\n const { contractAddress, tokenId } = nft.node.nft as QuickNodeNft\n const { supply, type } = await getNftFields(contractAddress, provider, tokenId)\n const fields: NftInfoFields = {\n address: contractAddress,\n chainId,\n supply,\n tokenId,\n type,\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 { 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 { JsonRpcProvider } from '@ethersproject/providers'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftInfo, NftMetadata, NftSchema, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getNftCollectionMetadata } from './getNftCollectionMetadata'\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 getNftFields = 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: JsonRpcProvider,\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<NftInfo> => {\n const axios = new AxiosJson({ timeout: 500 })\n const storage = ERC721URIStorage__factory.connect(contractAddress, provider)\n const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)\n const { type: nftType } = await getNftCollectionMetadata(contractAddress, provider)\n\n let supply: string | undefined\n try {\n supply = nftType === toTokenType('ERC1155') ? (await supply1155.totalSupply(tokenId)).toHexString() : '0x01'\n } catch (ex) {\n const error = ex as Error\n console.error(`supply: ${error.message}`)\n }\n\n let metaDataUri: string | undefined\n try {\n metaDataUri = await storage.tokenURI(tokenId)\n } catch (ex) {\n const error = ex as Error\n console.error(`metaDataUri: ${error.message}`)\n }\n\n const checkedMetaDataUri = metaDataUri ? checkIpfsUrl(metaDataUri, ipfsGateway) : metaDataUri\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 const info: NftInfo = {\n address: contractAddress,\n chainId: provider.network.chainId,\n metaDataUri,\n metadata,\n schema: NftSchema,\n supply: supply ?? '1',\n tokenId,\n type: nftType,\n }\n return info\n}\n","import { Interface } from '@ethersproject/abi'\nimport { JsonRpcProvider } from '@ethersproject/providers'\nimport { NftCollectionMetadata } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory, ERC1155__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { constants } from 'ethers'\n\nimport { getProviderFromEnv } from './getProvider'\n\nexport function getInterfaceID(contractInterface: Interface) {\n let interfaceID = constants.Zero\n const functions: string[] = Object.keys(contractInterface.functions)\n for (let i = 0; i < functions.length; i++) {\n interfaceID = interfaceID.xor(contractInterface.getSighash(functions[i]))\n }\n\n return interfaceID.toHexString()\n}\n\nexport const getNftCollectionMetadata = 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: JsonRpcProvider,\n): Promise<Omit<NftCollectionMetadata, 'total'>> => {\n try {\n const contract721 = ERC721Enumerable__factory.connect(contractAddress, provider)\n const contract1155 = ERC1155__factory.connect(contractAddress, provider)\n let name: string = ''\n try {\n name = await contract721.name()\n } catch (ex) {\n const error = ex as Error\n console.log(`name: ${error.message}`)\n }\n let symbol: string = ''\n try {\n symbol = await contract721.symbol()\n } catch (ex) {\n const error = ex as Error\n console.log(`symbol: ${error.message}`)\n }\n let is1155: boolean = false\n try {\n is1155 = await contract1155.supportsInterface(getInterfaceID(ERC1155__factory.getInterface(ERC1155__factory.abi)))\n } catch (ex) {\n const error = ex as Error\n console.log(`is1155: ${error.message}`)\n is1155 = false\n }\n return { address: contractAddress, chainId: provider.network.chainId, name, symbol, type: is1155 ? 'ERC1155' : 'ERC721' }\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionMetadata: ${error.message}`)\n throw ex\n }\n}\n","import { InfuraProvider, WebSocketProvider } from '@ethersproject/providers'\n\nexport const getProviderFromEnv = (chainId: string | number = 'homestead') => {\n const infuraWssUri = process.env.INFURA_WSS_URI\n const infuraProvider = new InfuraProvider('homestead', {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n\n const infuraWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined\n\n const quickNodeUri = process.env.QUICKNODE_WSS_URI\n const quickNodeProvider = quickNodeUri ? new WebSocketProvider(quickNodeUri, chainId) : undefined\n\n const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider\n return provider\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_crypto_nft_payload_plugin","import_axios","import_open_zeppelin_typechain","import_open_zeppelin_typechain","ipfsGateway","import_providers","checkIpfsUrl","ipfsGateway"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getProvider.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 { Provider } 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 } from './lib'\n\nexport type CryptoWalletNftWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoWalletNftWitnessConfig>,\n {\n provider: Provider\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 provider() {\n return this.params.provider\n }\n\n get timeout() {\n return this.config.timeout ?? 2000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map(async (query) => {\n const address = assertEx(\n EthAddress.parse(assertEx(query?.address || this.config.address, 'params.address is required')),\n 'Failed to parse params.address',\n ).toString()\n const network = await this.provider.getNetwork()\n const chainId = assertEx(network.chainId, 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts = 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 (error) {\n throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}`)\n }\n }),\n )\n return observations.flat()\n }\n}\n","import { Provider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { Account } from '@xyo-network/account'\nimport { ApiGraphqlWitness, ApiGraphqlWitnessConfigSchema, GraphqlQuery, GraphqlQuerySchema, GraphqlResult } from '@xyo-network/api-graphql-plugin'\nimport { NftInfoFields, NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\n\nimport { getInfuraProvider } from './getInfuraProvider'\nimport { getNftMetadata } from './getNftMetadata'\nimport { tokenTypes } from './tokenTypes'\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 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\ninterface QuickNodeNft {\n contractAddress: string\n externalUrl: string\n metadata: NftMetadata\n name: string\n tokenId: string\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: Provider,\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 1000,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 2000,\n): Promise<NftInfoFields[]> => {\n const endpoint = 'https://api.quicknode.com/graphql'\n const witness = await ApiGraphqlWitness.create({\n account: Account.randomSync(),\n config: { schema: ApiGraphqlWitnessConfigSchema, timeout },\n endpoint,\n })\n const query: GraphqlQuery = {\n query: `query Query {\n ethereum {\n walletByAddress(address: \"${publicAddress}\") {\n walletNFTs (first: ${maxNfts}) {\n edges {\n node {\n nft {\n contractAddress\n metadata\n tokenId\n externalUrl\n name\n }\n }\n }\n }\n }\n }\n }`,\n schema: GraphqlQuerySchema,\n variables: {},\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const results = (await witness.observe([query])) as GraphqlResult<any>[]\n const witnessResult = assertEx(results.at(0), 'ApiGraphqlWitness failed')\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft: any) => {\n try {\n const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft as QuickNodeNft\n let supply = '0x01'\n const supply1155 = ERC1155Supply__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n const types = await tokenTypes(storage1155)\n if (types.includes('ERC1155')) {\n try {\n supply = (await supply1155.totalSupply(tokenId)).toHexString()\n } catch (ex) {\n //const error = ex as Error\n //console.error(`supply: ${error.message}`)\n }\n }\n const fields: NftInfoFields = {\n address: contractAddress,\n chainId: (await provider.getNetwork()).chainId,\n metadata,\n metadataUri: externalUrl,\n supply,\n tokenId,\n type: types.at(0),\n types,\n }\n if (!fields.metadataUri || !fields.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(contractAddress, provider, fields.tokenId)\n fields.metadata = metadata\n fields.metadataUri = metadataUri\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 { 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 { Provider } 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: Provider,\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(storage1155)\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(enumerable721)\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 { Interface } from '@ethersproject/abi'\nimport { Contract } from '@ethersproject/contracts'\nimport { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\n\nexport const isErc1155 = async (contract: Contract) => {\n return await hasFunctions(contract, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (contract: Contract) => {\n return await hasFunctions(contract, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const hasFunctions = async (contract: Contract, contractInterface: Interface, functionNames: string[]) => {\n const bytecode = await contract.provider.getCode(contract.address)\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}\n\nexport const tokenTypes = async (contract: Contract) => {\n const [erc721, erc1155] = await Promise.all([isErc721(contract), isErc1155(contract)])\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 { InfuraProvider, WebSocketProvider } from '@ethersproject/providers'\n\nexport const getProviderFromEnv = (chainId: string | number = 'homestead') => {\n const infuraWssUri = process.env.INFURA_WSS_URI\n const infuraProvider = new InfuraProvider('homestead', {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n\n const infuraWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined\n\n const quickNodeUri = process.env.QUICKNODE_WSS_URI\n const quickNodeProvider = quickNodeUri ? new WebSocketProvider(quickNodeUri, chainId) : undefined\n\n const provider = infuraWebsocketProvider ?? infuraProvider ?? infuraWebsocketProvider ?? quickNodeProvider ?? infuraProvider\n return provider\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_assert","import_open_zeppelin_typechain","import_open_zeppelin_typechain","ipfsGateway","ex","checkIpfsUrl","ipfsGateway","metadata","import_providers"]}