@xyo-network/crypto-nft-diviner-score-plugin 2.84.0 → 2.84.1
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.
- package/dist/browser/Diviner.d.cts.map +1 -1
- package/dist/browser/Diviner.d.mts.map +1 -1
- package/dist/browser/Diviner.d.ts.map +1 -1
- package/dist/browser/index.cjs +2 -2
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Diviner.d.cts.map +1 -1
- package/dist/node/Diviner.d.mts.map +1 -1
- package/dist/node/Diviner.d.ts.map +1 -1
- package/dist/node/{index.mjs → index.cjs} +112 -85
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +84 -111
- package/dist/node/index.js.map +1 -1
- package/package.json +19 -19
- package/src/Diviner.ts +1 -1
- package/dist/node/index.mjs.map +0 -1
|
@@ -1,41 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
NftScoreDiviner: () => NftScoreDiviner,
|
|
24
|
+
NftScoreDivinerPlugin: () => NftScoreDivinerPlugin,
|
|
25
|
+
analyzeNft: () => analyzeNft,
|
|
26
|
+
default: () => src_default,
|
|
27
|
+
isNftScore: () => isNftScore,
|
|
28
|
+
scoringCriteria: () => scoringCriteria
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(src_exports);
|
|
31
|
+
|
|
1
32
|
// src/Plugin.ts
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
33
|
+
var import_crypto_nft_payload_plugin2 = require("@xyo-network/crypto-nft-payload-plugin");
|
|
34
|
+
var import_payload_model = require("@xyo-network/payload-model");
|
|
35
|
+
var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
|
|
5
36
|
|
|
6
37
|
// src/Diviner.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
isNftInfo,
|
|
11
|
-
NftScoreDivinerConfigSchema,
|
|
12
|
-
NftScoreSchema
|
|
13
|
-
} from "@xyo-network/crypto-nft-payload-plugin";
|
|
38
|
+
var import_abstract_diviner = require("@xyo-network/abstract-diviner");
|
|
39
|
+
var import_crypto_nft_payload_plugin = require("@xyo-network/crypto-nft-payload-plugin");
|
|
40
|
+
var import_hash = require("@xyo-network/hash");
|
|
14
41
|
|
|
15
42
|
// src/lib/rating/criteria/scoring/contract.ts
|
|
16
|
-
|
|
17
|
-
|
|
43
|
+
var import_crypto_nft_score_model = require("@xyo-network/crypto-nft-score-model");
|
|
44
|
+
var import_ethers = require("ethers");
|
|
18
45
|
var scoreContractAddress = (nft) => {
|
|
19
46
|
if (!nft.address)
|
|
20
|
-
return FAIL;
|
|
47
|
+
return import_crypto_nft_score_model.FAIL;
|
|
21
48
|
if (typeof nft.address !== "string")
|
|
22
|
-
return FAIL;
|
|
23
|
-
if (!isAddress(nft.address))
|
|
24
|
-
return FAIL;
|
|
25
|
-
return PASS;
|
|
49
|
+
return import_crypto_nft_score_model.FAIL;
|
|
50
|
+
if (!(0, import_ethers.isAddress)(nft.address))
|
|
51
|
+
return import_crypto_nft_score_model.FAIL;
|
|
52
|
+
return import_crypto_nft_score_model.PASS;
|
|
26
53
|
};
|
|
27
54
|
|
|
28
55
|
// src/lib/rating/criteria/scoring/metadata/animationUrl.ts
|
|
29
|
-
|
|
56
|
+
var import_crypto_nft_score_model2 = require("@xyo-network/crypto-nft-score-model");
|
|
30
57
|
|
|
31
58
|
// src/lib/rating/criteria/scoring/metadata/lib/urlHelpers.ts
|
|
32
|
-
|
|
59
|
+
var import_url = require("@xylabs/url");
|
|
33
60
|
var web3Protocols = ["ipfs:", "ar:"];
|
|
34
61
|
var toUrl = (url) => {
|
|
35
62
|
if (!url)
|
|
36
63
|
return void 0;
|
|
37
64
|
try {
|
|
38
|
-
return new URL(url);
|
|
65
|
+
return new import_url.URL(url);
|
|
39
66
|
} catch (e) {
|
|
40
67
|
return void 0;
|
|
41
68
|
}
|
|
@@ -58,24 +85,24 @@ var scoreNftAnimationUrl = (nft) => {
|
|
|
58
85
|
var scoreAnimationUrl = (animation_url) => {
|
|
59
86
|
const score = [0, 0];
|
|
60
87
|
if (animation_url === void 0 || animation_url === null)
|
|
61
|
-
return
|
|
62
|
-
incrementPossible(score);
|
|
88
|
+
return import_crypto_nft_score_model2.PASS;
|
|
89
|
+
(0, import_crypto_nft_score_model2.incrementPossible)(score);
|
|
63
90
|
if (typeof animation_url !== "string")
|
|
64
91
|
return score;
|
|
65
|
-
incrementTotalAndPossible(score);
|
|
92
|
+
(0, import_crypto_nft_score_model2.incrementTotalAndPossible)(score);
|
|
66
93
|
if (!isValidUrl(animation_url))
|
|
67
94
|
return score;
|
|
68
|
-
incrementTotalAndPossible(score);
|
|
95
|
+
(0, import_crypto_nft_score_model2.incrementTotalAndPossible)(score);
|
|
69
96
|
if (!isSecure(animation_url))
|
|
70
97
|
return score;
|
|
71
|
-
incrementTotalAndPossible(score);
|
|
98
|
+
(0, import_crypto_nft_score_model2.incrementTotalAndPossible)(score);
|
|
72
99
|
if (!isWeb3(animation_url))
|
|
73
100
|
return score;
|
|
74
|
-
return incrementTotal(score);
|
|
101
|
+
return (0, import_crypto_nft_score_model2.incrementTotal)(score);
|
|
75
102
|
};
|
|
76
103
|
|
|
77
104
|
// src/lib/rating/criteria/scoring/metadata/attributes/evaluateAttributes.ts
|
|
78
|
-
|
|
105
|
+
var import_crypto_nft_score_model3 = require("@xyo-network/crypto-nft-score-model");
|
|
79
106
|
var isDate = (value) => {
|
|
80
107
|
if (isNumber(value)) {
|
|
81
108
|
try {
|
|
@@ -101,7 +128,7 @@ var evaluateAttributes = (attributes) => {
|
|
|
101
128
|
const score = [0, 0];
|
|
102
129
|
for (const attribute of attributes) {
|
|
103
130
|
const [attributeTotal, attributePossible] = evaluateAttribute(attribute);
|
|
104
|
-
|
|
131
|
+
(0, import_crypto_nft_score_model3.incrementTotalAndPossible)(score, attributeTotal, attributePossible);
|
|
105
132
|
}
|
|
106
133
|
return [1, 1];
|
|
107
134
|
};
|
|
@@ -112,14 +139,14 @@ var evaluateAttribute = (attribute) => {
|
|
|
112
139
|
const value = attribute == null ? void 0 : attribute.value;
|
|
113
140
|
if (!attribute || typeof attribute !== "object" || !isNonEmptyString(trait_type) || !isNonEmptyStringOrNumber(value))
|
|
114
141
|
return score;
|
|
115
|
-
|
|
116
|
-
|
|
142
|
+
(0, import_crypto_nft_score_model3.incrementTotal)(score);
|
|
143
|
+
(0, import_crypto_nft_score_model3.incrementPossible)(score);
|
|
117
144
|
if (validDisplayType(attribute))
|
|
118
|
-
|
|
145
|
+
(0, import_crypto_nft_score_model3.incrementTotal)(score);
|
|
119
146
|
if (max_value !== void 0) {
|
|
120
|
-
|
|
147
|
+
(0, import_crypto_nft_score_model3.incrementPossible)(score);
|
|
121
148
|
if (isNumber(max_value) && isNumber(value) && value <= max_value)
|
|
122
|
-
|
|
149
|
+
(0, import_crypto_nft_score_model3.incrementTotal)(score);
|
|
123
150
|
}
|
|
124
151
|
return score;
|
|
125
152
|
};
|
|
@@ -155,7 +182,7 @@ var validDisplayType = (attribute) => {
|
|
|
155
182
|
};
|
|
156
183
|
|
|
157
184
|
// src/lib/rating/criteria/scoring/metadata/backgroundColor.ts
|
|
158
|
-
|
|
185
|
+
var import_crypto_nft_score_model4 = require("@xyo-network/crypto-nft-score-model");
|
|
159
186
|
var isHexColor = /^[0-9A-F]{6}$/i;
|
|
160
187
|
var scoreNftBackgroundColor = (nft) => {
|
|
161
188
|
var _a;
|
|
@@ -164,18 +191,18 @@ var scoreNftBackgroundColor = (nft) => {
|
|
|
164
191
|
var scoreBackgroundColor = (background_color) => {
|
|
165
192
|
const score = [0, 0];
|
|
166
193
|
if (background_color === void 0 || background_color === null)
|
|
167
|
-
return
|
|
168
|
-
|
|
194
|
+
return import_crypto_nft_score_model4.PASS;
|
|
195
|
+
(0, import_crypto_nft_score_model4.incrementPossible)(score);
|
|
169
196
|
if (typeof background_color !== "string")
|
|
170
197
|
return score;
|
|
171
|
-
|
|
198
|
+
(0, import_crypto_nft_score_model4.incrementTotalAndPossible)(score);
|
|
172
199
|
if (!background_color.toUpperCase().match(isHexColor))
|
|
173
200
|
return score;
|
|
174
|
-
return
|
|
201
|
+
return (0, import_crypto_nft_score_model4.incrementTotal)(score);
|
|
175
202
|
};
|
|
176
203
|
|
|
177
204
|
// src/lib/rating/criteria/scoring/metadata/description.ts
|
|
178
|
-
|
|
205
|
+
var import_crypto_nft_score_model5 = require("@xyo-network/crypto-nft-score-model");
|
|
179
206
|
var scoreNftDescription = (nft) => {
|
|
180
207
|
var _a;
|
|
181
208
|
return scoreDescription((_a = nft.metadata) == null ? void 0 : _a.description);
|
|
@@ -184,11 +211,11 @@ var scoreDescription = (description) => {
|
|
|
184
211
|
const score = [0, 1];
|
|
185
212
|
if (!description || typeof description !== "string")
|
|
186
213
|
return score;
|
|
187
|
-
return
|
|
214
|
+
return (0, import_crypto_nft_score_model5.incrementTotal)(score);
|
|
188
215
|
};
|
|
189
216
|
|
|
190
217
|
// src/lib/rating/criteria/scoring/metadata/externalUrl.ts
|
|
191
|
-
|
|
218
|
+
var import_crypto_nft_score_model6 = require("@xyo-network/crypto-nft-score-model");
|
|
192
219
|
var scoreNftExternalUrl = (nft) => {
|
|
193
220
|
var _a;
|
|
194
221
|
return scoreExternalUrl((_a = nft == null ? void 0 : nft.metadata) == null ? void 0 : _a.external_url);
|
|
@@ -197,19 +224,19 @@ var scoreExternalUrl = (external_url) => {
|
|
|
197
224
|
const score = [0, 2];
|
|
198
225
|
if (external_url === void 0 || external_url === null || typeof external_url !== "string" || !isValidUrl(external_url))
|
|
199
226
|
return score;
|
|
200
|
-
|
|
227
|
+
(0, import_crypto_nft_score_model6.incrementTotal)(score);
|
|
201
228
|
if (!isSecure(external_url))
|
|
202
229
|
return score;
|
|
203
|
-
return
|
|
230
|
+
return (0, import_crypto_nft_score_model6.incrementTotal)(score);
|
|
204
231
|
};
|
|
205
232
|
|
|
206
233
|
// src/lib/rating/criteria/scoring/metadata/image.ts
|
|
207
|
-
|
|
234
|
+
var import_crypto_nft_score_model7 = require("@xyo-network/crypto-nft-score-model");
|
|
208
235
|
var MaxPossibleImageScore = 3;
|
|
209
236
|
var scoreNftImage = (nft) => {
|
|
210
237
|
var _a, _b, _c;
|
|
211
238
|
if (!((_a = nft == null ? void 0 : nft.metadata) == null ? void 0 : _a.image)) {
|
|
212
|
-
return ((_b = nft.metadata) == null ? void 0 : _b.image_data) ?
|
|
239
|
+
return ((_b = nft.metadata) == null ? void 0 : _b.image_data) ? import_crypto_nft_score_model7.PASS : [0, MaxPossibleImageScore];
|
|
213
240
|
} else {
|
|
214
241
|
return scoreImage((_c = nft.metadata) == null ? void 0 : _c.image);
|
|
215
242
|
}
|
|
@@ -218,25 +245,25 @@ var scoreImage = (image) => {
|
|
|
218
245
|
const score = [0, MaxPossibleImageScore];
|
|
219
246
|
if (!image || typeof image !== "string" || !isValidUrl(image))
|
|
220
247
|
return score;
|
|
221
|
-
|
|
248
|
+
(0, import_crypto_nft_score_model7.incrementTotal)(score);
|
|
222
249
|
if (!isSecure(image))
|
|
223
250
|
return score;
|
|
224
|
-
|
|
251
|
+
(0, import_crypto_nft_score_model7.incrementTotal)(score);
|
|
225
252
|
if (!isWeb3(image))
|
|
226
253
|
return score;
|
|
227
|
-
|
|
254
|
+
(0, import_crypto_nft_score_model7.incrementTotal)(score);
|
|
228
255
|
return score;
|
|
229
256
|
};
|
|
230
257
|
|
|
231
258
|
// src/lib/rating/criteria/scoring/metadata/imageData.ts
|
|
232
|
-
|
|
233
|
-
|
|
259
|
+
var import_crypto_nft_score_model8 = require("@xyo-network/crypto-nft-score-model");
|
|
260
|
+
var import_svg_parser = require("svg-parser");
|
|
234
261
|
var MaxPossibleImageDataScore = 1;
|
|
235
262
|
var isValidImageData = (image_data) => {
|
|
236
263
|
if (!image_data.startsWith("<svg"))
|
|
237
264
|
return false;
|
|
238
265
|
try {
|
|
239
|
-
parse(image_data);
|
|
266
|
+
(0, import_svg_parser.parse)(image_data);
|
|
240
267
|
return true;
|
|
241
268
|
} catch (error) {
|
|
242
269
|
return false;
|
|
@@ -245,7 +272,7 @@ var isValidImageData = (image_data) => {
|
|
|
245
272
|
var scoreNftImageData = (nft) => {
|
|
246
273
|
var _a, _b, _c;
|
|
247
274
|
if (!((_a = nft == null ? void 0 : nft.metadata) == null ? void 0 : _a.image_data)) {
|
|
248
|
-
return ((_b = nft.metadata) == null ? void 0 : _b.image) ?
|
|
275
|
+
return ((_b = nft.metadata) == null ? void 0 : _b.image) ? import_crypto_nft_score_model8.PASS : [0, MaxPossibleImageDataScore];
|
|
249
276
|
} else {
|
|
250
277
|
return scoreImageData((_c = nft.metadata) == null ? void 0 : _c.image_data);
|
|
251
278
|
}
|
|
@@ -255,7 +282,7 @@ var scoreImageData = (image_data) => {
|
|
|
255
282
|
};
|
|
256
283
|
|
|
257
284
|
// src/lib/rating/criteria/scoring/metadata/name.ts
|
|
258
|
-
|
|
285
|
+
var import_crypto_nft_score_model9 = require("@xyo-network/crypto-nft-score-model");
|
|
259
286
|
var scoreNftName = (nft) => {
|
|
260
287
|
var _a;
|
|
261
288
|
return scoreName((_a = nft.metadata) == null ? void 0 : _a.name);
|
|
@@ -264,66 +291,66 @@ var scoreName = (name) => {
|
|
|
264
291
|
const score = [0, 1];
|
|
265
292
|
if (!name || typeof name !== "string")
|
|
266
293
|
return score;
|
|
267
|
-
return
|
|
294
|
+
return (0, import_crypto_nft_score_model9.incrementTotal)(score);
|
|
268
295
|
};
|
|
269
296
|
|
|
270
297
|
// src/lib/rating/criteria/scoring/metadata/youtubeUrl.ts
|
|
271
|
-
|
|
298
|
+
var import_crypto_nft_score_model10 = require("@xyo-network/crypto-nft-score-model");
|
|
272
299
|
var scoreNftYoutubeUrl = (nft) => {
|
|
273
300
|
var _a;
|
|
274
301
|
return scoreYoutubeUrl((_a = nft == null ? void 0 : nft.metadata) == null ? void 0 : _a.youtube_url);
|
|
275
302
|
};
|
|
276
303
|
var scoreYoutubeUrl = (youtube_url) => {
|
|
277
304
|
if (youtube_url === void 0 || youtube_url === null)
|
|
278
|
-
return
|
|
305
|
+
return import_crypto_nft_score_model10.PASS;
|
|
279
306
|
const score = [0, 2];
|
|
280
307
|
if (typeof youtube_url !== "string" || !isValidUrl(youtube_url))
|
|
281
308
|
return score;
|
|
282
|
-
|
|
309
|
+
(0, import_crypto_nft_score_model10.incrementTotal)(score);
|
|
283
310
|
if (!isSecure(youtube_url))
|
|
284
311
|
return score;
|
|
285
|
-
return
|
|
312
|
+
return (0, import_crypto_nft_score_model10.incrementTotal)(score);
|
|
286
313
|
};
|
|
287
314
|
|
|
288
315
|
// src/lib/rating/criteria/scoring/supply.ts
|
|
289
|
-
|
|
316
|
+
var import_crypto_nft_score_model11 = require("@xyo-network/crypto-nft-score-model");
|
|
290
317
|
var scoreSupply = (nft) => {
|
|
291
318
|
if (!nft.supply)
|
|
292
|
-
return
|
|
319
|
+
return import_crypto_nft_score_model11.FAIL;
|
|
293
320
|
if (typeof nft.supply !== "string")
|
|
294
|
-
return
|
|
321
|
+
return import_crypto_nft_score_model11.FAIL;
|
|
295
322
|
try {
|
|
296
|
-
return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ?
|
|
323
|
+
return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? import_crypto_nft_score_model11.PASS : import_crypto_nft_score_model11.FAIL;
|
|
297
324
|
} catch (_error) {
|
|
298
|
-
return
|
|
325
|
+
return import_crypto_nft_score_model11.FAIL;
|
|
299
326
|
}
|
|
300
327
|
};
|
|
301
328
|
|
|
302
329
|
// src/lib/rating/criteria/scoring/tokenId.ts
|
|
303
|
-
|
|
330
|
+
var import_crypto_nft_score_model12 = require("@xyo-network/crypto-nft-score-model");
|
|
304
331
|
var scoreTokenId = (nft) => {
|
|
305
332
|
if (!nft.tokenId)
|
|
306
|
-
return
|
|
333
|
+
return import_crypto_nft_score_model12.FAIL;
|
|
307
334
|
if (typeof nft.tokenId !== "string")
|
|
308
|
-
return
|
|
335
|
+
return import_crypto_nft_score_model12.FAIL;
|
|
309
336
|
try {
|
|
310
|
-
return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ?
|
|
337
|
+
return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? import_crypto_nft_score_model12.PASS : import_crypto_nft_score_model12.FAIL;
|
|
311
338
|
} catch (_error) {
|
|
312
|
-
return
|
|
339
|
+
return import_crypto_nft_score_model12.FAIL;
|
|
313
340
|
}
|
|
314
341
|
};
|
|
315
342
|
|
|
316
343
|
// src/lib/rating/criteria/scoring/type.ts
|
|
317
|
-
|
|
344
|
+
var import_crypto_nft_score_model13 = require("@xyo-network/crypto-nft-score-model");
|
|
318
345
|
var scoreType = (nft) => {
|
|
319
346
|
if (!nft.type)
|
|
320
|
-
return
|
|
347
|
+
return import_crypto_nft_score_model13.FAIL;
|
|
321
348
|
if (typeof nft.type !== "string")
|
|
322
|
-
return
|
|
349
|
+
return import_crypto_nft_score_model13.FAIL;
|
|
323
350
|
const type = nft.type.toUpperCase();
|
|
324
351
|
if (type !== "ERC721" && type !== "ERC1155")
|
|
325
|
-
return
|
|
326
|
-
return
|
|
352
|
+
return import_crypto_nft_score_model13.FAIL;
|
|
353
|
+
return import_crypto_nft_score_model13.PASS;
|
|
327
354
|
};
|
|
328
355
|
|
|
329
356
|
// src/lib/rating/criteria/scoringCriteria.ts
|
|
@@ -366,20 +393,20 @@ var analyzeNft = async (nft) => {
|
|
|
366
393
|
// src/Diviner.ts
|
|
367
394
|
var toNftScorePayload = (nftInfo, scores) => {
|
|
368
395
|
const { address, chainId, type } = nftInfo;
|
|
369
|
-
return { address, chainId, schema: NftScoreSchema, scores, type };
|
|
396
|
+
return { address, chainId, schema: import_crypto_nft_payload_plugin.NftScoreSchema, scores, type };
|
|
370
397
|
};
|
|
371
|
-
var isNftScore = (payload) => payload.schema === NftScoreSchema;
|
|
372
|
-
var NftScoreDiviner = class extends AbstractDiviner {
|
|
373
|
-
static configSchemas = [NftScoreDivinerConfigSchema];
|
|
398
|
+
var isNftScore = (payload) => payload.schema === import_crypto_nft_payload_plugin.NftScoreSchema;
|
|
399
|
+
var NftScoreDiviner = class extends import_abstract_diviner.AbstractDiviner {
|
|
400
|
+
static configSchemas = [import_crypto_nft_payload_plugin.NftScoreDivinerConfigSchema];
|
|
374
401
|
divineHandler = async (payloads) => {
|
|
375
|
-
const nftInfos = (payloads == null ? void 0 : payloads.filter(isNftInfo)) ?? [];
|
|
402
|
+
const nftInfos = (payloads == null ? void 0 : payloads.filter(import_crypto_nft_payload_plugin.isNftInfo)) ?? [];
|
|
376
403
|
const results = await Promise.all(
|
|
377
404
|
nftInfos.map(async (nftInfo) => {
|
|
378
405
|
const [score, sourceHash] = await Promise.all([
|
|
379
406
|
// Analyze the NFT
|
|
380
407
|
toNftScorePayload(nftInfo, await analyzeNft(nftInfo)),
|
|
381
408
|
// Hash the source payload
|
|
382
|
-
PayloadHasher.hashAsync(nftInfo)
|
|
409
|
+
import_hash.PayloadHasher.hashAsync(nftInfo)
|
|
383
410
|
]);
|
|
384
411
|
return { ...score, sources: [sourceHash] };
|
|
385
412
|
})
|
|
@@ -389,8 +416,8 @@ var NftScoreDiviner = class extends AbstractDiviner {
|
|
|
389
416
|
};
|
|
390
417
|
|
|
391
418
|
// src/Plugin.ts
|
|
392
|
-
var NftScoreDivinerPlugin = () => createPayloadSetDivinerPlugin(
|
|
393
|
-
{ required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
|
|
419
|
+
var NftScoreDivinerPlugin = () => (0, import_payloadset_plugin.createPayloadSetDivinerPlugin)(
|
|
420
|
+
{ required: { [import_crypto_nft_payload_plugin2.NftSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
394
421
|
{
|
|
395
422
|
diviner: async (params) => {
|
|
396
423
|
const result = await NftScoreDiviner.create(params);
|
|
@@ -401,12 +428,12 @@ var NftScoreDivinerPlugin = () => createPayloadSetDivinerPlugin(
|
|
|
401
428
|
|
|
402
429
|
// src/index.ts
|
|
403
430
|
var src_default = NftScoreDivinerPlugin;
|
|
404
|
-
export
|
|
431
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
432
|
+
0 && (module.exports = {
|
|
405
433
|
NftScoreDiviner,
|
|
406
434
|
NftScoreDivinerPlugin,
|
|
407
435
|
analyzeNft,
|
|
408
|
-
src_default as default,
|
|
409
436
|
isNftScore,
|
|
410
437
|
scoringCriteria
|
|
411
|
-
};
|
|
412
|
-
//# sourceMappingURL=index.
|
|
438
|
+
});
|
|
439
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../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"],"sourcesContent":["import { NftScoreDivinerPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './lib'\n\nexport { NftScoreDivinerPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default NftScoreDivinerPlugin\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'\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","import { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n isNftInfo,\n NftInfo,\n NftScore,\n NftScoreDivinerConfig,\n NftScoreDivinerConfigSchema,\n NftScoreSchema,\n} from '@xyo-network/crypto-nft-payload-plugin'\nimport { DivinerParams } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { analyzeNft, NftAnalysis } from './lib'\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 configSchemas = [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 PayloadHasher.hashAsync(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'\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 (e) {\n return undefined\n }\n}\n\nexport const isValidUrl = (url?: string | null): boolean => toUrl(url) !== undefined\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 (error) {\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 ? [0, 1] : evaluateAttributes(nft?.metadata?.attributes)\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 = /^[0-9A-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 (!background_color.toUpperCase().match(isHexColor)) 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'\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'\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 // but there is image data, skip this scoring criteria, otherwise fail it completely\n return nft.metadata?.image_data ? PASS : [0, MaxPossibleImageScore]\n } else {\n return scoreImage(nft.metadata?.image)\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 (error) {\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 // but there is an image, skip this scoring criteria, otherwise fail it completely\n return nft.metadata?.image ? PASS : [0, MaxPossibleImageDataScore]\n } else {\n return scoreImageData(nft.metadata?.image_data)\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'\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 (_error) {\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 (_error) {\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'\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'\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"],"mappings":"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","names":["import_crypto_nft_payload_plugin","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model","import_crypto_nft_score_model"]}
|