@xyo-network/crypto-nft-witness-wallet-plugin 2.99.5 → 3.0.0

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 (248) hide show
  1. package/dist/browser/index.d.ts +31 -4
  2. package/dist/browser/index.mjs +137 -171
  3. package/dist/browser/index.mjs.map +1 -1
  4. package/dist/neutral/index.d.ts +31 -4
  5. package/dist/neutral/index.mjs +137 -171
  6. package/dist/neutral/index.mjs.map +1 -1
  7. package/dist/node/index.d.ts +31 -4
  8. package/dist/node/index.mjs +142 -181
  9. package/dist/node/index.mjs.map +1 -1
  10. package/package.json +41 -60
  11. package/src/index.ts +1 -1
  12. package/dist/browser/Plugin.d.cts +0 -4
  13. package/dist/browser/Plugin.d.cts.map +0 -1
  14. package/dist/browser/Plugin.d.mts +0 -4
  15. package/dist/browser/Plugin.d.mts.map +0 -1
  16. package/dist/browser/Plugin.d.ts +0 -4
  17. package/dist/browser/Plugin.d.ts.map +0 -1
  18. package/dist/browser/Witness.d.cts +0 -12
  19. package/dist/browser/Witness.d.cts.map +0 -1
  20. package/dist/browser/Witness.d.mts +0 -12
  21. package/dist/browser/Witness.d.mts.map +0 -1
  22. package/dist/browser/Witness.d.ts +0 -12
  23. package/dist/browser/Witness.d.ts.map +0 -1
  24. package/dist/browser/index.cjs +0 -389
  25. package/dist/browser/index.cjs.map +0 -1
  26. package/dist/browser/index.d.cts +0 -4
  27. package/dist/browser/index.d.cts.map +0 -1
  28. package/dist/browser/index.d.mts +0 -4
  29. package/dist/browser/index.d.mts.map +0 -1
  30. package/dist/browser/index.d.ts.map +0 -1
  31. package/dist/browser/lib/contractHasFunctions.d.cts +0 -3
  32. package/dist/browser/lib/contractHasFunctions.d.cts.map +0 -1
  33. package/dist/browser/lib/contractHasFunctions.d.mts +0 -3
  34. package/dist/browser/lib/contractHasFunctions.d.mts.map +0 -1
  35. package/dist/browser/lib/contractHasFunctions.d.ts +0 -3
  36. package/dist/browser/lib/contractHasFunctions.d.ts.map +0 -1
  37. package/dist/browser/lib/getAssetsFromWallet.d.cts +0 -13
  38. package/dist/browser/lib/getAssetsFromWallet.d.cts.map +0 -1
  39. package/dist/browser/lib/getAssetsFromWallet.d.mts +0 -13
  40. package/dist/browser/lib/getAssetsFromWallet.d.mts.map +0 -1
  41. package/dist/browser/lib/getAssetsFromWallet.d.ts +0 -13
  42. package/dist/browser/lib/getAssetsFromWallet.d.ts.map +0 -1
  43. package/dist/browser/lib/getNftCollectionMetadata.d.cts +0 -4
  44. package/dist/browser/lib/getNftCollectionMetadata.d.cts.map +0 -1
  45. package/dist/browser/lib/getNftCollectionMetadata.d.mts +0 -4
  46. package/dist/browser/lib/getNftCollectionMetadata.d.mts.map +0 -1
  47. package/dist/browser/lib/getNftCollectionMetadata.d.ts +0 -4
  48. package/dist/browser/lib/getNftCollectionMetadata.d.ts.map +0 -1
  49. package/dist/browser/lib/getNftMetadata.d.cts +0 -4
  50. package/dist/browser/lib/getNftMetadata.d.cts.map +0 -1
  51. package/dist/browser/lib/getNftMetadata.d.mts +0 -4
  52. package/dist/browser/lib/getNftMetadata.d.mts.map +0 -1
  53. package/dist/browser/lib/getNftMetadata.d.ts +0 -4
  54. package/dist/browser/lib/getNftMetadata.d.ts.map +0 -1
  55. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.cts +0 -17
  56. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.cts.map +0 -1
  57. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.mts +0 -17
  58. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.mts.map +0 -1
  59. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.ts +0 -17
  60. package/dist/browser/lib/getNftsFromWalletFromOpenSea.d.ts.map +0 -1
  61. package/dist/browser/lib/getNftsOwnedByAddress.d.cts +0 -9
  62. package/dist/browser/lib/getNftsOwnedByAddress.d.cts.map +0 -1
  63. package/dist/browser/lib/getNftsOwnedByAddress.d.mts +0 -9
  64. package/dist/browser/lib/getNftsOwnedByAddress.d.mts.map +0 -1
  65. package/dist/browser/lib/getNftsOwnedByAddress.d.ts +0 -9
  66. package/dist/browser/lib/getNftsOwnedByAddress.d.ts.map +0 -1
  67. package/dist/browser/lib/getProvider.d.cts +0 -3
  68. package/dist/browser/lib/getProvider.d.cts.map +0 -1
  69. package/dist/browser/lib/getProvider.d.mts +0 -3
  70. package/dist/browser/lib/getProvider.d.mts.map +0 -1
  71. package/dist/browser/lib/getProvider.d.ts +0 -3
  72. package/dist/browser/lib/getProvider.d.ts.map +0 -1
  73. package/dist/browser/lib/index.d.cts +0 -4
  74. package/dist/browser/lib/index.d.cts.map +0 -1
  75. package/dist/browser/lib/index.d.mts +0 -4
  76. package/dist/browser/lib/index.d.mts.map +0 -1
  77. package/dist/browser/lib/index.d.ts +0 -4
  78. package/dist/browser/lib/index.d.ts.map +0 -1
  79. package/dist/browser/lib/tokenTypes.d.cts +0 -6
  80. package/dist/browser/lib/tokenTypes.d.cts.map +0 -1
  81. package/dist/browser/lib/tokenTypes.d.mts +0 -6
  82. package/dist/browser/lib/tokenTypes.d.mts.map +0 -1
  83. package/dist/browser/lib/tokenTypes.d.ts +0 -6
  84. package/dist/browser/lib/tokenTypes.d.ts.map +0 -1
  85. package/dist/browser/lib/tryCall.d.cts +0 -2
  86. package/dist/browser/lib/tryCall.d.cts.map +0 -1
  87. package/dist/browser/lib/tryCall.d.mts +0 -2
  88. package/dist/browser/lib/tryCall.d.mts.map +0 -1
  89. package/dist/browser/lib/tryCall.d.ts +0 -2
  90. package/dist/browser/lib/tryCall.d.ts.map +0 -1
  91. package/dist/neutral/Plugin.d.cts +0 -4
  92. package/dist/neutral/Plugin.d.cts.map +0 -1
  93. package/dist/neutral/Plugin.d.mts +0 -4
  94. package/dist/neutral/Plugin.d.mts.map +0 -1
  95. package/dist/neutral/Plugin.d.ts +0 -4
  96. package/dist/neutral/Plugin.d.ts.map +0 -1
  97. package/dist/neutral/Witness.d.cts +0 -12
  98. package/dist/neutral/Witness.d.cts.map +0 -1
  99. package/dist/neutral/Witness.d.mts +0 -12
  100. package/dist/neutral/Witness.d.mts.map +0 -1
  101. package/dist/neutral/Witness.d.ts +0 -12
  102. package/dist/neutral/Witness.d.ts.map +0 -1
  103. package/dist/neutral/index.cjs +0 -389
  104. package/dist/neutral/index.cjs.map +0 -1
  105. package/dist/neutral/index.d.cts +0 -4
  106. package/dist/neutral/index.d.cts.map +0 -1
  107. package/dist/neutral/index.d.mts +0 -4
  108. package/dist/neutral/index.d.mts.map +0 -1
  109. package/dist/neutral/index.d.ts.map +0 -1
  110. package/dist/neutral/lib/contractHasFunctions.d.cts +0 -3
  111. package/dist/neutral/lib/contractHasFunctions.d.cts.map +0 -1
  112. package/dist/neutral/lib/contractHasFunctions.d.mts +0 -3
  113. package/dist/neutral/lib/contractHasFunctions.d.mts.map +0 -1
  114. package/dist/neutral/lib/contractHasFunctions.d.ts +0 -3
  115. package/dist/neutral/lib/contractHasFunctions.d.ts.map +0 -1
  116. package/dist/neutral/lib/getAssetsFromWallet.d.cts +0 -13
  117. package/dist/neutral/lib/getAssetsFromWallet.d.cts.map +0 -1
  118. package/dist/neutral/lib/getAssetsFromWallet.d.mts +0 -13
  119. package/dist/neutral/lib/getAssetsFromWallet.d.mts.map +0 -1
  120. package/dist/neutral/lib/getAssetsFromWallet.d.ts +0 -13
  121. package/dist/neutral/lib/getAssetsFromWallet.d.ts.map +0 -1
  122. package/dist/neutral/lib/getNftCollectionMetadata.d.cts +0 -4
  123. package/dist/neutral/lib/getNftCollectionMetadata.d.cts.map +0 -1
  124. package/dist/neutral/lib/getNftCollectionMetadata.d.mts +0 -4
  125. package/dist/neutral/lib/getNftCollectionMetadata.d.mts.map +0 -1
  126. package/dist/neutral/lib/getNftCollectionMetadata.d.ts +0 -4
  127. package/dist/neutral/lib/getNftCollectionMetadata.d.ts.map +0 -1
  128. package/dist/neutral/lib/getNftMetadata.d.cts +0 -4
  129. package/dist/neutral/lib/getNftMetadata.d.cts.map +0 -1
  130. package/dist/neutral/lib/getNftMetadata.d.mts +0 -4
  131. package/dist/neutral/lib/getNftMetadata.d.mts.map +0 -1
  132. package/dist/neutral/lib/getNftMetadata.d.ts +0 -4
  133. package/dist/neutral/lib/getNftMetadata.d.ts.map +0 -1
  134. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.cts +0 -17
  135. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.cts.map +0 -1
  136. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.mts +0 -17
  137. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.mts.map +0 -1
  138. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.ts +0 -17
  139. package/dist/neutral/lib/getNftsFromWalletFromOpenSea.d.ts.map +0 -1
  140. package/dist/neutral/lib/getNftsOwnedByAddress.d.cts +0 -9
  141. package/dist/neutral/lib/getNftsOwnedByAddress.d.cts.map +0 -1
  142. package/dist/neutral/lib/getNftsOwnedByAddress.d.mts +0 -9
  143. package/dist/neutral/lib/getNftsOwnedByAddress.d.mts.map +0 -1
  144. package/dist/neutral/lib/getNftsOwnedByAddress.d.ts +0 -9
  145. package/dist/neutral/lib/getNftsOwnedByAddress.d.ts.map +0 -1
  146. package/dist/neutral/lib/getProvider.d.cts +0 -3
  147. package/dist/neutral/lib/getProvider.d.cts.map +0 -1
  148. package/dist/neutral/lib/getProvider.d.mts +0 -3
  149. package/dist/neutral/lib/getProvider.d.mts.map +0 -1
  150. package/dist/neutral/lib/getProvider.d.ts +0 -3
  151. package/dist/neutral/lib/getProvider.d.ts.map +0 -1
  152. package/dist/neutral/lib/index.d.cts +0 -4
  153. package/dist/neutral/lib/index.d.cts.map +0 -1
  154. package/dist/neutral/lib/index.d.mts +0 -4
  155. package/dist/neutral/lib/index.d.mts.map +0 -1
  156. package/dist/neutral/lib/index.d.ts +0 -4
  157. package/dist/neutral/lib/index.d.ts.map +0 -1
  158. package/dist/neutral/lib/tokenTypes.d.cts +0 -6
  159. package/dist/neutral/lib/tokenTypes.d.cts.map +0 -1
  160. package/dist/neutral/lib/tokenTypes.d.mts +0 -6
  161. package/dist/neutral/lib/tokenTypes.d.mts.map +0 -1
  162. package/dist/neutral/lib/tokenTypes.d.ts +0 -6
  163. package/dist/neutral/lib/tokenTypes.d.ts.map +0 -1
  164. package/dist/neutral/lib/tryCall.d.cts +0 -2
  165. package/dist/neutral/lib/tryCall.d.cts.map +0 -1
  166. package/dist/neutral/lib/tryCall.d.mts +0 -2
  167. package/dist/neutral/lib/tryCall.d.mts.map +0 -1
  168. package/dist/neutral/lib/tryCall.d.ts +0 -2
  169. package/dist/neutral/lib/tryCall.d.ts.map +0 -1
  170. package/dist/node/Plugin.d.cts +0 -4
  171. package/dist/node/Plugin.d.cts.map +0 -1
  172. package/dist/node/Plugin.d.mts +0 -4
  173. package/dist/node/Plugin.d.mts.map +0 -1
  174. package/dist/node/Plugin.d.ts +0 -4
  175. package/dist/node/Plugin.d.ts.map +0 -1
  176. package/dist/node/Witness.d.cts +0 -12
  177. package/dist/node/Witness.d.cts.map +0 -1
  178. package/dist/node/Witness.d.mts +0 -12
  179. package/dist/node/Witness.d.mts.map +0 -1
  180. package/dist/node/Witness.d.ts +0 -12
  181. package/dist/node/Witness.d.ts.map +0 -1
  182. package/dist/node/index.cjs +0 -408
  183. package/dist/node/index.cjs.map +0 -1
  184. package/dist/node/index.d.cts +0 -4
  185. package/dist/node/index.d.cts.map +0 -1
  186. package/dist/node/index.d.mts +0 -4
  187. package/dist/node/index.d.mts.map +0 -1
  188. package/dist/node/index.d.ts.map +0 -1
  189. package/dist/node/lib/contractHasFunctions.d.cts +0 -3
  190. package/dist/node/lib/contractHasFunctions.d.cts.map +0 -1
  191. package/dist/node/lib/contractHasFunctions.d.mts +0 -3
  192. package/dist/node/lib/contractHasFunctions.d.mts.map +0 -1
  193. package/dist/node/lib/contractHasFunctions.d.ts +0 -3
  194. package/dist/node/lib/contractHasFunctions.d.ts.map +0 -1
  195. package/dist/node/lib/getAssetsFromWallet.d.cts +0 -13
  196. package/dist/node/lib/getAssetsFromWallet.d.cts.map +0 -1
  197. package/dist/node/lib/getAssetsFromWallet.d.mts +0 -13
  198. package/dist/node/lib/getAssetsFromWallet.d.mts.map +0 -1
  199. package/dist/node/lib/getAssetsFromWallet.d.ts +0 -13
  200. package/dist/node/lib/getAssetsFromWallet.d.ts.map +0 -1
  201. package/dist/node/lib/getNftCollectionMetadata.d.cts +0 -4
  202. package/dist/node/lib/getNftCollectionMetadata.d.cts.map +0 -1
  203. package/dist/node/lib/getNftCollectionMetadata.d.mts +0 -4
  204. package/dist/node/lib/getNftCollectionMetadata.d.mts.map +0 -1
  205. package/dist/node/lib/getNftCollectionMetadata.d.ts +0 -4
  206. package/dist/node/lib/getNftCollectionMetadata.d.ts.map +0 -1
  207. package/dist/node/lib/getNftMetadata.d.cts +0 -4
  208. package/dist/node/lib/getNftMetadata.d.cts.map +0 -1
  209. package/dist/node/lib/getNftMetadata.d.mts +0 -4
  210. package/dist/node/lib/getNftMetadata.d.mts.map +0 -1
  211. package/dist/node/lib/getNftMetadata.d.ts +0 -4
  212. package/dist/node/lib/getNftMetadata.d.ts.map +0 -1
  213. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.cts +0 -17
  214. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.cts.map +0 -1
  215. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.mts +0 -17
  216. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.mts.map +0 -1
  217. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.ts +0 -17
  218. package/dist/node/lib/getNftsFromWalletFromOpenSea.d.ts.map +0 -1
  219. package/dist/node/lib/getNftsOwnedByAddress.d.cts +0 -9
  220. package/dist/node/lib/getNftsOwnedByAddress.d.cts.map +0 -1
  221. package/dist/node/lib/getNftsOwnedByAddress.d.mts +0 -9
  222. package/dist/node/lib/getNftsOwnedByAddress.d.mts.map +0 -1
  223. package/dist/node/lib/getNftsOwnedByAddress.d.ts +0 -9
  224. package/dist/node/lib/getNftsOwnedByAddress.d.ts.map +0 -1
  225. package/dist/node/lib/getProvider.d.cts +0 -3
  226. package/dist/node/lib/getProvider.d.cts.map +0 -1
  227. package/dist/node/lib/getProvider.d.mts +0 -3
  228. package/dist/node/lib/getProvider.d.mts.map +0 -1
  229. package/dist/node/lib/getProvider.d.ts +0 -3
  230. package/dist/node/lib/getProvider.d.ts.map +0 -1
  231. package/dist/node/lib/index.d.cts +0 -4
  232. package/dist/node/lib/index.d.cts.map +0 -1
  233. package/dist/node/lib/index.d.mts +0 -4
  234. package/dist/node/lib/index.d.mts.map +0 -1
  235. package/dist/node/lib/index.d.ts +0 -4
  236. package/dist/node/lib/index.d.ts.map +0 -1
  237. package/dist/node/lib/tokenTypes.d.cts +0 -6
  238. package/dist/node/lib/tokenTypes.d.cts.map +0 -1
  239. package/dist/node/lib/tokenTypes.d.mts +0 -6
  240. package/dist/node/lib/tokenTypes.d.mts.map +0 -1
  241. package/dist/node/lib/tokenTypes.d.ts +0 -6
  242. package/dist/node/lib/tokenTypes.d.ts.map +0 -1
  243. package/dist/node/lib/tryCall.d.cts +0 -2
  244. package/dist/node/lib/tryCall.d.cts.map +0 -1
  245. package/dist/node/lib/tryCall.d.mts +0 -2
  246. package/dist/node/lib/tryCall.d.mts.map +0 -1
  247. package/dist/node/lib/tryCall.d.ts +0 -2
  248. package/dist/node/lib/tryCall.d.ts.map +0 -1
