@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.
@@ -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
- import { NftSchema } from "@xyo-network/crypto-nft-payload-plugin";
3
- import { PayloadSetSchema } from "@xyo-network/payload-model";
4
- import { createPayloadSetDivinerPlugin } from "@xyo-network/payloadset-plugin";
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
- import { AbstractDiviner } from "@xyo-network/abstract-diviner";
8
- import { PayloadHasher } from "@xyo-network/core";
9
- import {
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
- import { FAIL, PASS } from "@xyo-network/crypto-nft-score-model";
17
- import { isAddress } from "ethers";
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
- import { incrementPossible, incrementTotal, incrementTotalAndPossible, PASS as PASS2 } from "@xyo-network/crypto-nft-score-model";
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
- import { URL } from "@xylabs/url";
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 PASS2;
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
- import { incrementPossible as incrementPossible2, incrementTotal as incrementTotal2, incrementTotalAndPossible as incrementTotalAndPossible2 } from "@xyo-network/crypto-nft-score-model";
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
- incrementTotalAndPossible2(score, attributeTotal, attributePossible);
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
- incrementTotal2(score);
116
- incrementPossible2(score);
142
+ (0, import_crypto_nft_score_model3.incrementTotal)(score);
143
+ (0, import_crypto_nft_score_model3.incrementPossible)(score);
117
144
  if (validDisplayType(attribute))
118
- incrementTotal2(score);
145
+ (0, import_crypto_nft_score_model3.incrementTotal)(score);
119
146
  if (max_value !== void 0) {
120
- incrementPossible2(score);
147
+ (0, import_crypto_nft_score_model3.incrementPossible)(score);
121
148
  if (isNumber(max_value) && isNumber(value) && value <= max_value)
122
- incrementTotal2(score);
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
- import { incrementPossible as incrementPossible3, incrementTotal as incrementTotal3, incrementTotalAndPossible as incrementTotalAndPossible3, PASS as PASS3 } from "@xyo-network/crypto-nft-score-model";
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 PASS3;
168
- incrementPossible3(score);
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
- incrementTotalAndPossible3(score);
198
+ (0, import_crypto_nft_score_model4.incrementTotalAndPossible)(score);
172
199
  if (!background_color.toUpperCase().match(isHexColor))
173
200
  return score;
174
- return incrementTotal3(score);
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
- import { incrementTotal as incrementTotal4 } from "@xyo-network/crypto-nft-score-model";
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 incrementTotal4(score);
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
- import { incrementTotal as incrementTotal5 } from "@xyo-network/crypto-nft-score-model";
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
- incrementTotal5(score);
227
+ (0, import_crypto_nft_score_model6.incrementTotal)(score);
201
228
  if (!isSecure(external_url))
202
229
  return score;
203
- return incrementTotal5(score);
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
- import { incrementTotal as incrementTotal6, PASS as PASS4 } from "@xyo-network/crypto-nft-score-model";
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) ? PASS4 : [0, MaxPossibleImageScore];
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
- incrementTotal6(score);
248
+ (0, import_crypto_nft_score_model7.incrementTotal)(score);
222
249
  if (!isSecure(image))
223
250
  return score;
224
- incrementTotal6(score);
251
+ (0, import_crypto_nft_score_model7.incrementTotal)(score);
225
252
  if (!isWeb3(image))
226
253
  return score;
227
- incrementTotal6(score);
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
- import { PASS as PASS5 } from "@xyo-network/crypto-nft-score-model";
233
- import { parse } from "svg-parser";
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) ? PASS5 : [0, MaxPossibleImageDataScore];
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
- import { incrementTotal as incrementTotal7 } from "@xyo-network/crypto-nft-score-model";
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 incrementTotal7(score);
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
- import { incrementTotal as incrementTotal8, PASS as PASS6 } from "@xyo-network/crypto-nft-score-model";
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 PASS6;
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
- incrementTotal8(score);
309
+ (0, import_crypto_nft_score_model10.incrementTotal)(score);
283
310
  if (!isSecure(youtube_url))
284
311
  return score;
285
- return incrementTotal8(score);
312
+ return (0, import_crypto_nft_score_model10.incrementTotal)(score);
286
313
  };
287
314
 
288
315
  // src/lib/rating/criteria/scoring/supply.ts
289
- import { FAIL as FAIL2, PASS as PASS7 } from "@xyo-network/crypto-nft-score-model";
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 FAIL2;
319
+ return import_crypto_nft_score_model11.FAIL;
293
320
  if (typeof nft.supply !== "string")
