@xyo-network/crypto-nft-collection-witness-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 (356) hide show
  1. package/dist/browser/index.d.ts +27 -4
  2. package/dist/browser/index.mjs +132 -178
  3. package/dist/browser/index.mjs.map +1 -1
  4. package/dist/neutral/index.d.ts +27 -4
  5. package/dist/neutral/index.mjs +132 -178
  6. package/dist/neutral/index.mjs.map +1 -1
  7. package/dist/node/index.d.ts +27 -4
  8. package/dist/node/index.mjs +137 -191
  9. package/dist/node/index.mjs.map +1 -1
  10. package/package.json +26 -44
  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 -10
  19. package/dist/browser/Witness.d.cts.map +0 -1
  20. package/dist/browser/Witness.d.mts +0 -10
  21. package/dist/browser/Witness.d.mts.map +0 -1
  22. package/dist/browser/Witness.d.ts +0 -10
  23. package/dist/browser/Witness.d.ts.map +0 -1
  24. package/dist/browser/index.cjs +0 -346
  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/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
  32. package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
  33. package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
  34. package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
  35. package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
  36. package/dist/browser/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
  37. package/dist/browser/lib/collectionMetrics/index.d.cts +0 -2
  38. package/dist/browser/lib/collectionMetrics/index.d.cts.map +0 -1
  39. package/dist/browser/lib/collectionMetrics/index.d.mts +0 -2
  40. package/dist/browser/lib/collectionMetrics/index.d.mts.map +0 -1
  41. package/dist/browser/lib/collectionMetrics/index.d.ts +0 -2
  42. package/dist/browser/lib/collectionMetrics/index.d.ts.map +0 -1
  43. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
  44. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
  45. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
  46. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
  47. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
  48. package/dist/browser/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
  49. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
  50. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
  51. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
  52. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
  53. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
  54. package/dist/browser/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
  55. package/dist/browser/lib/collectionMetrics/lib/distribution.d.cts +0 -6
  56. package/dist/browser/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
  57. package/dist/browser/lib/collectionMetrics/lib/distribution.d.mts +0 -6
  58. package/dist/browser/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
  59. package/dist/browser/lib/collectionMetrics/lib/distribution.d.ts +0 -6
  60. package/dist/browser/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
  61. package/dist/browser/lib/collectionMetrics/lib/index.d.cts +0 -4
  62. package/dist/browser/lib/collectionMetrics/lib/index.d.cts.map +0 -1
  63. package/dist/browser/lib/collectionMetrics/lib/index.d.mts +0 -4
  64. package/dist/browser/lib/collectionMetrics/lib/index.d.mts.map +0 -1
  65. package/dist/browser/lib/collectionMetrics/lib/index.d.ts +0 -4
  66. package/dist/browser/lib/collectionMetrics/lib/index.d.ts.map +0 -1
  67. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
  68. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
  69. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
  70. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
  71. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
  72. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
  73. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
  74. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
  75. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
  76. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
  77. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
  78. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
  79. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
  80. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
  81. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
  82. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
  83. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
  84. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
  85. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
  86. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
  87. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
  88. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
  89. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
  90. package/dist/browser/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
  91. package/dist/browser/lib/contractHasFunctions.d.cts +0 -3
  92. package/dist/browser/lib/contractHasFunctions.d.cts.map +0 -1
  93. package/dist/browser/lib/contractHasFunctions.d.mts +0 -3
  94. package/dist/browser/lib/contractHasFunctions.d.mts.map +0 -1
  95. package/dist/browser/lib/contractHasFunctions.d.ts +0 -3
  96. package/dist/browser/lib/contractHasFunctions.d.ts.map +0 -1
  97. package/dist/browser/lib/getNftCollectionNfts.d.cts +0 -4
  98. package/dist/browser/lib/getNftCollectionNfts.d.cts.map +0 -1
  99. package/dist/browser/lib/getNftCollectionNfts.d.mts +0 -4
  100. package/dist/browser/lib/getNftCollectionNfts.d.mts.map +0 -1
  101. package/dist/browser/lib/getNftCollectionNfts.d.ts +0 -4
  102. package/dist/browser/lib/getNftCollectionNfts.d.ts.map +0 -1
  103. package/dist/browser/lib/index.d.cts +0 -5
  104. package/dist/browser/lib/index.d.cts.map +0 -1
  105. package/dist/browser/lib/index.d.mts +0 -5
  106. package/dist/browser/lib/index.d.mts.map +0 -1
  107. package/dist/browser/lib/index.d.ts +0 -5
  108. package/dist/browser/lib/index.d.ts.map +0 -1
  109. package/dist/browser/lib/nonEvaluableContractAddresses.d.cts +0 -2
  110. package/dist/browser/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
  111. package/dist/browser/lib/nonEvaluableContractAddresses.d.mts +0 -2
  112. package/dist/browser/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
  113. package/dist/browser/lib/nonEvaluableContractAddresses.d.ts +0 -2
  114. package/dist/browser/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
  115. package/dist/browser/lib/tokenTypes.d.cts +0 -6
  116. package/dist/browser/lib/tokenTypes.d.cts.map +0 -1
  117. package/dist/browser/lib/tokenTypes.d.mts +0 -6
  118. package/dist/browser/lib/tokenTypes.d.mts.map +0 -1
  119. package/dist/browser/lib/tokenTypes.d.ts +0 -6
  120. package/dist/browser/lib/tokenTypes.d.ts.map +0 -1
  121. package/dist/browser/lib/tryCall.d.cts +0 -2
  122. package/dist/browser/lib/tryCall.d.cts.map +0 -1
  123. package/dist/browser/lib/tryCall.d.mts +0 -2
  124. package/dist/browser/lib/tryCall.d.mts.map +0 -1
  125. package/dist/browser/lib/tryCall.d.ts +0 -2
  126. package/dist/browser/lib/tryCall.d.ts.map +0 -1
  127. package/dist/neutral/Plugin.d.cts +0 -4
  128. package/dist/neutral/Plugin.d.cts.map +0 -1
  129. package/dist/neutral/Plugin.d.mts +0 -4
  130. package/dist/neutral/Plugin.d.mts.map +0 -1
  131. package/dist/neutral/Plugin.d.ts +0 -4
  132. package/dist/neutral/Plugin.d.ts.map +0 -1
  133. package/dist/neutral/Witness.d.cts +0 -10
  134. package/dist/neutral/Witness.d.cts.map +0 -1
  135. package/dist/neutral/Witness.d.mts +0 -10
  136. package/dist/neutral/Witness.d.mts.map +0 -1
  137. package/dist/neutral/Witness.d.ts +0 -10
  138. package/dist/neutral/Witness.d.ts.map +0 -1
  139. package/dist/neutral/index.cjs +0 -346
  140. package/dist/neutral/index.cjs.map +0 -1
  141. package/dist/neutral/index.d.cts +0 -4
  142. package/dist/neutral/index.d.cts.map +0 -1
  143. package/dist/neutral/index.d.mts +0 -4
  144. package/dist/neutral/index.d.mts.map +0 -1
  145. package/dist/neutral/index.d.ts.map +0 -1
  146. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
  147. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
  148. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
  149. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
  150. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
  151. package/dist/neutral/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
  152. package/dist/neutral/lib/collectionMetrics/index.d.cts +0 -2
  153. package/dist/neutral/lib/collectionMetrics/index.d.cts.map +0 -1
  154. package/dist/neutral/lib/collectionMetrics/index.d.mts +0 -2
  155. package/dist/neutral/lib/collectionMetrics/index.d.mts.map +0 -1
  156. package/dist/neutral/lib/collectionMetrics/index.d.ts +0 -2
  157. package/dist/neutral/lib/collectionMetrics/index.d.ts.map +0 -1
  158. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
  159. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
  160. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
  161. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
  162. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
  163. package/dist/neutral/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
  164. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
  165. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
  166. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
  167. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
  168. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
  169. package/dist/neutral/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
  170. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.cts +0 -6
  171. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
  172. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.mts +0 -6
  173. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
  174. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.ts +0 -6
  175. package/dist/neutral/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
  176. package/dist/neutral/lib/collectionMetrics/lib/index.d.cts +0 -4
  177. package/dist/neutral/lib/collectionMetrics/lib/index.d.cts.map +0 -1
  178. package/dist/neutral/lib/collectionMetrics/lib/index.d.mts +0 -4
  179. package/dist/neutral/lib/collectionMetrics/lib/index.d.mts.map +0 -1
  180. package/dist/neutral/lib/collectionMetrics/lib/index.d.ts +0 -4
  181. package/dist/neutral/lib/collectionMetrics/lib/index.d.ts.map +0 -1
  182. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
  183. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
  184. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
  185. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
  186. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
  187. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
  188. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
  189. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
  190. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
  191. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
  192. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
  193. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
  194. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
  195. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
  196. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
  197. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
  198. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
  199. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
  200. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
  201. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
  202. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
  203. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
  204. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
  205. package/dist/neutral/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
  206. package/dist/neutral/lib/contractHasFunctions.d.cts +0 -3
  207. package/dist/neutral/lib/contractHasFunctions.d.cts.map +0 -1
  208. package/dist/neutral/lib/contractHasFunctions.d.mts +0 -3
  209. package/dist/neutral/lib/contractHasFunctions.d.mts.map +0 -1
  210. package/dist/neutral/lib/contractHasFunctions.d.ts +0 -3
  211. package/dist/neutral/lib/contractHasFunctions.d.ts.map +0 -1
  212. package/dist/neutral/lib/getNftCollectionNfts.d.cts +0 -4
  213. package/dist/neutral/lib/getNftCollectionNfts.d.cts.map +0 -1
  214. package/dist/neutral/lib/getNftCollectionNfts.d.mts +0 -4
  215. package/dist/neutral/lib/getNftCollectionNfts.d.mts.map +0 -1
  216. package/dist/neutral/lib/getNftCollectionNfts.d.ts +0 -4
  217. package/dist/neutral/lib/getNftCollectionNfts.d.ts.map +0 -1
  218. package/dist/neutral/lib/index.d.cts +0 -5
  219. package/dist/neutral/lib/index.d.cts.map +0 -1
  220. package/dist/neutral/lib/index.d.mts +0 -5
  221. package/dist/neutral/lib/index.d.mts.map +0 -1
  222. package/dist/neutral/lib/index.d.ts +0 -5
  223. package/dist/neutral/lib/index.d.ts.map +0 -1
  224. package/dist/neutral/lib/nonEvaluableContractAddresses.d.cts +0 -2
  225. package/dist/neutral/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
  226. package/dist/neutral/lib/nonEvaluableContractAddresses.d.mts +0 -2
  227. package/dist/neutral/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
  228. package/dist/neutral/lib/nonEvaluableContractAddresses.d.ts +0 -2
  229. package/dist/neutral/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
  230. package/dist/neutral/lib/tokenTypes.d.cts +0 -6
  231. package/dist/neutral/lib/tokenTypes.d.cts.map +0 -1
  232. package/dist/neutral/lib/tokenTypes.d.mts +0 -6
  233. package/dist/neutral/lib/tokenTypes.d.mts.map +0 -1
  234. package/dist/neutral/lib/tokenTypes.d.ts +0 -6
  235. package/dist/neutral/lib/tokenTypes.d.ts.map +0 -1
  236. package/dist/neutral/lib/tryCall.d.cts +0 -2
  237. package/dist/neutral/lib/tryCall.d.cts.map +0 -1
  238. package/dist/neutral/lib/tryCall.d.mts +0 -2
  239. package/dist/neutral/lib/tryCall.d.mts.map +0 -1
  240. package/dist/neutral/lib/tryCall.d.ts +0 -2
  241. package/dist/neutral/lib/tryCall.d.ts.map +0 -1
  242. package/dist/node/Plugin.d.cts +0 -4
  243. package/dist/node/Plugin.d.cts.map +0 -1
  244. package/dist/node/Plugin.d.mts +0 -4
  245. package/dist/node/Plugin.d.mts.map +0 -1
  246. package/dist/node/Plugin.d.ts +0 -4
  247. package/dist/node/Plugin.d.ts.map +0 -1
  248. package/dist/node/Witness.d.cts +0 -10
  249. package/dist/node/Witness.d.cts.map +0 -1
  250. package/dist/node/Witness.d.mts +0 -10
  251. package/dist/node/Witness.d.mts.map +0 -1
  252. package/dist/node/Witness.d.ts +0 -10
  253. package/dist/node/Witness.d.ts.map +0 -1
  254. package/dist/node/index.cjs +0 -365
  255. package/dist/node/index.cjs.map +0 -1
  256. package/dist/node/index.d.cts +0 -4
  257. package/dist/node/index.d.cts.map +0 -1
  258. package/dist/node/index.d.mts +0 -4
  259. package/dist/node/index.d.mts.map +0 -1
  260. package/dist/node/index.d.ts.map +0 -1
  261. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.cts +0 -4
  262. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.cts.map +0 -1
  263. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.mts +0 -4
  264. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.mts.map +0 -1
  265. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.ts +0 -4
  266. package/dist/node/lib/collectionMetrics/getNftCollectionMetrics.d.ts.map +0 -1
  267. package/dist/node/lib/collectionMetrics/index.d.cts +0 -2
  268. package/dist/node/lib/collectionMetrics/index.d.cts.map +0 -1
  269. package/dist/node/lib/collectionMetrics/index.d.mts +0 -2
  270. package/dist/node/lib/collectionMetrics/index.d.mts.map +0 -1
  271. package/dist/node/lib/collectionMetrics/index.d.ts +0 -2
  272. package/dist/node/lib/collectionMetrics/index.d.ts.map +0 -1
  273. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts +0 -3
  274. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.cts.map +0 -1
  275. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts +0 -3
  276. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.mts.map +0 -1
  277. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts +0 -3
  278. package/dist/node/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.d.ts.map +0 -1
  279. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts +0 -3
  280. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.cts.map +0 -1
  281. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts +0 -3
  282. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.mts.map +0 -1
  283. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts +0 -3
  284. package/dist/node/lib/collectionMetrics/lib/calculatePropertyDistribution.d.ts.map +0 -1
  285. package/dist/node/lib/collectionMetrics/lib/distribution.d.cts +0 -6
  286. package/dist/node/lib/collectionMetrics/lib/distribution.d.cts.map +0 -1
  287. package/dist/node/lib/collectionMetrics/lib/distribution.d.mts +0 -6
  288. package/dist/node/lib/collectionMetrics/lib/distribution.d.mts.map +0 -1
  289. package/dist/node/lib/collectionMetrics/lib/distribution.d.ts +0 -6
  290. package/dist/node/lib/collectionMetrics/lib/distribution.d.ts.map +0 -1
  291. package/dist/node/lib/collectionMetrics/lib/index.d.cts +0 -4
  292. package/dist/node/lib/collectionMetrics/lib/index.d.cts.map +0 -1
  293. package/dist/node/lib/collectionMetrics/lib/index.d.mts +0 -4
  294. package/dist/node/lib/collectionMetrics/lib/index.d.mts.map +0 -1
  295. package/dist/node/lib/collectionMetrics/lib/index.d.ts +0 -4
  296. package/dist/node/lib/collectionMetrics/lib/index.d.ts.map +0 -1
  297. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts +0 -3
  298. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.cts.map +0 -1
  299. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts +0 -3
  300. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.mts.map +0 -1
  301. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts +0 -3
  302. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromOutcomes.d.ts.map +0 -1
  303. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts +0 -3
  304. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.cts.map +0 -1
  305. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts +0 -3
  306. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.mts.map +0 -1
  307. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts +0 -3
  308. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.d.ts.map +0 -1
  309. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts +0 -3
  310. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.cts.map +0 -1
  311. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts +0 -3
  312. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.mts.map +0 -1
  313. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts +0 -3
  314. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/binomial/index.d.ts.map +0 -1
  315. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts +0 -2
  316. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.cts.map +0 -1
  317. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts +0 -2
  318. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.mts.map +0 -1
  319. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts +0 -2
  320. package/dist/node/lib/collectionMetrics/lib/probabilityDistributions/index.d.ts.map +0 -1
  321. package/dist/node/lib/contractHasFunctions.d.cts +0 -3
  322. package/dist/node/lib/contractHasFunctions.d.cts.map +0 -1
  323. package/dist/node/lib/contractHasFunctions.d.mts +0 -3
  324. package/dist/node/lib/contractHasFunctions.d.mts.map +0 -1
  325. package/dist/node/lib/contractHasFunctions.d.ts +0 -3
  326. package/dist/node/lib/contractHasFunctions.d.ts.map +0 -1
  327. package/dist/node/lib/getNftCollectionNfts.d.cts +0 -4
  328. package/dist/node/lib/getNftCollectionNfts.d.cts.map +0 -1
  329. package/dist/node/lib/getNftCollectionNfts.d.mts +0 -4
  330. package/dist/node/lib/getNftCollectionNfts.d.mts.map +0 -1
  331. package/dist/node/lib/getNftCollectionNfts.d.ts +0 -4
  332. package/dist/node/lib/getNftCollectionNfts.d.ts.map +0 -1
  333. package/dist/node/lib/index.d.cts +0 -5
  334. package/dist/node/lib/index.d.cts.map +0 -1
  335. package/dist/node/lib/index.d.mts +0 -5
  336. package/dist/node/lib/index.d.mts.map +0 -1
  337. package/dist/node/lib/index.d.ts +0 -5
  338. package/dist/node/lib/index.d.ts.map +0 -1
  339. package/dist/node/lib/nonEvaluableContractAddresses.d.cts +0 -2
  340. package/dist/node/lib/nonEvaluableContractAddresses.d.cts.map +0 -1
  341. package/dist/node/lib/nonEvaluableContractAddresses.d.mts +0 -2
  342. package/dist/node/lib/nonEvaluableContractAddresses.d.mts.map +0 -1
  343. package/dist/node/lib/nonEvaluableContractAddresses.d.ts +0 -2
  344. package/dist/node/lib/nonEvaluableContractAddresses.d.ts.map +0 -1
  345. package/dist/node/lib/tokenTypes.d.cts +0 -6
  346. package/dist/node/lib/tokenTypes.d.cts.map +0 -1
  347. package/dist/node/lib/tokenTypes.d.mts +0 -6
  348. package/dist/node/lib/tokenTypes.d.mts.map +0 -1
  349. package/dist/node/lib/tokenTypes.d.ts +0 -6
  350. package/dist/node/lib/tokenTypes.d.ts.map +0 -1
  351. package/dist/node/lib/tryCall.d.cts +0 -2
  352. package/dist/node/lib/tryCall.d.cts.map +0 -1
  353. package/dist/node/lib/tryCall.d.mts +0 -2
  354. package/dist/node/lib/tryCall.d.mts.map +0 -1
  355. package/dist/node/lib/tryCall.d.ts +0 -2
  356. package/dist/node/lib/tryCall.d.ts.map +0 -1
