@xyo-network/crypto-nft-diviner-score-plugin 2.70.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 (215) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/Diviner.js +30 -0
  4. package/dist/cjs/Diviner.js.map +1 -0
  5. package/dist/cjs/Plugin.js +16 -0
  6. package/dist/cjs/Plugin.js.map +1 -0
  7. package/dist/cjs/index.js +11 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/lib/index.js +5 -0
  10. package/dist/cjs/lib/index.js.map +1 -0
  11. package/dist/cjs/lib/rating/analyzeNft.js +19 -0
  12. package/dist/cjs/lib/rating/analyzeNft.js.map +1 -0
  13. package/dist/cjs/lib/rating/criteria/index.js +5 -0
  14. package/dist/cjs/lib/rating/criteria/index.js.map +1 -0
  15. package/dist/cjs/lib/rating/criteria/scoring/contract.js +16 -0
  16. package/dist/cjs/lib/rating/criteria/scoring/contract.js.map +1 -0
  17. package/dist/cjs/lib/rating/criteria/scoring/index.js +9 -0
  18. package/dist/cjs/lib/rating/criteria/scoring/index.js.map +1 -0
  19. package/dist/cjs/lib/rating/criteria/scoring/lib/index.js +6 -0
  20. package/dist/cjs/lib/rating/criteria/scoring/lib/index.js.map +1 -0
  21. package/dist/cjs/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.js +10 -0
  22. package/dist/cjs/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.js.map +1 -0
  23. package/dist/cjs/lib/rating/criteria/scoring/lib/toBigNumber.js +14 -0
  24. package/dist/cjs/lib/rating/criteria/scoring/lib/toBigNumber.js.map +1 -0
  25. package/dist/cjs/lib/rating/criteria/scoring/metadata/animationUrl.js +30 -0
  26. package/dist/cjs/lib/rating/criteria/scoring/metadata/animationUrl.js.map +1 -0
  27. package/dist/cjs/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.js +86 -0
  28. package/dist/cjs/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.js.map +1 -0
  29. package/dist/cjs/lib/rating/criteria/scoring/metadata/attributes/index.js +5 -0
  30. package/dist/cjs/lib/rating/criteria/scoring/metadata/attributes/index.js.map +1 -0
  31. package/dist/cjs/lib/rating/criteria/scoring/metadata/backgroundColor.js +24 -0
  32. package/dist/cjs/lib/rating/criteria/scoring/metadata/backgroundColor.js.map +1 -0
  33. package/dist/cjs/lib/rating/criteria/scoring/metadata/description.js +17 -0
  34. package/dist/cjs/lib/rating/criteria/scoring/metadata/description.js.map +1 -0
  35. package/dist/cjs/lib/rating/criteria/scoring/metadata/externalUrl.js +21 -0
  36. package/dist/cjs/lib/rating/criteria/scoring/metadata/externalUrl.js.map +1 -0
  37. package/dist/cjs/lib/rating/criteria/scoring/metadata/image.js +33 -0
  38. package/dist/cjs/lib/rating/criteria/scoring/metadata/image.js.map +1 -0
  39. package/dist/cjs/lib/rating/criteria/scoring/metadata/imageData.js +40 -0
  40. package/dist/cjs/lib/rating/criteria/scoring/metadata/imageData.js.map +1 -0
  41. package/dist/cjs/lib/rating/criteria/scoring/metadata/index.js +13 -0
  42. package/dist/cjs/lib/rating/criteria/scoring/metadata/index.js.map +1 -0
  43. package/dist/cjs/lib/rating/criteria/scoring/metadata/lib/index.js +5 -0
  44. package/dist/cjs/lib/rating/criteria/scoring/metadata/lib/index.js.map +1 -0
  45. package/dist/cjs/lib/rating/criteria/scoring/metadata/lib/urlHelpers.js +25 -0
  46. package/dist/cjs/lib/rating/criteria/scoring/metadata/lib/urlHelpers.js.map +1 -0
  47. package/dist/cjs/lib/rating/criteria/scoring/metadata/name.js +17 -0
  48. package/dist/cjs/lib/rating/criteria/scoring/metadata/name.js.map +1 -0
  49. package/dist/cjs/lib/rating/criteria/scoring/metadata/youtubeUrl.js +23 -0
  50. package/dist/cjs/lib/rating/criteria/scoring/metadata/youtubeUrl.js.map +1 -0
  51. package/dist/cjs/lib/rating/criteria/scoring/supply.js +20 -0
  52. package/dist/cjs/lib/rating/criteria/scoring/supply.js.map +1 -0
  53. package/dist/cjs/lib/rating/criteria/scoring/tokenId.js +26 -0
  54. package/dist/cjs/lib/rating/criteria/scoring/tokenId.js.map +1 -0
  55. package/dist/cjs/lib/rating/criteria/scoring/type.js +16 -0
  56. package/dist/cjs/lib/rating/criteria/scoring/type.js.map +1 -0
  57. package/dist/cjs/lib/rating/criteria/scoringCriteria.js +10 -0
  58. package/dist/cjs/lib/rating/criteria/scoringCriteria.js.map +1 -0
  59. package/dist/cjs/lib/rating/index.js +6 -0
  60. package/dist/cjs/lib/rating/index.js.map +1 -0
  61. package/dist/cjs/lib/rating/score.js +23 -0
  62. package/dist/cjs/lib/rating/score.js.map +1 -0
  63. package/dist/esm/Diviner.js +20 -0
  64. package/dist/esm/Diviner.js.map +1 -0
  65. package/dist/esm/Plugin.js +11 -0
  66. package/dist/esm/Plugin.js.map +1 -0
  67. package/dist/esm/index.js +7 -0
  68. package/dist/esm/index.js.map +1 -0
  69. package/dist/esm/lib/index.js +2 -0
  70. package/dist/esm/lib/index.js.map +1 -0
  71. package/dist/esm/lib/rating/analyzeNft.js +14 -0
  72. package/dist/esm/lib/rating/analyzeNft.js.map +1 -0
  73. package/dist/esm/lib/rating/criteria/index.js +2 -0
  74. package/dist/esm/lib/rating/criteria/index.js.map +1 -0
  75. package/dist/esm/lib/rating/criteria/scoring/contract.js +12 -0
  76. package/dist/esm/lib/rating/criteria/scoring/contract.js.map +1 -0
  77. package/dist/esm/lib/rating/criteria/scoring/index.js +6 -0
  78. package/dist/esm/lib/rating/criteria/scoring/index.js.map +1 -0
  79. package/dist/esm/lib/rating/criteria/scoring/lib/index.js +3 -0
  80. package/dist/esm/lib/rating/criteria/scoring/lib/index.js.map +1 -0
  81. package/dist/esm/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.js +6 -0
  82. package/dist/esm/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.js.map +1 -0
  83. package/dist/esm/lib/rating/criteria/scoring/lib/toBigNumber.js +10 -0
  84. package/dist/esm/lib/rating/criteria/scoring/lib/toBigNumber.js.map +1 -0
  85. package/dist/esm/lib/rating/criteria/scoring/metadata/animationUrl.js +24 -0
  86. package/dist/esm/lib/rating/criteria/scoring/metadata/animationUrl.js.map +1 -0
  87. package/dist/esm/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.js +80 -0
  88. package/dist/esm/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.js.map +1 -0
  89. package/dist/esm/lib/rating/criteria/scoring/metadata/attributes/index.js +2 -0
  90. package/dist/esm/lib/rating/criteria/scoring/metadata/attributes/index.js.map +1 -0
  91. package/dist/esm/lib/rating/criteria/scoring/metadata/backgroundColor.js +18 -0
  92. package/dist/esm/lib/rating/criteria/scoring/metadata/backgroundColor.js.map +1 -0
  93. package/dist/esm/lib/rating/criteria/scoring/metadata/description.js +11 -0
  94. package/dist/esm/lib/rating/criteria/scoring/metadata/description.js.map +1 -0
  95. package/dist/esm/lib/rating/criteria/scoring/metadata/externalUrl.js +15 -0
  96. package/dist/esm/lib/rating/criteria/scoring/metadata/externalUrl.js.map +1 -0
  97. package/dist/esm/lib/rating/criteria/scoring/metadata/image.js +27 -0
  98. package/dist/esm/lib/rating/criteria/scoring/metadata/image.js.map +1 -0
  99. package/dist/esm/lib/rating/criteria/scoring/metadata/imageData.js +34 -0
  100. package/dist/esm/lib/rating/criteria/scoring/metadata/imageData.js.map +1 -0
  101. package/dist/esm/lib/rating/criteria/scoring/metadata/index.js +10 -0
  102. package/dist/esm/lib/rating/criteria/scoring/metadata/index.js.map +1 -0
  103. package/dist/esm/lib/rating/criteria/scoring/metadata/lib/index.js +2 -0
  104. package/dist/esm/lib/rating/criteria/scoring/metadata/lib/index.js.map +1 -0
  105. package/dist/esm/lib/rating/criteria/scoring/metadata/lib/urlHelpers.js +17 -0
  106. package/dist/esm/lib/rating/criteria/scoring/metadata/lib/urlHelpers.js.map +1 -0
  107. package/dist/esm/lib/rating/criteria/scoring/metadata/name.js +11 -0
  108. package/dist/esm/lib/rating/criteria/scoring/metadata/name.js.map +1 -0
  109. package/dist/esm/lib/rating/criteria/scoring/metadata/youtubeUrl.js +17 -0
  110. package/dist/esm/lib/rating/criteria/scoring/metadata/youtubeUrl.js.map +1 -0
  111. package/dist/esm/lib/rating/criteria/scoring/supply.js +16 -0
  112. package/dist/esm/lib/rating/criteria/scoring/supply.js.map +1 -0
  113. package/dist/esm/lib/rating/criteria/scoring/tokenId.js +22 -0
  114. package/dist/esm/lib/rating/criteria/scoring/tokenId.js.map +1 -0
  115. package/dist/esm/lib/rating/criteria/scoring/type.js +12 -0
  116. package/dist/esm/lib/rating/criteria/scoring/type.js.map +1 -0
  117. package/dist/esm/lib/rating/criteria/scoringCriteria.js +23 -0
  118. package/dist/esm/lib/rating/criteria/scoringCriteria.js.map +1 -0
  119. package/dist/esm/lib/rating/index.js +3 -0
  120. package/dist/esm/lib/rating/index.js.map +1 -0
  121. package/dist/esm/lib/rating/score.js +17 -0
  122. package/dist/esm/lib/rating/score.js.map +1 -0
  123. package/dist/types/Diviner.d.ts +16 -0
  124. package/dist/types/Diviner.d.ts.map +1 -0
  125. package/dist/types/Plugin.d.ts +47 -0
  126. package/dist/types/Plugin.d.ts.map +1 -0
  127. package/dist/types/index.d.ts +6 -0
  128. package/dist/types/index.d.ts.map +1 -0
  129. package/dist/types/lib/index.d.ts +2 -0
  130. package/dist/types/lib/index.d.ts.map +1 -0
  131. package/dist/types/lib/rating/analyzeNft.d.ts +9 -0
  132. package/dist/types/lib/rating/analyzeNft.d.ts.map +1 -0
  133. package/dist/types/lib/rating/criteria/index.d.ts +2 -0
  134. package/dist/types/lib/rating/criteria/index.d.ts.map +1 -0
  135. package/dist/types/lib/rating/criteria/scoring/contract.d.ts +3 -0
  136. package/dist/types/lib/rating/criteria/scoring/contract.d.ts.map +1 -0
  137. package/dist/types/lib/rating/criteria/scoring/index.d.ts +6 -0
  138. package/dist/types/lib/rating/criteria/scoring/index.d.ts.map +1 -0
  139. package/dist/types/lib/rating/criteria/scoring/lib/index.d.ts +3 -0
  140. package/dist/types/lib/rating/criteria/scoring/lib/index.d.ts.map +1 -0
  141. package/dist/types/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.d.ts +2 -0
  142. package/dist/types/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.d.ts.map +1 -0
  143. package/dist/types/lib/rating/criteria/scoring/lib/toBigNumber.d.ts +3 -0
  144. package/dist/types/lib/rating/criteria/scoring/lib/toBigNumber.d.ts.map +1 -0
  145. package/dist/types/lib/rating/criteria/scoring/metadata/animationUrl.d.ts +5 -0
  146. package/dist/types/lib/rating/criteria/scoring/metadata/animationUrl.d.ts.map +1 -0
  147. package/dist/types/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.d.ts +6 -0
  148. package/dist/types/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.d.ts.map +1 -0
  149. package/dist/types/lib/rating/criteria/scoring/metadata/attributes/index.d.ts +2 -0
  150. package/dist/types/lib/rating/criteria/scoring/metadata/attributes/index.d.ts.map +1 -0
  151. package/dist/types/lib/rating/criteria/scoring/metadata/backgroundColor.d.ts +5 -0
  152. package/dist/types/lib/rating/criteria/scoring/metadata/backgroundColor.d.ts.map +1 -0
  153. package/dist/types/lib/rating/criteria/scoring/metadata/description.d.ts +5 -0
  154. package/dist/types/lib/rating/criteria/scoring/metadata/description.d.ts.map +1 -0
  155. package/dist/types/lib/rating/criteria/scoring/metadata/externalUrl.d.ts +5 -0
  156. package/dist/types/lib/rating/criteria/scoring/metadata/externalUrl.d.ts.map +1 -0
  157. package/dist/types/lib/rating/criteria/scoring/metadata/image.d.ts +5 -0
  158. package/dist/types/lib/rating/criteria/scoring/metadata/image.d.ts.map +1 -0
  159. package/dist/types/lib/rating/criteria/scoring/metadata/imageData.d.ts +5 -0
  160. package/dist/types/lib/rating/criteria/scoring/metadata/imageData.d.ts.map +1 -0
  161. package/dist/types/lib/rating/criteria/scoring/metadata/index.d.ts +10 -0
  162. package/dist/types/lib/rating/criteria/scoring/metadata/index.d.ts.map +1 -0
  163. package/dist/types/lib/rating/criteria/scoring/metadata/lib/index.d.ts +2 -0
  164. package/dist/types/lib/rating/criteria/scoring/metadata/lib/index.d.ts.map +1 -0
  165. package/dist/types/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.ts +8 -0
  166. package/dist/types/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.ts.map +1 -0
  167. package/dist/types/lib/rating/criteria/scoring/metadata/name.d.ts +5 -0
  168. package/dist/types/lib/rating/criteria/scoring/metadata/name.d.ts.map +1 -0
  169. package/dist/types/lib/rating/criteria/scoring/metadata/youtubeUrl.d.ts +5 -0
  170. package/dist/types/lib/rating/criteria/scoring/metadata/youtubeUrl.d.ts.map +1 -0
  171. package/dist/types/lib/rating/criteria/scoring/supply.d.ts +3 -0
  172. package/dist/types/lib/rating/criteria/scoring/supply.d.ts.map +1 -0
  173. package/dist/types/lib/rating/criteria/scoring/tokenId.d.ts +9 -0
  174. package/dist/types/lib/rating/criteria/scoring/tokenId.d.ts.map +1 -0
  175. package/dist/types/lib/rating/criteria/scoring/type.d.ts +3 -0
  176. package/dist/types/lib/rating/criteria/scoring/type.d.ts.map +1 -0
  177. package/dist/types/lib/rating/criteria/scoringCriteria.d.ts +55 -0
  178. package/dist/types/lib/rating/criteria/scoringCriteria.d.ts.map +1 -0
  179. package/dist/types/lib/rating/index.d.ts +3 -0
  180. package/dist/types/lib/rating/index.d.ts.map +1 -0
  181. package/dist/types/lib/rating/score.d.ts +18 -0
  182. package/dist/types/lib/rating/score.d.ts.map +1 -0
  183. package/package.json +68 -0
  184. package/src/Diviner.ts +37 -0
  185. package/src/Plugin.ts +16 -0
  186. package/src/index.ts +9 -0
  187. package/src/lib/index.ts +1 -0
  188. package/src/lib/rating/analyzeNft.ts +28 -0
  189. package/src/lib/rating/criteria/index.ts +1 -0
  190. package/src/lib/rating/criteria/scoring/contract.ts +11 -0
  191. package/src/lib/rating/criteria/scoring/index.ts +5 -0
  192. package/src/lib/rating/criteria/scoring/lib/index.ts +2 -0
  193. package/src/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.ts +6 -0
  194. package/src/lib/rating/criteria/scoring/lib/toBigNumber.ts +9 -0
  195. package/src/lib/rating/criteria/scoring/metadata/animationUrl.ts +22 -0
  196. package/src/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.ts +86 -0
  197. package/src/lib/rating/criteria/scoring/metadata/attributes/index.ts +1 -0
  198. package/src/lib/rating/criteria/scoring/metadata/backgroundColor.ts +19 -0
  199. package/src/lib/rating/criteria/scoring/metadata/description.ts +13 -0
  200. package/src/lib/rating/criteria/scoring/metadata/externalUrl.ts +15 -0
  201. package/src/lib/rating/criteria/scoring/metadata/image.ts +27 -0
  202. package/src/lib/rating/criteria/scoring/metadata/imageData.ts +36 -0
  203. package/src/lib/rating/criteria/scoring/metadata/index.ts +9 -0
  204. package/src/lib/rating/criteria/scoring/metadata/lib/index.ts +1 -0
  205. package/src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts +17 -0
  206. package/src/lib/rating/criteria/scoring/metadata/name.ts +12 -0
  207. package/src/lib/rating/criteria/scoring/metadata/spec/testHelpers.ts +29 -0
  208. package/src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts +16 -0
  209. package/src/lib/rating/criteria/scoring/supply.ts +15 -0
  210. package/src/lib/rating/criteria/scoring/tokenId.ts +21 -0
  211. package/src/lib/rating/criteria/scoring/type.ts +11 -0
  212. package/src/lib/rating/criteria/scoringCriteria.ts +39 -0
  213. package/src/lib/rating/index.ts +2 -0
  214. package/src/lib/rating/score.ts +33 -0
  215. package/typedoc.json +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/image.ts"],"names":[],"mappings":";;;AAEA,0CAAkE;AAClE,+BAAoD;AAEpD,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAExB,MAAM,aAAa,GAAG,CAAC,GAA6B,EAAe,EAAE;;IAC1E,2BAA2B;IAC3B,IAAI,CAAC,CAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,KAAK,CAAA,EAAE;QACzB,oFAAoF;QACpF,OAAO,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,EAAC,CAAC,CAAC,YAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAA;KACpE;SAAM;QACL,OAAO,IAAA,kBAAU,EAAC,MAAA,GAAG,CAAC,QAAQ,0CAAE,KAAK,CAAC,CAAA;KACvC;AACH,CAAC,CAAA;AARY,QAAA,aAAa,iBAQzB;AAEM,MAAM,UAAU,GAAG,CAAC,KAAc,EAAe,EAAE;IACxD,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAA;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAA,gBAAU,EAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3E,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;IACrB,IAAI,CAAC,IAAA,cAAQ,EAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAClC,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;IACrB,IAAI,CAAC,IAAA,YAAM,EAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAChC,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;IACrB,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AATY,QAAA,UAAU,cAStB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreImageData = exports.scoreNftImageData = void 0;
