@xyo-network/crypto-nft-witness-wallet-plugin 2.78.3 → 2.78.4

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 (119) 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 -3
  5. package/dist/browser/Witness.d.cts.map +1 -1
  6. package/dist/browser/Witness.d.mts +3 -3
  7. package/dist/browser/Witness.d.mts.map +1 -1
  8. package/dist/browser/Witness.d.ts +3 -3
  9. package/dist/browser/Witness.d.ts.map +1 -1
  10. package/dist/browser/index.cjs +121 -97
  11. package/dist/browser/index.cjs.map +1 -1
  12. package/dist/browser/index.js +123 -99
  13. package/dist/browser/index.js.map +1 -1
  14. package/dist/browser/lib/contractHasFunctions.d.cts +4 -0
  15. package/dist/browser/lib/contractHasFunctions.d.cts.map +1 -0
  16. package/dist/browser/lib/contractHasFunctions.d.mts +4 -0
  17. package/dist/browser/lib/contractHasFunctions.d.mts.map +1 -0
  18. package/dist/browser/lib/contractHasFunctions.d.ts +4 -0
  19. package/dist/browser/lib/contractHasFunctions.d.ts.map +1 -0
  20. package/dist/browser/lib/getNftMetadata.d.cts +2 -2
  21. package/dist/browser/lib/getNftMetadata.d.cts.map +1 -1
  22. package/dist/browser/lib/getNftMetadata.d.mts +2 -2
  23. package/dist/browser/lib/getNftMetadata.d.mts.map +1 -1
  24. package/dist/browser/lib/getNftMetadata.d.ts +2 -2
  25. package/dist/browser/lib/getNftMetadata.d.ts.map +1 -1
  26. package/dist/browser/lib/getNftsOwnedByAddress.d.cts +2 -2
  27. package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  28. package/dist/browser/lib/getNftsOwnedByAddress.d.mts +2 -2
  29. package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  30. package/dist/browser/lib/getNftsOwnedByAddress.d.ts +2 -2
  31. package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  32. package/dist/browser/lib/getProvider.d.cts +3 -2
  33. package/dist/browser/lib/getProvider.d.cts.map +1 -1
  34. package/dist/browser/lib/getProvider.d.mts +3 -2
  35. package/dist/browser/lib/getProvider.d.mts.map +1 -1
  36. package/dist/browser/lib/getProvider.d.ts +3 -2
  37. package/dist/browser/lib/getProvider.d.ts.map +1 -1
  38. package/dist/browser/lib/index.d.cts +1 -0
  39. package/dist/browser/lib/index.d.cts.map +1 -1
  40. package/dist/browser/lib/index.d.mts +1 -0
  41. package/dist/browser/lib/index.d.mts.map +1 -1
  42. package/dist/browser/lib/index.d.ts +1 -0
  43. package/dist/browser/lib/index.d.ts.map +1 -1
  44. package/dist/browser/lib/tokenTypes.d.cts +4 -6
  45. package/dist/browser/lib/tokenTypes.d.cts.map +1 -1
  46. package/dist/browser/lib/tokenTypes.d.mts +4 -6
  47. package/dist/browser/lib/tokenTypes.d.mts.map +1 -1
  48. package/dist/browser/lib/tokenTypes.d.ts +4 -6
  49. package/dist/browser/lib/tokenTypes.d.ts.map +1 -1
  50. package/dist/browser/lib/tryCall.d.cts +2 -0
  51. package/dist/browser/lib/tryCall.d.cts.map +1 -0
  52. package/dist/browser/lib/tryCall.d.mts +2 -0
  53. package/dist/browser/lib/tryCall.d.mts.map +1 -0
  54. package/dist/browser/lib/tryCall.d.ts +2 -0
  55. package/dist/browser/lib/tryCall.d.ts.map +1 -0
  56. package/dist/node/Plugin.d.cts +1 -1
  57. package/dist/node/Plugin.d.mts +1 -1
  58. package/dist/node/Plugin.d.ts +1 -1
  59. package/dist/node/Witness.d.cts +3 -3
  60. package/dist/node/Witness.d.cts.map +1 -1
  61. package/dist/node/Witness.d.mts +3 -3
  62. package/dist/node/Witness.d.mts.map +1 -1
  63. package/dist/node/Witness.d.ts +3 -3
  64. package/dist/node/Witness.d.ts.map +1 -1
  65. package/dist/node/index.js +123 -99
  66. package/dist/node/index.js.map +1 -1
  67. package/dist/node/index.mjs +123 -100
  68. package/dist/node/index.mjs.map +1 -1
  69. package/dist/node/lib/contractHasFunctions.d.cts +4 -0
  70. package/dist/node/lib/contractHasFunctions.d.cts.map +1 -0
  71. package/dist/node/lib/contractHasFunctions.d.mts +4 -0
  72. package/dist/node/lib/contractHasFunctions.d.mts.map +1 -0
  73. package/dist/node/lib/contractHasFunctions.d.ts +4 -0
  74. package/dist/node/lib/contractHasFunctions.d.ts.map +1 -0
  75. package/dist/node/lib/getNftMetadata.d.cts +2 -2
  76. package/dist/node/lib/getNftMetadata.d.cts.map +1 -1
  77. package/dist/node/lib/getNftMetadata.d.mts +2 -2
  78. package/dist/node/lib/getNftMetadata.d.mts.map +1 -1
  79. package/dist/node/lib/getNftMetadata.d.ts +2 -2
  80. package/dist/node/lib/getNftMetadata.d.ts.map +1 -1
  81. package/dist/node/lib/getNftsOwnedByAddress.d.cts +2 -2
  82. package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +1 -1
  83. package/dist/node/lib/getNftsOwnedByAddress.d.mts +2 -2
  84. package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +1 -1
  85. package/dist/node/lib/getNftsOwnedByAddress.d.ts +2 -2
  86. package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +1 -1
  87. package/dist/node/lib/getProvider.d.cts +3 -2
  88. package/dist/node/lib/getProvider.d.cts.map +1 -1
  89. package/dist/node/lib/getProvider.d.mts +3 -2
  90. package/dist/node/lib/getProvider.d.mts.map +1 -1
  91. package/dist/node/lib/getProvider.d.ts +3 -2
  92. package/dist/node/lib/getProvider.d.ts.map +1 -1
  93. package/dist/node/lib/index.d.cts +1 -0
  94. package/dist/node/lib/index.d.cts.map +1 -1
  95. package/dist/node/lib/index.d.mts +1 -0
  96. package/dist/node/lib/index.d.mts.map +1 -1
  97. package/dist/node/lib/index.d.ts +1 -0
  98. package/dist/node/lib/index.d.ts.map +1 -1
  99. package/dist/node/lib/tokenTypes.d.cts +4 -6
  100. package/dist/node/lib/tokenTypes.d.cts.map +1 -1
  101. package/dist/node/lib/tokenTypes.d.mts +4 -6
  102. package/dist/node/lib/tokenTypes.d.mts.map +1 -1
  103. package/dist/node/lib/tokenTypes.d.ts +4 -6
  104. package/dist/node/lib/tokenTypes.d.ts.map +1 -1
  105. package/dist/node/lib/tryCall.d.cts +2 -0
  106. package/dist/node/lib/tryCall.d.cts.map +1 -0
  107. package/dist/node/lib/tryCall.d.mts +2 -0
  108. package/dist/node/lib/tryCall.d.mts.map +1 -0
  109. package/dist/node/lib/tryCall.d.ts +2 -0
  110. package/dist/node/lib/tryCall.d.ts.map +1 -0
  111. package/package.json +14 -14
  112. package/src/Witness.ts +30 -24
  113. package/src/lib/contractHasFunctions.ts +20 -0
  114. package/src/lib/getNftMetadata.ts +4 -4
  115. package/src/lib/getNftsOwnedByAddress.ts +62 -60
  116. package/src/lib/getProvider.ts +19 -7
  117. package/src/lib/index.ts +1 -0
  118. package/src/lib/tokenTypes.ts +8 -19
  119. package/src/lib/tryCall.ts +11 -0