@@ -1,4 +1,27 @@
1
- export * from './lib/index.ts';
2
- export { CryptoNftCollectionWitnessPlugin, CryptoNftCollectionWitnessPlugin as default } from './Plugin.ts';
3
- export * from './Witness.ts';
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { NftCollectionMetrics, NftCollectionWitnessConfig, NftCollectionWitnessQuery, NftCollectionInfo } from '@xyo-network/crypto-nft-collection-payload-plugin';
2
+ import { NftInfoFields, TokenType, NftInfo } from '@xyo-network/crypto-nft-payload-plugin';
3
+ import { Provider, Interface } from 'ethers';
4
+ import { PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin';
5
+ import { Schema } from '@xyo-network/payload-model';
6
+ import { EvmWitnessParams, AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
7
+
8
+ declare const getNftCollectionMetrics: (nfts: NftInfoFields[]) => NftCollectionMetrics;
9
+
10
+ declare const contractHasFunctions: (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => Promise<boolean>;
11
+
12
+ declare const getNftCollectionNfts: (contractAddress: string, provider: Provider, types?: TokenType[], maxNfts?: number) => Promise<NftInfo[]>;
13
+
14
+ declare const isErc1155: (provider: Provider, address: string) => Promise<boolean>;
15
+ declare const isErc721: (provider: Provider, address: string) => Promise<boolean>;
16
+ declare const tokenTypes: (provider: Provider, address: string) => Promise<TokenType[]>;
17
+
18
+ type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>;
19
+ declare class CryptoNftCollectionWitness<TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {
20
+ static readonly configSchemas: Schema[];
21
+ static readonly defaultConfigSchema: Schema;
22
+ protected observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]>;
23
+ }
24
+
25
+ declare const CryptoNftCollectionWitnessPlugin: () => PayloadSetWitnessPlugin<CryptoNftCollectionWitness>;
26
+
27
+ export { CryptoNftCollectionWitness, type CryptoNftCollectionWitnessParams, CryptoNftCollectionWitnessPlugin, contractHasFunctions, CryptoNftCollectionWitnessPlugin as default, getNftCollectionMetrics, getNftCollectionNfts, isErc1155, isErc721, tokenTypes };
@@ -1,8 +1,5 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts
5
- var calculateAllPropertiesDistribution = /* @__PURE__ */ __name((array) => {
2
+ var calculateAllPropertiesDistribution = (array) => {
6
3
  const distribution = {};
7
4
  for (const item of array) {
8
5
  for (const property in item) {
@@ -11,12 +8,12 @@ var calculateAllPropertiesDistribution = /* @__PURE__ */ __name((array) => {
11
8
  if (value !== void 0 && value !== null) {
12
9
  const valueString = value.toString();
13
10
  if (!distribution[property]) {
14
- distribution[property] = {
15
- [valueString]: 1
16
- };
11
+ distribution[property] = { [valueString]: 1 };
17
12
  } else if (distribution[property][valueString]) {
13
+ ;
18
14
  distribution[property][valueString] += 1;
19
15
  } else {
16
+ ;
20
17
  distribution[property][valueString] = 1;
21
18
  }
22
19
  }
@@ -24,70 +21,43 @@ var calculateAllPropertiesDistribution = /* @__PURE__ */ __name((array) => {
24
21
  }
25
22
  }
26
23
  return distribution;
27
- }, "calculateAllPropertiesDistribution");
24
+ };
28
25
 
29
26
  // src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts
30
- var calculateBinomialParamsFromProbability = /* @__PURE__ */ __name((n, p) => {
27
+ var calculateBinomialParamsFromProbability = (n, p) => {
31
28
  const mean = n * p;
32
29
  const variance = n * p * (1 - p);
33
30
  const stdDev = Math.sqrt(variance);
34
- return {
35
- mean,
36
- p,
37
- stdDev,
38
- variance
39
- };
40
- }, "calculateBinomialParamsFromProbability");
31
+ return { mean, p, stdDev, variance };
32
+ };
41
33
 
42
34
  // src/lib/collectionMetrics/getNftCollectionMetrics.ts
43
- var getNftCollectionMetrics = /* @__PURE__ */ __name((nfts) => {
35
+ var getNftCollectionMetrics = (nfts) => {
44
36
  const traits = nfts.map((nft) => nft?.metadata?.attributes).filter((v) => v !== void 0).map((attributes2) => {
45
- return Object.fromEntries(attributes2.map((attribute) => [
46
- attribute.trait_type,
47
- attribute.value
48
- ]));
37
+ return Object.fromEntries(attributes2.map((attribute) => [attribute.trait_type, attribute.value]));
49
38
  });
50
39
  const distribution = calculateAllPropertiesDistribution(traits);
51
40
  const n = nfts.length;
52
- const attributes = Object.fromEntries(Object.entries(distribution).filter((v) => v[1] !== void 0).map(([trait, entries]) => {
53
- const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0);
54
- const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n);
55
- const values = Object.fromEntries(Object.entries(entries).map(([value, traitValueCount]) => {
56
- const { p: p2 } = calculateBinomialParamsFromProbability(n, traitValueCount / n);
57
- const metrics = {
58
- binomial: {
59
- p: p2
60
- },
61
- count: traitValueCount
62
- };
63
- return [
64
- value,
65
- metrics
66
- ];
67
- }));
68
- return [
69
- trait,
70
- {
71
- metrics: {
72
- binomial: {
73
- p
74
- },
75
- count: traitCount
76
- },
77
- values
78
- }
79
- ];
80
- }));
81
- return {
82
- metadata: {
83
- attributes
84
- }
85
- };
86
- }, "getNftCollectionMetrics");
41
+ const attributes = Object.fromEntries(
42
+ Object.entries(distribution).filter((v) => v[1] !== void 0).map(([trait, entries]) => {
43
+ const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0);
44
+ const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n);
45
+ const values = Object.fromEntries(
46
+ Object.entries(entries).map(([value, traitValueCount]) => {
47
+ const { p: p2 } = calculateBinomialParamsFromProbability(n, traitValueCount / n);
48
+ const metrics = { binomial: { p: p2 }, count: traitValueCount };
49
+ return [value, metrics];
50
+ })
51
+ );
52
+ return [trait, { metrics: { binomial: { p }, count: traitCount }, values }];
53
+ })
54
+ );
55
+ return { metadata: { attributes } };
56
+ };
87
57
 
88
58
  // src/lib/contractHasFunctions.ts
89
59
  import { assertEx } from "@xylabs/assert";
90
- var contractHasFunctions = /* @__PURE__ */ __name(async (provider, address, contractInterface, functionNames) => {
60
+ var contractHasFunctions = async (provider, address, contractInterface, functionNames) => {
91
61
  try {
92
62
  const bytecode = await provider.getCode(address, "latest");
93
63
  for (const functionName of functionNames) {
@@ -103,7 +73,7 @@ var contractHasFunctions = /* @__PURE__ */ __name(async (provider, address, cont
103
73
  console.log(error);
104
74
  return false;
105
75
  }
106
- }, "contractHasFunctions");
76
+ };
107
77
 
108
78
  // src/lib/getNftCollectionNfts.ts
109
79
  import { AxiosJson } from "@xylabs/axios";
@@ -117,23 +87,14 @@ import { checkIpfsUrl } from "@xyo-network/witness-blockchain-abstract";
117
87
 
118
88
  // src/lib/tokenTypes.ts
119
89
  import { ERC721__factory, ERC1155URIStorage__factory } from "@xyo-network/open-zeppelin-typechain";
120
- var isErc1155 = /* @__PURE__ */ __name(async (provider, address) => {
121
- return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), [
122
- "uri"
123
- ]);
124
- }, "isErc1155");
125
- var isErc721 = /* @__PURE__ */ __name(async (provider, address) => {
126
- return await contractHasFunctions(provider, address, ERC721__factory.createInterface(), [
127
- "name",
128
- "symbol",
129
- "tokenURI"
130
- ]);
131
- }, "isErc721");
132
- var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
133
- const [erc721, erc1155] = await Promise.all([
134
- isErc721(provider, address),
135
- isErc1155(provider, address)
136
- ]);
90
+ var isErc1155 = async (provider, address) => {
91
+ return await contractHasFunctions(provider, address, ERC1155URIStorage__factory.createInterface(), ["uri"]);
92
+ };
93
+ var isErc721 = async (provider, address) => {
94
+ return await contractHasFunctions(provider, address, ERC721__factory.createInterface(), ["name", "symbol", "tokenURI"]);
95
+ };
96
+ var tokenTypes = async (provider, address) => {
97
+ const [erc721, erc1155] = await Promise.all([isErc721(provider, address), isErc1155(provider, address)]);
137
98
  const result = [];
138
99
  if (erc721) {
139
100
  result.push("ERC721");
@@ -142,10 +103,10 @@ var tokenTypes = /* @__PURE__ */ __name(async (provider, address) => {
142
103
  result.push("ERC1155");
143
104
  }
144
105
  return result;
145
- }, "tokenTypes");
106
+ };
146
107
 
147
108
  // src/lib/tryCall.ts
148
- var tryCall = /* @__PURE__ */ __name(async (func, name) => {
109
+ var tryCall = async (func, name) => {
149
110
  try {
150
111
  return await func();
151
112
  } catch (ex) {
@@ -155,66 +116,59 @@ var tryCall = /* @__PURE__ */ __name(async (func, name) => {
155
116
  }
156
117
  return void 0;
157
118
  }
158
- }, "tryCall");
119
+ };
159
120
 
160
121
  // src/lib/getNftCollectionNfts.ts
161
122
  var ipfsGateway = "5d7b6582.beta.decentralnetworkservices.com";
162
123
  function range(size, startAt = 0) {
163
- return [
164
- ...Array(size).keys()
165
- ].map((i) => i + startAt);
124
+ return [...Array(size).keys()].map((i) => i + startAt);
166
125
  }
167
- __name(range, "range");
168
- var getNftCollectionNfts = /* @__PURE__ */ __name(async (contractAddress, provider, types, maxNfts = 100) => {
126
+ var getNftCollectionNfts = async (contractAddress, provider, types, maxNfts = 100) => {
169
127
  try {
170
128
  const block = await provider.getBlockNumber();
171
129
  const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block);
172
130
  const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block);
173
131
  const implementation = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation;
174
- const axios = new AxiosJson({
175
- timeout: 2e3
176
- });
132
+ const axios = new AxiosJson({ timeout: 2e3 });
177
133
  const enumerable = ERC721Enumerable__factory.connect(implementation, provider);
178
134
  const storage = ERC721URIStorage__factory.connect(implementation, provider);
179
135
  const supply1155 = ERC1155Supply__factory.connect(implementation, provider);
180
136
  const finalTypes = types ?? await tokenTypes(provider, implementation);
181
137
  const maxNftsArray = range(maxNfts);
182
- const result = (await Promise.all(maxNftsArray.map(async (_value, i) => {
183
- const tokenId = await tryCall(async () => await enumerable.tokenByIndex(i, {
184
- blockTag: block
185
- })) ?? BigInt(i);
186
- if (tokenId !== void 0) {
187
- const supply = finalTypes.includes(toTokenType("ERC1155")) ? await tryCall(async () => await supply1155["totalSupply(uint256)"](tokenId)) ?? "0x01" : "0x01";
188
- const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, {
189
- blockTag: block
190
- }));
191
- const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : void 0;
192
- let metadata;
193
- if (checkedMetaDataUri !== void 0) {
194
- try {
195
- metadata = (await axios.get(checkedMetaDataUri)).data;
196
- } catch (ex) {
197
- const error = ex;
198
- console.error(`Get Metadata failed: ${error.message}`);
138
+ const result = (await Promise.all(
139
+ maxNftsArray.map(async (_value, i) => {
140
+ const tokenId = await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block })) ?? BigInt(i);
141
+ if (tokenId !== void 0) {
142
+ const supply = finalTypes.includes(toTokenType("ERC1155")) ? await tryCall(async () => await supply1155["totalSupply(uint256)"](tokenId)) ?? "0x01" : "0x01";
143
+ const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }));
144
+ const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : void 0;
145
+ let metadata;
146
+ if (checkedMetaDataUri !== void 0) {
147
+ try {
148
+ metadata = (await axios.get(checkedMetaDataUri)).data;
149
+ } catch (ex) {
150
+ const error = ex;
151
+ console.error(`Get Metadata failed: ${error.message}`);
152
+ }
199
153
  }
154
+ const info = {
155
+ address: contractAddress,
156
+ chainId: Number((await provider.getNetwork()).chainId),
157
+ metadata,
158
+ metadataUri,
159
+ schema: NftSchema,
160
+ supply: `0x${supply.toString(16)}`,
161
+ tokenId: `0x${tokenId.toString(16)}`,
162
+ type: finalTypes.at(0),
163
+ types: finalTypes
164
+ };
165
+ if (implementation !== contractAddress) {
166
+ info.implementation = implementation;
167
+ }
168
+ return info;
200
169
  }
201
- const info = {
202
- address: contractAddress,
203
- chainId: Number((await provider.getNetwork()).chainId),
204
- metadata,
205
- metadataUri,
206
- schema: NftSchema,
207
- supply: `0x${supply.toString(16)}`,
208
- tokenId: `0x${tokenId.toString(16)}`,
209
- type: finalTypes.at(0),
210
- types: finalTypes
211
- };
212
- if (implementation !== contractAddress) {
213
- info.implementation = implementation;
214
- }
215
- return info;
216
- }
217
- }))).filter(exists);
170
+ })
171
+ )).filter(exists);
218
172
  return result;