@@ -1,19 +1,10 @@
1
- var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
-
9
1
  // src/lib/contractHasFunctions.ts
10
2
  import { assertEx } from "@xylabs/assert";
11
- var contractHasFunctions = /* @__PURE__ */ __name(async (provider, address, contractInterface, functionNames) => {
12
- var _a;
3
+ var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
13
4
  try {
14
5
  const bytecode = await provider.getCode(address, "latest");
15
6
  for (const functionName of functionNames) {
16
- const selector = assertEx((_a = contractInterface.getFunction(functionName)) == null ? void 0 : _a.selector, () => "Function not found on interface");
7
+ const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => "Function not found on interface");
17
8
  if (!bytecode.includes(selector.slice(2))) {
18
9
  return false;
19
10
  }
@@ -25,7 +16,7 @@ var contractHasFunctions = /* @__PURE__ */ __name(async (provider, address, cont
25
16
  console.log(error);
26
17
  return false;
27
18
  }
28
- }, "contractHasFunctions");
19
+ };
29
20
 
30
21
  // src/lib/getNftsOwnedByAddress.ts
31
22
  import { isHexZero } from "@xylabs/hex";
@@ -42,23 +33,14 @@ import parseDataUrl from "parse-data-url";
42
33
 
43
34
  // src/lib/tokenTypes.ts
44
35
  import { ERC1155URIStorage__factory, IERC721Metadata__factory } from "@xyo-network/open-zeppelin-typechain";
45
- var isErc1155 = /* @__PURE__ */ __name(async (provider, address) => {
46
- return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), [
47
- "uri"
48
- ]);
49
- }, "isErc1155");
50
- var isErc721 = /* @__PURE__ */ __name(async (provider, address) => {
51
- return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), [
52
- "name",
53
- "symbol",
54
- "tokenURI"
55
- ]);
56
- }, "isErc721");
57
- var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
58
- const [erc721, erc1155] = await Promise.all([
59
- isErc721(provider, address),
60
- isErc1155(provider, address)
61
- ]);
36
+ var isErc1155 = async (provider, address) => {
37
+ return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ["uri"]);
38
+ };
39
+ var isErc721 = async (provider, address) => {
40
+ return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ["name", "symbol", "tokenURI"]);
41
+ };
42
+ var tokenTypes = async (provider, address) => {
43
+ const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)]);
62
44
  const result = [];