@@ -53,6 +53,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
54
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
55
  } & {
56
- provider: import("@ethersproject/abstract-provider").Provider;
56
+ provider: import("@ethersproject/providers").JsonRpcProvider | import("@ethersproject/providers").WebSocketProvider;
57
57
  }>>;
58
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -53,6 +53,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
54
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
55
  } & {
56
- provider: import("@ethersproject/abstract-provider").Provider;
56
+ provider: import("@ethersproject/providers").JsonRpcProvider | import("@ethersproject/providers").WebSocketProvider;
57
57
  }>>;
58
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -53,6 +53,6 @@ export declare const CryptoWalletNftWitnessPlugin: () => import("@xyo-network/pa
53
53
  ephemeralQueryAccountEnabled?: boolean | undefined;
54
54
  wallet?: import("@xyo-network/wallet-model").WalletInstance | undefined;
55
55
  } & {
56
- provider: import("@ethersproject/abstract-provider").Provider;
56
+ provider: import("@ethersproject/providers").JsonRpcProvider | import("@ethersproject/providers").WebSocketProvider;
57
57
  }>>;
58
58
  //# sourceMappingURL=Plugin.d.ts.map
@@ -1,14 +1,14 @@
1
- import { Provider } from '@ethersproject/providers';
1
+ import { JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers';
2
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: Provider;
7
+ provider: JsonRpcProvider | WebSocketProvider;
8
8
  }>;
9
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
- get provider(): Provider;
11
+ get provider(): JsonRpcProvider | WebSocketProvider;
12
12
  get timeout(): number;
13
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
14
14
  }
@@ -1 +1 @@
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
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAY,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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,eAAe,GAAG,iBAAiB,CAAA;CAC9C,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,wCAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA+B1F"}
@@ -1,14 +1,14 @@
1
- import { Provider } from '@ethersproject/providers';
1
+ import { JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers';
2
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: Provider;
7
+ provider: JsonRpcProvider | WebSocketProvider;
8
8
  }>;
9
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
- get provider(): Provider;
11
+ get provider(): JsonRpcProvider | WebSocketProvider;
12
12
  get timeout(): number;
13
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
14
14
  }