294
- return FAIL2;
321
+ return import_crypto_nft_score_model11.FAIL;
295
322
  try {
296
- return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? PASS7 : FAIL2;
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 FAIL2;
325
+ return import_crypto_nft_score_model11.FAIL;
299
326
  }
300
327
  };
301
328
 
302
329
  // src/lib/rating/criteria/scoring/tokenId.ts
303
- import { FAIL as FAIL3, PASS as PASS8 } from "@xyo-network/crypto-nft-score-model";
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 FAIL3;
333
+ return import_crypto_nft_score_model12.FAIL;
307
334
  if (typeof nft.tokenId !== "string")
308
- return FAIL3;
335
+ return import_crypto_nft_score_model12.FAIL;
309
336
  try {
310
- return BigInt(nft.tokenId) >= 0n && BigInt(nft.tokenId) < 2n ** 256n ? PASS8 : FAIL3;
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 FAIL3;
339
+ return import_crypto_nft_score_model12.FAIL;
313
340
  }
314
341
  };
315
342
 
316
343
  // src/lib/rating/criteria/scoring/type.ts
317
- import { FAIL as FAIL4, PASS as PASS9 } from "@xyo-network/crypto-nft-score-model";
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 FAIL4;
347
+ return import_crypto_nft_score_model13.FAIL;
321
348
  if (typeof nft.type !== "string")
322
- return FAIL4;
349
+ return import_crypto_nft_score_model13.FAIL;
323
350
  const type = nft.type.toUpperCase();
324
351
  if (type !== "ERC721" && type !== "ERC1155")