63
45
  if (erc721) {
64
46
  result.push("ERC721");
@@ -67,11 +49,11 @@ var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
67
49
  result.push("ERC1155");
68
50
  }
69
51
  return result;
70
- }, "tokenTypes");
52
+ };
71
53
 
72
54
  // src/lib/getNftMetadata.ts
73
55
  var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
74
- var getNftMetadata = /* @__PURE__ */ __name(async (contractAddress, provider, tokenId, load = false, defaultUri) => {
56
+ var getNftMetadata = async (contractAddress, provider, tokenId, load = false, defaultUri) => {
75
57
  const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider);
76
58
  const storage1155 = ERC1155URIStorage__factory2.connect(contractAddress, provider);
77
59
  let uri721 = void 0;
@@ -95,7 +77,7 @@ var getNftMetadata = /* @__PURE__ */ __name(async (contractAddress, provider, to
95
77
  const tokenMetadataUri = uri721 || uri1155 || defaultUri;
96
78
  let metadata = void 0;
97
79
  if (load) {
98
- if (tokenMetadataUri == null ? void 0 : tokenMetadataUri.startsWith("data:")) {
80
+ if (tokenMetadataUri?.startsWith("data:")) {
99
81
  const parsedDataUrl = parseDataUrl(tokenMetadataUri);
100
82
  if (parsedDataUrl !== false && parsedDataUrl.contentType === "application/json") {
101
83
  const buf = parsedDataUrl.toBuffer();
@@ -104,9 +86,7 @@ var getNftMetadata = /* @__PURE__ */ __name(async (contractAddress, provider, to
104
86
  }
105
87
  } else {
106
88
  let checkedMetaDataUri;
107
- const axios = new AxiosJson({
108
- timeout: 5e3
109
- });
89
+ const axios = new AxiosJson({ timeout: 5e3 });
110
90
  try {
111
91
  if (tokenMetadataUri && tokenMetadataUri.length > 0) {
112
92
  checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri;
@@ -120,34 +100,26 @@ var getNftMetadata = /* @__PURE__ */ __name(async (contractAddress, provider, to
120
100
  }
121
101
  }
122
102
  }
123
- return [
124
- tokenMetadataUri,
125
- metadata
126
- ];
127
- }, "getNftMetadata");
103
+ return [tokenMetadataUri, metadata];
104
+ };
128
105
 
129
106
  // src/lib/getNftsFromWalletFromOpenSea.ts
130
107
  import { assertEx as assertEx2 } from "@xylabs/assert";
131
108
  import { AxiosJson as AxiosJson2 } from "@xylabs/axios";
132
- var getNftsFromWalletFromOpenSea = /* @__PURE__ */ __name(async (address, maxNfts = 200, timeout = 2e3) => {
109
+ var getNftsFromWalletFromOpenSea = async (address, maxNfts = 200, timeout = 2e3) => {
133
110
  const apiKey = assertEx2(process.env.OPENSEA_API_KEY, () => "No opensea key found");
134
- const axios = new AxiosJson2({
135
- headers: {
136
- "x-api-key": apiKey
137
- },
138
- timeout
139
- });
111
+ const axios = new AxiosJson2({ headers: { "x-api-key": apiKey }, timeout });
140
112
  const nfts = (await axios.get(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data.nfts;
141
113
  return nfts;
142
- }, "getNftsFromWalletFromOpenSea");
114
+ };
143
115
 
144
116
  // src/lib/getProvider.ts
145
- var getProvider = /* @__PURE__ */ __name((providers) => {
117
+ var getProvider = (providers) => {
146
118
  return providers[Date.now() % providers.length];
147
- }, "getProvider");
119
+ };
148
120
 
149
121
  // src/lib/tryCall.ts
150
- var tryCall = /* @__PURE__ */ __name(async (func, name) => {
122
+ var tryCall = async (func, name) => {
151
123
  try {
152
124
  return await func();
153
125
  } catch (ex) {
@@ -157,13 +129,11 @@ var tryCall = /* @__PURE__ */ __name(async (func, name) => {
157
129
  }
158
130
  return void 0;
159
131
  }
160
- }, "tryCall");
132
+ };
161
133
 
162
134
  // src/lib/getNftsOwnedByAddress.ts
163
- var tokenTypeCache = new LRUCache({
164
- max: 100
165
- });
166
- var getTokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
135
+ var tokenTypeCache = new LRUCache({ max: 100 });
136
+ var getTokenTypes = async (provider, address) => {
167
137
  const key = `${address}|${(await provider.getNetwork()).chainId}`;
168
138
  const currentValue = tokenTypeCache.get(key);
169
139
  if (currentValue) {
@@ -173,103 +143,98 @@ var getTokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
173
143
  tokenTypeCache.set(key, types);
174
144
  return types;
175
145
  }
176
- }, "getTokenTypes");
177
- var getErc721MetadataUri = /* @__PURE__ */ __name(async (address, tokenId, provider) => {
146
+ };
147
+ var getErc721MetadataUri = async (address, tokenId, provider) => {
178
148
  try {
179
149
  const contract = ERC721__factory.connect(address, provider);
180
- return [
181
- await contract.tokenURI(tokenId),
182
- void 0
183
- ];
150
+ return [await contract.tokenURI(tokenId), void 0];
184
151
  } catch (ex) {
185
- return [
186
- void 0,
187
- ex
188
- ];
152
+ return [void 0, ex];
189
153
  }
190
- }, "getErc721MetadataUri");
191
- var getErc1155MetadataUri = /* @__PURE__ */ __name(async (address, tokenId, provider) => {
154
+ };
155
+ var getErc1155MetadataUri = async (address, tokenId, provider) => {
192
156
  try {
193
157
  const contract = ERC1155__factory.connect(address, provider);
194
- return [
195
- await contract.uri(tokenId),
196
- void 0
197
- ];
158
+ return [await contract.uri(tokenId), void 0];
198
159
  } catch (ex) {
199
- return [
200
- void 0,
201
- ex
202
- ];
160
+ return [void 0, ex];
203
161
  }
204
- }, "getErc1155MetadataUri");
205
- var getNftMetadataUri = /* @__PURE__ */ __name(async (address, tokenId, provider) => {
206
- const results = await Promise.all([
207
- getErc721MetadataUri(address, tokenId, provider),
208
- getErc1155MetadataUri(address, tokenId, provider)
209
- ]);
162
+ };
163
+ var getNftMetadataUri = async (address, tokenId, provider) => {
164
+ const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)]);
210
165
  return results[0][0] ?? results[1][0];
211
- }, "getNftMetadataUri");
212
- var getNftsOwnedByAddressWithMetadata = /* @__PURE__ */ __name(async (publicAddress, providers, maxNfts = 200, timeout = 5e3) => {
166
+ };
167
+ var getNftsOwnedByAddressWithMetadata = async (publicAddress, providers, maxNfts = 200, timeout = 5e3) => {
213
168
  const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout);
214
- const nftResult = await Promise.all(nfts.map(async (nft) => {
215
- try {
216
- if (!nft.metadataUri || !nft.metadata) {
217
- const [metadataUri, metadata] = await getNftMetadata(nft.implementation ?? nft.address, getProvider(providers), nft.tokenId, true, nft.metadataUri);
218
- nft.metadata = nft.metadata ?? metadata;
219
- nft.metadataUri = nft.metadataUri ?? metadataUri;
169
+ const nftResult = await Promise.all(
170
+ nfts.map(async (nft) => {
171
+ try {
172
+ if (!nft.metadataUri || !nft.metadata) {
173
+ const [metadataUri, metadata] = await getNftMetadata(
174
+ nft.implementation ?? nft.address,
175
+ getProvider(providers),
176
+ nft.tokenId,
177
+ true,
178
+ nft.metadataUri
179
+ );
180
+ nft.metadata = nft.metadata ?? metadata;
181
+ nft.metadataUri = nft.metadataUri ?? metadataUri;
182
+ }
183
+ return nft;
184
+ } catch (ex) {
185
+ const error = ex;
186
+ console.error(`Error: ${error.message}`);
187
+ console.error(`${error.stack}`);
188
+ throw ex;
220
189
  }
221
- return nft;
222
- } catch (ex) {
223
- const error = ex;
224
- console.error(`Error: ${error.message}`);
225
- console.error(`${error.stack}`);
226
- throw ex;
227
- }
228
- }));
190
+ })
191
+ );
229
192
  return nftResult;
230
- }, "getNftsOwnedByAddressWithMetadata");
231
- var getNftsOwnedByAddress = /* @__PURE__ */ __name(async (publicAddress, providers, maxNfts = 100, timeout = 5e3) => {
193
+ };
194
+ var getNftsOwnedByAddress = async (publicAddress, providers, maxNfts = 100, timeout = 5e3) => {
232
195
  const nfts = await getNftsFromWalletFromOpenSea(publicAddress, maxNfts, timeout);
233
- const nftResult = await Promise.all(nfts.map(async (nft) => {
234
- try {
235
- const { contract, identifier, metadata_url } = nft;
236
- const provider = getProvider(providers);
237
- const block = await provider.getBlockNumber();
238
- const [erc1967Status, erc1822Status] = await Promise.all([
239
- // Check if ERC-1967 Upgradeable
240
- getErc1967SlotStatus(provider, contract, block),
241
- // Check if ERC-1822 Upgradeable
242
- getErc1822SlotStatus(provider, contract, block)
243
- ]);
244
- const implementation = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation;
245
- let supply = 1n;
246
- const types = await getTokenTypes(provider, implementation);
247
- if (types.includes("ERC1155")) {
248
- const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers));
249
- supply = await tryCall(async () => await supply1155["totalSupply(uint256)"](erc1967Status.address)) ?? 1n;
250
- }
251
- const fields = {
252
- address: contract,
253
- chainId: Number((await provider.getNetwork()).chainId),
254
- metadataUri: metadata_url ?? void 0,
255
- supply: `0x${supply.toString(16)}`,
256
- tokenId: identifier,
257
- type: types.at(0),
258
- types
259
- };
260
- if (implementation !== contract) {
261
- fields.implementation = implementation;
196
+ const nftResult = await Promise.all(
197
+ nfts.map(async (nft) => {
198
+ try {
199
+ const { contract, identifier, metadata_url } = nft;
200
+ const provider = getProvider(providers);
201
+ const block = await provider.getBlockNumber();
202
+ const [erc1967Status, erc1822Status] = await Promise.all([
203
+ // Check if ERC-1967 Upgradeable
204
+ getErc1967SlotStatus(provider, contract, block),
205
+ // Check if ERC-1822 Upgradeable
206
+ getErc1822SlotStatus(provider, contract, block)
207
+ ]);
208
+ const implementation = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation;
209
+ let supply = 1n;
210
+ const types = await getTokenTypes(provider, implementation);
211
+ if (types.includes("ERC1155")) {
212
+ const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers));
213
+ supply = await tryCall(async () => await supply1155["totalSupply(uint256)"](erc1967Status.address)) ?? 1n;
214
+ }
215
+ const fields = {
216
+ address: contract,
217
+ chainId: Number((await provider.getNetwork()).chainId),
218
+ metadataUri: metadata_url ?? void 0,
219
+ supply: `0x${supply.toString(16)}`,
220
+ tokenId: identifier,
221
+ type: types.at(0),
222
+ types
223
+ };
224
+ if (implementation !== contract) {
225
+ fields.implementation = implementation;
226
+ }
227
+ return fields;
228
+ } catch (ex) {
229
+ const error = ex;
230
+ console.error(`Error: ${error.message}`);
231
+ console.error(`${error.stack}`);
232
+ throw ex;
262
233
  }
263
- return fields;
264
- } catch (ex) {
265
- const error = ex;
266
- console.error(`Error: ${error.message}`);
267
- console.error(`${error.stack}`);
268
- throw ex;
269
- }
270
- }));
234
+ })
235
+ );
271
236
  return nftResult;
272
- }, "getNftsOwnedByAddress");
237
+ };
273
238
 
274
239
  // src/Plugin.ts
275
240
  import { NftSchema as NftSchema2 } from "@xyo-network/crypto-nft-payload-plugin";
@@ -279,11 +244,17 @@ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
279
244
  // src/Witness.ts
280
245
  import { assertEx as assertEx3 } from "@xylabs/assert";
281
246
  import { EthAddress } from "@xylabs/eth-address";
282
- import { isNftWitnessQuery, NftSchema, NftWitnessConfigSchema } from "@xyo-network/crypto-nft-payload-plugin";
247
+ import {
248
+ isNftWitnessQuery,
249
+ NftSchema,
250
+ NftWitnessConfigSchema
251
+ } from "@xyo-network/crypto-nft-payload-plugin";
283
252
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
284
253
  var schema = NftSchema;
285
254
  var defaultMaxNfts = 200;
286
- var _CryptoWalletNftWitness = class _CryptoWalletNftWitness extends AbstractEvmWitness {
255
+ var CryptoWalletNftWitness = class extends AbstractEvmWitness {
256
+ static configSchemas = [...super.configSchemas, NftWitnessConfigSchema];
257
+ static defaultConfigSchema = NftWitnessConfigSchema;
287
258
  get loadMetadata() {
288
259
  return this.config.loadMetadata ?? true;
289
260
  }
@@ -292,31 +263,30 @@ var _CryptoWalletNftWitness = class _CryptoWalletNftWitness extends AbstractEvmW
292
263
  }
293
264
  async observeHandler(payloads) {
294
265
  await this.started("throw");
295
- const queries = (payloads == null ? void 0 : payloads.filter(isNftWitnessQuery)) ?? [];
266
+ const queries = payloads?.filter(isNftWitnessQuery) ?? [];
296
267
  const providers = await this.getProviders();
297
268
  try {
298
- const observations = await Promise.all(queries.map(async (query) => {
299
- const provider = await this.getProvider(true, true);
300
- const addressValue = assertEx3((query == null ? void 0 : query.address) ?? this.config.address, () => "params.address is required");
301
- const parsedAddressValue = EthAddress.parse(addressValue);
302
- const address = assertEx3(parsedAddressValue == null ? void 0 : parsedAddressValue.toString(), () => "Failed to parse params.address");
303
- const network = await provider.getNetwork();
304
- const chainId = assertEx3(network.chainId, () => "params.chainId is required");
305
- const maxNfts = (query == null ? void 0 : query.maxNfts) || defaultMaxNfts;
306
- try {
307
- const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, providers, maxNfts, this.timeout) : await getNftsOwnedByAddress(address, providers, maxNfts, this.timeout);
308
- const observation = nfts.map((nft) => {
309
- return {
310
- ...nft,
311
- schema
312
- };
313
- });
314
- return observation;
315
- } catch (ex) {
316
- const error = ex;
317
- throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`);
318
- }
319
- }));
269
+ const observations = await Promise.all(
270
+ queries.map(async (query) => {
271
+ const provider = await this.getProvider(true, true);
272
+ const addressValue = assertEx3(query?.address ?? this.config.address, () => "params.address is required");
273
+ const parsedAddressValue = EthAddress.parse(addressValue);
274
+ const address = assertEx3(parsedAddressValue?.toString(), () => "Failed to parse params.address");
275
+ const network = await provider.getNetwork();
276
+ const chainId = assertEx3(network.chainId, () => "params.chainId is required");
277
+ const maxNfts = query?.maxNfts || defaultMaxNfts;
278
+ try {
279
+ const nfts = this.loadMetadata ? await getNftsOwnedByAddressWithMetadata(address, providers, maxNfts, this.timeout) : await getNftsOwnedByAddress(address, providers, maxNfts, this.timeout);
280
+ const observation = nfts.map((nft) => {
281
+ return { ...nft, schema };
282
+ });
283
+ return observation;
284
+ } catch (ex) {
285
+ const error = ex;
286
+ throw new Error(`Failed to get nfts for address ${address} on chainId ${chainId}: ${error.message}`);
287
+ }
288
+ })
289
+ );
320
290
  return observations.flat();
321
291
  } catch (ex) {
322
292
  const error = ex;
@@ -325,26 +295,17 @@ var _CryptoWalletNftWitness = class _CryptoWalletNftWitness extends AbstractEvmW
325
295
  }
326
296
  }
327
297
  };
328
- __name(_CryptoWalletNftWitness, "CryptoWalletNftWitness");
329
- __publicField(_CryptoWalletNftWitness, "configSchemas", [
330
- ...__superGet(_CryptoWalletNftWitness, _CryptoWalletNftWitness, "configSchemas"),
331
- NftWitnessConfigSchema
332
- ]);
333
- __publicField(_CryptoWalletNftWitness, "defaultConfigSchema", NftWitnessConfigSchema);
334
- var CryptoWalletNftWitness = _CryptoWalletNftWitness;
335
298
 
336
299
  // src/Plugin.ts
337
- var CryptoWalletNftWitnessPlugin = /* @__PURE__ */ __name(() => createPayloadSetWitnessPlugin({
338
- required: {
339
- [NftSchema2]: 1
340
- },
341
- schema: PayloadSetSchema
342
- }, {
343
- witness: /* @__PURE__ */ __name(async (params) => {
344
- const result = await CryptoWalletNftWitness.create(params);
345
- return result;
346
- }, "witness")
347
- }), "CryptoWalletNftWitnessPlugin");
300
+ var CryptoWalletNftWitnessPlugin = () => createPayloadSetWitnessPlugin(
301
+ { required: { [NftSchema2]: 1 }, schema: PayloadSetSchema },
302
+ {
303
+ witness: async (params) => {
304
+ const result = await CryptoWalletNftWitness.create(params);
305
+ return result;
306
+ }
307
+ }
308
+ );
348
309
  export {
349
310
  CryptoWalletNftWitness,
350
311
  CryptoWalletNftWitnessPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getNftsFromWalletFromOpenSea.ts","../../src/lib/getProvider.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Interface, Provider } from 'ethers'\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 (const functionName of functionNames) {\n const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => 'Function not found on interface')\n if (!bytecode.includes(selector.slice(2))) {\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 { isHexZero } from '@xylabs/hex'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftMetadata } from './getNftMetadata.ts'\nimport { getNftsFromWalletFromOpenSea } from './getNftsFromWalletFromOpenSea.ts'\nimport { getProvider } from './getProvider.ts'\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: Provider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (\n address: string,\n tokenId: string,\n provider: Provider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, provider)\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (\n address: string,\n tokenId: string,\n provider: Provider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, provider)\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string, provider: Provider) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: Provider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout)\n const nftResult = await Promise.all(\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(\n nft.implementation ?? nft.address,\n getProvider(providers),\n nft.tokenId,\n true,\n nft.metadataUri,\n )\n nft.metadata = nft.metadata ?? metadata\n nft.metadataUri = nft.metadataUri ?? metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: Provider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n // const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n nfts.map(async (nft) => {\n try {\n const { contract, identifier, metadata_url } = nft\n const provider = getProvider(providers)\n\n const block = await provider.getBlockNumber()\n\n // Check if Upgradeable\n const [erc1967Status, erc1822Status] = await Promise.all([\n // Check if ERC-1967 Upgradeable\n getErc1967SlotStatus(provider, contract, block),\n\n // Check if ERC-1822 Upgradeable\n getErc1822SlotStatus(provider, contract, block),\n ])\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n let supply = 1n\n const types = await getTokenTypes(provider, implementation)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers))\n supply = (await tryCall(async () => await supply1155['totalSupply(uint256)'](erc1967Status.address))) ?? 1n\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: Number((await provider.getNetwork()).chainId),\n metadataUri: metadata_url ?? undefined,\n supply: `0x${supply.toString(16)}`,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n if (implementation !== contract) {\n fields.implementation = implementation\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","/* eslint-disable complexity */\n\nimport { AxiosJson } from '@xylabs/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\nimport parseDataUrl from 'parse-data-url'\n\nimport { isErc721, isErc1155 } from './tokenTypes.ts'\n\n/* const baseUrlAbi = [\n {\n inputs: [],\n name: 'baseUrl',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] */\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: 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 load = false,\n defaultUri?: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n let uri721: string | undefined = undefined\n const is721 = await isErc721(provider, contractAddress)\n if (is721) {\n try {\n uri721 = await storage721.tokenURI(tokenId)\n } catch {\n // const error = ex as Error\n // console.error(`metaDataUri[${error.name}][${contractAddress}]: storage721.tokenURI(tokenId) failed`)\n }\n }\n\n /* let baseUrl: string | undefined = undefined\n if (is721) {\n try {\n const baseUrlContract = new Contract(contractAddress, baseUrlAbi, provider)\n baseUrl = await baseUrlContract.bareUrl()\n } catch (ex) {\n const error = ex as Error\n console.error(`baseUrl[${error.name}][${contractAddress}]: baseUrl() failed`)\n }\n }\n\n if (baseUrl && !uri721?.startsWith(baseUrl)) {\n uri721 = `${baseUrl}${uri721 ?? tokenId}`\n }\n */\n\n let uri1155: string | undefined = undefined\n if (!uri721) {\n const is1155 = await isErc1155(provider, contractAddress)\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch {\n // const error = ex as Error\n // console.error(`metaDataUri[${error.name}][${contractAddress}]: storage1155.uri(tokenId) failed`)\n // console.log(error.message)\n }\n }\n }\n\n const tokenMetadataUri = uri721 || uri1155 || defaultUri\n let metadata: NftMetadata | undefined = undefined\n if (load) {\n if (tokenMetadataUri?.startsWith('data:')) {\n const parsedDataUrl = parseDataUrl(tokenMetadataUri)\n if (parsedDataUrl !== false && parsedDataUrl.contentType === 'application/json') {\n const buf = parsedDataUrl.toBuffer()\n const value = buf.toString('utf8')\n metadata = JSON.parse(value)\n }\n } else {\n let checkedMetaDataUri: string | undefined\n /* if (tokenMetadataUri && tokenMetadataUri.length < 5) {\n console.log(`tokenMetadataUri [<5][${contractAddress}]: ${tokenMetadataUri}`)\n console.log(`tokenMetadataUri [uri721]: ${uri721}`)\n console.log(`tokenMetadataUri [uri1155]: ${uri1155}`)\n console.log(`tokenMetadataUri [defaultUri]: ${defaultUri}`)\n } */\n const axios = new AxiosJson({ timeout: 5000 })\n try {\n if (tokenMetadataUri && tokenMetadataUri.length > 0) {\n checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n }\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch {\n try {\n metadata = defaultUri ? (await axios.get(defaultUri)).data : undefined\n } catch {\n // const error = ex as Error\n // console.error(`metadata: ${error.message}`)\n }\n }\n }\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\n\nimport { contractHasFunctions } from './contractHasFunctions.ts'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\n\ninterface OpenSeaNFT {\n /*\n * Collection slug. A unique string to identify a collection on OpenSea\n */\n collection: string\n /*\n * The unique public blockchain identifier for the contract\n */\n contract: string\n /**\n * @deprecated\n */\n created_at: string\n /*\n * Description of the NFT\n */\n description: string | null\n /*\n * The NFT's unique identifier within the smart contract (also referred to as token_id)\n */\n identifier: string\n /*\n * Link to the image associated with the NFT\n */\n image_url: string | null\n /*\n * If the item is currently able to be bought or sold using OpenSea\n */\n is_disabled: boolean\n /*\n * If the item is currently classified as 'Not Safe for Work' by OpenSea as defined in OpenSea's NSFW Policy.\n */\n is_nsfw: boolean\n /*\n * Link to the offchain metadata store\n */\n metadata_url: string | null\n /*\n * Name of the NFT\n */\n name: string | null\n /*\n * ERC standard of the token (erc721, erc1155)\n */\n token_standard: string\n /*\n * Last time that the NFT's metadata was updated by OpenSea\n */\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, () => 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","import { Provider } from 'ethers'\n\nexport const getProvider = (providers: Provider[]) => {\n return providers[Date.now() % providers.length] // pick a random provider\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin, PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness.ts'\n\nexport const CryptoWalletNftWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoWalletNftWitness> =>\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 {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib/index.ts'\n\nexport type CryptoWalletNftWitnessParams = EvmWitnessParams<CryptoWalletNftWitnessConfig>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 200\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractEvmWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftWitnessConfigSchema\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get timeout() {\n return this.config.timeout ?? 10_000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n // calling it here to make sure we rests the cache\n const providers = await this.getProviders()\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const provider = await this.getProvider(true, true)\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 = await provider.getNetwork()\n const chainId = assertEx(network.chainId, () => 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts\n = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, providers, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, providers, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw new 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"],"mappings":"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","names":["assertEx","contractHasFunctions","provider","address","contractInterface","functionNames","bytecode","getCode","functionName","selector","assertEx","getFunction","includes","slice","ex","error","console","log","isHexZero","getErc1822SlotStatus","getErc1967SlotStatus","ERC721__factory","ERC1155__factory","ERC1155Supply__factory","LRUCache","AxiosJson","ERC721URIStorage__factory","ERC1155URIStorage__factory","checkIpfsUrl","parseDataUrl","ERC1155URIStorage__factory","IERC721Metadata__factory","isErc1155","provider","address","contractHasFunctions","ERC1155URIStorage__factory","createInterface","isErc721","IERC721Metadata__factory","tokenTypes","erc721","erc1155","Promise","all","result","push","ipfsGateway","getNftMetadata","contractAddress","provider","tokenId","load","defaultUri","storage721","ERC721URIStorage__factory","connect","storage1155","ERC1155URIStorage__factory","uri721","undefined","is721","isErc721","tokenURI","uri1155","is1155","isErc1155","uri","tokenMetadataUri","metadata","startsWith","parsedDataUrl","parseDataUrl","contentType","buf","toBuffer","value","toString","JSON","parse","checkedMetaDataUri","axios","AxiosJson","timeout","length","checkIpfsUrl","get","data","assertEx","AxiosJson","getNftsFromWalletFromOpenSea","address","maxNfts","timeout","apiKey","assertEx","process","env","OPENSEA_API_KEY","axios","AxiosJson","headers","nfts","get","data","getProvider","providers","Date","now","length","tryCall","func","name","ex","error","console","log","message","undefined","tokenTypeCache","LRUCache","max","getTokenTypes","provider","address","key","getNetwork","chainId","currentValue","get","types","tokenTypes","set","getErc721MetadataUri","tokenId","contract","ERC721__factory","connect","tokenURI","undefined","ex","getErc1155MetadataUri","ERC1155__factory","uri","getNftMetadataUri","results","Promise","all","getNftsOwnedByAddressWithMetadata","publicAddress","providers","maxNfts","timeout","nfts","getNftsOwnedByAddress","nftResult","map","nft","metadataUri","metadata","getNftMetadata","implementation","getProvider","error","console","message","stack","getNftsFromWalletFromOpenSea","identifier","metadata_url","block","getBlockNumber","erc1967Status","erc1822Status","getErc1967SlotStatus","getErc1822SlotStatus","slots","isHexZero","supply","includes","supply1155","ERC1155Supply__factory","tryCall","fields","Number","toString","type","at","NftSchema","PayloadSetSchema","createPayloadSetWitnessPlugin","assertEx","EthAddress","isNftWitnessQuery","NftSchema","NftWitnessConfigSchema","AbstractEvmWitness","schema","NftSchema","defaultMaxNfts","CryptoWalletNftWitness","AbstractEvmWitness","loadMetadata","config","timeout","observeHandler","payloads","started","queries","filter","isNftWitnessQuery","providers","getProviders","observations","Promise","all","map","query","provider","getProvider","addressValue","assertEx","address","parsedAddressValue","EthAddress","parse","toString","network","getNetwork","chainId","maxNfts","nfts","getNftsOwnedByAddressWithMetadata","getNftsOwnedByAddress","observation","nft","ex","error","Error","message","flat","console","configSchemas","NftWitnessConfigSchema","defaultConfigSchema","CryptoWalletNftWitnessPlugin","createPayloadSetWitnessPlugin","required","NftSchema","schema","PayloadSetSchema","witness","params","result","CryptoWalletNftWitness","create"]}
1
+ {"version":3,"sources":["../../src/lib/contractHasFunctions.ts","../../src/lib/getNftsOwnedByAddress.ts","../../src/lib/getNftMetadata.ts","../../src/lib/tokenTypes.ts","../../src/lib/getNftsFromWalletFromOpenSea.ts","../../src/lib/getProvider.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Interface, Provider } from 'ethers'\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 (const functionName of functionNames) {\n const selector = assertEx(contractInterface.getFunction(functionName)?.selector, () => 'Function not found on interface')\n if (!bytecode.includes(selector.slice(2))) {\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 { isHexZero } from '@xylabs/hex'\nimport { NftInfoFields, TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721__factory, ERC1155__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\nimport { LRUCache } from 'lru-cache'\n\nimport { getNftMetadata } from './getNftMetadata.ts'\nimport { getNftsFromWalletFromOpenSea } from './getNftsFromWalletFromOpenSea.ts'\nimport { getProvider } from './getProvider.ts'\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst tokenTypeCache = new LRUCache<string, TokenType[]>({ max: 100 })\n\nexport const getTokenTypes = async (provider: Provider, address: string) => {\n const key = `${address}|${(await provider.getNetwork()).chainId}`\n const currentValue = tokenTypeCache.get(key)\n if (currentValue) {\n return currentValue\n } else {\n const types = await tokenTypes(provider, address)\n tokenTypeCache.set(key, types)\n return types\n }\n}\n\nexport const getErc721MetadataUri = async (\n address: string,\n tokenId: string,\n provider: Provider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC721__factory.connect(address, provider)\n return [await contract.tokenURI(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getErc1155MetadataUri = async (\n address: string,\n tokenId: string,\n provider: Provider,\n): Promise<[string | undefined, Error | undefined]> => {\n try {\n const contract = ERC1155__factory.connect(address, provider)\n return [await contract.uri(tokenId), undefined]\n } catch (ex) {\n return [undefined, ex as Error]\n }\n}\n\nexport const getNftMetadataUri = async (address: string, tokenId: string, provider: Provider) => {\n const results = await Promise.all([getErc721MetadataUri(address, tokenId, provider), getErc1155MetadataUri(address, tokenId, provider)])\n return results[0][0] ?? results[1][0]\n}\n\nexport const getNftsOwnedByAddressWithMetadata = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: Provider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 200,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n const nfts = await getNftsOwnedByAddress(publicAddress, providers, maxNfts, timeout)\n const nftResult = await Promise.all(\n nfts.map(async (nft) => {\n try {\n if (!nft.metadataUri || !nft.metadata) {\n const [metadataUri, metadata] = await getNftMetadata(\n nft.implementation ?? nft.address,\n getProvider(providers),\n nft.tokenId,\n true,\n nft.metadataUri,\n )\n nft.metadata = nft.metadata ?? metadata\n nft.metadataUri = nft.metadataUri ?? metadataUri\n }\n return nft\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n return nftResult\n}\n\nexport const getNftsOwnedByAddress = async (\n /** @param publicAddress The address of the wallet to search for NFTs */\n publicAddress: string,\n /** @param provider The provider to use for accessing the block chain */\n providers: Provider[],\n /** @param maxNfts The maximum number of NFTs to return. Configurable to prevent large wallets from exhausting Infura API credits. */\n maxNfts = 100,\n /** @param httpTimeout The connection timeout for http call to get metadata */\n timeout = 5000,\n): Promise<NftInfoFields[]> => {\n // const assets = await getAssetsFromWallet(publicAddress, maxNfts, timeout)\n const nfts = await getNftsFromWalletFromOpenSea(publicAddress, maxNfts, timeout)\n\n const nftResult = await Promise.all(\n nfts.map(async (nft) => {\n try {\n const { contract, identifier, metadata_url } = nft\n const provider = getProvider(providers)\n\n const block = await provider.getBlockNumber()\n\n // Check if Upgradeable\n const [erc1967Status, erc1822Status] = await Promise.all([\n // Check if ERC-1967 Upgradeable\n getErc1967SlotStatus(provider, contract, block),\n\n // Check if ERC-1822 Upgradeable\n getErc1822SlotStatus(provider, contract, block),\n ])\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n let supply = 1n\n const types = await getTokenTypes(provider, implementation)\n if (types.includes('ERC1155')) {\n const supply1155 = ERC1155Supply__factory.connect(implementation, getProvider(providers))\n supply = (await tryCall(async () => await supply1155['totalSupply(uint256)'](erc1967Status.address))) ?? 1n\n }\n const fields: NftInfoFields = {\n address: contract,\n chainId: Number((await provider.getNetwork()).chainId),\n metadataUri: metadata_url ?? undefined,\n supply: `0x${supply.toString(16)}`,\n tokenId: identifier,\n type: types.at(0),\n types,\n }\n if (implementation !== contract) {\n fields.implementation = implementation\n }\n return fields\n } catch (ex) {\n const error = ex as Error\n console.error(`Error: ${error.message}`)\n console.error(`${error.stack}`)\n throw ex\n }\n }),\n )\n\n return nftResult\n}\n","/* eslint-disable complexity */\n\nimport { AxiosJson } from '@xylabs/axios'\nimport { NftMetadata } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721URIStorage__factory, ERC1155URIStorage__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\nimport parseDataUrl from 'parse-data-url'\n\nimport { isErc721, isErc1155 } from './tokenTypes.ts'\n\n/* const baseUrlAbi = [\n {\n inputs: [],\n name: 'baseUrl',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] */\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nexport const getNftMetadata = async (\n /**\n * The address of the NFT contract to search for\n */\n contractAddress: string,\n /**\n * The chain ID (1 = Ethereum Mainnet, 4 = Rinkeby, etc.) of the chain to search for NFTs on\n */\n provider: 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 load = false,\n defaultUri?: string,\n): Promise<[string | undefined, NftMetadata | undefined]> => {\n const storage721 = ERC721URIStorage__factory.connect(contractAddress, provider)\n const storage1155 = ERC1155URIStorage__factory.connect(contractAddress, provider)\n\n let uri721: string | undefined = undefined\n const is721 = await isErc721(provider, contractAddress)\n if (is721) {\n try {\n uri721 = await storage721.tokenURI(tokenId)\n } catch {\n // const error = ex as Error\n // console.error(`metaDataUri[${error.name}][${contractAddress}]: storage721.tokenURI(tokenId) failed`)\n }\n }\n\n /* let baseUrl: string | undefined = undefined\n if (is721) {\n try {\n const baseUrlContract = new Contract(contractAddress, baseUrlAbi, provider)\n baseUrl = await baseUrlContract.bareUrl()\n } catch (ex) {\n const error = ex as Error\n console.error(`baseUrl[${error.name}][${contractAddress}]: baseUrl() failed`)\n }\n }\n\n if (baseUrl && !uri721?.startsWith(baseUrl)) {\n uri721 = `${baseUrl}${uri721 ?? tokenId}`\n }\n */\n\n let uri1155: string | undefined = undefined\n if (!uri721) {\n const is1155 = await isErc1155(provider, contractAddress)\n if (is1155) {\n try {\n uri1155 = await storage1155.uri(tokenId)\n } catch {\n // const error = ex as Error\n // console.error(`metaDataUri[${error.name}][${contractAddress}]: storage1155.uri(tokenId) failed`)\n // console.log(error.message)\n }\n }\n }\n\n const tokenMetadataUri = uri721 || uri1155 || defaultUri\n let metadata: NftMetadata | undefined = undefined\n if (load) {\n if (tokenMetadataUri?.startsWith('data:')) {\n const parsedDataUrl = parseDataUrl(tokenMetadataUri)\n if (parsedDataUrl !== false && parsedDataUrl.contentType === 'application/json') {\n const buf = parsedDataUrl.toBuffer()\n const value = buf.toString('utf8')\n metadata = JSON.parse(value)\n }\n } else {\n let checkedMetaDataUri: string | undefined\n /* if (tokenMetadataUri && tokenMetadataUri.length < 5) {\n console.log(`tokenMetadataUri [<5][${contractAddress}]: ${tokenMetadataUri}`)\n console.log(`tokenMetadataUri [uri721]: ${uri721}`)\n console.log(`tokenMetadataUri [uri1155]: ${uri1155}`)\n console.log(`tokenMetadataUri [defaultUri]: ${defaultUri}`)\n } */\n const axios = new AxiosJson({ timeout: 5000 })\n try {\n if (tokenMetadataUri && tokenMetadataUri.length > 0) {\n checkedMetaDataUri = tokenMetadataUri ? checkIpfsUrl(tokenMetadataUri, ipfsGateway) : tokenMetadataUri\n }\n metadata = checkedMetaDataUri ? (await axios.get(checkedMetaDataUri)).data : undefined\n } catch {\n try {\n metadata = defaultUri ? (await axios.get(defaultUri)).data : undefined\n } catch {\n // const error = ex as Error\n // console.error(`metadata: ${error.message}`)\n }\n }\n }\n }\n\n return [tokenMetadataUri, metadata]\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC1155URIStorage__factory, IERC721Metadata__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { Provider } from 'ethers'\n\nimport { contractHasFunctions } from './contractHasFunctions.ts'\n\nexport const isErc1155 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ['uri'])\n}\n\nexport const isErc721 = async (provider: Provider, address: string) => {\n return await contractHasFunctions(provider, address, IERC721Metadata__factory.createInterface(), ['name', 'symbol', 'tokenURI'])\n}\n\nexport const tokenTypes = async (provider: Provider, address: string) => {\n const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)])\n const result: TokenType[] = []\n if (erc721) {\n result.push('ERC721')\n }\n if (erc1155) {\n result.push('ERC1155')\n }\n return result\n}\n","import { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\n\ninterface OpenSeaNFT {\n /*\n * Collection slug. A unique string to identify a collection on OpenSea\n */\n collection: string\n /*\n * The unique public blockchain identifier for the contract\n */\n contract: string\n /**\n * @deprecated\n */\n created_at: string\n /*\n * Description of the NFT\n */\n description: string | null\n /*\n * The NFT's unique identifier within the smart contract (also referred to as token_id)\n */\n identifier: string\n /*\n * Link to the image associated with the NFT\n */\n image_url: string | null\n /*\n * If the item is currently able to be bought or sold using OpenSea\n */\n is_disabled: boolean\n /*\n * If the item is currently classified as 'Not Safe for Work' by OpenSea as defined in OpenSea's NSFW Policy.\n */\n is_nsfw: boolean\n /*\n * Link to the offchain metadata store\n */\n metadata_url: string | null\n /*\n * Name of the NFT\n */\n name: string | null\n /*\n * ERC standard of the token (erc721, erc1155)\n */\n token_standard: string\n /*\n * Last time that the NFT's metadata was updated by OpenSea\n */\n updated_at: string\n}\n\nexport const getNftsFromWalletFromOpenSea = async (address: string, maxNfts = 200, timeout = 2000) => {\n const apiKey = assertEx(process.env.OPENSEA_API_KEY, () => 'No opensea key found')\n\n const axios = new AxiosJson({ headers: { 'x-api-key': apiKey }, timeout })\n\n const nfts = (await axios.get<{ nfts: OpenSeaNFT[] }>(`https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts?limit=${maxNfts}`)).data\n .nfts\n return nfts\n}\n","import { Provider } from 'ethers'\n\nexport const getProvider = (providers: Provider[]) => {\n return providers[Date.now() % providers.length] // pick a random provider\n}\n","export const tryCall = async <T>(func: () => Promise<T>, name?: string): Promise<T | undefined> => {\n try {\n return await func()\n } catch (ex) {\n if (name) {\n const error = ex as Error\n console.log(`tryCall failed [${name}]: ${error.message}`)\n }\n return undefined\n }\n}\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin, PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoWalletNftWitness } from './Witness.ts'\n\nexport const CryptoWalletNftWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoWalletNftWitness> =>\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 {\n CryptoWalletNftWitnessConfig,\n isNftWitnessQuery,\n NftInfo,\n NftSchema,\n NftWitnessConfigSchema,\n NftWitnessQuery,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftsOwnedByAddress, getNftsOwnedByAddressWithMetadata } from './lib/index.ts'\n\nexport type CryptoWalletNftWitnessParams = EvmWitnessParams<CryptoWalletNftWitnessConfig>\n\nconst schema = NftSchema\n\nconst defaultMaxNfts = 200\n\nexport class CryptoWalletNftWitness<TParams extends CryptoWalletNftWitnessParams = CryptoWalletNftWitnessParams> extends AbstractEvmWitness<\n TParams,\n NftWitnessQuery,\n NftInfo\n> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftWitnessConfigSchema\n\n get loadMetadata() {\n return this.config.loadMetadata ?? true\n }\n\n get timeout() {\n return this.config.timeout ?? 10_000\n }\n\n protected override async observeHandler(payloads?: NftWitnessQuery[]): Promise<NftInfo[]> {\n await this.started('throw')\n const queries = payloads?.filter(isNftWitnessQuery) ?? []\n // calling it here to make sure we rests the cache\n const providers = await this.getProviders()\n try {\n const observations = await Promise.all(\n queries.map(async (query) => {\n const provider = await this.getProvider(true, true)\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 = await provider.getNetwork()\n const chainId = assertEx(network.chainId, () => 'params.chainId is required')\n const maxNfts = query?.maxNfts || defaultMaxNfts\n try {\n const nfts\n = this.loadMetadata\n ? await getNftsOwnedByAddressWithMetadata(address, providers, maxNfts, this.timeout)\n : await getNftsOwnedByAddress(address, providers, maxNfts, this.timeout)\n const observation = nfts.map<NftInfo>((nft) => {\n return { ...nft, schema }\n })\n return observation\n } catch (ex) {\n const error = ex as Error\n throw new 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"],"mappings":"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","names":["ERC1155URIStorage__factory","ERC1155URIStorage__factory","assertEx","AxiosJson","NftSchema","assertEx","assertEx","NftSchema"]}