@xyo-network/crypto-nft-diviner-score-plugin 2.99.3 → 2.99.5

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 (133) hide show
  1. package/dist/browser/Plugin.d.cts +1 -1
  2. package/dist/browser/Plugin.d.mts +1 -1
  3. package/dist/browser/Plugin.d.ts +1 -1
  4. package/dist/browser/index.cjs +233 -126
  5. package/dist/browser/index.cjs.map +1 -1
  6. package/dist/browser/index.d.cts +3 -3
  7. package/dist/browser/index.d.mts +3 -3
  8. package/dist/browser/index.d.ts +3 -3
  9. package/dist/browser/{index.js → index.mjs} +237 -132
  10. package/dist/browser/index.mjs.map +1 -0
  11. package/dist/browser/lib/index.d.cts +1 -1
  12. package/dist/browser/lib/index.d.mts +1 -1
  13. package/dist/browser/lib/index.d.ts +1 -1
  14. package/dist/browser/lib/rating/analyzeNft.d.cts +1 -1
  15. package/dist/browser/lib/rating/analyzeNft.d.mts +1 -1
  16. package/dist/browser/lib/rating/analyzeNft.d.ts +1 -1
  17. package/dist/browser/lib/rating/criteria/index.d.cts +1 -1
  18. package/dist/browser/lib/rating/criteria/index.d.mts +1 -1
  19. package/dist/browser/lib/rating/criteria/index.d.ts +1 -1
  20. package/dist/browser/lib/rating/criteria/scoring/index.d.cts +5 -5
  21. package/dist/browser/lib/rating/criteria/scoring/index.d.mts +5 -5
  22. package/dist/browser/lib/rating/criteria/scoring/index.d.ts +5 -5
  23. package/dist/browser/lib/rating/criteria/scoring/metadata/attributes/index.d.cts +1 -1
  24. package/dist/browser/lib/rating/criteria/scoring/metadata/attributes/index.d.mts +1 -1
  25. package/dist/browser/lib/rating/criteria/scoring/metadata/attributes/index.d.ts +1 -1
  26. package/dist/browser/lib/rating/criteria/scoring/metadata/index.d.cts +9 -9
  27. package/dist/browser/lib/rating/criteria/scoring/metadata/index.d.mts +9 -9
  28. package/dist/browser/lib/rating/criteria/scoring/metadata/index.d.ts +9 -9
  29. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/index.d.cts +1 -1
  30. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/index.d.mts +1 -1
  31. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/index.d.ts +1 -1
  32. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.cts.map +1 -1
  33. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.mts.map +1 -1
  34. package/dist/browser/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.ts.map +1 -1
  35. package/dist/browser/lib/rating/index.d.cts +2 -2
  36. package/dist/browser/lib/rating/index.d.mts +2 -2
  37. package/dist/browser/lib/rating/index.d.ts +2 -2
  38. package/dist/neutral/Plugin.d.cts +1 -1
  39. package/dist/neutral/Plugin.d.mts +1 -1
  40. package/dist/neutral/Plugin.d.ts +1 -1
  41. package/dist/neutral/index.cjs +233 -126
  42. package/dist/neutral/index.cjs.map +1 -1
  43. package/dist/neutral/index.d.cts +3 -3
  44. package/dist/neutral/index.d.mts +3 -3
  45. package/dist/neutral/index.d.ts +3 -3
  46. package/dist/neutral/{index.js → index.mjs} +237 -132
  47. package/dist/neutral/index.mjs.map +1 -0
  48. package/dist/neutral/lib/index.d.cts +1 -1
  49. package/dist/neutral/lib/index.d.mts +1 -1
  50. package/dist/neutral/lib/index.d.ts +1 -1
  51. package/dist/neutral/lib/rating/analyzeNft.d.cts +1 -1
  52. package/dist/neutral/lib/rating/analyzeNft.d.mts +1 -1
  53. package/dist/neutral/lib/rating/analyzeNft.d.ts +1 -1
  54. package/dist/neutral/lib/rating/criteria/index.d.cts +1 -1
  55. package/dist/neutral/lib/rating/criteria/index.d.mts +1 -1
  56. package/dist/neutral/lib/rating/criteria/index.d.ts +1 -1
  57. package/dist/neutral/lib/rating/criteria/scoring/index.d.cts +5 -5
  58. package/dist/neutral/lib/rating/criteria/scoring/index.d.mts +5 -5
  59. package/dist/neutral/lib/rating/criteria/scoring/index.d.ts +5 -5
  60. package/dist/neutral/lib/rating/criteria/scoring/metadata/attributes/index.d.cts +1 -1
  61. package/dist/neutral/lib/rating/criteria/scoring/metadata/attributes/index.d.mts +1 -1
  62. package/dist/neutral/lib/rating/criteria/scoring/metadata/attributes/index.d.ts +1 -1
  63. package/dist/neutral/lib/rating/criteria/scoring/metadata/index.d.cts +9 -9
  64. package/dist/neutral/lib/rating/criteria/scoring/metadata/index.d.mts +9 -9
  65. package/dist/neutral/lib/rating/criteria/scoring/metadata/index.d.ts +9 -9
  66. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/index.d.cts +1 -1
  67. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/index.d.mts +1 -1
  68. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/index.d.ts +1 -1
  69. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.cts.map +1 -1
  70. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.mts.map +1 -1
  71. package/dist/neutral/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.ts.map +1 -1
  72. package/dist/neutral/lib/rating/index.d.cts +2 -2
  73. package/dist/neutral/lib/rating/index.d.mts +2 -2
  74. package/dist/neutral/lib/rating/index.d.ts +2 -2
  75. package/dist/node/Plugin.d.cts +1 -1
  76. package/dist/node/Plugin.d.mts +1 -1
  77. package/dist/node/Plugin.d.ts +1 -1
  78. package/dist/node/index.cjs +244 -133
  79. package/dist/node/index.cjs.map +1 -1
  80. package/dist/node/index.d.cts +3 -3
  81. package/dist/node/index.d.mts +3 -3
  82. package/dist/node/index.d.ts +3 -3
  83. package/dist/node/{index.js → index.mjs} +248 -139
  84. package/dist/node/index.mjs.map +1 -0
  85. package/dist/node/lib/index.d.cts +1 -1
  86. package/dist/node/lib/index.d.mts +1 -1
  87. package/dist/node/lib/index.d.ts +1 -1
  88. package/dist/node/lib/rating/analyzeNft.d.cts +1 -1
  89. package/dist/node/lib/rating/analyzeNft.d.mts +1 -1
  90. package/dist/node/lib/rating/analyzeNft.d.ts +1 -1
  91. package/dist/node/lib/rating/criteria/index.d.cts +1 -1
  92. package/dist/node/lib/rating/criteria/index.d.mts +1 -1
  93. package/dist/node/lib/rating/criteria/index.d.ts +1 -1
  94. package/dist/node/lib/rating/criteria/scoring/index.d.cts +5 -5
  95. package/dist/node/lib/rating/criteria/scoring/index.d.mts +5 -5
  96. package/dist/node/lib/rating/criteria/scoring/index.d.ts +5 -5
  97. package/dist/node/lib/rating/criteria/scoring/metadata/attributes/index.d.cts +1 -1
  98. package/dist/node/lib/rating/criteria/scoring/metadata/attributes/index.d.mts +1 -1
  99. package/dist/node/lib/rating/criteria/scoring/metadata/attributes/index.d.ts +1 -1
  100. package/dist/node/lib/rating/criteria/scoring/metadata/index.d.cts +9 -9
  101. package/dist/node/lib/rating/criteria/scoring/metadata/index.d.mts +9 -9
  102. package/dist/node/lib/rating/criteria/scoring/metadata/index.d.ts +9 -9
  103. package/dist/node/lib/rating/criteria/scoring/metadata/lib/index.d.cts +1 -1
  104. package/dist/node/lib/rating/criteria/scoring/metadata/lib/index.d.mts +1 -1
  105. package/dist/node/lib/rating/criteria/scoring/metadata/lib/index.d.ts +1 -1
  106. package/dist/node/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.cts.map +1 -1
  107. package/dist/node/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.mts.map +1 -1
  108. package/dist/node/lib/rating/criteria/scoring/metadata/lib/urlHelpers.d.ts.map +1 -1
  109. package/dist/node/lib/rating/index.d.cts +2 -2
  110. package/dist/node/lib/rating/index.d.mts +2 -2
  111. package/dist/node/lib/rating/index.d.ts +2 -2
  112. package/package.json +19 -20
  113. package/src/Diviner.ts +1 -1
  114. package/src/Plugin.ts +1 -1
  115. package/src/index.ts +3 -3
  116. package/src/lib/index.ts +1 -1
  117. package/src/lib/rating/analyzeNft.ts +2 -2
  118. package/src/lib/rating/criteria/index.ts +1 -1
  119. package/src/lib/rating/criteria/scoring/index.ts +5 -5
  120. package/src/lib/rating/criteria/scoring/metadata/animationUrl.ts +1 -1
  121. package/src/lib/rating/criteria/scoring/metadata/attributes/index.ts +1 -1
  122. package/src/lib/rating/criteria/scoring/metadata/externalUrl.ts +1 -1
  123. package/src/lib/rating/criteria/scoring/metadata/image.ts +1 -1
  124. package/src/lib/rating/criteria/scoring/metadata/imageData.ts +2 -2
  125. package/src/lib/rating/criteria/scoring/metadata/index.ts +9 -9
  126. package/src/lib/rating/criteria/scoring/metadata/lib/index.ts +1 -1
  127. package/src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts +1 -1
  128. package/src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts +1 -1
  129. package/src/lib/rating/criteria/scoringCriteria.ts +6 -6
  130. package/src/lib/rating/index.ts +2 -2
  131. package/dist/browser/index.js.map +0 -1
  132. package/dist/neutral/index.js.map +0 -1
  133. package/dist/node/index.js.map +0 -1