325
- return FAIL4;
326
- return PASS9;
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.mjs.map
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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,oCAA0B;AAC1B,2BAAiC;AACjC,+BAA8C;;;ACF9C,8BAAgC;AAChC,uCAOO;AAEP,kBAA8B;;;ACT9B,oCAAoD;AACpD,oBAA0B;AAEnB,IAAM,uBAA+D,CAAC,QAAuB;AAClG,MAAI,CAAC,IAAI;AAAS,WAAO;AACzB,MAAI,OAAO,IAAI,YAAY;AAAU,WAAO;AAC5C,MAAI,KAAC,yBAAU,IAAI,OAAO;AAAG,WAAO;AACpC,SAAO;AACT;;;ACRA,IAAAC,iCAAgG;;;ACDhG,iBAAoB;AAEb,IAAM,gBAAgB,CAAC,SAAS,KAAK;AAErC,IAAM,QAAQ,CAAC,QAAyC;AAC7D,MAAI,CAAC;AAAK,WAAO;AACjB,MAAI;AACF,WAAO,IAAI,eAAI,GAAG;AAAA,EACpB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,IAAM,aAAa,CAAC,QAAiC,MAAM,GAAG,MAAM;AACpE,IAAM,SAAS,CAAC,QAAiC,cAAc,KAAK,CAAC,aAAU;AAdtF;AAcyF,wBAAa,WAAM,GAAG,MAAT,mBAAY;AAAA,CAAQ;AAEnH,IAAM,WAAW,CAAC,QAA8B;AAhBvD;AAgB0D,gBAAO,GAAG,OAAK,WAAM,GAAG,MAAT,mBAAY,cAAa;AAAA;;;ADX3F,IAAM,uBAAuB,CAAC,QAA2D;AALhG;AAME,SAAO,mBAAkB,SAAI,aAAJ,mBAAc,aAAa;AACtD;AAEO,IAAM,oBAAoB,CAAC,kBAAwC;AACxE,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,kBAAkB,UAAa,kBAAkB;AAAM,WAAO;AAClE,wDAAkB,KAAK;AACvB,MAAI,OAAO,kBAAkB;AAAU,WAAO;AAC9C,gEAA0B,KAAK;AAC/B,MAAI,CAAC,WAAW,aAAa;AAAG,WAAO;AACvC,gEAA0B,KAAK;AAC/B,MAAI,CAAC,SAAS,aAAa;AAAG,WAAO;AACrC,gEAA0B,KAAK;AAC/B,MAAI,CAAC,OAAO,aAAa;AAAG,WAAO;AACnC,aAAO,+CAAe,KAAK;AAC7B;;;AEpBA,IAAAC,iCAA0F;AAE1F,IAAM,SAAS,CAAC,UAAkC;AAChD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI;AACF,UAAI,KAAK,KAAK;AACd,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,UAAoC,OAAO,UAAU;AAEvE,IAAM,eAAe,CAAC,UAA4B,SAAS,KAAK,KAAK,SAAS,KAAK,SAAS;AAE5F,IAAM,mBAAmB,CAAC,UAAoC,OAAO,UAAU,YAAY,MAAM,SAAS;AAE1G,IAAM,2BAA2B,CAAC,UAA6C,UAAU,YAAY,iBAAiB,KAAK;AAEpH,IAAM,wBAAwB,CAAC,QAAwD;AAvB9F;AAwBE,YAAC,gCAAK,aAAL,mBAAe,cAAa,CAAC,GAAG,CAAC,IAAI,oBAAmB,gCAAK,aAAL,mBAAe,UAAU;AAAA;AAE7E,IAAM,qBAAqB,CAAC,eAA8E;AAC/G,MAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,UAAU,KAAK,WAAW,WAAW;AAAG,WAAO,CAAC,GAAG,CAAC;AACtF,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,aAAW,aAAa,YAAY;AAClC,UAAM,CAAC,gBAAgB,iBAAiB,IAAI,kBAAkB,SAAS;AACvE,kEAA0B,OAAO,gBAAgB,iBAAiB;AAAA,EACpE;AACA,SAAO,CAAC,GAAG,CAAC;AACd;AAEO,IAAM,oBAAoB,CAAC,cAAgD;AAChF,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,QAAM,YAAY,uCAAW;AAC7B,QAAM,aAAa,uCAAW;AAC9B,QAAM,QAAQ,uCAAW;AAGzB,MAAI,CAAC,aAAa,OAAO,cAAc,YAAY,CAAC,iBAAiB,UAAU,KAAK,CAAC,yBAAyB,KAAK;AAAG,WAAO;AAC7H,qDAAe,KAAK;AAGpB,wDAAkB,KAAK;AACvB,MAAI,iBAAiB,SAAS;AAAG,uDAAe,KAAK;AAGrD,MAAI,cAAc,QAAW;AAC3B,0DAAkB,KAAK;AACvB,QAAI,SAAS,SAAS,KAAK,SAAS,KAAK,KAAK,SAAS;AAAW,yDAAe,KAAK;AAAA,EACxF;AAEA,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,cAA4C;AACpE,UAAQ,uCAAW,cAAc;AAAA,IAC/B,KAAK;AAAA,IACL,KAAK,gBAAgB;AACnB,UAAI,SAAS,uCAAW,KAAK;AAAG,eAAO;AACvC;AAAA,IACF;AAAA,IACA,KAAK,oBAAoB;AACvB,UAAI,aAAa,uCAAW,KAAK;AAAG,eAAO;AAC3C;AAAA,IACF;AAAA,IACA,KAAK,QAAQ;AACX,UAAI,OAAO,uCAAW,KAAK;AAAG,eAAO;AACrC;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,QAAW;AACd,UAAI,iBAAiB,uCAAW,KAAK;AAAG,eAAO;AAC/C;AAAA,IACF;AAAA,IACA,SAAS;AACP;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACnFA,IAAAC,iCAAgG;AAEhG,IAAM,aAAa;AAEZ,IAAM,0BAA0B,CAAC,QAA2D;AALnG;AAME,SAAO,sBAAqB,SAAI,aAAJ,mBAAc,gBAAgB;AAC5D;AAEO,IAAM,uBAAuB,CAAC,qBAA2C;AAC9E,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,qBAAqB,UAAa,qBAAqB;AAAM,WAAO;AACxE,wDAAkB,KAAK;AACvB,MAAI,OAAO,qBAAqB;AAAU,WAAO;AACjD,gEAA0B,KAAK;AAC/B,MAAI,CAAC,iBAAiB,YAAY,EAAE,MAAM,UAAU;AAAG,WAAO;AAC9D,aAAO,+CAAe,KAAK;AAC7B;;;AChBA,IAAAC,iCAA4C;AAErC,IAAM,sBAAsB,CAAC,QAA2D;AAH/F;AAIE,SAAO,kBAAiB,SAAI,aAAJ,mBAAc,WAAW;AACnD;AAEO,IAAM,mBAAmB,CAAC,gBAAsC;AACrE,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,CAAC,eAAe,OAAO,gBAAgB;AAAU,WAAO;AAC5D,aAAO,+CAAe,KAAK;AAC7B;;;ACVA,IAAAC,iCAA4C;AAIrC,IAAM,sBAAsB,CAAC,QAA2D;AAL/F;AAME,SAAO,kBAAiB,gCAAK,aAAL,mBAAe,YAAY;AACrD;AACO,IAAM,mBAAmB,CAAC,iBAAuC;AACtE,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,iBAAiB,UAAa,iBAAiB,QAAQ,OAAO,iBAAiB,YAAY,CAAC,WAAW,YAAY;AAAG,WAAO;AACjI,qDAAe,KAAK;AACpB,MAAI,CAAC,SAAS,YAAY;AAAG,WAAO;AACpC,aAAO,+CAAe,KAAK;AAC7B;;;ACbA,IAAAC,iCAAkD;AAIlD,IAAM,wBAAwB;AAEvB,IAAM,gBAAgB,CAAC,QAA2D;AAPzF;AASE,MAAI,GAAC,gCAAK,aAAL,mBAAe,QAAO;AAEzB,aAAO,SAAI,aAAJ,mBAAc,cAAa,sCAAO,CAAC,GAAG,qBAAqB;AAAA,EACpE,OAAO;AACL,WAAO,YAAW,SAAI,aAAJ,mBAAc,KAAK;AAAA,EACvC;AACF;AAEO,IAAM,aAAa,CAAC,UAAgC;AACzD,QAAM,QAAqB,CAAC,GAAG,qBAAqB;AACpD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,WAAW,KAAK;AAAG,WAAO;AACtE,qDAAe,KAAK;AACpB,MAAI,CAAC,SAAS,KAAK;AAAG,WAAO;AAC7B,qDAAe,KAAK;AACpB,MAAI,CAAC,OAAO,KAAK;AAAG,WAAO;AAC3B,qDAAe,KAAK;AACpB,SAAO;AACT;;;ACzBA,IAAAC,iCAAkC;AAClC,wBAAsB;AAEtB,IAAM,4BAA4B;AAIlC,IAAM,mBAAmB,CAAC,eAAgC;AAExD,MAAI,CAAC,WAAW,WAAW,MAAM;AAAG,WAAO;AAC3C,MAAI;AAEF,iCAAM,UAAU;AAChB,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAEO,IAAM,oBAAoB,CAAC,QAA2D;AApB7F;AAsBE,MAAI,GAAC,gCAAK,aAAL,mBAAe,aAAY;AAE9B,aAAO,SAAI,aAAJ,mBAAc,SAAQ,sCAAO,CAAC,GAAG,yBAAyB;AAAA,EACnE,OAAO;AACL,WAAO,gBAAe,SAAI,aAAJ,mBAAc,UAAU;AAAA,EAChD;AACF;AAEO,IAAM,iBAAiB,CAAC,eAAqC;AAClE,SAAO,CAAC,cAAc,OAAO,eAAe,YAAY,CAAC,iBAAiB,UAAU,IAChF,CAAC,GAAG,yBAAyB,IAC7B,CAAC,2BAA2B,yBAAyB;AAC3D;;;ACjCA,IAAAC,iCAA4C;AAErC,IAAM,eAAe,CAAC,QAA2D;AAHxF;AAIE,SAAO,WAAU,SAAI,aAAJ,mBAAc,IAAI;AACrC;AACO,IAAM,YAAY,CAAC,SAA+B;AACvD,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,CAAC,QAAQ,OAAO,SAAS;AAAU,WAAO;AAC9C,aAAO,+CAAe,KAAK;AAC7B;;;ACTA,IAAAC,kCAAkD;AAI3C,IAAM,qBAAqB,CAAC,QAA2D;AAL9F;AAME,SAAO,iBAAgB,gCAAK,aAAL,mBAAe,WAAW;AACnD;AACO,IAAM,kBAAkB,CAAC,gBAAsC;AACpE,MAAI,gBAAgB,UAAa,gBAAgB;AAAM,WAAO;AAC9D,QAAM,QAAqB,CAAC,GAAG,CAAC;AAChC,MAAI,OAAO,gBAAgB,YAAY,CAAC,WAAW,WAAW;AAAG,WAAO;AACxE,sDAAe,KAAK;AACpB,MAAI,CAAC,SAAS,WAAW;AAAG,WAAO;AACnC,aAAO,gDAAe,KAAK;AAC7B;;;ACdA,IAAAC,kCAAoD;AAE7C,IAAM,cAAsD,CAAC,QAAuB;AACzF,MAAI,CAAC,IAAI;AAAQ,WAAO;AACxB,MAAI,OAAO,IAAI,WAAW;AAAU,WAAO;AAC3C,MAAI;AACF,WAAO,OAAO,IAAI,OAAO,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,MAAM,OAAO,uCAAO;AAAA,EAChF,SAAS,QAAQ;AACf,WAAO;AAAA,EACT;AACF;;;ACVA,IAAAC,kCAAoD;AAQ7C,IAAM,eAAuD,CAAC,QAAuB;AAC1F,MAAI,CAAC,IAAI;AAAS,WAAO;AACzB,MAAI,OAAO,IAAI,YAAY;AAAU,WAAO;AAC5C,MAAI;AACF,WAAO,OAAO,IAAI,OAAO,KAAK,MAAM,OAAO,IAAI,OAAO,IAAI,MAAM,OAAO,uCAAO;AAAA,EAChF,SAAS,QAAQ;AACf,WAAO;AAAA,EACT;AACF;;;AChBA,IAAAC,kCAAoD;AAE7C,IAAM,YAAoD,CAAC,QAAuB;AACvF,MAAI,CAAC,IAAI;AAAM,WAAO;AACtB,MAAI,OAAO,IAAI,SAAS;AAAU,WAAO;AACzC,QAAM,OAAO,IAAI,KAAK,YAAY;AAClC,MAAI,SAAS,YAAY,SAAS;AAAW,WAAO;AACpD,SAAO;AACT;;;ACOA,IAAM,4BAA4B;AAAA,EAChC,YAAY,EAAE,OAAO,uBAAuB,QAAQ,EAAE;AACxD;AAEA,IAAM,0BAA0B;AAAA,EAC9B,iBAAiB,EAAE,OAAO,sBAAsB,QAAQ,EAAE;AAAA,EAC1D,oBAAoB,EAAE,OAAO,yBAAyB,QAAQ,EAAE;AAAA,EAChE,aAAa,EAAE,OAAO,qBAAqB,QAAQ,EAAE;AAAA,EACrD,gBAAgB,EAAE,OAAO,qBAAqB,QAAQ,EAAE;AAAA,EACxD,OAAO,EAAE,OAAO,eAAe,QAAQ,EAAE;AAAA,EACzC,cAAc,EAAE,OAAO,mBAAmB,QAAQ,EAAE;AAAA,EACpD,MAAM,EAAE,OAAO,cAAc,QAAQ,EAAE;AAAA,EACvC,eAAe,EAAE,OAAO,oBAAoB,QAAQ,EAAE;AAAA,EACtD,GAAG;AACL;AAEO,IAAM,kBAAkB;AAAA,EAC7B,oBAAoB,EAAE,OAAO,sBAAsB,QAAQ,EAAE;AAAA,EAC7D,QAAQ,EAAE,OAAO,aAAa,QAAQ,EAAE;AAAA,EACxC,YAAY,EAAE,OAAO,cAAc,QAAQ,EAAE;AAAA,EAC7C,MAAM,EAAE,OAAO,WAAW,QAAQ,EAAE;AAAA,EACpC,GAAG;AACL;;;AC3BO,IAAM,aAAa,OAIxB,QACyB;AACzB,QAAM,SAAS,OAAO;AAAA,IACpB,MAAM,QAAQ;AAAA,MACZ,OAAO,QAAQ,eAAe,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,OAAO,CAAC,MAAM;AACtE,cAAM,WAAW,MAAM,MAAM,GAAG;AAChC,cAAM,WAAW,SAAS,IAAI,CAAC,MAAM,IAAI,MAAM;AAC/C,eAAO,CAAC,KAAK,QAAQ;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;;;AhBTA,IAAM,oBAAoB,CAAC,SAAkB,WAAkC;AAC7E,QAAM,EAAE,SAAS,SAAS,KAAK,IAAI;AACnC,SAAO,EAAE,SAAS,SAAS,QAAQ,iDAAgB,QAAQ,KAAK;AAClE;AAEO,IAAM,aAAa,CAAC,YAA0C,QAAQ,WAAW;AAEjF,IAAM,kBAAN,cAA6F,wCAAyB;AAAA,EAC3H,OAAgB,gBAAgB,CAAC,4DAA2B;AAAA,EAEzC,gBAAgB,OAAO,aAA6C;AACrF,UAAM,YAAW,qCAAU,OAAO,gDAAc,CAAC;AACjD,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,SAAS,IAAuB,OAAO,YAAY;AACjD,cAAM,CAAC,OAAO,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,UAE5C,kBAAkB,SAAS,MAAM,WAAW,OAAO,CAAC;AAAA;AAAA,UAEpD,0BAAc,UAAU,OAAO;AAAA,QACjC,CAAC;AACD,eAAO,EAAE,GAAG,OAAO,SAAS,CAAC,UAAU,EAAE;AAAA,MAC3C,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AACF;;;ADrCO,IAAM,wBAAwB,UACnC;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,2CAAS,GAAG,EAAE,GAAG,QAAQ,sCAAiB;AAAA,EACzD;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,gBAAgB,OAAO,MAAM;AAClD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ADPF,IAAO,cAAQ;","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"]}