219
173
  } catch (ex) {
220
174
  const error = ex;
@@ -222,7 +176,7 @@ var getNftCollectionNfts = /* @__PURE__ */ __name(async (contractAddress, provid
222
176
  console.log(error.stack);
223
177
  return [];
224
178
  }
225
- }, "getNftCollectionNfts");
179
+ };
226
180
 
227
181
  // src/Plugin.ts
228
182
  import { NftSchema as NftSchema2 } from "@xyo-network/crypto-nft-payload-plugin";
@@ -232,7 +186,11 @@ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
232
186
  // src/Witness.ts
233
187
  import { assertEx as assertEx2 } from "@xylabs/assert";
234
188
  import { EthAddress } from "@xylabs/eth-address";
235
- import { isNftCollectionWitnessQuery, NftCollectionSchema, NftCollectionWitnessConfigSchema } from "@xyo-network/crypto-nft-collection-payload-plugin";
189
+ import {
190
+ isNftCollectionWitnessQuery,
191
+ NftCollectionSchema,
192
+ NftCollectionWitnessConfigSchema
193
+ } from "@xyo-network/crypto-nft-collection-payload-plugin";
236
194
  import { ERC721Enumerable__factory as ERC721Enumerable__factory2 } from "@xyo-network/open-zeppelin-typechain";