@@ -1,46 +1,51 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/Diviner.ts
2
- import {
3
- isNftInfo,
4
- NftScoreDivinerConfigSchema,
5
- NftScoreSchema
6
- } from "@xyo-network/crypto-nft-payload-plugin";
5
+ import { isNftInfo, NftScoreDivinerConfigSchema, NftScoreSchema } from "@xyo-network/crypto-nft-payload-plugin";
7
6
  import { AbstractDiviner } from "@xyo-network/diviner-abstract";
8
7
  import { PayloadBuilder } from "@xyo-network/payload-builder";
9
8
 
10
9
  // src/lib/rating/criteria/scoring/contract.ts
11
10
  import { FAIL, PASS } from "@xyo-network/crypto-nft-score-model";
12
11
  import { isAddress } from "ethers";
13
- var scoreContractAddress = (nft) => {
12
+ var scoreContractAddress = /* @__PURE__ */ __name((nft) => {
14
13
  if (!nft.address) return FAIL;
15
14
  if (typeof nft.address !== "string") return FAIL;
16
15
  if (!isAddress(nft.address)) return FAIL;
17
16
  return PASS;
18
- };
17
+ }, "scoreContractAddress");
19
18
 
20
19
  // src/lib/rating/criteria/scoring/metadata/animationUrl.ts
21
20
  import { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS as PASS2 } from "@xyo-network/crypto-nft-score-model";
22
21
 
23
22
  // src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts
24
23
  import { URL } from "@xylabs/url";
25
- var web3Protocols = ["ipfs:", "ar:"];
26
- var toUrl = (url) => {
24
+ var web3Protocols = [
25
+ "ipfs:",
26
+ "ar:"
27
+ ];
28
+ var toUrl = /* @__PURE__ */ __name((url) => {
27
29
  if (!url) return void 0;
28
30
  try {
29
31
  return new URL(url);
30
32
  } catch {
31
33
  return void 0;
32
34
  }
33
- };
34
- var isValidUrl = (url) => toUrl(url) !== void 0;
35
- var isWeb3 = (url) => web3Protocols.some((protocol) => protocol === toUrl(url)?.protocol);
36
- var isSecure = (url) => isWeb3(url) || toUrl(url)?.protocol === "https:";
35
+ }, "toUrl");
36
+ var isValidUrl = /* @__PURE__ */ __name((url) => toUrl(url) !== void 0, "isValidUrl");
37
+ var isWeb3 = /* @__PURE__ */ __name((url) => web3Protocols.some((protocol) => protocol === toUrl(url)?.protocol), "isWeb3");
38
+ var isSecure = /* @__PURE__ */ __name((url) => isWeb3(url) || toUrl(url)?.protocol === "https:", "isSecure");
37
39
 
38
40
  // src/lib/rating/criteria/scoring/metadata/animationUrl.ts