4
+ const svg_parser_1 = require("svg-parser");
5
+ const score_1 = require("../../../score");
6
+ const MaxPossibleImageDataScore = 1;
7
+ // NOTE: There is probably a deeper check we can do
8
+ // here, but this is a good start
9
+ const isValidImageData = (image_data) => {
10
+ // If it doesn't start with an svg tag, it's not an svg
11
+ if (!image_data.startsWith('<svg'))
12
+ return false;
13
+ try {
14
+ // If it can't be parsed, it's not an svg
15
+ (0, svg_parser_1.parse)(image_data);
16
+ return true;
17
+ }
18
+ catch (error) {
19
+ return false;
20
+ }
21
+ };
22
+ const scoreNftImageData = (nft) => {
23
+ var _a, _b, _c;
24
+ // If there's no image data
25
+ if (!((_a = nft === null || nft === void 0 ? void 0 : nft.metadata) === null || _a === void 0 ? void 0 : _a.image_data)) {
26
+ // but there is an image, skip this scoring criteria, otherwise fail it completely
27
+ return ((_b = nft.metadata) === null || _b === void 0 ? void 0 : _b.image) ? score_1.PASS : [0, MaxPossibleImageDataScore];
28
+ }
29
+ else {
30
+ return (0, exports.scoreImageData)((_c = nft.metadata) === null || _c === void 0 ? void 0 : _c.image_data);
31
+ }
32
+ };
33
+ exports.scoreNftImageData = scoreNftImageData;
34
+ const scoreImageData = (image_data) => {
35
+ return !image_data || typeof image_data !== 'string' || !isValidImageData(image_data)
36
+ ? [0, MaxPossibleImageDataScore]
37
+ : [MaxPossibleImageDataScore, MaxPossibleImageDataScore];
38
+ };
39
+ exports.scoreImageData = scoreImageData;
40
+ //# sourceMappingURL=imageData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageData.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/imageData.ts"],"names":[],"mappings":";;;AACA,2CAAkC;AAElC,0CAAkD;AAElD,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAEnC,mDAAmD;AACnD,iCAAiC;AACjC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAW,EAAE;IACvD,uDAAuD;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAChD,IAAI;QACF,yCAAyC;QACzC,IAAA,kBAAK,EAAC,UAAU,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAEM,MAAM,iBAAiB,GAAG,CAAC,GAA6B,EAAe,EAAE;;IAC9E,2BAA2B;IAC3B,IAAI,CAAC,CAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,UAAU,CAAA,EAAE;QAC9B,kFAAkF;QAClF,OAAO,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,KAAK,EAAC,CAAC,CAAC,YAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAA;KACnE;SAAM;QACL,OAAO,IAAA,sBAAc,EAAC,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,CAAC,CAAA;KAChD;AACH,CAAC,CAAA;AARY,QAAA,iBAAiB,qBAQ7B;AAEM,MAAM,cAAc,GAAG,CAAC,UAAmB,EAAe,EAAE;IACjE,OAAO,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACnF,CAAC,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC;QAChC,CAAC,CAAC,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAA;AAC5D,CAAC,CAAA;AAJY,QAAA,cAAc,kBAI1B"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./animationUrl"), exports);
5
+ tslib_1.__exportStar(require("./attributes"), exports);
6
+ tslib_1.__exportStar(require("./backgroundColor"), exports);
7
+ tslib_1.__exportStar(require("./description"), exports);
8
+ tslib_1.__exportStar(require("./externalUrl"), exports);
9
+ tslib_1.__exportStar(require("./image"), exports);
10
+ tslib_1.__exportStar(require("./imageData"), exports);
11
+ tslib_1.__exportStar(require("./name"), exports);
12
+ tslib_1.__exportStar(require("./youtubeUrl"), exports);
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/index.ts"],"names":[],"mappings":";;;AAAA,yDAA8B;AAC9B,uDAA4B;AAC5B,4DAAiC;AACjC,wDAA6B;AAC7B,wDAA6B;AAC7B,kDAAuB;AACvB,sDAA2B;AAC3B,iDAAsB;AACtB,uDAA4B"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./urlHelpers"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../src/lib/rating/criteria/scoring/metadata/lib/index.ts"],"names":[],"mappings":";;;AAAA,uDAA4B"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSecure = exports.isWeb2 = exports.isWeb3 = exports.isValidUrl = exports.toUrl = exports.web3Protocols = void 0;
4
+ const url_1 = require("@xylabs/url");
5
+ exports.web3Protocols = ['ipfs:', 'ar:'];
6
+ const toUrl = (url) => {
7
+ if (!url)
8
+ return undefined;
9
+ try {
10
+ return new url_1.URL(url);
11
+ }
12
+ catch (e) {
13
+ return undefined;
14
+ }
15
+ };
16
+ exports.toUrl = toUrl;
17
+ const isValidUrl = (url) => (0, exports.toUrl)(url) !== undefined;
18
+ exports.isValidUrl = isValidUrl;
19
+ const isWeb3 = (url) => exports.web3Protocols.some((protocol) => { var _a; return protocol === ((_a = (0, exports.toUrl)(url)) === null || _a === void 0 ? void 0 : _a.protocol); });
20
+ exports.isWeb3 = isWeb3;
21
+ const isWeb2 = (url) => !(0, exports.isWeb3)(url);
22
+ exports.isWeb2 = isWeb2;
23
+ const isSecure = (url) => { var _a; return (0, exports.isWeb3)(url) || ((_a = (0, exports.toUrl)(url)) === null || _a === void 0 ? void 0 : _a.protocol) === 'https:'; };
24
+ exports.isSecure = isSecure;
25
+ //# sourceMappingURL=urlHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlHelpers.js","sourceRoot":"","sources":["../../../../../../../../src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAEpB,QAAA,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AAEtC,MAAM,KAAK,GAAG,CAAC,GAAmB,EAAmB,EAAE;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAC1B,IAAI;QACF,OAAO,IAAI,SAAG,CAAC,GAAG,CAAC,CAAA;KACpB;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAA;KACjB;AACH,CAAC,CAAA;AAPY,QAAA,KAAK,SAOjB;AAEM,MAAM,UAAU,GAAG,CAAC,GAAmB,EAAW,EAAE,CAAC,IAAA,aAAK,EAAC,GAAG,CAAC,KAAK,SAAS,CAAA;AAAvE,QAAA,UAAU,cAA6D;AAC7E,MAAM,MAAM,GAAG,CAAC,GAAmB,EAAW,EAAE,CAAC,qBAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,WAAC,OAAA,QAAQ,MAAK,MAAA,IAAA,aAAK,EAAC,GAAG,CAAC,0CAAE,QAAQ,CAAA,CAAA,EAAA,CAAC,CAAA;AAA9G,QAAA,MAAM,UAAwG;AACpH,MAAM,MAAM,GAAG,CAAC,GAAmB,EAAW,EAAE,CAAC,CAAC,IAAA,cAAM,EAAC,GAAG,CAAC,CAAA;AAAvD,QAAA,MAAM,UAAiD;AAC7D,MAAM,QAAQ,GAAG,CAAC,GAAmB,EAAW,EAAE,WAAC,OAAA,IAAA,cAAM,EAAC,GAAG,CAAC,IAAI,CAAA,MAAA,IAAA,aAAK,EAAC,GAAG,CAAC,0CAAE,QAAQ,MAAK,QAAQ,CAAA,EAAA,CAAA;AAA7F,QAAA,QAAQ,YAAqF"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreName = exports.scoreNftName = void 0;
4
+ const score_1 = require("../../../score");
5
+ const scoreNftName = (nft) => {
6
+ var _a;
7
+ return (0, exports.scoreName)((_a = nft.metadata) === null || _a === void 0 ? void 0 : _a.name);
8
+ };
9
+ exports.scoreNftName = scoreNftName;
10
+ const scoreName = (name) => {
11
+ const score = [0, 1];
12
+ if (!name || typeof name !== 'string')
13
+ return score;
14
+ return (0, score_1.incrementTotal)(score);
15
+ };
16
+ exports.scoreName = scoreName;
17
+ //# sourceMappingURL=name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/name.ts"],"names":[],"mappings":";;;AAEA,0CAA4D;AAErD,MAAM,YAAY,GAAG,CAAC,GAA6B,EAAe,EAAE;;IACzE,OAAO,IAAA,iBAAS,EAAC,MAAA,GAAG,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAA;AACtC,CAAC,CAAA;AAFY,QAAA,YAAY,gBAExB;AACM,MAAM,SAAS,GAAG,CAAC,IAAa,EAAe,EAAE;IACtD,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACnD,OAAO,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;AAC9B,CAAC,CAAA;AAJY,QAAA,SAAS,aAIrB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreYoutubeUrl = exports.scoreNftYoutubeUrl = void 0;
4
+ const score_1 = require("../../../score");
5
+ const lib_1 = require("./lib");
6
+ const scoreNftYoutubeUrl = (nft) => {
7
+ var _a;
8
+ return (0, exports.scoreYoutubeUrl)((_a = nft === null || nft === void 0 ? void 0 : nft.metadata) === null || _a === void 0 ? void 0 : _a.youtube_url);
9
+ };
10
+ exports.scoreNftYoutubeUrl = scoreNftYoutubeUrl;
11
+ const scoreYoutubeUrl = (youtube_url) => {
12
+ if (youtube_url === undefined || youtube_url === null)
13
+ return score_1.PASS;
14
+ const score = [0, 2];
15
+ if (typeof youtube_url !== 'string' || !(0, lib_1.isValidUrl)(youtube_url))
16
+ return score;
17
+ (0, score_1.incrementTotal)(score);
18
+ if (!(0, lib_1.isSecure)(youtube_url))
19
+ return score;
20
+ return (0, score_1.incrementTotal)(score);
21
+ };
22
+ exports.scoreYoutubeUrl = scoreYoutubeUrl;
23
+ //# sourceMappingURL=youtubeUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtubeUrl.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts"],"names":[],"mappings":";;;AAEA,0CAAkE;AAClE,+BAA4C;AAErC,MAAM,kBAAkB,GAAG,CAAC,GAA6B,EAAe,EAAE;;IAC/E,OAAO,IAAA,uBAAe,EAAC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,WAAW,CAAC,CAAA;AACpD,CAAC,CAAA;AAFY,QAAA,kBAAkB,sBAE9B;AACM,MAAM,eAAe,GAAG,CAAC,WAAoB,EAAe,EAAE;IACnE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,YAAI,CAAA;IAClE,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,IAAA,gBAAU,EAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IAC7E,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;IACrB,IAAI,CAAC,IAAA,cAAQ,EAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,OAAO,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAA;AAC9B,CAAC,CAAA;AAPY,QAAA,eAAe,mBAO3B"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreSupply = void 0;
4
+ const score_1 = require("../../score");
5
+ const lib_1 = require("./lib");
6
+ const scoreSupply = (nft) => {
7
+ if (!nft.supply)
8
+ return score_1.FAIL;
9
+ if (typeof nft.supply !== 'string')
10
+ return score_1.FAIL;
11
+ try {
12
+ // Check for positive BigNumber since data type is uint256
13
+ return (0, lib_1.isValidPositiveBigNumber)(nft.supply) ? score_1.PASS : score_1.FAIL;
14
+ }
15
+ catch (_error) {
16
+ return score_1.FAIL;
17
+ }
18
+ };
19
+ exports.scoreSupply = scoreSupply;
20
+ //# sourceMappingURL=supply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supply.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/supply.ts"],"names":[],"mappings":";;;AAEA,uCAAiE;AACjE,+BAAgD;AAEzC,MAAM,WAAW,GAA4B,CAAC,GAAY,EAAE,EAAE;IACnE,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,YAAI,CAAA;IAC5B,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,YAAI,CAAA;IAC/C,IAAI;QACF,0DAA0D;QAC1D,OAAO,IAAA,8BAAwB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAI,CAAC,CAAC,CAAC,YAAI,CAAA;KAC1D;IAAC,OAAO,MAAM,EAAE;QACf,OAAO,YAAI,CAAA;KACZ;AACH,CAAC,CAAA;AATY,QAAA,WAAW,eASvB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreTokenId = void 0;
4
+ const score_1 = require("../../score");
5
+ const lib_1 = require("./lib");
6
+ /**
7
+ * Callers SHALL NOT assume that ID numbers have any specific pattern to them, and
8
+ * MUST treat the ID as a "black box"
9
+ * @param nft
10
+ * @returns
11
+ */
12
+ const scoreTokenId = (nft) => {
13
+ if (!nft.tokenId)
14
+ return score_1.FAIL;
15
+ if (typeof nft.tokenId !== 'string')
16
+ return score_1.FAIL;
17
+ try {
18
+ // Check for positive BigNumber since data type is uint256
19
+ return (0, lib_1.isValidPositiveBigNumber)(nft.tokenId) ? score_1.PASS : score_1.FAIL;
20
+ }
21
+ catch (_error) {
22
+ return score_1.FAIL;
23
+ }
24
+ };
25
+ exports.scoreTokenId = scoreTokenId;
26
+ //# sourceMappingURL=tokenId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenId.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/tokenId.ts"],"names":[],"mappings":";;;AAEA,uCAAiE;AACjE,+BAAgD;AAEhD;;;;;GAKG;AACI,MAAM,YAAY,GAA4B,CAAC,GAAY,EAAE,EAAE;IACpE,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,YAAI,CAAA;IAC7B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,YAAI,CAAA;IAChD,IAAI;QACF,0DAA0D;QAC1D,OAAO,IAAA,8BAAwB,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAI,CAAC,CAAC,CAAC,YAAI,CAAA;KAC3D;IAAC,OAAO,MAAM,EAAE;QACf,OAAO,YAAI,CAAA;KACZ;AACH,CAAC,CAAA;AATY,QAAA,YAAY,gBASxB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoreType = void 0;
4
+ const score_1 = require("../../score");
5
+ const scoreType = (nft) => {
6
+ if (!nft.type)
7
+ return score_1.FAIL;
8
+ if (typeof nft.type !== 'string')
9
+ return score_1.FAIL;
10
+ const type = nft.type.toUpperCase();
11
+ if (type !== 'ERC721' && type !== 'ERC1155')
12
+ return score_1.FAIL;
13
+ return score_1.PASS;
14
+ };
15
+ exports.scoreType = scoreType;
16
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/type.ts"],"names":[],"mappings":";;;AAEA,uCAAiE;AAE1D,MAAM,SAAS,GAA4B,CAAC,GAAY,EAAE,EAAE;IACjE,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,YAAI,CAAA;IAC1B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,YAAI,CAAA;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IACnC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,YAAI,CAAA;IACxD,OAAO,YAAI,CAAA;AACb,CAAC,CAAA;AANY,QAAA,SAAS,aAMrB"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scoringCriteria = void 0;
4
+ const scoring_1 = require("./scoring");
5
+ const attributesScoringCriteria = {
6
+ Attributes: { score: scoring_1.evaluateNftAttributes, weight: 1 },
7
+ };
8
+ const metadataScoringCriteria = Object.assign({ 'Animation URL': { score: scoring_1.scoreNftAnimationUrl, weight: 1 }, 'Background Color': { score: scoring_1.scoreNftBackgroundColor, weight: 1 }, Description: { score: scoring_1.scoreNftDescription, weight: 1 }, 'External Url': { score: scoring_1.scoreNftExternalUrl, weight: 1 }, Image: { score: scoring_1.scoreNftImage, weight: 1 }, 'Image Data': { score: scoring_1.scoreNftImageData, weight: 1 }, Name: { score: scoring_1.scoreNftName, weight: 1 }, 'YouTube URL': { score: scoring_1.scoreNftYoutubeUrl, weight: 1 } }, attributesScoringCriteria);
9
+ exports.scoringCriteria = Object.assign({ 'Contract Address': { score: scoring_1.scoreContractAddress, weight: 1 }, Supply: { score: scoring_1.scoreSupply, weight: 1 }, 'Token Id': { score: scoring_1.scoreTokenId, weight: 1 }, Type: { score: scoring_1.scoreType, weight: 1 } }, metadataScoringCriteria);
10
+ //# sourceMappingURL=scoringCriteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringCriteria.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/scoringCriteria.ts"],"names":[],"mappings":";;;AAAA,uCAckB;AAElB,MAAM,yBAAyB,GAAG;IAChC,UAAU,EAAE,EAAE,KAAK,EAAE,+BAAqB,EAAE,MAAM,EAAE,CAAC,EAAE;CACxD,CAAA;AAED,MAAM,uBAAuB,mBAC3B,eAAe,EAAE,EAAE,KAAK,EAAE,8BAAoB,EAAE,MAAM,EAAE,CAAC,EAAE,EAC3D,kBAAkB,EAAE,EAAE,KAAK,EAAE,iCAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,EACjE,WAAW,EAAE,EAAE,KAAK,EAAE,6BAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,EACtD,cAAc,EAAE,EAAE,KAAK,EAAE,6BAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,EACzD,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAa,EAAE,MAAM,EAAE,CAAC,EAAE,EAC1C,YAAY,EAAE,EAAE,KAAK,EAAE,2BAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,EACrD,IAAI,EAAE,EAAE,KAAK,EAAE,sBAAY,EAAE,MAAM,EAAE,CAAC,EAAE,EACxC,aAAa,EAAE,EAAE,KAAK,EAAE,4BAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,IACpD,yBAAyB,CAC7B,CAAA;AAEY,QAAA,eAAe,mBAC1B,kBAAkB,EAAE,EAAE,KAAK,EAAE,8BAAoB,EAAE,MAAM,EAAE,CAAC,EAAE,EAC9D,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAW,EAAE,MAAM,EAAE,CAAC,EAAE,EACzC,UAAU,EAAE,EAAE,KAAK,EAAE,sBAAY,EAAE,MAAM,EAAE,CAAC,EAAE,EAC9C,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAClC,uBAAuB,EAC3B"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./analyzeNft"), exports);
5
+ tslib_1.__exportStar(require("./score"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/rating/index.ts"],"names":[],"mappings":";;;AAAA,uDAA4B;AAC5B,kDAAuB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.incrementTotalAndPossible = exports.incrementPossible = exports.incrementTotal = exports.SKIP = exports.FAIL = exports.PASS = void 0;
4
+ exports.PASS = [1, 1];
5
+ exports.FAIL = [0, 1];
6
+ exports.SKIP = [0, 0];
7
+ const incrementTotal = (score, by = 1) => {
8
+ score[0] += by;
9
+ return score;
10
+ };
11
+ exports.incrementTotal = incrementTotal;
12
+ const incrementPossible = (score, by = 1) => {
13
+ score[1] += by;
14
+ return score;
15
+ };
16
+ exports.incrementPossible = incrementPossible;
17
+ const incrementTotalAndPossible = (score, totalBy = 1, possibleBy = 1) => {
18
+ score[0] += totalBy;
19
+ score[1] += possibleBy;
20
+ return score;
21
+ };
22
+ exports.incrementTotalAndPossible = incrementTotalAndPossible;
23
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../../../../src/lib/rating/score.ts"],"names":[],"mappings":";;;AAGa,QAAA,IAAI,GAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5B,QAAA,IAAI,GAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE5B,QAAA,IAAI,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAYhC,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAE,EAAE,GAAG,CAAC,EAAe,EAAE;IACxE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACd,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAHY,QAAA,cAAc,kBAG1B;AAEM,MAAM,iBAAiB,GAAG,CAAC,KAAkB,EAAE,EAAE,GAAG,CAAC,EAAe,EAAE;IAC3E,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACd,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAHY,QAAA,iBAAiB,qBAG7B;AAEM,MAAM,yBAAyB,GAAG,CAAC,KAAkB,EAAE,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAe,EAAE;IACxG,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IACnB,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAA;IACtB,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAJY,QAAA,yBAAyB,6BAIrC"}
@@ -0,0 +1,20 @@
1
+ import { AbstractDiviner } from '@xyo-network/abstract-diviner';
2
+ import { PayloadHasher } from '@xyo-network/core';
3
+ import { isNftInfoPayload, NftScoreDivinerConfigSchema, NftScoreSchema, } from '@xyo-network/crypto-nft-payload-plugin';
4
+ import { analyzeNft } from './lib';
5
+ const toNftScorePayload = (rating) => {
6
+ return { ...rating, schema: NftScoreSchema };
7
+ };
8
+ export const isNftScorePayload = (payload) => payload.schema === NftScoreSchema;
9
+ export class NftScoreDiviner extends AbstractDiviner {
10
+ static configSchemas = [NftScoreDivinerConfigSchema];
11
+ divineHandler = async (payloads) => {
12
+ const nfts = payloads?.filter(isNftInfoPayload) ?? [];
13
+ const results = await Promise.all(nfts.map(async (p) => {
14
+ const [score, sourceHash] = await Promise.all([toNftScorePayload(await analyzeNft(p)), PayloadHasher.hashAsync(p)]);
15
+ return { ...score, sources: [sourceHash] };
16
+ }));
17
+ return results;
18
+ };
19
+ }
20
+ //# sourceMappingURL=Diviner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Diviner.js","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EACL,gBAAgB,EAEhB,2BAA2B,EAE3B,cAAc,GACf,MAAM,wCAAwC,CAAA;AAK/C,OAAO,EAAE,UAAU,EAAe,MAAM,OAAO,CAAA;AAI/C,MAAM,iBAAiB,GAAG,CAAC,MAAmB,EAAmB,EAAE;IACjE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,EAAqB,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAgB,EAA8B,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,cAAc,CAAA;AAEpH,MAAM,OAAO,eAA+E,SAAQ,eAAwB;IAC1H,MAAM,CAAU,aAAa,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAE1C,aAAa,GAAG,KAAK,EAAE,QAAoB,EAAsB,EAAE;QACpF,MAAM,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAA2B,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACnH,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAA;QAC5C,CAAC,CAAC,CACH,CAAA;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin';
2
+ import { PayloadSetSchema } from '@xyo-network/payload-model';
3
+ import { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin';
4
+ import { NftScoreDiviner } from './Diviner';
5
+ export const NftScoreDivinerPlugin = () => createPayloadSetDivinerPlugin({ required: { [NftSchema]: 1 }, schema: PayloadSetSchema }, {
6
+ diviner: async (params) => {
7
+ const result = await NftScoreDiviner.create(params);
8
+ return result;
9
+ },
10
+ });
11
+ //# sourceMappingURL=Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE,CACxC,6BAA6B,CAC3B,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAC1D;IACE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnD,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CACF,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { NftScoreDivinerPlugin } from './Plugin';
2
+ export * from './Diviner';
3
+ export * from './lib';
4
+ export { NftScoreDivinerPlugin };
5
+ // eslint-disable-next-line import/no-default-export
6
+ export default NftScoreDivinerPlugin;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEhD,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AAErB,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAEhC,oDAAoD;AACpD,eAAe,qBAAqB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './rating';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { scoringCriteria } from './criteria';
2
+ export const analyzeNft = async (
3
+ /**
4
+ * The NFT to evaluate
5
+ */
6
+ nft) => {
7
+ const result = Object.fromEntries(await Promise.all(Object.entries(scoringCriteria).map(async ([key, { score, weight }]) => {
8
+ const rawScore = await score(nft);
9
+ const weighted = rawScore.map((v) => v * weight);
10
+ return [key, weighted];
11
+ })));
12
+ return result;
13
+ };
14
+ //# sourceMappingURL=analyzeNft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeNft.js","sourceRoot":"","sources":["../../../../src/lib/rating/analyzeNft.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAS5C,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK;AAC7B;;GAEG;AACH,GAAY,EACU,EAAE;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAU,CAAA;QACzD,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAU,CAAA;IACjC,CAAC,CAAC,CACH,CACa,CAAA;IAChB,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './scoringCriteria';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/rating/criteria/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { isAddress } from '@ethersproject/address';
2
+ import { FAIL, PASS } from '../../score';
3
+ export const scoreContractAddress = (nft) => {
4
+ if (!nft.contract)
5
+ return FAIL;
6
+ if (typeof nft.contract !== 'string')
7
+ return FAIL;
8
+ if (!isAddress(nft.contract))
9
+ return FAIL;
10
+ return PASS;
11
+ };
12
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,IAAI,EAAE,IAAI,EAA2B,MAAM,aAAa,CAAA;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAA4B,CAAC,GAAY,EAAE,EAAE;IAC5E,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC9B,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './contract';
2
+ export * from './metadata';
3
+ export * from './supply';
4
+ export * from './tokenId';
5
+ export * from './type';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/lib/rating/criteria/scoring/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './isValidPositiveBigNumber';
2
+ export * from './toBigNumber';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { toBigNumber } from './toBigNumber';
2
+ export const isValidPositiveBigNumber = (value) => {
3
+ const num = toBigNumber(value);
4
+ return !num || num.isNeg() ? false : true;
5
+ };
6
+ //# sourceMappingURL=isValidPositiveBigNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidPositiveBigNumber.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/lib/isValidPositiveBigNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAW,EAAE;IACjE,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { BigNumber } from '@xylabs/bignumber';
2
+ export const toBigNumber = (value) => {
3
+ try {
4
+ return new BigNumber(value);
5
+ }
6
+ catch (error) {
7
+ return undefined;
8
+ }
9
+ };
10
+ //# sourceMappingURL=toBigNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBigNumber.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/lib/toBigNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAyB,EAAE;IAClE,IAAI;QACF,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;KAC5B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,SAAS,CAAA;KACjB;AACH,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS } from '../../../score';
2
+ import { isSecure, isValidUrl, isWeb3 } from './lib';
3
+ export const scoreNftAnimationUrl = (nft) => {
4
+ return scoreAnimationUrl(nft.metadata?.animation_url);
5
+ };
6
+ export const scoreAnimationUrl = (animation_url) => {
7
+ const score = [0, 0];
8
+ if (animation_url === undefined || animation_url === null)
9
+ return PASS;
10
+ incrementPossible(score);
11
+ if (typeof animation_url !== 'string')
12
+ return score;
13
+ incrementTotalAndPossible(score);
14
+ if (!isValidUrl(animation_url))
15
+ return score;
16
+ incrementTotalAndPossible(score);
17
+ if (!isSecure(animation_url))
18
+ return score;
19
+ incrementTotalAndPossible(score);
20
+ if (!isWeb3(animation_url))
21
+ return score;
22
+ return incrementTotal(score);
23
+ };
24
+ //# sourceMappingURL=animationUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationUrl.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/animationUrl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,IAAI,EAAe,MAAM,gBAAgB,CAAA;AAChH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAA6B,EAAe,EAAE;IACjF,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAsB,EAAe,EAAE;IACvE,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjC,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACtE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACxB,IAAI,OAAO,aAAa,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACnD,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5C,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC,CAAA"}
@@ -0,0 +1,80 @@
1
+ import { incrementPossible, incrementTotal, incrementTotalAndPossible } from '../../../../score';
2
+ const isDate = (value) => {
3
+ if (isNumber(value)) {
4
+ try {
5
+ new Date(value);
6
+ return true;
7
+ }
8
+ catch (error) {
9
+ return false;
10
+ }
11
+ }
12
+ return false;
13
+ };
14
+ const isNumber = (value) => typeof value === 'number';
15
+ const isPercentage = (value) => isNumber(value) && value >= 0 && value <= 100;
16
+ const isNonEmptyString = (value) => typeof value === 'string' && value.length > 0;
17
+ const isNonEmptyStringOrNumber = (value) => value === 'number' || isNonEmptyString(value);
18
+ export const evaluateNftAttributes = (nft) => !nft?.metadata?.attributes ? [0, 1] : evaluateAttributes(nft?.metadata?.attributes);
19
+ export const evaluateAttributes = (attributes) => {
20
+ if (!attributes || !Array.isArray(attributes) || attributes.length === 0)
21
+ return [0, 1];
22
+ const score = [0, 0];
23
+ for (const attribute of attributes) {
24
+ const [attributeTotal, attributePossible] = evaluateAttribute(attribute);
25
+ incrementTotalAndPossible(score, attributeTotal, attributePossible);
26
+ }
27
+ return [1, 1];
28
+ };
29
+ export const evaluateAttribute = (attribute) => {
30
+ const score = [0, 1];
31
+ const max_value = attribute?.max_value;
32
+ const trait_type = attribute?.trait_type;
33
+ const value = attribute?.value;
34
+ // Validate trait_type & value
35
+ if (!attribute || typeof attribute !== 'object' || !isNonEmptyString(trait_type) || !isNonEmptyStringOrNumber(value))
36
+ return score;
37
+ incrementTotal(score);
38
+ // Validate display_type
39
+ incrementPossible(score);
40
+ if (validDisplayType(attribute))
41
+ incrementTotal(score);
42
+ // Validate max_value
43
+ if (max_value !== undefined) {
44
+ incrementPossible(score);
45
+ if (isNumber(max_value) && isNumber(value) && value <= max_value)
46
+ incrementTotal(score);
47
+ }
48
+ return score;
49
+ };
50
+ const validDisplayType = (attribute) => {
51
+ switch (attribute?.display_type) {
52
+ case 'number':
53
+ case 'boost_number': {
54
+ if (isNumber(attribute?.value))
55
+ return true;
56
+ break;
57
+ }
58
+ case 'boost_percentage': {
59
+ if (isPercentage(attribute?.value))
60
+ return true;
61
+ break;
62
+ }
63
+ case 'date': {
64
+ if (isDate(attribute?.value))
65
+ return true;
66
+ break;
67
+ }
68
+ case 'string':
69
+ case undefined: {
70
+ if (isNonEmptyString(attribute?.value))
71
+ return true;
72
+ break;
73
+ }
74
+ default: {
75
+ break;
76
+ }
77
+ }
78
+ return false;
79
+ };
80
+ //# sourceMappingURL=evaluateAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluateAttributes.js","sourceRoot":"","sources":["../../../../../../../../src/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './evaluateAttributes';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../src/lib/rating/criteria/scoring/metadata/attributes/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS } from '../../../score';
2
+ const isHexColor = /^[0-9A-F]{6}$/i;
3
+ export const scoreNftBackgroundColor = (nft) => {
4
+ return scoreBackgroundColor(nft.metadata?.background_color);
5
+ };
6
+ export const scoreBackgroundColor = (background_color) => {
7
+ const score = [0, 0];
8
+ if (background_color === undefined || background_color === null)
9
+ return PASS;
10
+ incrementPossible(score);
11
+ if (typeof background_color !== 'string')
12
+ return score;
13
+ incrementTotalAndPossible(score);
14
+ if (!background_color.toUpperCase().match(isHexColor))
15
+ return score;
16
+ return incrementTotal(score);
17
+ };
18
+ //# sourceMappingURL=backgroundColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgroundColor.js","sourceRoot":"","sources":["../../../../../../../src/lib/rating/criteria/scoring/metadata/backgroundColor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,IAAI,EAAe,MAAM,gBAAgB,CAAA;AAEhH,MAAM,UAAU,GAAG,gBAAgB,CAAA;AAEnC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAA6B,EAAe,EAAE;IACpF,OAAO,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,gBAAyB,EAAe,EAAE;IAC7E,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjC,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC5E,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACxB,IAAI,OAAO,gBAAgB,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACtD,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAA;IACnE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC,CAAA"}