237
195
  import { PayloadBuilder } from "@xyo-network/payload-builder";
238
196
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
@@ -244,73 +202,69 @@ function resolvedValue(settled, assert) {
244
202
  }
245
203
  return settled.status === "fulfilled" ? settled.value : void 0;
246
204
  }
247
- __name(resolvedValue, "resolvedValue");
248
205
  var CryptoNftCollectionWitness = class extends AbstractEvmWitness {
249
- static {
250
- __name(this, "CryptoNftCollectionWitness");
251
- }
252
- static configSchemas = [
253
- ...super.configSchemas,
254
- NftCollectionWitnessConfigSchema
255
- ];
206
+ static configSchemas = [...super.configSchemas, NftCollectionWitnessConfigSchema];
256
207
  static defaultConfigSchema = NftCollectionWitnessConfigSchema;
257
208
  async observeHandler(payloads) {
258
209
  await this.started("throw");
259
210
  await this.getProviders();
260
211
  const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? [];
261
- const observations = await Promise.all(queries.map(async (query) => {
262
- const chainId = assertEx2(query?.chainId || this.config.chainId, () => "params.chainId is required");
263
- const provider = await this.getProvider(true, true);
264
- const address = assertEx2(EthAddress.parse(assertEx2(query?.address || this.config.address, () => "params.address is required")), () => "Failed to parse params.address").toString();
265
- const erc721Enumerable = ERC721Enumerable__factory2.connect(address, provider);
266
- const maxNfts = query?.maxNfts || defaultMaxNfts;
267
- const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([
268
- erc721Enumerable.name(),
269
- erc721Enumerable.symbol(),
270
- erc721Enumerable.totalSupply(),
271
- tokenTypes(provider, address),
272
- this.archivistInstance()
273
- ]);
274
- const types = resolvedValue(typesSettled, true);
275
- const nfts = await getNftCollectionNfts(address, provider, types, maxNfts);
276
- const metrics = getNftCollectionMetrics(nfts);
277
- const archivist = resolvedValue(archivistSettled);
278
- const [sources] = await Promise.all([
279
- // Hash all the payloads
280
- Promise.all(nfts.map((nft) => PayloadBuilder.dataHash(nft))),
281
- // Insert them into the archivist if we have one
282
- archivist ? archivist.insert(nfts) : NoOp
283
- ]);
284
- const payload = {
285
- address,
286
- chainId,
287
- metrics,
288
- name: resolvedValue(name, true),
289
- schema: NftCollectionSchema,
290
- sources,
291
- symbol: resolvedValue(symbol, true),
292
- total: Number(resolvedValue(total, true)),
293
- type: types.at(0),
294
- types
295
- };
296
- return payload;
297
- }));
212
+ const observations = await Promise.all(
213
+ queries.map(async (query) => {
214
+ const chainId = assertEx2(query?.chainId || this.config.chainId, () => "params.chainId is required");
215
+ const provider = await this.getProvider(true, true);
216
+ const address = assertEx2(
217
+ EthAddress.parse(assertEx2(query?.address || this.config.address, () => "params.address is required")),
218
+ () => "Failed to parse params.address"
219
+ ).toString();
220
+ const erc721Enumerable = ERC721Enumerable__factory2.connect(address, provider);
221
+ const maxNfts = query?.maxNfts || defaultMaxNfts;
222
+ const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([
223
+ erc721Enumerable.name(),
224
+ erc721Enumerable.symbol(),
225
+ erc721Enumerable.totalSupply(),
226
+ tokenTypes(provider, address),
227
+ this.archivistInstance()
228
+ ]);
229
+ const types = resolvedValue(typesSettled, true);
230
+ const nfts = await getNftCollectionNfts(address, provider, types, maxNfts);
231
+ const metrics = getNftCollectionMetrics(nfts);
232
+ const archivist = resolvedValue(archivistSettled);
233
+ const [sources] = await Promise.all([
234
+ // Hash all the payloads
235
+ Promise.all(nfts.map((nft) => PayloadBuilder.dataHash(nft))),
236
+ // Insert them into the archivist if we have one
237
+ archivist ? archivist.insert(nfts) : NoOp
238
+ ]);
239
+ const payload = {
240
+ address,
241
+ chainId,
242
+ metrics,
243
+ name: resolvedValue(name, true),
244
+ schema: NftCollectionSchema,
245
+ sources,
246
+ symbol: resolvedValue(symbol, true),
247
+ total: Number(resolvedValue(total, true)),
248
+ type: types.at(0),
249
+ types
250
+ };
251
+ return payload;
252
+ })
253
+ );
298
254
  return observations.flat();
299
255
  }
300
256
  };