@@ -1 +1 @@
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
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAY,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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,eAAe,GAAG,iBAAiB,CAAA;CAC9C,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,wCAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA+B1F"}
@@ -1,14 +1,14 @@
1
- import { Provider } from '@ethersproject/providers';
1
+ import { JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers';
2
2
  import { AbstractWitness } from '@xyo-network/abstract-witness';
3
3
  import { CryptoWalletNftWitnessConfig, NftInfo, NftWitnessQuery } from '@xyo-network/crypto-nft-payload-plugin';
4
4
  import { AnyConfigSchema } from '@xyo-network/module-model';
5
5
  import { WitnessParams } from '@xyo-network/witness-model';
6
6
  export type CryptoWalletNftWitnessParams = WitnessParams<AnyConfigSchema<CryptoWalletNftWitnessConfig>, {
7
- provider: Provider;
7
+ provider: JsonRpcProvider | WebSocketProvider;
8
8
  }>;
9
9
  export declare class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractWitness<TParams, NftWitnessQuery, NftInfo> {
10
10
  static configSchemas: "network.xyo.crypto.nft.witness.config"[];
11
- get provider(): Provider;
11
+ get provider(): JsonRpcProvider | WebSocketProvider;
12
12
  get timeout(): number;
13
13
  protected observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]>;
14
14
  }