39
- var scoreNftAnimationUrl = (nft) => {
41
+ var scoreNftAnimationUrl = /* @__PURE__ */ __name((nft) => {
40
42
  return scoreAnimationUrl(nft.metadata?.animation_url);
41
- };
42
- var scoreAnimationUrl = (animation_url) => {
43
- const score = [0, 0];
43
+ }, "scoreNftAnimationUrl");
44
+ var scoreAnimationUrl = /* @__PURE__ */ __name((animation_url) => {
45
+ const score = [
46
+ 0,
47
+ 0
48
+ ];
44
49
  if (animation_url === void 0 || animation_url === null) return PASS2;
45
50
  incrementPossible(score);
46
51
  if (typeof animation_url !== "string") return score;
@@ -51,11 +56,11 @@ var scoreAnimationUrl = (animation_url) => {
51
56
  incrementTotalAndPossible(score);
52
57
  if (!isWeb3(animation_url)) return score;
53
58
  return incrementTotal(score);
54
- };
59
+ }, "scoreAnimationUrl");
55
60
 
56
61
  // src/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.ts
57
62
  import { incrementPossible as incrementPossible2, incrementTotal as incrementTotal2, incrementTotalAndPossible as incrementTotalAndPossible2 } from "@xyo-network/crypto-nft-score-model";
58
- var isDate = (value) => {
63
+ var isDate = /* @__PURE__ */ __name((value) => {
59
64
  if (isNumber(value)) {
60
65
  try {
61
66
  new Date(value);
@@ -65,23 +70,38 @@ var isDate = (value) => {
65
70
  }
66
71
  }
67
72
  return false;
68
- };
69
- var isNumber = (value) => typeof value === "number";
70
- var isPercentage = (value) => isNumber(value) && value >= 0 && value <= 100;
71
- var isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
72
- var isNonEmptyStringOrNumber = (value) => value === "number" || isNonEmptyString(value);
73
- var evaluateNftAttributes = (nft) => nft?.metadata?.attributes ? evaluateAttributes(nft?.metadata?.attributes) : [0, 1];
74
- var evaluateAttributes = (attributes) => {
75
- if (!attributes || !Array.isArray(attributes) || attributes.length === 0) return [0, 1];
76
- const score = [0, 0];
73
+ }, "isDate");
74
+ var isNumber = /* @__PURE__ */ __name((value) => typeof value === "number", "isNumber");
75
+ var isPercentage = /* @__PURE__ */ __name((value) => isNumber(value) && value >= 0 && value <= 100, "isPercentage");
76
+ var isNonEmptyString = /* @__PURE__ */ __name((value) => typeof value === "string" && value.length > 0, "isNonEmptyString");
77
+ var isNonEmptyStringOrNumber = /* @__PURE__ */ __name((value) => value === "number" || isNonEmptyString(value), "isNonEmptyStringOrNumber");
78
+ var evaluateNftAttributes = /* @__PURE__ */ __name((nft) => nft?.metadata?.attributes ? evaluateAttributes(nft?.metadata?.attributes) : [
79
+ 0,
80
+ 1
81
+ ], "evaluateNftAttributes");
82
+ var evaluateAttributes = /* @__PURE__ */ __name((attributes) => {
83
+ if (!attributes || !Array.isArray(attributes) || attributes.length === 0) return [
84
+ 0,
85
+ 1
86
+ ];
87
+ const score = [
88
+ 0,
89
+ 0
90
+ ];
77
91
  for (const attribute of attributes) {
78
92
  const [attributeTotal, attributePossible] = evaluateAttribute(attribute);
79
93
  incrementTotalAndPossible2(score, attributeTotal, attributePossible);
80
94
  }
81
- return [1, 1];
82
- };
83
- var evaluateAttribute = (attribute) => {
84
- const score = [0, 1];
95
+ return [
96
+ 1,
97
+ 1
98
+ ];
99
+ }, "evaluateAttributes");
100
+ var evaluateAttribute = /* @__PURE__ */ __name((attribute) => {
101
+ const score = [
102
+ 0,
103
+ 1
104
+ ];
85
105
  const max_value = attribute?.max_value;
86
106
  const trait_type = attribute?.trait_type;
87
107
  const value = attribute?.value;
@@ -94,8 +114,8 @@ var evaluateAttribute = (attribute) => {
94
114
  if (isNumber(max_value) && isNumber(value) && value <= max_value) incrementTotal2(score);
95
115
  }
96
116
  return score;
97
- };
98
- var validDisplayType = (attribute) => {
117
+ }, "evaluateAttribute");
118
+ var validDisplayType = /* @__PURE__ */ __name((attribute) => {
99
119
  switch (attribute?.display_type) {
100
120
  case "number":
101
121
  case "boost_number": {
@@ -120,60 +140,75 @@ var validDisplayType = (attribute) => {
120
140
  }
121
141
  }
122
142
  return false;
123
- };
143
+ }, "validDisplayType");
124
144
 
125
145
  // src/lib/rating/criteria/scoring/metadata/backgroundColor.ts
126
146
  import { incrementPossible as incrementPossible3, incrementTotal as incrementTotal3, incrementTotalAndPossible as incrementTotalAndPossible3, PASS as PASS3 } from "@xyo-network/crypto-nft-score-model";
127
147
  var isHexColor = /^[\da-f]{6}$/i;
128
- var scoreNftBackgroundColor = (nft) => {
148
+ var scoreNftBackgroundColor = /* @__PURE__ */ __name((nft) => {
129
149
  return scoreBackgroundColor(nft.metadata?.background_color);
130
- };
131
- var scoreBackgroundColor = (background_color) => {
132
- const score = [0, 0];
150
+ }, "scoreNftBackgroundColor");
151
+ var scoreBackgroundColor = /* @__PURE__ */ __name((background_color) => {
152
+ const score = [
153
+ 0,
154
+ 0
155
+ ];
133
156
  if (background_color === void 0 || background_color === null) return PASS3;
134
157
  incrementPossible3(score);
135
158
  if (typeof background_color !== "string") return score;
136
159
  incrementTotalAndPossible3(score);
137
160
  if (!isHexColor.test(background_color.toUpperCase())) return score;
138
161
  return incrementTotal3(score);
139
- };
162
+ }, "scoreBackgroundColor");
140
163
 
141
164
  // src/lib/rating/criteria/scoring/metadata/description.ts
142
165
  import { incrementTotal as incrementTotal4 } from "@xyo-network/crypto-nft-score-model";
143
- var scoreNftDescription = (nft) => {
166
+ var scoreNftDescription = /* @__PURE__ */ __name((nft) => {
144
167
  return scoreDescription(nft.metadata?.description);
145
- };
146
- var scoreDescription = (description) => {
147
- const score = [0, 1];
168
+ }, "scoreNftDescription");
169
+ var scoreDescription = /* @__PURE__ */ __name((description) => {
170
+ const score = [
171
+ 0,
172
+ 1
173
+ ];
148
174
  if (!description || typeof description !== "string") return score;
149
175
  return incrementTotal4(score);
150
- };
176
+ }, "scoreDescription");
151
177
 
152
178
  // src/lib/rating/criteria/scoring/metadata/externalUrl.ts
153
179
  import { incrementTotal as incrementTotal5 } from "@xyo-network/crypto-nft-score-model";
154
- var scoreNftExternalUrl = (nft) => {
180
+ var scoreNftExternalUrl = /* @__PURE__ */ __name((nft) => {
155
181
  return scoreExternalUrl(nft?.metadata?.external_url);
156
- };
157
- var scoreExternalUrl = (external_url) => {
158
- const score = [0, 2];
182
+ }, "scoreNftExternalUrl");
183
+ var scoreExternalUrl = /* @__PURE__ */ __name((external_url) => {
184
+ const score = [
185
+ 0,
186
+ 2
187
+ ];
159
188
  if (external_url === void 0 || external_url === null || typeof external_url !== "string" || !isValidUrl(external_url)) return score;
160
189
  incrementTotal5(score);
161
190
  if (!isSecure(external_url)) return score;
162
191
  return incrementTotal5(score);
163
- };
192
+ }, "scoreExternalUrl");
164
193
 
165
194
  // src/lib/rating/criteria/scoring/metadata/image.ts
166
195
  import { incrementTotal as incrementTotal6, PASS as PASS4 } from "@xyo-network/crypto-nft-score-model";
167
196
  var MaxPossibleImageScore = 3;
168
- var scoreNftImage = (nft) => {
197
+ var scoreNftImage = /* @__PURE__ */ __name((nft) => {
169
198
  if (nft?.metadata?.image) {
170
199
  return scoreImage(nft.metadata?.image);
171
200
  } else {
172
- return nft.metadata?.image_data ? PASS4 : [0, MaxPossibleImageScore];
201
+ return nft.metadata?.image_data ? PASS4 : [
202
+ 0,
203
+ MaxPossibleImageScore
204
+ ];
173
205
  }
174
- };
175
- var scoreImage = (image) => {
176
- const score = [0, MaxPossibleImageScore];
206
+ }, "scoreNftImage");
207
+ var scoreImage = /* @__PURE__ */ __name((image) => {
208
+ const score = [
209
+ 0,
210
+ MaxPossibleImageScore
211
+ ];
177
212
  if (!image || typeof image !== "string" || !isValidUrl(image)) return score;
178
213
  incrementTotal6(score);
179
214
  if (!isSecure(image)) return score;
@@ -181,13 +216,13 @@ var scoreImage = (image) => {
181
216
  if (!isWeb3(image)) return score;
182
217
  incrementTotal6(score);
183
218
  return score;
184
- };
219
+ }, "scoreImage");
185
220
 
186
221
  // src/lib/rating/criteria/scoring/metadata/imageData.ts
187
222
  import { PASS as PASS5 } from "@xyo-network/crypto-nft-score-model";
188
223
  import { parse } from "svg-parser";
189
224
  var MaxPossibleImageDataScore = 1;
190
- var isValidImageData = (image_data) => {
225
+ var isValidImageData = /* @__PURE__ */ __name((image_data) => {
191
226
  if (!image_data.startsWith("<svg")) return false;
192
227
  try {
193
228
  parse(image_data);
@@ -195,46 +230,61 @@ var isValidImageData = (image_data) => {
195
230
  } catch {
196
231
  return false;
197
232
  }
198
- };
199
- var scoreNftImageData = (nft) => {
233
+ }, "isValidImageData");
234
+ var scoreNftImageData = /* @__PURE__ */ __name((nft) => {
200
235
  if (nft?.metadata?.image_data) {
201
236
  return scoreImageData(nft.metadata?.image_data);
202
237
  } else {
203
- return nft.metadata?.image ? PASS5 : [0, MaxPossibleImageDataScore];
238
+ return nft.metadata?.image ? PASS5 : [
239
+ 0,
240
+ MaxPossibleImageDataScore
241
+ ];
204
242
  }
205
- };
206
- var scoreImageData = (image_data) => {
207
- return !image_data || typeof image_data !== "string" || !isValidImageData(image_data) ? [0, MaxPossibleImageDataScore] : [MaxPossibleImageDataScore, MaxPossibleImageDataScore];
208
- };
243
+ }, "scoreNftImageData");
244
+ var scoreImageData = /* @__PURE__ */ __name((image_data) => {
245
+ return !image_data || typeof image_data !== "string" || !isValidImageData(image_data) ? [
246
+ 0,
247
+ MaxPossibleImageDataScore
248
+ ] : [
249
+ MaxPossibleImageDataScore,
250
+ MaxPossibleImageDataScore
251
+ ];
252
+ }, "scoreImageData");
209
253
 
210
254
  // src/lib/rating/criteria/scoring/metadata/name.ts
211
255
  import { incrementTotal as incrementTotal7 } from "@xyo-network/crypto-nft-score-model";
212
- var scoreNftName = (nft) => {
256
+ var scoreNftName = /* @__PURE__ */ __name((nft) => {
213
257
  return scoreName(nft.metadata?.name);
214
- };
215
- var scoreName = (name) => {
216
- const score = [0, 1];
258
+ }, "scoreNftName");
259
+ var scoreName = /* @__PURE__ */ __name((name) => {
260
+ const score = [
261
+ 0,
262
+ 1
263
+ ];
217
264
  if (!name || typeof name !== "string") return score;
218
265
  return incrementTotal7(score);
219
- };
266
+ }, "scoreName");
220
267
 
221
268
  // src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts
222
269
  import { incrementTotal as incrementTotal8, PASS as PASS6 } from "@xyo-network/crypto-nft-score-model";
223
- var scoreNftYoutubeUrl = (nft) => {
270
+ var scoreNftYoutubeUrl = /* @__PURE__ */ __name((nft) => {
224
271
  return scoreYoutubeUrl(nft?.metadata?.youtube_url);
225
- };
226
- var scoreYoutubeUrl = (youtube_url) => {
272
+ }, "scoreNftYoutubeUrl");
273
+ var scoreYoutubeUrl = /* @__PURE__ */ __name((youtube_url) => {
227
274
  if (youtube_url === void 0 || youtube_url === null) return PASS6;
228
- const score = [0, 2];
275
+ const score = [
276
+ 0,
277
+ 2
278
+ ];
229
279
  if (typeof youtube_url !== "string" || !isValidUrl(youtube_url)) return score;
230
280
  incrementTotal8(score);
231
281
  if (!isSecure(youtube_url)) return score;
232
282
  return incrementTotal8(score);
233
- };
283
+ }, "scoreYoutubeUrl");
234
284
 
235
285
  // src/lib/rating/criteria/scoring/supply.ts
236
286
  import { FAIL as FAIL2, PASS as PASS7 } from "@xyo-network/crypto-nft-score-model";
237
- var scoreSupply = (nft) => {
287
+ var scoreSupply = /* @__PURE__ */ __name((nft) => {
238
288
  if (!nft.supply) return FAIL2;
239
289
  if (typeof nft.supply !== "string") return FAIL2;
240
290
  try {
@@ -242,11 +292,11 @@ var scoreSupply = (nft) => {
242
292
  } catch {
243
293
  return FAIL2;
244
294
  }
245
- };
295
+ }, "scoreSupply");
246
296
 
247
297
  // src/lib/rating/criteria/scoring/tokenId.ts
248
298
  import { FAIL as FAIL3, PASS as PASS8 } from "@xyo-network/crypto-nft-score-model";
249
- var scoreTokenId = (nft) => {
299
+ var scoreTokenId = /* @__PURE__ */ __name((nft) => {
250
300
  if (!nft.tokenId) return FAIL3;
251
301
  if (typeof nft.tokenId !== "string") return FAIL3;
252
302
  try {
@@ -254,94 +304,149 @@ var scoreTokenId = (nft) => {
254
304
  } catch {
255
305
  return FAIL3;
256
306
  }
257
- };
307
+ }, "scoreTokenId");
258
308
 
259
309
  // src/lib/rating/criteria/scoring/type.ts
260
310
  import { FAIL as FAIL4, PASS as PASS9 } from "@xyo-network/crypto-nft-score-model";
261
- var scoreType = (nft) => {
311
+ var scoreType = /* @__PURE__ */ __name((nft) => {
262
312
  if (!nft.type) return FAIL4;
263
313
  if (typeof nft.type !== "string") return FAIL4;
264
314
  const type = nft.type.toUpperCase();
265
315
  if (type !== "ERC721" && type !== "ERC1155") return FAIL4;
266
316
  return PASS9;
267
- };
317
+ }, "scoreType");
268
318
 
269
319
  // src/lib/rating/criteria/scoringCriteria.ts
270
320
  var attributesScoringCriteria = {
271
- Attributes: { score: evaluateNftAttributes, weight: 1 }
321
+ Attributes: {
322
+ score: evaluateNftAttributes,
323
+ weight: 1
324
+ }
272
325
  };
273
326
  var metadataScoringCriteria = {
274
- "Animation URL": { score: scoreNftAnimationUrl, weight: 1 },
275
- "Background Color": { score: scoreNftBackgroundColor, weight: 1 },
276
- Description: { score: scoreNftDescription, weight: 1 },
277
- "External Url": { score: scoreNftExternalUrl, weight: 1 },
278
- Image: { score: scoreNftImage, weight: 1 },
279
- "Image Data": { score: scoreNftImageData, weight: 1 },
280
- Name: { score: scoreNftName, weight: 1 },
281
- "YouTube URL": { score: scoreNftYoutubeUrl, weight: 1 },
327
+ "Animation URL": {
328
+ score: scoreNftAnimationUrl,
329
+ weight: 1
330
+ },
331
+ "Background Color": {
332
+ score: scoreNftBackgroundColor,
333
+ weight: 1
334
+ },
335
+ "Description": {
336
+ score: scoreNftDescription,
337
+ weight: 1
338
+ },
339
+ "External Url": {
340
+ score: scoreNftExternalUrl,
341
+ weight: 1
342
+ },
343
+ "Image": {
344
+ score: scoreNftImage,
345
+ weight: 1
346
+ },
347
+ "Image Data": {
348
+ score: scoreNftImageData,
349
+ weight: 1
350
+ },
351
+ "Name": {
352
+ score: scoreNftName,
353
+ weight: 1
354
+ },
355
+ "YouTube URL": {
356
+ score: scoreNftYoutubeUrl,
357
+ weight: 1
358
+ },
282
359
  ...attributesScoringCriteria
283
360
  };
284
361
  var scoringCriteria = {
285
- "Contract Address": { score: scoreContractAddress, weight: 1 },
286
- Supply: { score: scoreSupply, weight: 1 },
287
- "Token Id": { score: scoreTokenId, weight: 1 },
288
- Type: { score: scoreType, weight: 1 },
362
+ "Contract Address": {
363
+ score: scoreContractAddress,
364
+ weight: 1
365
+ },
366
+ "Supply": {
367
+ score: scoreSupply,
368
+ weight: 1
369
+ },
370
+ "Token Id": {
371
+ score: scoreTokenId,
372
+ weight: 1
373
+ },
374
+ "Type": {
375
+ score: scoreType,
376
+ weight: 1
377
+ },
289
378
  ...metadataScoringCriteria
290
379
  };
291
380
 
292
381
  // src/lib/rating/analyzeNft.ts
293
- var analyzeNft = async (nft) => {
294
- const result = Object.fromEntries(
295
- await Promise.all(
296
- Object.entries(scoringCriteria).map(async ([key, { score, weight }]) => {
297
- const rawScore = await score(nft);
298
- const weighted = rawScore.map((v) => v * weight);
299
- return [key, weighted];
300
- })
301
- )
302
- );
382
+ var analyzeNft = /* @__PURE__ */ __name(async (nft) => {
383
+ const result = Object.fromEntries(await Promise.all(Object.entries(scoringCriteria).map(async ([key, { score, weight }]) => {
384
+ const rawScore = await score(nft);
385
+ const weighted = rawScore.map((v) => v * weight);
386
+ return [
387
+ key,
388
+ weighted
389
+ ];
390
+ })));
303
391
  return result;
304
- };
392
+ }, "analyzeNft");
305
393
 
306
394
  // src/Diviner.ts
307
- var toNftScorePayload = (nftInfo, scores) => {
395
+ var toNftScorePayload = /* @__PURE__ */ __name((nftInfo, scores) => {
308
396
  const { address, chainId, type } = nftInfo;
309
- return { address, chainId, schema: NftScoreSchema, scores, type };
310
- };
311
- var isNftScore = (payload) => payload.schema === NftScoreSchema;
397
+ return {
398
+ address,
399
+ chainId,
400
+ schema: NftScoreSchema,
401
+ scores,
402
+ type
403
+ };
404
+ }, "toNftScorePayload");
405
+ var isNftScore = /* @__PURE__ */ __name((payload) => payload.schema === NftScoreSchema, "isNftScore");
312
406
  var NftScoreDiviner = class extends AbstractDiviner {
313
- static configSchemas = [...super.configSchemas, NftScoreDivinerConfigSchema];
407
+ static {
408
+ __name(this, "NftScoreDiviner");
409
+ }
410
+ static configSchemas = [
411
+ ...super.configSchemas,
412
+ NftScoreDivinerConfigSchema
413
+ ];
314
414
  static defaultConfigSchema = NftScoreDivinerConfigSchema;
315
- divineHandler = async (payloads) => {
415
+ divineHandler = /* @__PURE__ */ __name(async (payloads) => {
316
416
  const nftInfos = payloads?.filter(isNftInfo) ?? [];
317
- const results = await Promise.all(
318
- nftInfos.map(async (nftInfo) => {
319
- const [score, sourceHash] = await Promise.all([
320
- // Analyze the NFT
321
- toNftScorePayload(nftInfo, await analyzeNft(nftInfo)),
322
- // Hash the source payload
323
- PayloadBuilder.dataHash(nftInfo)
324
- ]);
325
- return { ...score, sources: [sourceHash] };
326
- })
327
- );
417
+ const results = await Promise.all(nftInfos.map(async (nftInfo) => {
418
+ const [score, sourceHash] = await Promise.all([
419
+ // Analyze the NFT
420
+ toNftScorePayload(nftInfo, await analyzeNft(nftInfo)),
421
+ // Hash the source payload
422
+ PayloadBuilder.dataHash(nftInfo)
423
+ ]);
424
+ return {
425
+ ...score,
426
+ sources: [
427
+ sourceHash
428
+ ]
429
+ };
430
+ }));
328
431
  return results;
329
- };
432
+ }, "divineHandler");
330
433
  };
331
434
 
332
435
  // src/Plugin.ts
333
436
  import { NftSchema } from "@xyo-network/crypto-nft-payload-plugin";
334
437
  import { PayloadSetSchema } from "@xyo-network/payload-model";
335
438
  import { createPayloadSetDivinerPlugin } from "@xyo-network/payloadset-plugin";
336
- var NftScoreDivinerPlugin = () => createPayloadSetDivinerPlugin(
337
- { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
338
- {
339
- diviner: async (params) => {
340
- const result = await NftScoreDiviner.create(params);
341
- return result;
342
- }
343
- }
344
- );
439
+ var NftScoreDivinerPlugin = /* @__PURE__ */ __name(() => createPayloadSetDivinerPlugin({
440
+ required: {
441
+ [NftSchema]: 1
442
+ },
443
+ schema: PayloadSetSchema
444
+ }, {
445
+ diviner: /* @__PURE__ */ __name(async (params) => {
446
+ const result = await NftScoreDiviner.create(params);
447
+ return result;
448
+ }, "diviner")
449
+ }), "NftScoreDivinerPlugin");
345
450
  export {
346
451
  NftScoreDiviner,
347
452
  NftScoreDivinerPlugin,
@@ -350,4 +455,4 @@ export {
350
455
  isNftScore,
351
456
  scoringCriteria
352
457
  };
353
- //# sourceMappingURL=index.js.map
458
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/lib/rating/criteria/scoring/contract.ts","../../src/lib/rating/criteria/scoring/metadata/animationUrl.ts","../../src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts","../../src/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.ts","../../src/lib/rating/criteria/scoring/metadata/backgroundColor.ts","../../src/lib/rating/criteria/scoring/metadata/description.ts","../../src/lib/rating/criteria/scoring/metadata/externalUrl.ts","../../src/lib/rating/criteria/scoring/metadata/image.ts","../../src/lib/rating/criteria/scoring/metadata/imageData.ts","../../src/lib/rating/criteria/scoring/metadata/name.ts","../../src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts","../../src/lib/rating/criteria/scoring/supply.ts","../../src/lib/rating/criteria/scoring/tokenId.ts","../../src/lib/rating/criteria/scoring/type.ts","../../src/lib/rating/criteria/scoringCriteria.ts","../../src/lib/rating/analyzeNft.ts","../../src/Plugin.ts"],"sourcesContent":["import {\n isNftInfo,\n NftInfo,\n NftScore,\n NftScoreDivinerConfig,\n NftScoreDivinerConfigSchema,\n NftScoreSchema,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerParams } from '@xyo-network/diviner-model'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { analyzeNft, NftAnalysis } from './lib/index.ts'\n\nexport type NftScoreDivinerParams = DivinerParams<AnyConfigSchema<NftScoreDivinerConfig>>\n\nconst toNftScorePayload = (nftInfo: NftInfo, scores: NftAnalysis): NftScore => {\n const { address, chainId, type } = nftInfo\n return { address, chainId, schema: NftScoreSchema, scores, type }\n}\n\nexport const isNftScore = (payload: Payload): payload is NftScore => payload.schema === NftScoreSchema\n\nexport class NftScoreDiviner<TParams extends NftScoreDivinerParams = NftScoreDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, NftScoreDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = NftScoreDivinerConfigSchema\n\n protected override divineHandler = async (payloads?: Payload[]): Promise<Payload[]> => {\n const nftInfos = payloads?.filter(isNftInfo) ?? []\n const results = await Promise.all(\n nftInfos.map<Promise<NftScore>>(async (nftInfo) => {\n const [score, sourceHash] = await Promise.all([\n // Analyze the NFT\n toNftScorePayload(nftInfo, await analyzeNft(nftInfo)),\n // Hash the source payload\n PayloadBuilder.dataHash(nftInfo),\n ])\n return { ...score, sources: [sourceHash] }\n }),\n )\n return results\n }\n}\n","import { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { FAIL, PASS, PassFailScoringFunction } from '@xyo-network/crypto-nft-score-model'\nimport { isAddress } from 'ethers'\n\nexport const scoreContractAddress: PassFailScoringFunction<NftInfoFields> = (nft: NftInfoFields) => {\n if (!nft.address) return FAIL\n if (typeof nft.address !== 'string') return FAIL\n if (!isAddress(nft.address)) return FAIL\n return PASS\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nimport { isSecure, isValidUrl, isWeb3 } from './lib/index.ts'\n\nexport const scoreNftAnimationUrl = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreAnimationUrl(nft.metadata?.animation_url)\n}\n\nexport const scoreAnimationUrl = (animation_url: unknown): ScaledScore => {\n const score: ScaledScore = [0, 0]\n if (animation_url === undefined || animation_url === null) return PASS\n incrementPossible(score)\n if (typeof animation_url !== 'string') return score\n incrementTotalAndPossible(score)\n if (!isValidUrl(animation_url)) return score\n incrementTotalAndPossible(score)\n if (!isSecure(animation_url)) return score\n incrementTotalAndPossible(score)\n if (!isWeb3(animation_url)) return score\n return incrementTotal(score)\n}\n","import { URL } from '@xylabs/url'\n\nexport const web3Protocols = ['ipfs:', 'ar:']\n\nexport const toUrl = (url?: string | null): URL | undefined => {\n if (!url) return undefined\n try {\n return new URL(url)\n } catch {\n return undefined\n }\n}\n\nexport const isValidUrl = (url?: string | null): boolean => toUrl(url) !== undefined\n// eslint-disable-next-line unicorn/prefer-includes\nexport const isWeb3 = (url?: string | null): boolean => web3Protocols.some(protocol => protocol === toUrl(url)?.protocol)\nexport const isWeb2 = (url?: string | null): boolean => !isWeb3(url)\nexport const isSecure = (url?: string | null): boolean => isWeb3(url) || toUrl(url)?.protocol === 'https:'\n","import { NftAttribute, NftInfoFields, OpenSeaNftAttribute, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementPossible, incrementTotal, incrementTotalAndPossible, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nconst isDate = (value: unknown): value is Date => {\n if (isNumber(value)) {\n try {\n new Date(value)\n return true\n } catch {\n return false\n }\n }\n return false\n}\n\nconst isNumber = (value: unknown): value is number => typeof value === 'number'\n\nconst isPercentage = (value: unknown): boolean => isNumber(value) && value >= 0 && value <= 100\n\nconst isNonEmptyString = (value: unknown): value is string => typeof value === 'string' && value.length > 0\n\nconst isNonEmptyStringOrNumber = (value: unknown): value is string | number => value === 'number' || isNonEmptyString(value)\n\nexport const evaluateNftAttributes = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore =>\n nft?.metadata?.attributes ? evaluateAttributes(nft?.metadata?.attributes) : [0, 1]\n\nexport const evaluateAttributes = (attributes: NftAttribute[] | OpenSeaNftAttribute[] | unknown): ScaledScore => {\n if (!attributes || !Array.isArray(attributes) || attributes.length === 0) return [0, 1]\n const score: ScaledScore = [0, 0]\n for (const attribute of attributes) {\n const [attributeTotal, attributePossible] = evaluateAttribute(attribute)\n incrementTotalAndPossible(score, attributeTotal, attributePossible)\n }\n return [1, 1]\n}\n\nexport const evaluateAttribute = (attribute: OpenSeaNftAttribute): ScaledScore => {\n const score: ScaledScore = [0, 1]\n const max_value = attribute?.max_value\n const trait_type = attribute?.trait_type\n const value = attribute?.value\n\n // Validate trait_type & value\n if (!attribute || typeof attribute !== 'object' || !isNonEmptyString(trait_type) || !isNonEmptyStringOrNumber(value)) return score\n incrementTotal(score)\n\n // Validate display_type\n incrementPossible(score)\n if (validDisplayType(attribute)) incrementTotal(score)\n\n // Validate max_value\n if (max_value !== undefined) {\n incrementPossible(score)\n if (isNumber(max_value) && isNumber(value) && value <= max_value) incrementTotal(score)\n }\n\n return score\n}\n\nconst validDisplayType = (attribute: OpenSeaNftAttribute): boolean => {\n switch (attribute?.display_type) {\n case 'number':\n case 'boost_number': {\n if (isNumber(attribute?.value)) return true\n break\n }\n case 'boost_percentage': {\n if (isPercentage(attribute?.value)) return true\n break\n }\n case 'date': {\n if (isDate(attribute?.value)) return true\n break\n }\n case 'string':\n case undefined: {\n if (isNonEmptyString(attribute?.value)) return true\n break\n }\n default: {\n break\n }\n }\n return false\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nconst isHexColor = /^[\\da-f]{6}$/i\n\nexport const scoreNftBackgroundColor = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreBackgroundColor(nft.metadata?.background_color)\n}\n\nexport const scoreBackgroundColor = (background_color: unknown): ScaledScore => {\n const score: ScaledScore = [0, 0]\n if (background_color === undefined || background_color === null) return PASS\n incrementPossible(score)\n if (typeof background_color !== 'string') return score\n incrementTotalAndPossible(score)\n if (!isHexColor.test(background_color.toUpperCase())) return score\n return incrementTotal(score)\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementTotal, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nexport const scoreNftDescription = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreDescription(nft.metadata?.description)\n}\n\nexport const scoreDescription = (description: unknown): ScaledScore => {\n const score: ScaledScore = [0, 1]\n if (!description || typeof description !== 'string') return score\n return incrementTotal(score)\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementTotal, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nimport { isSecure, isValidUrl } from './lib/index.ts'\n\nexport const scoreNftExternalUrl = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreExternalUrl(nft?.metadata?.external_url)\n}\nexport const scoreExternalUrl = (external_url: unknown): ScaledScore => {\n const score: ScaledScore = [0, 2]\n if (external_url === undefined || external_url === null || typeof external_url !== 'string' || !isValidUrl(external_url)) return score\n incrementTotal(score)\n if (!isSecure(external_url)) return score\n return incrementTotal(score)\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementTotal, PASS, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nimport { isSecure, isValidUrl, isWeb3 } from './lib/index.ts'\n\nconst MaxPossibleImageScore = 3\n\nexport const scoreNftImage = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n // If there's no image data\n if (nft?.metadata?.image) {\n return scoreImage(nft.metadata?.image)\n } else {\n // but there is image data, skip this scoring criteria, otherwise fail it completely\n return nft.metadata?.image_data ? PASS : [0, MaxPossibleImageScore]\n }\n}\n\nexport const scoreImage = (image: unknown): ScaledScore => {\n const score: ScaledScore = [0, MaxPossibleImageScore]\n if (!image || typeof image !== 'string' || !isValidUrl(image)) return score\n incrementTotal(score)\n if (!isSecure(image)) return score\n incrementTotal(score)\n if (!isWeb3(image)) return score\n incrementTotal(score)\n return score\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PASS, ScaledScore } from '@xyo-network/crypto-nft-score-model'\nimport { parse } from 'svg-parser'\n\nconst MaxPossibleImageDataScore = 1\n\n// NOTE: There is probably a deeper check we can do\n// here, but this is a good start\nconst isValidImageData = (image_data: string): boolean => {\n // If it doesn't start with an svg tag, it's not an svg\n if (!image_data.startsWith('<svg')) return false\n try {\n // If it can't be parsed, it's not an svg\n parse(image_data)\n return true\n } catch {\n return false\n }\n}\n\nexport const scoreNftImageData = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n // If there's no image data\n if (nft?.metadata?.image_data) {\n return scoreImageData(nft.metadata?.image_data)\n } else {\n // but there is an image, skip this scoring criteria, otherwise fail it completely\n return nft.metadata?.image ? PASS : [0, MaxPossibleImageDataScore]\n }\n}\n\nexport const scoreImageData = (image_data: unknown): ScaledScore => {\n return !image_data || typeof image_data !== 'string' || !isValidImageData(image_data)\n ? [0, MaxPossibleImageDataScore]\n : [MaxPossibleImageDataScore, MaxPossibleImageDataScore]\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementTotal, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nexport const scoreNftName = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreName(nft.metadata?.name)\n}\nexport const scoreName = (name: unknown): ScaledScore => {\n const score: ScaledScore = [0, 1]\n if (!name || typeof name !== 'string') return score\n return incrementTotal(score)\n}\n","import { NftInfoFields, OpenSeaNftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { incrementTotal, PASS, ScaledScore } from '@xyo-network/crypto-nft-score-model'\n\nimport { isSecure, isValidUrl } from './lib/index.ts'\n\nexport const scoreNftYoutubeUrl = (nft: NftInfoFields | OpenSeaNftInfoFields): ScaledScore => {\n return scoreYoutubeUrl(nft?.metadata?.youtube_url)\n}\nexport const scoreYoutubeUrl = (youtube_url: unknown): ScaledScore => {\n if (youtube_url === undefined || youtube_url === null) return PASS\n const score: ScaledScore = [0, 2]\n if (typeof youtube_url !== 'string' || !isValidUrl(youtube_url)) return score\n incrementTotal(score)\n if (!isSecure(youtube_url)) return score\n return incrementTotal(score)\n}\n","import { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { FAIL, PASS, PassFailScoringFunction } from '@xyo-network/crypto-nft-score-model'\n\nexport const scoreSupply: PassFailScoringFunction<NftInfoFields> = (nft: NftInfoFields) => {\n if (!nft.supply) return FAIL\n if (typeof nft.supply !== 'string') return FAIL\n try {\n return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? PASS : FAIL\n } catch {\n return FAIL\n }\n}\n","import { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { FAIL, PASS, PassFailScoringFunction } from '@xyo-network/crypto-nft-score-model'\n\n/**\n * Callers SHALL NOT assume that ID numbers have any specific pattern to them, and\n * MUST treat the ID as a \"black box\"\n * @param nft\n * @returns\n */\nexport const scoreTokenId: PassFailScoringFunction<NftInfoFields> = (nft: NftInfoFields) => {\n if (!nft.tokenId) return FAIL\n if (typeof nft.tokenId !== 'string') return FAIL\n try {\n return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? PASS : FAIL\n } catch {\n return FAIL\n }\n}\n","import { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { FAIL, PASS, PassFailScoringFunction } from '@xyo-network/crypto-nft-score-model'\n\nexport const scoreType: PassFailScoringFunction<NftInfoFields> = (nft: NftInfoFields) => {\n if (!nft.type) return FAIL\n if (typeof nft.type !== 'string') return FAIL\n const type = nft.type.toUpperCase()\n if (type !== 'ERC721' && type !== 'ERC1155') return FAIL\n return PASS\n}\n","import {\n evaluateNftAttributes,\n scoreContractAddress,\n scoreNftAnimationUrl,\n scoreNftBackgroundColor,\n scoreNftDescription,\n scoreNftExternalUrl,\n scoreNftImage,\n scoreNftImageData,\n scoreNftName,\n scoreNftYoutubeUrl,\n scoreSupply,\n scoreTokenId,\n scoreType,\n} from './scoring/index.ts'\n\nconst attributesScoringCriteria = {\n Attributes: { score: evaluateNftAttributes, weight: 1 },\n}\n\nconst metadataScoringCriteria = {\n 'Animation URL': { score: scoreNftAnimationUrl, weight: 1 },\n 'Background Color': { score: scoreNftBackgroundColor, weight: 1 },\n 'Description': { score: scoreNftDescription, weight: 1 },\n 'External Url': { score: scoreNftExternalUrl, weight: 1 },\n 'Image': { score: scoreNftImage, weight: 1 },\n 'Image Data': { score: scoreNftImageData, weight: 1 },\n 'Name': { score: scoreNftName, weight: 1 },\n 'YouTube URL': { score: scoreNftYoutubeUrl, weight: 1 },\n ...attributesScoringCriteria,\n}\n\nexport const scoringCriteria = {\n 'Contract Address': { score: scoreContractAddress, weight: 1 },\n 'Supply': { score: scoreSupply, weight: 1 },\n 'Token Id': { score: scoreTokenId, weight: 1 },\n 'Type': { score: scoreType, weight: 1 },\n ...metadataScoringCriteria,\n}\n","import { NftInfoFields } from '@xyo-network/crypto-nft-payload-plugin'\nimport { Score } from '@xyo-network/crypto-nft-score-model'\n\nimport { scoringCriteria } from './criteria/index.ts'\n\nexport type ScoringCriteriaKey = keyof typeof scoringCriteria & PropertyKey\n\nexport type NftAnalysis = {\n [key in ScoringCriteriaKey]: Score\n}\n\nexport const analyzeNft = async (\n /**\n * The NFT to evaluate\n */\n nft: NftInfoFields,\n): Promise<NftAnalysis> => {\n const result = Object.fromEntries(\n await Promise.all(\n Object.entries(scoringCriteria).map(async ([key, { score, weight }]) => {\n const rawScore = await score(nft)\n const weighted = rawScore.map(v => v * weight) as Score\n return [key, weighted] as const\n }),\n ),\n ) as NftAnalysis\n return result\n}\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { NftScoreDiviner } from './Diviner.ts'\n\nexport const NftScoreDivinerPlugin = () =>\n createPayloadSetDivinerPlugin<NftScoreDiviner>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n const result = await NftScoreDiviner.create(params)\n return result\n },\n },\n )\n"],"mappings":"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","names":["isNftInfo","NftScoreDivinerConfigSchema","NftScoreSchema","AbstractDiviner","PayloadBuilder","FAIL","PASS","isAddress","scoreContractAddress","nft","address","FAIL","isAddress","PASS","incrementPossible","incrementTotal","incrementTotalAndPossible","PASS","URL","web3Protocols","toUrl","url","undefined","URL","isValidUrl","isWeb3","some","protocol","isSecure","url","isWeb3","toUrl","protocol","scoreNftAnimationUrl","nft","scoreAnimationUrl","metadata","animation_url","score","undefined","PASS","incrementPossible","incrementTotalAndPossible","isValidUrl","isSecure","isWeb3","incrementTotal","incrementPossible","incrementTotal","incrementTotalAndPossible","isDate","value","isNumber","Date","isPercentage","isNonEmptyString","length","isNonEmptyStringOrNumber","evaluateNftAttributes","nft","metadata","attributes","evaluateAttributes","Array","isArray","score","attribute","attributeTotal","attributePossible","evaluateAttribute","incrementTotalAndPossible","max_value","trait_type","incrementTotal","incrementPossible","validDisplayType","undefined","display_type","incrementPossible","incrementTotal","incrementTotalAndPossible","PASS","isHexColor","scoreNftBackgroundColor","nft","scoreBackgroundColor","metadata","background_color","score","undefined","PASS","incrementPossible","incrementTotalAndPossible","test","toUpperCase","incrementTotal","incrementTotal","scoreNftDescription","nft","scoreDescription","metadata","description","score","incrementTotal","incrementTotal","scoreNftExternalUrl","nft","scoreExternalUrl","metadata","external_url","score","undefined","isValidUrl","incrementTotal","isSecure","incrementTotal","PASS","MaxPossibleImageScore","scoreNftImage","nft","metadata","image","scoreImage","image_data","PASS","score","isValidUrl","incrementTotal","isSecure","isWeb3","PASS","parse","MaxPossibleImageDataScore","isValidImageData","image_data","startsWith","parse","scoreNftImageData","nft","metadata","scoreImageData","image","PASS","incrementTotal","scoreNftName","nft","scoreName","metadata","name","score","incrementTotal","incrementTotal","PASS","scoreNftYoutubeUrl","nft","scoreYoutubeUrl","metadata","youtube_url","undefined","PASS","score","isValidUrl","incrementTotal","isSecure","FAIL","PASS","scoreSupply","nft","supply","FAIL","BigInt","tokenId","PASS","FAIL","PASS","scoreTokenId","nft","tokenId","FAIL","BigInt","PASS","FAIL","PASS","scoreType","nft","type","FAIL","toUpperCase","PASS","attributesScoringCriteria","Attributes","score","evaluateNftAttributes","weight","metadataScoringCriteria","scoreNftAnimationUrl","scoreNftBackgroundColor","scoreNftDescription","scoreNftExternalUrl","scoreNftImage","scoreNftImageData","scoreNftName","scoreNftYoutubeUrl","scoringCriteria","scoreContractAddress","scoreSupply","scoreTokenId","scoreType","analyzeNft","nft","result","Object","fromEntries","Promise","all","entries","scoringCriteria","map","key","score","weight","rawScore","weighted","v","toNftScorePayload","nftInfo","scores","address","chainId","type","schema","NftScoreSchema","isNftScore","payload","NftScoreDiviner","AbstractDiviner","configSchemas","NftScoreDivinerConfigSchema","defaultConfigSchema","divineHandler","payloads","nftInfos","filter","isNftInfo","results","Promise","all","map","score","sourceHash","analyzeNft","PayloadBuilder","dataHash","sources","NftSchema","PayloadSetSchema","createPayloadSetDivinerPlugin","NftScoreDivinerPlugin","createPayloadSetDivinerPlugin","required","NftSchema","schema","PayloadSetSchema","diviner","params","result","NftScoreDiviner","create"]}
@@ -1,2 +1,2 @@
1
- export * from './rating/index.js';
1
+ export * from './rating/index.ts';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1,2 @@
1
- export * from './rating/index.js';
1
+ export * from './rating/index.ts';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1,2 @@
1
- export * from './rating/index.js';
1
+ export * from './rating/index.ts';
2
2
  //# sourceMappingURL=index.d.ts.map