301
257
 
302
258
  // src/Plugin.ts
303
- var CryptoNftCollectionWitnessPlugin = /* @__PURE__ */ __name(() => createPayloadSetWitnessPlugin({
304
- required: {
305
- [NftSchema2]: 1
306
- },
307
- schema: PayloadSetSchema
308
- }, {
309
- witness: /* @__PURE__ */ __name(async (params) => {
310
- const result = await CryptoNftCollectionWitness.create(params);
311
- return result;
312
- }, "witness")
313
- }), "CryptoNftCollectionWitnessPlugin");
259
+ var CryptoNftCollectionWitnessPlugin = () => createPayloadSetWitnessPlugin(
260
+ { required: { [NftSchema2]: 1 }, schema: PayloadSetSchema },
261
+ {
262
+ witness: async (params) => {
263
+ const result = await CryptoNftCollectionWitness.create(params);
264
+ return result;
265
+ }
266
+ }
267
+ );
314
268
  export {
315
269
  CryptoNftCollectionWitness,
316
270
  CryptoNftCollectionWitnessPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts","../../src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts","../../src/lib/collectionMetrics/getNftCollectionMetrics.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftCollectionNfts.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { Distribution } from './distribution.ts'\n\nexport const calculateAllPropertiesDistribution = <T>(array: T[]): Distribution<T> => {\n const distribution: Distribution<T> = {}\n\n for (const item of array) {\n for (const property in item) {\n if (Object.prototype.hasOwnProperty.call(item, property)) {\n const value = item[property as keyof T]\n if (value !== undefined && value !== null) {\n const valueString = value.toString()\n if (!distribution[property]) {\n distribution[property] = { [valueString]: 1 }\n } else if (distribution[property]![valueString]) {\n ;(distribution[property] as Record<string, number>)[valueString] += 1\n } else {\n ;(distribution[property] as Record<string, number>)[valueString] = 1\n }\n }\n }\n }\n }\n\n return distribution\n}\n","import { BinomialDistributionParameters } from '@xyo-network/crypto-nft-collection-payload-plugin'\n\n/**\n * Calculates the parameters of a binomial distribution given the number of trials and success probability\n * @param n Number of trials\n * @param p Success probability\n * @returns The binomial distribution parameters\n */\nexport const calculateBinomialParamsFromProbability = (n: number, p: number): BinomialDistributionParameters => {\n // Mean (µ)\n const mean = n * p\n\n // Variance (σ^2)\n const variance = n * p * (1 - p)\n\n // Standard Deviation (σ)\n const stdDev = Math.sqrt(variance)\n\n return { mean, p, stdDev, variance }\n}\n","import { NftCollectionMetrics, NftTraitMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { NftInfoFields, OpenSeaNftAttribute } from '@xyo-network/crypto-nft-payload-plugin'\n\nimport { calculateAllPropertiesDistribution, calculateBinomialParamsFromProbability } from './lib/index.ts'\n\ntype TraitDistributionEntry = [string, { [key: string]: number }]\n\nexport const getNftCollectionMetrics = (nfts: NftInfoFields[]): NftCollectionMetrics => {\n const traits = nfts\n .map(nft => nft?.metadata?.attributes as OpenSeaNftAttribute[] | undefined)\n .filter((v): v is OpenSeaNftAttribute[] => v !== undefined)\n .map((attributes) => {\n return Object.fromEntries(attributes.map(attribute => [attribute.trait_type, attribute.value]))\n })\n const distribution = calculateAllPropertiesDistribution(traits)\n const n = nfts.length\n const attributes = Object.fromEntries(\n Object.entries(distribution)\n .filter((v): v is TraitDistributionEntry => v[1] !== undefined)\n .map(([trait, entries]) => {\n const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0)\n const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n)\n const values = Object.fromEntries(\n Object.entries(entries).map(([value, traitValueCount]) => {\n const { p } = calculateBinomialParamsFromProbability(n, traitValueCount / n)\n const metrics: NftTraitMetrics = { binomial: { p }, count: traitValueCount }\n return [value, metrics]\n }),\n )\n return [trait, { metrics: { binomial: { p }, count: traitCount }, values }]\n }),\n )\n return { metadata: { attributes } }\n}\n","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 { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { isHexZero } from '@xylabs/hex'\nimport { NftInfo, NftMetadata, NftSchema, TokenType, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\n\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nfunction range(size: number, startAt: number = 0): ReadonlyArray<number> {\n return [...Array(size).keys()].map(i => i + startAt)\n}\n\nexport const getNftCollectionNfts = 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 types?: TokenType[],\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 maxNfts = 100,\n): Promise<NftInfo[]> => {\n try {\n const block = await provider.getBlockNumber()\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block)\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable = ERC721Enumerable__factory.connect(implementation, provider)\n const storage = ERC721URIStorage__factory.connect(implementation, provider)\n const supply1155 = ERC1155Supply__factory.connect(implementation, provider)\n const finalTypes = types ?? (await tokenTypes(provider, implementation))\n\n const maxNftsArray = range(maxNfts)\n\n const result: NftInfo[] = (\n await Promise.all(\n maxNftsArray.map(async (_value, i) => {\n const tokenId = (await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block }))) ?? BigInt(i)\n if (tokenId !== undefined) {\n const supply\n = finalTypes.includes(toTokenType('ERC1155'))\n ? ((await tryCall(async () => await supply1155['totalSupply(uint256)'](tokenId))) ?? '0x01')\n : '0x01'\n const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }))\n const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : undefined\n let metadata: NftMetadata | undefined\n if (checkedMetaDataUri !== undefined) {\n try {\n metadata = (await axios.get(checkedMetaDataUri)).data\n } catch (ex) {\n const error = ex as Error\n console.error(`Get Metadata failed: ${error.message}`)\n }\n }\n\n const info: NftInfo = {\n address: contractAddress,\n chainId: Number((await provider.getNetwork()).chainId),\n metadata,\n metadataUri,\n schema: NftSchema,\n supply: `0x${supply.toString(16)}`,\n tokenId: `0x${tokenId.toString(16)}`,\n type: finalTypes.at(0),\n types: finalTypes,\n }\n if (implementation !== contractAddress) {\n info.implementation = implementation\n }\n return info\n }\n }),\n )\n ).filter(exists)\n return result\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionNfts failed: [${error.name}] ${error.message}`)\n console.log(error.stack)\n return []\n }\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155URIStorage__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, ERC721__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 { 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 { CryptoNftCollectionWitness } from './Witness.ts'\n\nexport const CryptoNftCollectionWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoNftCollectionWitness> =>\n createPayloadSetWitnessPlugin<CryptoNftCollectionWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoNftCollectionWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n isNftCollectionWitnessQuery,\n NftCollectionInfo,\n NftCollectionSchema,\n NftCollectionWitnessConfig,\n NftCollectionWitnessConfigSchema,\n NftCollectionWitnessQuery,\n} from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftCollectionMetrics, getNftCollectionNfts, tokenTypes } from './lib/index.ts'\n\nexport type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>\n\nconst defaultMaxNfts = 100\n\n/**\n * A \"no operation\" Promise to be used\n * when no action is desired but a Promise\n * is required to be returned\n */\nconst NoOp = Promise.resolve()\n\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert: true): T\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: false): T | undefined\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: boolean) {\n if (assert && settled.status === 'rejected') {\n throw settled.reason\n }\n return settled.status === 'fulfilled' ? settled.value : undefined\n}\n\nexport class CryptoNftCollectionWitness<\n TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams,\n> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftCollectionWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftCollectionWitnessConfigSchema\n\n protected override async observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]> {\n await this.started('throw')\n await this.getProviders() // make sure cache clears\n const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map<Promise<NftCollectionInfo>>(async (query) => {\n const chainId = assertEx(query?.chainId || this.config.chainId, () => 'params.chainId is required')\n const provider = await this.getProvider(true, true)\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\n const erc721Enumerable = ERC721Enumerable__factory.connect(address, provider)\n\n const maxNfts = query?.maxNfts || defaultMaxNfts\n const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([\n erc721Enumerable.name(),\n erc721Enumerable.symbol(),\n erc721Enumerable.totalSupply(),\n tokenTypes(provider, address),\n this.archivistInstance(),\n ])\n const types = resolvedValue(typesSettled, true)\n const nfts = await getNftCollectionNfts(address, provider, types, maxNfts)\n const metrics = getNftCollectionMetrics(nfts)\n const archivist = resolvedValue(archivistSettled)\n const [sources] = await Promise.all([\n // Hash all the payloads\n Promise.all(nfts.map(nft => PayloadBuilder.dataHash(nft))),\n // Insert them into the archivist if we have one\n archivist ? archivist.insert(nfts) : NoOp,\n ])\n const payload: NftCollectionInfo = {\n address,\n chainId,\n metrics,\n name: resolvedValue(name, true),\n schema: NftCollectionSchema,\n sources,\n symbol: resolvedValue(symbol, true),\n total: Number(resolvedValue(total, true)),\n type: types.at(0),\n types,\n }\n return payload\n }),\n )\n return observations.flat()\n }\n}\n"],"mappings":"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","names":["calculateAllPropertiesDistribution","array","distribution","item","property","Object","prototype","hasOwnProperty","call","value","undefined","valueString","toString","calculateBinomialParamsFromProbability","n","p","mean","variance","stdDev","Math","sqrt","getNftCollectionMetrics","nfts","traits","map","nft","metadata","attributes","filter","v","undefined","Object","fromEntries","attribute","trait_type","value","distribution","calculateAllPropertiesDistribution","n","length","entries","trait","traitCount","values","reduce","prev","curr","p","calculateBinomialParamsFromProbability","traitValueCount","metrics","binomial","count","assertEx","contractHasFunctions","provider","address","contractInterface","functionNames","bytecode","getCode","functionName","selector","assertEx","getFunction","includes","slice","ex","error","console","log","AxiosJson","exists","isHexZero","NftSchema","toTokenType","getErc1822SlotStatus","getErc1967SlotStatus","ERC721Enumerable__factory","ERC721URIStorage__factory","ERC1155Supply__factory","checkIpfsUrl","ERC721__factory","ERC1155URIStorage__factory","isErc1155","provider","address","contractHasFunctions","ERC1155URIStorage__factory","createInterface","isErc721","ERC721__factory","tokenTypes","erc721","erc1155","Promise","all","result","push","tryCall","func","name","ex","error","console","log","message","undefined","ipfsGateway","range","size","startAt","Array","keys","map","i","getNftCollectionNfts","contractAddress","provider","types","maxNfts","block","getBlockNumber","erc1967Status","getErc1967SlotStatus","erc1822Status","getErc1822SlotStatus","implementation","slots","isHexZero","axios","AxiosJson","timeout","enumerable","ERC721Enumerable__factory","connect","storage","ERC721URIStorage__factory","supply1155","ERC1155Supply__factory","finalTypes","tokenTypes","maxNftsArray","result","Promise","all","_value","tokenId","tryCall","tokenByIndex","blockTag","BigInt","undefined","supply","includes","toTokenType","metadataUri","tokenURI","checkedMetaDataUri","checkIpfsUrl","metadata","get","data","ex","error","console","message","info","address","chainId","Number","getNetwork","schema","NftSchema","toString","type","at","filter","exists","name","log","stack","NftSchema","PayloadSetSchema","createPayloadSetWitnessPlugin","assertEx","EthAddress","isNftCollectionWitnessQuery","NftCollectionSchema","NftCollectionWitnessConfigSchema","ERC721Enumerable__factory","PayloadBuilder","AbstractEvmWitness","defaultMaxNfts","NoOp","Promise","resolve","resolvedValue","settled","assert","status","reason","value","undefined","CryptoNftCollectionWitness","AbstractEvmWitness","configSchemas","NftCollectionWitnessConfigSchema","defaultConfigSchema","observeHandler","payloads","started","getProviders","queries","filter","isNftCollectionWitnessQuery","observations","all","map","query","chainId","assertEx","config","provider","getProvider","address","EthAddress","parse","toString","erc721Enumerable","ERC721Enumerable__factory","connect","maxNfts","name","symbol","total","typesSettled","archivistSettled","allSettled","totalSupply","tokenTypes","archivistInstance","types","nfts","getNftCollectionNfts","metrics","getNftCollectionMetrics","archivist","sources","nft","PayloadBuilder","dataHash","insert","payload","schema","NftCollectionSchema","Number","type","at","flat","CryptoNftCollectionWitnessPlugin","createPayloadSetWitnessPlugin","required","NftSchema","schema","PayloadSetSchema","witness","params","result","CryptoNftCollectionWitness","create"]}
1
+ {"version":3,"sources":["../../src/lib/collectionMetrics/lib/calculateAllPropertiesDistribution.ts","../../src/lib/collectionMetrics/lib/probabilityDistributions/binomial/calculateBinomialParamsFromProbability.ts","../../src/lib/collectionMetrics/getNftCollectionMetrics.ts","../../src/lib/contractHasFunctions.ts","../../src/lib/getNftCollectionNfts.ts","../../src/lib/tokenTypes.ts","../../src/lib/tryCall.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { Distribution } from './distribution.ts'\n\nexport const calculateAllPropertiesDistribution = <T>(array: T[]): Distribution<T> => {\n const distribution: Distribution<T> = {}\n\n for (const item of array) {\n for (const property in item) {\n if (Object.prototype.hasOwnProperty.call(item, property)) {\n const value = item[property as keyof T]\n if (value !== undefined && value !== null) {\n const valueString = value.toString()\n if (!distribution[property]) {\n distribution[property] = { [valueString]: 1 }\n } else if (distribution[property]![valueString]) {\n ;(distribution[property] as Record<string, number>)[valueString] += 1\n } else {\n ;(distribution[property] as Record<string, number>)[valueString] = 1\n }\n }\n }\n }\n }\n\n return distribution\n}\n","import { BinomialDistributionParameters } from '@xyo-network/crypto-nft-collection-payload-plugin'\n\n/**\n * Calculates the parameters of a binomial distribution given the number of trials and success probability\n * @param n Number of trials\n * @param p Success probability\n * @returns The binomial distribution parameters\n */\nexport const calculateBinomialParamsFromProbability = (n: number, p: number): BinomialDistributionParameters => {\n // Mean (µ)\n const mean = n * p\n\n // Variance (σ^2)\n const variance = n * p * (1 - p)\n\n // Standard Deviation (σ)\n const stdDev = Math.sqrt(variance)\n\n return { mean, p, stdDev, variance }\n}\n","import { NftCollectionMetrics, NftTraitMetrics } from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { NftInfoFields, OpenSeaNftAttribute } from '@xyo-network/crypto-nft-payload-plugin'\n\nimport { calculateAllPropertiesDistribution, calculateBinomialParamsFromProbability } from './lib/index.ts'\n\ntype TraitDistributionEntry = [string, { [key: string]: number }]\n\nexport const getNftCollectionMetrics = (nfts: NftInfoFields[]): NftCollectionMetrics => {\n const traits = nfts\n .map(nft => nft?.metadata?.attributes as OpenSeaNftAttribute[] | undefined)\n .filter((v): v is OpenSeaNftAttribute[] => v !== undefined)\n .map((attributes) => {\n return Object.fromEntries(attributes.map(attribute => [attribute.trait_type, attribute.value]))\n })\n const distribution = calculateAllPropertiesDistribution(traits)\n const n = nfts.length\n const attributes = Object.fromEntries(\n Object.entries(distribution)\n .filter((v): v is TraitDistributionEntry => v[1] !== undefined)\n .map(([trait, entries]) => {\n const traitCount = Object.values(entries).reduce((prev, curr) => prev + curr, 0)\n const { p } = calculateBinomialParamsFromProbability(nfts.length, traitCount / n)\n const values = Object.fromEntries(\n Object.entries(entries).map(([value, traitValueCount]) => {\n const { p } = calculateBinomialParamsFromProbability(n, traitValueCount / n)\n const metrics: NftTraitMetrics = { binomial: { p }, count: traitValueCount }\n return [value, metrics]\n }),\n )\n return [trait, { metrics: { binomial: { p }, count: traitCount }, values }]\n }),\n )\n return { metadata: { attributes } }\n}\n","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 { AxiosJson } from '@xylabs/axios'\nimport { exists } from '@xylabs/exists'\nimport { isHexZero } from '@xylabs/hex'\nimport { NftInfo, NftMetadata, NftSchema, TokenType, toTokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { ERC721Enumerable__factory, ERC721URIStorage__factory, ERC1155Supply__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { checkIpfsUrl } from '@xyo-network/witness-blockchain-abstract'\nimport { Provider } from 'ethers'\n\nimport { tokenTypes } from './tokenTypes.ts'\nimport { tryCall } from './tryCall.ts'\n\nconst ipfsGateway = '5d7b6582.beta.decentralnetworkservices.com'\n\nfunction range(size: number, startAt: number = 0): ReadonlyArray<number> {\n return [...Array(size).keys()].map(i => i + startAt)\n}\n\nexport const getNftCollectionNfts = 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 types?: TokenType[],\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 maxNfts = 100,\n): Promise<NftInfo[]> => {\n try {\n const block = await provider.getBlockNumber()\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, contractAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, contractAddress, block)\n\n const implementation\n = !erc1967Status.slots.implementation || isHexZero(erc1967Status.slots.implementation)\n ? erc1822Status.implementation\n : erc1967Status.implementation\n\n const axios = new AxiosJson({ timeout: 2000 })\n const enumerable = ERC721Enumerable__factory.connect(implementation, provider)\n const storage = ERC721URIStorage__factory.connect(implementation, provider)\n const supply1155 = ERC1155Supply__factory.connect(implementation, provider)\n const finalTypes = types ?? (await tokenTypes(provider, implementation))\n\n const maxNftsArray = range(maxNfts)\n\n const result: NftInfo[] = (\n await Promise.all(\n maxNftsArray.map(async (_value, i) => {\n const tokenId = (await tryCall(async () => await enumerable.tokenByIndex(i, { blockTag: block }))) ?? BigInt(i)\n if (tokenId !== undefined) {\n const supply\n = finalTypes.includes(toTokenType('ERC1155'))\n ? ((await tryCall(async () => await supply1155['totalSupply(uint256)'](tokenId))) ?? '0x01')\n : '0x01'\n const metadataUri = await tryCall(async () => await storage.tokenURI(tokenId, { blockTag: block }))\n const checkedMetaDataUri = metadataUri ? checkIpfsUrl(metadataUri, ipfsGateway) : undefined\n let metadata: NftMetadata | undefined\n if (checkedMetaDataUri !== undefined) {\n try {\n metadata = (await axios.get(checkedMetaDataUri)).data\n } catch (ex) {\n const error = ex as Error\n console.error(`Get Metadata failed: ${error.message}`)\n }\n }\n\n const info: NftInfo = {\n address: contractAddress,\n chainId: Number((await provider.getNetwork()).chainId),\n metadata,\n metadataUri,\n schema: NftSchema,\n supply: `0x${supply.toString(16)}`,\n tokenId: `0x${tokenId.toString(16)}`,\n type: finalTypes.at(0),\n types: finalTypes,\n }\n if (implementation !== contractAddress) {\n info.implementation = implementation\n }\n return info\n }\n }),\n )\n ).filter(exists)\n return result\n } catch (ex) {\n const error = ex as Error\n console.error(`getNftCollectionNfts failed: [${error.name}] ${error.message}`)\n console.log(error.stack)\n return []\n }\n}\n","import { TokenType } from '@xyo-network/crypto-nft-payload-plugin'\nimport { ERC721__factory, ERC1155URIStorage__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, ERC721__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 { 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 { CryptoNftCollectionWitness } from './Witness.ts'\n\nexport const CryptoNftCollectionWitnessPlugin = (): PayloadSetWitnessPlugin<CryptoNftCollectionWitness> =>\n createPayloadSetWitnessPlugin<CryptoNftCollectionWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoNftCollectionWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { EthAddress } from '@xylabs/eth-address'\nimport {\n isNftCollectionWitnessQuery,\n NftCollectionInfo,\n NftCollectionSchema,\n NftCollectionWitnessConfig,\n NftCollectionWitnessConfigSchema,\n NftCollectionWitnessQuery,\n} from '@xyo-network/crypto-nft-collection-payload-plugin'\nimport { ERC721Enumerable__factory } from '@xyo-network/open-zeppelin-typechain'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\n\nimport { getNftCollectionMetrics, getNftCollectionNfts, tokenTypes } from './lib/index.ts'\n\nexport type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>\n\nconst defaultMaxNfts = 100\n\n/**\n * A \"no operation\" Promise to be used\n * when no action is desired but a Promise\n * is required to be returned\n */\nconst NoOp = Promise.resolve()\n\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert: true): T\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: false): T | undefined\nfunction resolvedValue<T>(settled: PromiseSettledResult<T>, assert?: boolean) {\n if (assert && settled.status === 'rejected') {\n throw settled.reason\n }\n return settled.status === 'fulfilled' ? settled.value : undefined\n}\n\nexport class CryptoNftCollectionWitness<\n TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams,\n> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftCollectionWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftCollectionWitnessConfigSchema\n\n protected override async observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]> {\n await this.started('throw')\n await this.getProviders() // make sure cache clears\n const queries = payloads?.filter(isNftCollectionWitnessQuery) ?? []\n const observations = await Promise.all(\n queries.map<Promise<NftCollectionInfo>>(async (query) => {\n const chainId = assertEx(query?.chainId || this.config.chainId, () => 'params.chainId is required')\n const provider = await this.getProvider(true, true)\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\n const erc721Enumerable = ERC721Enumerable__factory.connect(address, provider)\n\n const maxNfts = query?.maxNfts || defaultMaxNfts\n const [name, symbol, total, typesSettled, archivistSettled] = await Promise.allSettled([\n erc721Enumerable.name(),\n erc721Enumerable.symbol(),\n erc721Enumerable.totalSupply(),\n tokenTypes(provider, address),\n this.archivistInstance(),\n ])\n const types = resolvedValue(typesSettled, true)\n const nfts = await getNftCollectionNfts(address, provider, types, maxNfts)\n const metrics = getNftCollectionMetrics(nfts)\n const archivist = resolvedValue(archivistSettled)\n const [sources] = await Promise.all([\n // Hash all the payloads\n Promise.all(nfts.map(nft => PayloadBuilder.dataHash(nft))),\n // Insert them into the archivist if we have one\n archivist ? archivist.insert(nfts) : NoOp,\n ])\n const payload: NftCollectionInfo = {\n address,\n chainId,\n metrics,\n name: resolvedValue(name, true),\n schema: NftCollectionSchema,\n sources,\n symbol: resolvedValue(symbol, true),\n total: Number(resolvedValue(total, true)),\n type: types.at(0),\n types,\n }\n return payload\n }),\n )\n return observations.flat()\n }\n}\n"],"mappings":"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","names":["attributes","p","NftSchema","assertEx","ERC721Enumerable__factory","assertEx","ERC721Enumerable__factory","NftSchema"]}
@@ -1,4 +1,27 @@
1
- export * from './lib/index.ts';
2
- export { CryptoNftCollectionWitnessPlugin, CryptoNftCollectionWitnessPlugin as default } from './Plugin.ts';
3
- export * from './Witness.ts';
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { NftCollectionMetrics, NftCollectionWitnessConfig, NftCollectionWitnessQuery, NftCollectionInfo } from '@xyo-network/crypto-nft-collection-payload-plugin';
2
+ import { NftInfoFields, TokenType, NftInfo } from '@xyo-network/crypto-nft-payload-plugin';
3
+ import { Provider, Interface } from 'ethers';
4
+ import { PayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin';
5
+ import { Schema } from '@xyo-network/payload-model';
6
+ import { EvmWitnessParams, AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
7
+
8
+ declare const getNftCollectionMetrics: (nfts: NftInfoFields[]) => NftCollectionMetrics;
9
+
10
+ declare const contractHasFunctions: (provider: Provider, address: string, contractInterface: Interface, functionNames: string[]) => Promise<boolean>;
11
+
12
+ declare const getNftCollectionNfts: (contractAddress: string, provider: Provider, types?: TokenType[], maxNfts?: number) => Promise<NftInfo[]>;
13
+
14
+ declare const isErc1155: (provider: Provider, address: string) => Promise<boolean>;
15
+ declare const isErc721: (provider: Provider, address: string) => Promise<boolean>;
16
+ declare const tokenTypes: (provider: Provider, address: string) => Promise<TokenType[]>;
17
+
18
+ type CryptoNftCollectionWitnessParams = EvmWitnessParams<NftCollectionWitnessConfig>;
19
+ declare class CryptoNftCollectionWitness<TParams extends CryptoNftCollectionWitnessParams = CryptoNftCollectionWitnessParams> extends AbstractEvmWitness<TParams, NftCollectionWitnessQuery, NftCollectionInfo> {
20
+ static readonly configSchemas: Schema[];
21
+ static readonly defaultConfigSchema: Schema;
22
+ protected observeHandler(payloads?: NftCollectionWitnessQuery[]): Promise<NftCollectionInfo[]>;
23
+ }
24
+
25
+ declare const CryptoNftCollectionWitnessPlugin: () => PayloadSetWitnessPlugin<CryptoNftCollectionWitness>;
26
+
27
+ export { CryptoNftCollectionWitness, type CryptoNftCollectionWitnessParams, CryptoNftCollectionWitnessPlugin, contractHasFunctions, CryptoNftCollectionWitnessPlugin as default, getNftCollectionMetrics, getNftCollectionNfts, isErc1155, isErc721, tokenTypes };