@@ -1 +1 @@
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
+ {"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAY,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGvF,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,eAAe,GAAG,iBAAiB,CAAA;CAC9C,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,wCAEX;IAED,IAAI,OAAO,WAEV;cAEwB,cAAc,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA+B1F"}
@@ -23,13 +23,14 @@ __export(src_exports, {
23
23
  CryptoWalletNftWitness: () => CryptoWalletNftWitness,
24
24
  CryptoWalletNftWitnessPlugin: () => CryptoWalletNftWitnessPlugin,
25
25
  checkIpfsUrl: () => checkIpfsUrl2,
26
+ contractHasFunctions: () => contractHasFunctions,
26
27
  default: () => src_default,
27
28
  getErc1155MetadataUri: () => getErc1155MetadataUri,
28
29
  getErc721MetadataUri: () => getErc721MetadataUri,
29
30
  getNftMetadataUri: () => getNftMetadataUri,
30
31
  getNftsOwnedByAddress: () => getNftsOwnedByAddress,
31
32
  getProviderFromEnv: () => getProviderFromEnv,
32
- hasFunctions: () => hasFunctions,
33
+ getProviderFromEnvInternal: () => getProviderFromEnvInternal,
33
34
  isErc1155: () => isErc1155,
34
35
  isErc721: () => isErc721,
35
36
  tokenTypes: () => tokenTypes
@@ -47,10 +48,28 @@ var import_eth_address = require("@xylabs/eth-address");
47
48
  var import_abstract_witness = require("@xyo-network/abstract-witness");
48
49
  var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
49
50
 
51
+ // src/lib/contractHasFunctions.ts
52
+ var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
53
+ try {
54
+ const bytecode = await provider.getCode(address, "latest");
55
+ for (let i = 0; i < functionNames.length; i++) {
56
+ const nameSig = contractInterface.getSighash(functionNames[i]).substring(2);
57
+ if (!bytecode.includes(nameSig)) {
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+ return false;
63
+ } catch (ex) {
64
+ const error = ex;
65
+ console.log(error);
66
+ return false;
67
+ }
68
+ };
69
+
50
70
  // src/lib/getNftsOwnedByAddress.ts
51
71
  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");
72
+ var import_axios2 = require("@xyo-network/axios");
54
73
  var import_open_zeppelin_typechain3 = require("@xyo-network/open-zeppelin-typechain");
55
74
 
56
75
  // src/lib/getInfuraProvider.ts
@@ -76,25 +95,14 @@ var import_open_zeppelin_typechain2 = require("@xyo-network/open-zeppelin-typech
76
95
 
77
96
  // src/lib/tokenTypes.ts
78
97
  var import_open_zeppelin_typechain = require("@xyo-network/open-zeppelin-typechain");
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"]);
98
+ var isErc1155 = async (provider, address) => {
99
+ return await contractHasFunctions(provider, address, import_open_zeppelin_typechain.ERC1155URIStorage__factory.createInterface(), ["uri"]);
84
100
  };
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;
91
- }
92
- return true;
93
- }
94
- return false;
101
+ var isErc721 = async (provider, address) => {
102
+ return await contractHasFunctions(provider, address, import_open_zeppelin_typechain.IERC721Metadata__factory.createInterface(), ["name", "symbol", "tokenURI"]);
95
103
  };
96
- var tokenTypes = async (contract) => {
97
- const [erc721, erc1155] = await Promise.all([isErc721(contract), isErc1155(contract)]);
104
+ var tokenTypes = async (provider, address) => {
105
+ const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)]);
98
106
  const result = [];
99
107
  if (erc721) {
100
108
  result.push("ERC721");
@@ -128,7 +136,7 @@ var getNftMetadata = async (contractAddress, provider, tokenId) => {
128
136
  const enumerable721 = import_open_zeppelin_typechain2.ERC721Enumerable__factory.connect(contractAddress, provider);
129
137
  const storage721 = import_open_zeppelin_typechain2.ERC721URIStorage__factory.connect(contractAddress, provider);
130
138
  const storage1155 = import_open_zeppelin_typechain2.ERC1155URIStorage__factory.connect(contractAddress, provider);
131
- const is1155 = await isErc1155(storage1155);
139
+ const is1155 = await isErc1155(provider, contractAddress);
132
140
  let uri1155;
133
141
  if (is1155) {
134
142
  try {
@@ -136,7 +144,7 @@ var getNftMetadata = async (contractAddress, provider, tokenId) => {
136
144
  } catch (ex) {
137
145
  }
138
146
  }
139
- const is721 = await isErc721(enumerable721);
147
+ const is721 = await isErc721(provider, contractAddress);
140
148
  let metadataUri;
141
149
  if (is721) {
142
150
  try {
@@ -158,6 +166,19 @@ var getNftMetadata = async (contractAddress, provider, tokenId) => {
158
166
  return [tokenMetadataUri, metadata];
159
167
  };
160
168
 
169
+ // src/lib/tryCall.ts
170
+ var tryCall = async (func, name) => {
171
+ try {
172
+ return await func();
173
+ } catch (ex) {
174
+ if (name) {
175
+ const error = ex;
176
+ console.log(`tryCall failed [${name}]: ${error.message}`);
177
+ }
178
+ return void 0;
179
+ }
180
+ };
181
+
161
182
  // src/lib/getNftsOwnedByAddress.ts
162
183
  var checkIpfsUrl2 = (urlToCheck, ipfsGateway2) => {
163
184
  const url = new URL(urlToCheck);
@@ -195,66 +216,54 @@ var getNftMetadataUri = async (address, tokenId) => {
195
216
  const results = await Promise.all([getErc721MetadataUri(address, tokenId), getErc1155MetadataUri(address, tokenId)]);
196
217
  return results[0][0] ?? results[1][0];
197
218
  };
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 = {
206
- query: `query Query {
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
- }
219
- }
220
- }
221
- }
219
+ var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 1e3, timeout = 5e3) => {
220
+ const endpoint = (0, import_assert2.assertEx)(process.env.QUICKNODE_API_URI, "No endpoint found");
221
+ const axios = new import_axios2.AxiosJson({ timeout });
222
+ const assets = [];
223
+ let done = false;
224
+ let currentPage = 0;
225
+ const id = Date.now();
226
+ while (!done && assets.length < maxNfts) {
227
+ const query = {
228
+ id,
229
+ jsonrpc: "2.0",
230
+ method: "qn_fetchNFTs",
231
+ params: [
232
+ {
233
+ omitFields: ["traits"],
234
+ page: currentPage + 1,
235
+ perPage: 10,
236
+ wallet: publicAddress
222
237
  }
223
- }
224
- }`,
225
- schema: import_api_graphql_plugin.GraphqlQuerySchema,
226
- variables: {}
227
- };
228
- const results = await witness.observe([query]);
229
- const witnessResult = (0, import_assert2.assertEx)(results.at(0), "ApiGraphqlWitness failed");
238
+ ]
239
+ };
240
+ const results = (await axios.post(endpoint, query)).data.result;
241
+ assets.push(...results.assets ?? []);
242
+ currentPage = results.pageNumber;
243
+ done = results.pageNumber === results.totalPages;
244
+ }
230
245
  const nftResult = await Promise.all(
231
246
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
232
- Object.values(witnessResult.result?.data?.ethereum?.walletByAddress?.walletNFTs?.edges ?? {}).map(async (nft) => {
247
+ assets.map(async (nft) => {
233
248
  try {
234
- const { contractAddress, tokenId, metadata, externalUrl } = nft.node.nft;
249
+ const { collectionAddress, collectionTokenId } = nft;
235
250
  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);
251
+ const types = await tokenTypes(provider, collectionAddress);
239
252
  if (types.includes("ERC1155")) {
240
- try {
241
- supply = (await supply1155.totalSupply(tokenId)).toHexString();
242
- } catch (ex) {
243
- }
253
+ const supply1155 = import_open_zeppelin_typechain3.ERC1155Supply__factory.connect(collectionAddress, provider);
254
+ supply = await tryCall(async () => (await supply1155.totalSupply(collectionTokenId)).toHexString()) ?? "0x01";
244
255
  }
245
256
  const fields = {
246
- address: contractAddress,
247
- chainId: (await provider.getNetwork()).chainId,
248
- metadata,
249
- metadataUri: externalUrl,
257
+ address: collectionAddress,
258
+ chainId: provider.network.chainId,
250
259
  supply,
251
- tokenId,
260
+ tokenId: collectionTokenId,
252
261
  type: types.at(0),
253
262
  types
254
263
  };
255
264
  if (!fields.metadataUri || !fields.metadata) {
256
- const [metadataUri, metadata2] = await getNftMetadata(contractAddress, provider, fields.tokenId);
257
- fields.metadata = metadata2;
265
+ const [metadataUri, metadata] = await getNftMetadata(collectionAddress, provider, fields.tokenId);
266
+ fields.metadata = metadata;
258
267
  fields.metadataUri = metadataUri;
259
268
  }
260
269
  return fields;
@@ -271,18 +280,27 @@ var getNftsOwnedByAddress = async (publicAddress, provider, maxNfts = 1e3, timeo
271
280
 
272
281
  // src/lib/getProvider.ts
273
282
  var import_providers2 = require("@ethersproject/providers");
274
- var getProviderFromEnv = (chainId = "homestead") => {
283
+ var getProviderFromEnvInternal = (chainId = 1) => {
284
+ console.log(`getProviderFromEnvInternal: ${chainId}`);
275
285
  const infuraWssUri = process.env.INFURA_WSS_URI;
276
- const infuraProvider = new import_providers2.InfuraProvider("homestead", {
286
+ const infuraProvider = new import_providers2.InfuraProvider(chainId, {
277
287
  projectId: process.env.INFURA_PROJECT_ID,
278
288
  projectSecret: process.env.INFURA_PROJECT_SECRET
279
289
  });
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;
290
+ const infuraGenericWebsocketProvider = infuraWssUri ? new import_providers2.WebSocketProvider(infuraWssUri, chainId) : void 0;
291
+ const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI;
292
+ const quickNodeWebSocketProvider = quickNodeWSSUri ? new import_providers2.WebSocketProvider(quickNodeWSSUri, chainId) : void 0;
293
+ const quickNodeHttpsUri = process.env.QUICKNODE_WSS_URI;
294
+ const quickRpcProvider = quickNodeHttpsUri ? new import_providers2.JsonRpcProvider(quickNodeHttpsUri, chainId) : void 0;
295
+ const provider = infuraProvider ?? quickNodeWebSocketProvider ?? infuraProvider ?? infuraGenericWebsocketProvider ?? quickRpcProvider;
284
296
  return provider;
285
297
  };
298
+ var providers = {};
299
+ var getProviderFromEnv = (chainId = 1) => {
300
+ console.log(`getProviderFromEnv: ${chainId}`);
301
+ providers[chainId] = providers[chainId] ?? getProviderFromEnvInternal(chainId);
302
+ return providers[chainId];
303
+ };
286
304
 
287
305
  // src/Witness.ts
288
306
  var schema = import_crypto_nft_payload_plugin.NftSchema;
@@ -293,32 +311,38 @@ var CryptoWalletNftWitness = class extends import_abstract_witness.AbstractWitne
293
311
  return this.params.provider;
294
312
  }
295
313
  get timeout() {
296
- return this.config.timeout ?? 2e3;
314
+ return this.config.timeout ?? 1e4;
297
315
  }
298
316
  async observeHandler(payloads) {
299
317
  await this.started("throw");
300
318
  const queries = payloads?.filter(import_crypto_nft_payload_plugin.isNftWitnessQuery) ?? [];
301
- const observations = await Promise.all(
302
- queries.map(async (query) => {
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")),
305
- "Failed to parse params.address"
306
- ).toString();
307
- const network = await this.provider.getNetwork();
308
- const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
309
- const maxNfts = query?.maxNfts || defaultMaxNfts;
310
- try {
311
- const nfts = await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
312
- const observation = nfts.map((nft) => {
313
- return { ...nft, schema };
314
- });
315
- return observation;
316
- } catch (error) {
317
- throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}`);
318
- }
319
- })
320
- );
321
- return observations.flat();
319
+ try {
320
+ const observations = await Promise.all(
321
+ queries.map(async (query) => {
322
+ const addressValue = (0, import_assert3.assertEx)(query?.address ?? this.config.address, "params.address is required");
323
+ const parsedAddressValue = import_eth_address.EthAddress.parse(addressValue);
324
+ const address = (0, import_assert3.assertEx)(parsedAddressValue?.toString(), "Failed to parse params.address");
325
+ const network = this.provider.network;
326
+ const chainId = (0, import_assert3.assertEx)(network.chainId, "params.chainId is required");
327
+ const maxNfts = query?.maxNfts || defaultMaxNfts;
328
+ try {
329
+ const nfts = await getNftsOwnedByAddress(address, this.provider, maxNfts, this.timeout);
330
+ const observation = nfts.map((nft) => {
331
+ return { ...nft, schema };
332
+ });
333
+ return observation;
334
+ } catch (ex) {
335
+ const error = ex;
336
+ throw Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`);
337
+ }
338
+ })
339
+ );
340
+ return observations.flat();
341
+ } catch (ex) {
342
+ const error = ex;
343
+ console.error(error);
344
+ return [];
345
+ }
322
346
  }
323
347
  };
324
348
 
@@ -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/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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,oCAA0B;AAC1B,2BAAiC;AACjC,+BAA8C;;;ACD9C,IAAAC,iBAAyB;AACzB,yBAA2B;AAC3B,8BAAgC;AAChC,uCAOO;;;ACVP,IAAAC,iBAAyB;AACzB,qBAAwB;AACxB,gCAAkH;AAElH,IAAAC,kCAAsG;;;ACLtG,uBAAyC;AACzC,oBAAyB;AAOzB,IAAI,WAAuC;AAEpC,IAAM,oBAAoB,MAAgB;AAC/C,MAAI;AAAU,WAAO;AACrB,QAAM,SAAS,wBAAwB;AACvC,aAAW,IAAI,gCAAe,aAAa,MAAM;AACjD,SAAO;AACT;AAMO,IAAM,0BAA0B,MAA4B;AACjE,QAAM,gBAAY,wBAAS,QAAQ,IAAI,mBAAmB,mCAAmC;AAC7F,QAAM,oBAAgB,wBAAS,QAAQ,IAAI,uBAAuB,uCAAuC;AACzG,SAAO,EAAE,WAAW,cAAc;AACpC;;;ACxBA,mBAA0B;AAE1B,IAAAC,kCAAiG;;;ACAjG,qCAAqE;AAE9D,IAAM,YAAY,OAAO,aAAuB;AACrD,SAAO,MAAM,aAAa,UAAU,0DAA2B,gBAAgB,GAAG,CAAC,KAAK,CAAC;AAC3F;AAEO,IAAM,WAAW,OAAO,aAAuB;AACpD,SAAO,MAAM,aAAa,UAAU,wDAAyB,gBAAgB,GAAG,CAAC,QAAQ,UAAU,UAAU,CAAC;AAChH;AAEO,IAAM,eAAe,OAAO,UAAoB,mBAA8B,kBAA4B;AAC/G,QAAM,WAAW,MAAM,SAAS,SAAS,QAAQ,SAAS,OAAO;AACjE,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,UAAU,kBAAkB,WAAW,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC;AAC1E,QAAI,CAAC,SAAS,SAAS,OAAO,GAAG;AAC/B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,IAAM,aAAa,OAAO,aAAuB;AACtD,QAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI,CAAC,SAAS,QAAQ,GAAG,UAAU,QAAQ,CAAC,CAAC;AACrF,QAAM,SAAsB,CAAC;AAC7B,MAAI,QAAQ;AACV,WAAO,KAAK,QAAQ;AAAA,EACtB;AACA,MAAI,SAAS;AACX,WAAO,KAAK,SAAS;AAAA,EACvB;AACA,SAAO;AACT;;;AD5BA,IAAM,cAAc;AAQb,IAAM,eAAe,CAAC,YAAoBC,iBAAwB;AACvE,QAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,MAAI,WAAW,IAAI;AACnB,MAAI,OAAO,IAAI;AACf,MAAI,OAAO,IAAI;AACf,QAAM,QAAQ,IAAI;AAClB,MAAI,aAAa,SAAS;AACxB,eAAW;AACX,WAAOA;AACP,WAAO,IAAI,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI;AACpE,UAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,WAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,EAClD,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,iBAAiB,OAI5B,iBAIA,UAMA,YAC2D;AAC3D,QAAM,QAAQ,IAAI,uBAAU,EAAE,SAAS,IAAK,CAAC;AAC7C,QAAM,gBAAgB,0DAA0B,QAAQ,iBAAiB,QAAQ;AACjF,QAAM,aAAa,0DAA0B,QAAQ,iBAAiB,QAAQ;AAC9E,QAAM,cAAc,2DAA2B,QAAQ,iBAAiB,QAAQ;AAEhF,QAAM,SAAS,MAAM,UAAU,WAAW;AAC1C,MAAI;AACJ,MAAI,QAAQ;AACV,QAAI;AACF,gBAAU,MAAM,YAAY,IAAI,OAAO;AAAA,IACzC,SAAS,IAAI;AAAA,IAGb;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,SAAS,aAAa;AAC1C,MAAI;AACJ,MAAI,OAAO;AACT,QAAI;AACF,oBAAc,MAAM,cAAc,SAAS,OAAO;AAAA,IACpD,SAAS,IAAI;AACX,UAAI;AACF,sBAAc,MAAM,WAAW,SAAS,OAAO;AAAA,MACjD,SAASC,KAAI;AAAA,MAGb;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,eAAe;AAExC,QAAM,qBAAqB,mBAAmB,aAAa,kBAAkB,WAAW,IAAI;AAC5F,MAAI,WAAoC;AACxC,MAAI;AACF,eAAW,sBAAsB,MAAM,MAAM,IAAI,kBAAkB,GAAG,OAAO;AAAA,EAC/E,SAAS,IAAI;AAAA,EAGb;AAEA,SAAO,CAAC,kBAAkB,QAAQ;AACpC;;;AF1EO,IAAMC,gBAAe,CAAC,YAAoBC,iBAAwB;AACvE,QAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,MAAI,WAAW,IAAI;AACnB,MAAI,OAAO,IAAI;AACf,MAAI,OAAO,IAAI;AACf,QAAM,QAAQ,IAAI;AAClB,MAAI,aAAa,SAAS;AACxB,eAAW;AACX,WAAOA;AACP,WAAO,IAAI,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI;AACpE,UAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,WAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,EAClD,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,uBAAuB,OAAO,SAAiB,YAAsE;AAChI,MAAI;AACF,UAAM,WAAW,gDAAgB,QAAQ,SAAS,kBAAkB,CAAC;AACrE,WAAO,CAAC,MAAM,SAAS,SAAS,OAAO,GAAG,MAAS;AAAA,EACrD,SAAS,IAAI;AACX,WAAO,CAAC,QAAW,EAAW;AAAA,EAChC;AACF;AAEO,IAAM,wBAAwB,OAAO,SAAiB,YAAsE;AACjI,MAAI;AACF,UAAM,WAAW,iDAAiB,QAAQ,SAAS,kBAAkB,CAAC;AACtE,WAAO,CAAC,MAAM,SAAS,IAAI,OAAO,GAAG,MAAS;AAAA,EAChD,SAAS,IAAI;AACX,WAAO,CAAC,QAAW,EAAW;AAAA,EAChC;AACF;AAEO,IAAM,oBAAoB,OAAO,SAAiB,YAAoB;AAC3E,QAAM,UAAU,MAAM,QAAQ,IAAI,CAAC,qBAAqB,SAAS,OAAO,GAAG,sBAAsB,SAAS,OAAO,CAAC,CAAC;AACnH,SAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;AACtC;AAUO,IAAM,wBAAwB,OAEnC,eAEA,UAEA,UAAU,KAEV,UAAU,QACmB;AAC7B,QAAM,WAAW;AACjB,QAAM,UAAU,MAAM,4CAAkB,OAAO;AAAA,IAC7C,SAAS,uBAAQ,WAAW;AAAA,IAC5B,QAAQ,EAAE,QAAQ,yDAA+B,QAAQ;AAAA,IACzD;AAAA,EACF,CAAC;AACD,QAAM,QAAsB;AAAA,IAC1B,OAAO;AAAA;AAAA,oCAEyB,aAAa;AAAA,+BAClB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBlC,QAAQ;AAAA,IACR,WAAW,CAAC;AAAA,EACd;AAEA,QAAM,UAAW,MAAM,QAAQ,QAAQ,CAAC,KAAK,CAAC;AAC9C,QAAM,oBAAgB,yBAAS,QAAQ,GAAG,CAAC,GAAG,0BAA0B;AAExE,QAAM,YAAY,MAAM,QAAQ;AAAA;AAAA,IAE9B,OAAO,OAAO,cAAc,QAAQ,MAAM,UAAU,iBAAiB,YAAY,SAAS,CAAC,CAAC,EAAE,IAAI,OAAO,QAAa;AACpH,UAAI;AACF,cAAM,EAAE,iBAAiB,SAAS,UAAU,YAAY,IAAI,IAAI,KAAK;AACrE,YAAI,SAAS;AACb,cAAM,aAAa,uDAAuB,QAAQ,iBAAiB,QAAQ;AAC3E,cAAM,cAAc,2DAA2B,QAAQ,iBAAiB,QAAQ;AAChF,cAAM,QAAQ,MAAM,WAAW,WAAW;AAC1C,YAAI,MAAM,SAAS,SAAS,GAAG;AAC7B,cAAI;AACF,sBAAU,MAAM,WAAW,YAAY,OAAO,GAAG,YAAY;AAAA,UAC/D,SAAS,IAAI;AAAA,UAGb;AAAA,QACF;AACA,cAAM,SAAwB;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU,MAAM,SAAS,WAAW,GAAG;AAAA,UACvC;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,UACA,MAAM,MAAM,GAAG,CAAC;AAAA,UAChB;AAAA,QACF;AACA,YAAI,CAAC,OAAO,eAAe,CAAC,OAAO,UAAU;AAC3C,gBAAM,CAAC,aAAaC,SAAQ,IAAI,MAAM,eAAe,iBAAiB,UAAU,OAAO,OAAO;AAC9F,iBAAO,WAAWA;AAClB,iBAAO,cAAc;AAAA,QACvB;AACA,eAAO;AAAA,MACT,SAAS,IAAI;AACX,cAAM,QAAQ;AACd,gBAAQ,MAAM,UAAU,MAAM,OAAO,EAAE;AACvC,gBAAQ,MAAM,GAAG,MAAM,KAAK,EAAE;AAC9B,cAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AIvJA,IAAAC,oBAAkD;AAE3C,IAAM,qBAAqB,CAAC,UAA2B,gBAAgB;AAC5E,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,iBAAiB,IAAI,iCAAe,aAAa;AAAA,IACrD,WAAW,QAAQ,IAAI;AAAA,IACvB,eAAe,QAAQ,IAAI;AAAA,EAC7B,CAAC;AAED,QAAM,0BAA0B,eAAe,IAAI,oCAAkB,cAAc,OAAO,IAAI;AAE9F,QAAM,eAAe,QAAQ,IAAI;AACjC,QAAM,oBAAoB,eAAe,IAAI,oCAAkB,cAAc,OAAO,IAAI;AAExF,QAAM,WAAW,2BAA2B,kBAAkB,2BAA2B,qBAAqB;AAC9G,SAAO;AACT;;;ALQA,IAAM,SAAS;AAEf,IAAM,iBAAiB;AAEhB,IAAM,yBAAN,cAAkH,wCAIvH;AAAA,EACA,OAAgB,gBAAgB,CAAC,uDAAsB;AAAA,EAEvD,IAAI,WAAW;AACb,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EAEA,MAAyB,eAAe,UAAkD;AACxF,UAAM,KAAK,QAAQ,OAAO;AAC1B,UAAM,UAAU,UAAU,OAAO,kDAAiB,KAAK,CAAC;AACxD,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,QAAQ,IAAI,OAAO,UAAU;AAC3B,cAAM,cAAU;AAAA,UACd,8BAAW,UAAM,yBAAS,OAAO,WAAW,KAAK,OAAO,SAAS,4BAA4B,CAAC;AAAA,UAC9F;AAAA,QACF,EAAE,SAAS;AACX,cAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,cAAM,cAAU,yBAAS,QAAQ,SAAS,4BAA4B;AACtE,cAAM,UAAU,OAAO,WAAW;AAClC,YAAI;AACF,gBAAM,OAAO,MAAM,sBAAsB,SAAS,KAAK,UAAU,SAAS,KAAK,OAAO;AACtF,gBAAM,cAAc,KAAK,IAAa,CAAC,QAAQ;AAC7C,mBAAO,EAAE,GAAG,KAAK,OAAO;AAAA,UAC1B,CAAC;AACD,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,gBAAM,IAAI,MAAM,kCAAkC,OAAO,eAAe,OAAO,EAAE;AAAA,QACnF;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,aAAa,KAAK;AAAA,EAC3B;AACF;;;AD9DO,IAAM,+BAA+B,UAC1C;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,2CAAS,GAAG,EAAE,GAAG,QAAQ,sCAAiB;AAAA,EACzD;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,uBAAuB,OAAO,MAAM;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ADPF,IAAO,cAAQ;","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"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getInfuraProvider.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.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 { JsonRpcProvider, Provider, WebSocketProvider } 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: JsonRpcProvider | WebSocketProvider\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 ?? 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 = 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 { JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xyo-network/axios'\nimport { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\n\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\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 QuickNodeAsset {\n chain: string\n collectionAddress: string\n collectionName: string\n collectionTokenId: string\n description: string\n imageUrl: string\n name: string\n network: string\n}\n\ninterface QuickNodeFetchNftsResult {\n assets: QuickNodeAsset[]\n id: number\n jsonrpc: string\n owner: string\n pageNumber: number\n totalItems: number\n totalPages: number\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: JsonRpcProvider | WebSocketProvider,\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 = 5000,\n): Promise<NftInfoFields[]> => {\n const endpoint = assertEx(process.env.QUICKNODE_API_URI, 'No endpoint found')\n\n const axios = new AxiosJson({ timeout })\n\n const assets: QuickNodeAsset[] = []\n let done = false\n let currentPage = 0\n\n const id = Date.now()\n\n while (!done && assets.length < maxNfts) {\n const query = {\n id,\n jsonrpc: '2.0',\n method: 'qn_fetchNFTs',\n params: [\n {\n omitFields: ['traits'],\n page: currentPage + 1,\n perPage: 10,\n wallet: publicAddress,\n },\n ],\n }\n const results = (await axios.post<{ result: QuickNodeFetchNftsResult }>(endpoint, query)).data.result\n assets.push(...(results.assets ?? []))\n currentPage = results.pageNumber\n done = results.pageNumber === results.totalPages\n }\n\n const nftResult = await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n assets.map(async (nft) => {\n try {\n const { collectionAddress, collectionTokenId } = nft\n let supply = '0x01'\n const types = await tokenTypes(provider, collectionAddress)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(collectionAddress, provider)\n supply = (await tryCall(async () => (await supply1155.totalSupply(collectionTokenId)).toHexString())) ?? '0x01'\n }\n const fields: NftInfoFields = {\n address: collectionAddress,\n chainId: provider.network.chainId,\n supply,\n tokenId: collectionTokenId,\n type: types.at(0),\n types,\n }\n if (!fields.metadataUri || !fields.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(collectionAddress, 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 { JsonRpcProvider, Provider, WebSocketProvider } 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: JsonRpcProvider | WebSocketProvider,\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","import { InfuraProvider, JsonRpcProvider, WebSocketProvider } from '@ethersproject/providers'\n\nexport const getProviderFromEnvInternal = (chainId: number = 0x01) => {\n console.log(`getProviderFromEnvInternal: ${chainId}`)\n const infuraWssUri = process.env.INFURA_WSS_URI\n const infuraProvider = new InfuraProvider(chainId, {\n projectId: process.env.INFURA_PROJECT_ID,\n projectSecret: process.env.INFURA_PROJECT_SECRET,\n })\n\n const infuraGenericWebsocketProvider = infuraWssUri ? new WebSocketProvider(infuraWssUri, chainId) : undefined\n\n const quickNodeWSSUri = process.env.QUICKNODE_WSS_URI\n const quickNodeWebSocketProvider = quickNodeWSSUri ? new WebSocketProvider(quickNodeWSSUri, chainId) : undefined\n\n const quickNodeHttpsUri = process.env.QUICKNODE_WSS_URI\n const quickRpcProvider = quickNodeHttpsUri ? new JsonRpcProvider(quickNodeHttpsUri, chainId) : undefined\n\n const provider = infuraProvider ?? quickNodeWebSocketProvider ?? infuraProvider ?? infuraGenericWebsocketProvider ?? quickRpcProvider\n return provider\n}\n\nconst providers: Record<number, JsonRpcProvider | WebSocketProvider> = {}\n\nexport const getProviderFromEnv = (chainId: number = 0x01) => {\n console.log(`getProviderFromEnv: ${chainId}`)\n providers[chainId] = providers[chainId] ?? getProviderFromEnvInternal(chainId)\n return providers[chainId]\n}\n"],"mappings":"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","names":["checkIpfsUrl","import_crypto_nft_payload_plugin","import_assert","import_assert","import_axios","import_open_zeppelin_typechain","import_open_zeppelin_typechain","ipfsGateway","ex","checkIpfsUrl","ipfsGateway","import_providers"]}