playlist-data-engine 1.7.0 → 1.7.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.
@@ -279,15 +279,15 @@ class n {
279
279
  const s = /* @__PURE__ */ new Set(), o = [{ node: t, depth: 0 }];
280
280
  for (; o.length > 0; ) {
281
281
  const { node: u, depth: c } = o.shift();
282
- for (const a of Object.keys(u)) {
283
- const f = u[a];
284
- if (typeof f == "string" && f && e.test(a))
285
- return f;
282
+ for (const f of Object.keys(u)) {
283
+ const a = u[f];
284
+ if (typeof a == "string" && a && e.test(f))
285
+ return a;
286
286
  }
287
287
  if (!(c >= r))
288
- for (const a of Object.keys(u)) {
289
- const f = u[a];
290
- f && typeof f == "object" && !Array.isArray(f) && !s.has(f) && (s.add(f), o.push({ node: f, depth: c + 1 }));
288
+ for (const f of Object.keys(u)) {
289
+ const a = u[f];
290
+ a && typeof a == "object" && !Array.isArray(a) && !s.has(a) && (s.add(a), o.push({ node: a, depth: c + 1 }));
291
291
  }
292
292
  }
293
293
  return null;
@@ -327,7 +327,7 @@ class n {
327
327
  return typeof r == "string" ? r : null;
328
328
  }
329
329
  }
330
- function m(i) {
330
+ function g(i) {
331
331
  if ("audio_url" in i && typeof i.audio_url == "string")
332
332
  return i.audio_url;
333
333
  if ("metadata" in i) {
@@ -337,7 +337,7 @@ function m(i) {
337
337
  }
338
338
  return null;
339
339
  }
340
- function h(i) {
340
+ function A(i) {
341
341
  if ("audio_url_lossless" in i && typeof i.audio_url_lossless == "string")
342
342
  return i.audio_url_lossless;
343
343
  if ("metadata" in i) {
@@ -347,7 +347,7 @@ function h(i) {
347
347
  }
348
348
  return null;
349
349
  }
350
- function g(i) {
350
+ function d(i) {
351
351
  if ("image_url" in i && typeof i.image_url == "string")
352
352
  return i.image_url;
353
353
  if ("metadata" in i) {
@@ -359,7 +359,7 @@ function g(i) {
359
359
  }
360
360
  return null;
361
361
  }
362
- function d(i) {
362
+ function _(i) {
363
363
  if ("image_thumb_url" in i && typeof i.image_thumb_url == "string")
364
364
  return i.image_thumb_url;
365
365
  if ("metadata" in i) {
@@ -369,7 +369,7 @@ function d(i) {
369
369
  }
370
370
  return null;
371
371
  }
372
- function _(i) {
372
+ function h(i) {
373
373
  if ("metadata" in i) {
374
374
  const t = n.parseMetadata(i.metadata);
375
375
  if (t && typeof t.vrm == "string" && t.vrm)
@@ -377,23 +377,23 @@ function _(i) {
377
377
  }
378
378
  return "extras" in i && i.extras && typeof i.extras.vrm == "string" && i.extras.vrm || null;
379
379
  }
380
- function x(i) {
380
+ function M(i) {
381
381
  const t = [];
382
382
  for (const e of i.tracks) {
383
- const r = m(e);
383
+ const r = g(e);
384
384
  r && t.push(r);
385
385
  }
386
386
  return t;
387
387
  }
388
- function v(i) {
388
+ function j(i) {
389
389
  const t = [];
390
390
  for (const e of i.tracks) {
391
- const r = g(e);
391
+ const r = d(e);
392
392
  r && t.push(r);
393
393
  }
394
394
  return t;
395
395
  }
396
- function T(i) {
396
+ function F(i) {
397
397
  const t = [];
398
398
  for (const e of i.tracks) {
399
399
  if ("title" in e && typeof e.title == "string") {
@@ -410,7 +410,7 @@ function T(i) {
410
410
  }
411
411
  return t;
412
412
  }
413
- function U(i) {
413
+ function $(i) {
414
414
  const t = [];
415
415
  for (const e of i.tracks) {
416
416
  if ("artist" in e && typeof e.artist == "string") {
@@ -427,7 +427,7 @@ function U(i) {
427
427
  }
428
428
  return t;
429
429
  }
430
- function S(i) {
430
+ function D(i) {
431
431
  const t = /* @__PURE__ */ new Set();
432
432
  for (const e of i.tracks) {
433
433
  if ("genre" in e && typeof e.genre == "string" && e.genre) {
@@ -441,7 +441,7 @@ function S(i) {
441
441
  }
442
442
  return Array.from(t).sort();
443
443
  }
444
- function L(i) {
444
+ function I(i) {
445
445
  const t = /* @__PURE__ */ new Set();
446
446
  for (const e of i.tracks) {
447
447
  if ("tags" in e && Array.isArray(e.tags)) {
@@ -458,7 +458,7 @@ function L(i) {
458
458
  }
459
459
  return Array.from(t).sort();
460
460
  }
461
- function F(i) {
461
+ function C(i) {
462
462
  let t = 0;
463
463
  for (const e of i.tracks) {
464
464
  if ("duration" in e && typeof e.duration == "number") {
@@ -472,19 +472,19 @@ function F(i) {
472
472
  }
473
473
  return t;
474
474
  }
475
- function j(i) {
475
+ function H(i) {
476
476
  return i.tracks.length;
477
477
  }
478
- function M(i) {
478
+ function P(i) {
479
479
  const t = [];
480
480
  for (const e of i.tracks) {
481
- const r = m(e), s = g(e), o = d(e);
482
- let u = "", c = "";
481
+ const r = g(e), s = d(e), o = _(e);
482
+ let u = "", c = "", f;
483
483
  if ("title" in e)
484
- u = e.title || "", c = e.artist || "";
484
+ u = e.title || "", c = e.artist || "", f = e.description || void 0;
485
485
  else if ("metadata" in e) {
486
486
  const a = n.parseMetadata(e.metadata);
487
- a && (u = n.extractTitle(a) || "", c = n.extractArtist(a) || "");
487
+ a && (u = n.extractTitle(a) || "", c = n.extractArtist(a) || "", f = n.extractDescription(a) || void 0);
488
488
  }
489
489
  if (r) {
490
490
  const a = {
@@ -492,13 +492,13 @@ function M(i) {
492
492
  artist: c,
493
493
  audio_url: r,
494
494
  image_url: s || ""
495
- }, f = h(e);
496
- f && f !== r && (a.audio_url_lossless = f), o && (a.image_thumb_url = o), "audio_ipfs_hash" in e && typeof e.audio_ipfs_hash == "string" && (a.audio_ipfs_hash = e.audio_ipfs_hash), "artwork_ipfs_hash" in e && typeof e.artwork_ipfs_hash == "string" && (a.artwork_ipfs_hash = e.artwork_ipfs_hash), t.push(a);
495
+ }, l = A(e);
496
+ l && l !== r && (a.audio_url_lossless = l), o && (a.image_thumb_url = o), f && (a.description = f), "audio_ipfs_hash" in e && typeof e.audio_ipfs_hash == "string" && (a.audio_ipfs_hash = e.audio_ipfs_hash), "artwork_ipfs_hash" in e && typeof e.artwork_ipfs_hash == "string" && (a.artwork_ipfs_hash = e.artwork_ipfs_hash), t.push(a);
497
497
  }
498
498
  }
499
499
  return t;
500
500
  }
501
- function I(i) {
501
+ function W(i) {
502
502
  const t = [];
503
503
  for (const e of i.tracks) {
504
504
  if ("audio_url" in e) {
@@ -527,7 +527,7 @@ function I(i) {
527
527
  bpm: r.bpm,
528
528
  key: r.key,
529
529
  album: r.album,
530
- description: r.description,
530
+ description: n.extractDescription(r),
531
531
  attributes: n.convertAttributes(r.attributes),
532
532
  ...s && s !== o ? { audio_url_lossless: s } : {},
533
533
  // v0.4 IPFS hash fields from raw track (mint fields live only in metadata interior)
@@ -539,35 +539,35 @@ function I(i) {
539
539
  }
540
540
  return t;
541
541
  }
542
- function $(i) {
542
+ function E(i) {
543
543
  const t = [];
544
544
  for (const e of i.tracks) {
545
- const r = _(e);
545
+ const r = h(e);
546
546
  r && t.push(r);
547
547
  }
548
548
  return t;
549
549
  }
550
- function W(i) {
550
+ function N(i) {
551
551
  const t = [];
552
552
  for (const e of i.tracks) {
553
- const r = _(e);
553
+ const r = h(e);
554
554
  if (!r) continue;
555
- const s = m(e), o = g(e), u = d(e);
556
- let c = "", a = "";
555
+ const s = g(e), o = d(e), u = _(e);
556
+ let c = "", f = "", a;
557
557
  if ("title" in e)
558
- c = e.title || "", a = e.artist || "";
558
+ c = e.title || "", f = e.artist || "", a = e.description || void 0;
559
559
  else if ("metadata" in e) {
560
- const l = n.parseMetadata(e.metadata);
561
- l && (c = n.extractTitle(l) || "", a = n.extractArtist(l) || "");
560
+ const p = n.parseMetadata(e.metadata);
561
+ p && (c = n.extractTitle(p) || "", f = n.extractArtist(p) || "", a = n.extractDescription(p) || void 0);
562
562
  }
563
- const f = {
563
+ const l = {
564
564
  title: c,
565
- artist: a,
565
+ artist: f,
566
566
  audio_url: s || "",
567
567
  image_url: o || "",
568
568
  vrm: r
569
569
  };
570
- u && (f.image_thumb_url = u), t.push(f);
570
+ u && (l.image_thumb_url = u), a && (l.description = a), t.push(l);
571
571
  }
572
572
  return t;
573
573
  }
@@ -585,8 +585,21 @@ const y = [
585
585
  "spinamp.mypinata.cloud",
586
586
  "catalogworks.b-cdn.net",
587
587
  "www.heds.cloud"
588
- ], A = "ipfs.io", p = "/ipfs/";
588
+ ], k = "ipfs.io", m = "/ipfs/", w = /^Qm[1-9A-HJ-NP-Za-km-z]{44}$/, x = /^b[a-z2-7]{55,}$/;
589
+ function v(i) {
590
+ return w.test(i) || x.test(i);
591
+ }
592
+ const T = /^ipfs_[a-z]+$/;
589
593
  function b(i) {
594
+ const t = i.split("/").filter(Boolean);
595
+ for (let e = 0; e < t.length - 1; e++)
596
+ if (T.test(t[e]) && v(t[e + 1])) {
597
+ const r = t[e + 1], s = t.slice(e + 2);
598
+ return s.length > 0 ? `${r}/${s.join("/")}` : r;
599
+ }
600
+ return null;
601
+ }
602
+ function U(i) {
590
603
  if (!i || typeof i != "string") return null;
591
604
  if (i.startsWith("ipfs://ipfs/"))
592
605
  return i.slice(12);
@@ -597,26 +610,28 @@ function b(i) {
597
610
  if (s)
598
611
  return `${s[1]}${r}`;
599
612
  if (y.some(
600
- (u) => e === u || e.endsWith("." + u)
601
- ) && r.startsWith(p))
602
- return r.slice(p.length);
613
+ (c) => e === c || e.endsWith("." + c)
614
+ ) && r.startsWith(m))
615
+ return r.slice(m.length);
616
+ const u = b(r);
617
+ if (u) return u;
603
618
  } catch {
604
619
  }
605
620
  return null;
606
621
  }
607
- function H(i) {
622
+ function R(i) {
608
623
  if (!i || typeof i != "string") return !1;
609
624
  if (i.startsWith("ipfs://")) return !0;
610
625
  try {
611
626
  const t = new URL(i), { hostname: e, pathname: r } = t;
612
627
  if (/^[A-Za-z0-9]+\.ipfs\.dweb\.link$/.test(e) || y.some(
613
628
  (o) => e === o || e.endsWith("." + o)
614
- ) && r.startsWith(p)) return !0;
629
+ ) && r.startsWith(m) || b(r)) return !0;
615
630
  } catch {
616
631
  }
617
632
  return !1;
618
633
  }
619
- function k(i) {
634
+ function S(i) {
620
635
  if (!(!i || i.startsWith("ipfs://")))
621
636
  try {
622
637
  const { hostname: t } = new URL(i);
@@ -627,12 +642,12 @@ function k(i) {
627
642
  return;
628
643
  }
629
644
  }
630
- function P(i, t = {}) {
645
+ function G(i, t = {}) {
631
646
  if (!i) return i;
632
- const e = typeof t == "string" ? { gatewayHost: t } : t, { gatewayHost: r = A, preserveOriginalGateway: s = !1 } = e, o = b(i);
647
+ const e = typeof t == "string" ? { gatewayHost: t } : t, { gatewayHost: r = k, preserveOriginalGateway: s = !1 } = e, o = U(i);
633
648
  if (o) {
634
649
  if (s) {
635
- const u = k(i);
650
+ const u = S(i);
636
651
  if (u)
637
652
  return `https://${u}/ipfs/${o}`;
638
653
  }
@@ -641,22 +656,22 @@ function P(i, t = {}) {
641
656
  return i;
642
657
  }
643
658
  export {
644
- A as D,
659
+ k as D,
645
660
  y as K,
646
661
  n as M,
647
- x as a,
648
- I as b,
649
- S as c,
650
- v as d,
651
- b as e,
652
- L as f,
653
- U as g,
654
- F as h,
655
- j as i,
656
- T as j,
657
- M as k,
658
- W as l,
659
- $ as m,
660
- H as n,
661
- P as r
662
+ M as a,
663
+ W as b,
664
+ D as c,
665
+ j as d,
666
+ U as e,
667
+ I as f,
668
+ $ as g,
669
+ C as h,
670
+ H as i,
671
+ F as j,
672
+ P as k,
673
+ N as l,
674
+ E as m,
675
+ R as n,
676
+ G as r
662
677
  };
@@ -1 +1 @@
1
- "use strict";require("./arweaveGatewayManager-C9SIMDTd.cjs");class n{static extractAudioUrl(t){const e=["mp3_url","mp3Url","lossy_audio","lossyAudio","audio_url","audioUrl","audio","lossless_audio","losslessAudio","animation_url","animationUrl","multimedia_url","multimediaUrl"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];return null}static extractAudioUrlLossless(t){const e=["lossless_audio","losslessAudio","wav_url","wavUrl","flac_url","flacUrl","audio_url","audioUrl"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];return null}static extractImageUrl(t){const e=["image_small","imageSmall","image","image_large","imageLarge","image_thumb","imageThumb","image_url","imageUrl","image_uri","imageUri","image_preview","imagePreview"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=[this.extractNestedUri(t,"artwork","uri"),this.extractNestedUri(t,"project","artwork","uri"),this.extractNestedUri(t,"primaryMedia","uri")];for(const s of r)if(s)return s;return null}static extractImageThumbUrl(t){return t.image_thumb_url&&typeof t.image_thumb_url=="string"?t.image_thumb_url:t.image_thumb&&typeof t.image_thumb=="string"?t.image_thumb:null}static extractTitle(t){return t.name&&typeof t.name=="string"?t.name:t.title&&typeof t.title=="string"?t.title:null}static extractArtist(t){const e=["artist","artist_name","artistName","album_artist","albumArtist","created_by","createdBy","minter"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="artist"&&s.value!==void 0);if(r&&typeof r.value=="string")return r.value}return null}static parseMetadata(t){if(!t)return null;if(typeof t=="object"&&!Array.isArray(t))return t;if(typeof t=="string")try{const e=JSON.parse(t);if(typeof e=="object"&&!Array.isArray(e))return e}catch(e){return console.warn("Failed to parse metadata:",e),null}return null}static extractGenre(t){if(typeof t.genre=="string")return t.genre;if(Array.isArray(t.genre)&&t.genre.length>0){const r=t.genre[0];return typeof r=="string"?r:""}if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="genre"&&s.value!==void 0);if(r){if(typeof r.value=="string")return r.value;if(Array.isArray(r.value)&&r.value.length>0){const s=r.value[0];return typeof s=="string"?s:""}}}if(t.attributes&&typeof t.attributes=="object"&&!Array.isArray(t.attributes)){const r=t.attributes;for(const s of Object.keys(r))if(s.toLowerCase()==="genre"&&typeof r[s]=="string")return r[s]}const e=t["attribute "];if(e&&typeof e=="object"&&!Array.isArray(e)){const r=e.genre;if(typeof r=="string")return r}return""}static extractTags(t){const e=[];if(Array.isArray(t.tags)?e.push(...t.tags):typeof t.tags=="string"&&e.push(...t.tags.split(",")),t.properties&&typeof t.properties=="object"&&!Array.isArray(t.properties)){const r=t.properties.tags;Array.isArray(r)?e.push(...r):typeof r=="string"&&e.push(...r.split(","))}if(Array.isArray(t.attributes))for(const r of t.attributes){if(!r||typeof r!="object")continue;const s=r.trait_type;if(typeof s=="string"&&s.toLowerCase().match(/^tags?$/)){const o=r.value;Array.isArray(o)?e.push(...o):typeof o=="string"&&e.push(...o.split(","))}}else if(t.attributes&&typeof t.attributes=="object"){const r=t.attributes;for(const s of Object.keys(r))if(s.toLowerCase().match(/^tags?$/)){const o=r[s];Array.isArray(o)?e.push(...o):typeof o=="string"&&e.push(...o.split(","))}}return n.normalizeTags(e)}static extractDescription(t){const e=["description","track_description","trackDescription","description_text","descriptionText","desc","blurb"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="description"&&typeof s.value=="string");if(r&&typeof r.value=="string")return r.value}return n.deepFindString(t,/description/i)}static extractAlbumDescription(t){const e=["album_description","albumDescription"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=t.album;return r&&typeof r=="object"&&!Array.isArray(r)?n.deepFindString(r,/description|liner|notes/i):null}static extractArtistDescription(t){const e=["artist_description","artistDescription","artist_bio","artistBio"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=t.artist;return r&&typeof r=="object"&&!Array.isArray(r)?n.deepFindString(r,/description|bio|about/i):null}static deepFindString(t,e,r=5){const s=new Set,o=[{node:t,depth:0}];for(;o.length>0;){const{node:u,depth:c}=o.shift();for(const a of Object.keys(u)){const f=u[a];if(typeof f=="string"&&f&&e.test(a))return f}if(!(c>=r))for(const a of Object.keys(u)){const f=u[a];f&&typeof f=="object"&&!Array.isArray(f)&&!s.has(f)&&(s.add(f),o.push({node:f,depth:c+1}))}}return null}static normalizeTags(t){const e=new Set;for(const r of t){if(r==null)continue;const s=String(r).trim().toLowerCase();s&&e.add(s)}return Array.from(e)}static convertAttributes(t){if(!Array.isArray(t))return null;const e={};for(const r of t)r.trait_type&&r.value!==void 0&&(e[r.trait_type]=r.value);return Object.keys(e).length>0?e:null}static extractNestedUri(t,...e){let r=t;for(const s of e)if(r&&typeof r=="object"&&!Array.isArray(r))r=r[s];else return null;return typeof r=="string"?r:null}}function m(i){if("audio_url"in i&&typeof i.audio_url=="string")return i.audio_url;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractAudioUrl(t)}return null}function b(i){if("audio_url_lossless"in i&&typeof i.audio_url_lossless=="string")return i.audio_url_lossless;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractAudioUrlLossless(t)}return null}function y(i){if("image_url"in i&&typeof i.image_url=="string")return i.image_url;if("metadata"in i){if("artwork_url"in i&&typeof i.artwork_url=="string")return i.artwork_url;const t=n.parseMetadata(i.metadata);if(t)return n.extractImageUrl(t)}return null}function d(i){if("image_thumb_url"in i&&typeof i.image_thumb_url=="string")return i.image_thumb_url;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractImageThumbUrl(t)}return null}function _(i){if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t&&typeof t.vrm=="string"&&t.vrm)return t.vrm}return"extras"in i&&i.extras&&typeof i.extras.vrm=="string"&&i.extras.vrm||null}function k(i){const t=[];for(const e of i.tracks){const r=m(e);r&&t.push(r)}return t}function w(i){const t=[];for(const e of i.tracks){const r=y(e);r&&t.push(r)}return t}function T(i){const t=[];for(const e of i.tracks){if("title"in e&&typeof e.title=="string"){t.push(e.title);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractTitle(r);s&&t.push(s)}}}return t}function x(i){const t=[];for(const e of i.tracks){if("artist"in e&&typeof e.artist=="string"){t.push(e.artist);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractArtist(r);s&&t.push(s)}}}return t}function v(i){const t=new Set;for(const e of i.tracks){if("genre"in e&&typeof e.genre=="string"&&e.genre){t.add(e.genre);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);r&&typeof r.genre=="string"&&r.genre&&t.add(r.genre)}}return Array.from(t).sort()}function U(i){const t=new Set;for(const e of i.tracks){if("tags"in e&&Array.isArray(e.tags)){for(const r of e.tags)r&&t.add(r.toLowerCase());continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r&&Array.isArray(r.tags))for(const s of r.tags)s&&t.add(String(s).toLowerCase())}}return Array.from(t).sort()}function S(i){let t=0;for(const e of i.tracks){if("duration"in e&&typeof e.duration=="number"){t+=e.duration;continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);r&&typeof r.duration=="number"&&(t+=r.duration)}}return t}function F(i){return i.tracks.length}function L(i){const t=[];for(const e of i.tracks){const r=m(e),s=y(e),o=d(e);let u="",c="";if("title"in e)u=e.title||"",c=e.artist||"";else if("metadata"in e){const a=n.parseMetadata(e.metadata);a&&(u=n.extractTitle(a)||"",c=n.extractArtist(a)||"")}if(r){const a={title:u,artist:c,audio_url:r,image_url:s||""},f=b(e);f&&f!==r&&(a.audio_url_lossless=f),o&&(a.image_thumb_url=o),"audio_ipfs_hash"in e&&typeof e.audio_ipfs_hash=="string"&&(a.audio_ipfs_hash=e.audio_ipfs_hash),"artwork_ipfs_hash"in e&&typeof e.artwork_ipfs_hash=="string"&&(a.artwork_ipfs_hash=e.artwork_ipfs_hash),t.push(a)}}return t}function I(i){const t=[];for(const e of i.tracks){if("audio_url"in e){t.push({...e});continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractAudioUrlLossless(r),o=n.extractAudioUrl(r);t.push({id:e.chain_name==="AR"?`AR-${e.tx_id}`:`${e.chain_name}-${e.token_address}-${e.token_id}`,chain_name:e.chain_name,token_address:e.token_address,token_id:e.token_id,tx_id:e.tx_id,platform:e.platform,title:n.extractTitle(r),artist:n.extractArtist(r),audio_url:o,image_url:n.extractImageUrl(r),image_thumb_url:n.extractImageThumbUrl(r),duration:r.duration,genre:r.genre,tags:r.tags,bpm:r.bpm,key:r.key,album:r.album,description:r.description,attributes:n.convertAttributes(r.attributes),...s&&s!==o?{audio_url_lossless:s}:{},...e.audio_ipfs_hash?{audio_ipfs_hash:e.audio_ipfs_hash}:{},...e.artwork_ipfs_hash?{artwork_ipfs_hash:e.artwork_ipfs_hash}:{}})}}}return t}function M(i){const t=[];for(const e of i.tracks){const r=_(e);r&&t.push(r)}return t}function P(i){const t=[];for(const e of i.tracks){const r=_(e);if(!r)continue;const s=m(e),o=y(e),u=d(e);let c="",a="";if("title"in e)c=e.title||"",a=e.artist||"";else if("metadata"in e){const p=n.parseMetadata(e.metadata);p&&(c=n.extractTitle(p)||"",a=n.extractArtist(p)||"")}const f={title:c,artist:a,audio_url:s||"",image_url:o||"",vrm:r};u&&(f.image_thumb_url=u),t.push(f)}return t}const l=["ipfs.io","cloudflare-ipfs.com","dweb.link","gateway.pinata.cloud","ipfs.infura.io","nftstorage.link","web3-music-pipeline.mypinata.cloud","soundxyz.mypinata.cloud","gold-broad-gibbon-29.mypinata.cloud","bonfire.mypinata.cloud","spinamp.mypinata.cloud","catalogworks.b-cdn.net","www.heds.cloud"],h="ipfs.io",g="/ipfs/";function A(i){if(!i||typeof i!="string")return null;if(i.startsWith("ipfs://ipfs/"))return i.slice(12);if(i.startsWith("ipfs://"))return i.slice(7);try{const t=new URL(i),{hostname:e,pathname:r}=t,s=e.match(/^([A-Za-z0-9]+)\.ipfs\.dweb\.link$/);if(s)return`${s[1]}${r}`;if(l.some(u=>e===u||e.endsWith("."+u))&&r.startsWith(g))return r.slice(g.length)}catch{}return null}function j(i){if(!i||typeof i!="string")return!1;if(i.startsWith("ipfs://"))return!0;try{const t=new URL(i),{hostname:e,pathname:r}=t;if(/^[A-Za-z0-9]+\.ipfs\.dweb\.link$/.test(e)||l.some(o=>e===o||e.endsWith("."+o))&&r.startsWith(g))return!0}catch{}return!1}function W(i){if(!(!i||i.startsWith("ipfs://")))try{const{hostname:t}=new URL(i);return l.some(r=>t===r||t.endsWith("."+r))?t:void 0}catch{return}}function $(i,t={}){if(!i)return i;const e=typeof t=="string"?{gatewayHost:t}:t,{gatewayHost:r=h,preserveOriginalGateway:s=!1}=e,o=A(i);if(o){if(s){const u=W(i);if(u)return`https://${u}/ipfs/${o}`}return`https://${r}/ipfs/${o}`}return i}exports.DEFAULT_IPFS_GATEWAY=h;exports.KNOWN_IPFS_GATEWAY_HOSTS=l;exports.MetadataExtractor=n;exports.extractIPFSPath=A;exports.getArtists=x;exports.getAudioUrls=k;exports.getFullTracks=I;exports.getGenres=v;exports.getImageUrls=w;exports.getTags=U;exports.getTotalDuration=S;exports.getTrackCount=F;exports.getTrackTitles=T;exports.getTracks=L;exports.getVRMTracks=P;exports.getVRMs=M;exports.isIPFS=j;exports.resolveIPFSLink=$;
1
+ "use strict";require("./arweaveGatewayManager-C9SIMDTd.cjs");class n{static extractAudioUrl(t){const e=["mp3_url","mp3Url","lossy_audio","lossyAudio","audio_url","audioUrl","audio","lossless_audio","losslessAudio","animation_url","animationUrl","multimedia_url","multimediaUrl"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];return null}static extractAudioUrlLossless(t){const e=["lossless_audio","losslessAudio","wav_url","wavUrl","flac_url","flacUrl","audio_url","audioUrl"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];return null}static extractImageUrl(t){const e=["image_small","imageSmall","image","image_large","imageLarge","image_thumb","imageThumb","image_url","imageUrl","image_uri","imageUri","image_preview","imagePreview"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=[this.extractNestedUri(t,"artwork","uri"),this.extractNestedUri(t,"project","artwork","uri"),this.extractNestedUri(t,"primaryMedia","uri")];for(const s of r)if(s)return s;return null}static extractImageThumbUrl(t){return t.image_thumb_url&&typeof t.image_thumb_url=="string"?t.image_thumb_url:t.image_thumb&&typeof t.image_thumb=="string"?t.image_thumb:null}static extractTitle(t){return t.name&&typeof t.name=="string"?t.name:t.title&&typeof t.title=="string"?t.title:null}static extractArtist(t){const e=["artist","artist_name","artistName","album_artist","albumArtist","created_by","createdBy","minter"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="artist"&&s.value!==void 0);if(r&&typeof r.value=="string")return r.value}return null}static parseMetadata(t){if(!t)return null;if(typeof t=="object"&&!Array.isArray(t))return t;if(typeof t=="string")try{const e=JSON.parse(t);if(typeof e=="object"&&!Array.isArray(e))return e}catch(e){return console.warn("Failed to parse metadata:",e),null}return null}static extractGenre(t){if(typeof t.genre=="string")return t.genre;if(Array.isArray(t.genre)&&t.genre.length>0){const r=t.genre[0];return typeof r=="string"?r:""}if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="genre"&&s.value!==void 0);if(r){if(typeof r.value=="string")return r.value;if(Array.isArray(r.value)&&r.value.length>0){const s=r.value[0];return typeof s=="string"?s:""}}}if(t.attributes&&typeof t.attributes=="object"&&!Array.isArray(t.attributes)){const r=t.attributes;for(const s of Object.keys(r))if(s.toLowerCase()==="genre"&&typeof r[s]=="string")return r[s]}const e=t["attribute "];if(e&&typeof e=="object"&&!Array.isArray(e)){const r=e.genre;if(typeof r=="string")return r}return""}static extractTags(t){const e=[];if(Array.isArray(t.tags)?e.push(...t.tags):typeof t.tags=="string"&&e.push(...t.tags.split(",")),t.properties&&typeof t.properties=="object"&&!Array.isArray(t.properties)){const r=t.properties.tags;Array.isArray(r)?e.push(...r):typeof r=="string"&&e.push(...r.split(","))}if(Array.isArray(t.attributes))for(const r of t.attributes){if(!r||typeof r!="object")continue;const s=r.trait_type;if(typeof s=="string"&&s.toLowerCase().match(/^tags?$/)){const o=r.value;Array.isArray(o)?e.push(...o):typeof o=="string"&&e.push(...o.split(","))}}else if(t.attributes&&typeof t.attributes=="object"){const r=t.attributes;for(const s of Object.keys(r))if(s.toLowerCase().match(/^tags?$/)){const o=r[s];Array.isArray(o)?e.push(...o):typeof o=="string"&&e.push(...o.split(","))}}return n.normalizeTags(e)}static extractDescription(t){const e=["description","track_description","trackDescription","description_text","descriptionText","desc","blurb"];for(const r of e)if(t[r]&&typeof t[r]=="string")return t[r];if(Array.isArray(t.attributes)){const r=t.attributes.find(s=>s.trait_type?.toLowerCase()==="description"&&typeof s.value=="string");if(r&&typeof r.value=="string")return r.value}return n.deepFindString(t,/description/i)}static extractAlbumDescription(t){const e=["album_description","albumDescription"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=t.album;return r&&typeof r=="object"&&!Array.isArray(r)?n.deepFindString(r,/description|liner|notes/i):null}static extractArtistDescription(t){const e=["artist_description","artistDescription","artist_bio","artistBio"];for(const s of e)if(t[s]&&typeof t[s]=="string")return t[s];const r=t.artist;return r&&typeof r=="object"&&!Array.isArray(r)?n.deepFindString(r,/description|bio|about/i):null}static deepFindString(t,e,r=5){const s=new Set,o=[{node:t,depth:0}];for(;o.length>0;){const{node:u,depth:c}=o.shift();for(const f of Object.keys(u)){const a=u[f];if(typeof a=="string"&&a&&e.test(f))return a}if(!(c>=r))for(const f of Object.keys(u)){const a=u[f];a&&typeof a=="object"&&!Array.isArray(a)&&!s.has(a)&&(s.add(a),o.push({node:a,depth:c+1}))}}return null}static normalizeTags(t){const e=new Set;for(const r of t){if(r==null)continue;const s=String(r).trim().toLowerCase();s&&e.add(s)}return Array.from(e)}static convertAttributes(t){if(!Array.isArray(t))return null;const e={};for(const r of t)r.trait_type&&r.value!==void 0&&(e[r.trait_type]=r.value);return Object.keys(e).length>0?e:null}static extractNestedUri(t,...e){let r=t;for(const s of e)if(r&&typeof r=="object"&&!Array.isArray(r))r=r[s];else return null;return typeof r=="string"?r:null}}function d(i){if("audio_url"in i&&typeof i.audio_url=="string")return i.audio_url;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractAudioUrl(t)}return null}function w(i){if("audio_url_lossless"in i&&typeof i.audio_url_lossless=="string")return i.audio_url_lossless;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractAudioUrlLossless(t)}return null}function y(i){if("image_url"in i&&typeof i.image_url=="string")return i.image_url;if("metadata"in i){if("artwork_url"in i&&typeof i.artwork_url=="string")return i.artwork_url;const t=n.parseMetadata(i.metadata);if(t)return n.extractImageUrl(t)}return null}function _(i){if("image_thumb_url"in i&&typeof i.image_thumb_url=="string")return i.image_thumb_url;if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t)return n.extractImageThumbUrl(t)}return null}function h(i){if("metadata"in i){const t=n.parseMetadata(i.metadata);if(t&&typeof t.vrm=="string"&&t.vrm)return t.vrm}return"extras"in i&&i.extras&&typeof i.extras.vrm=="string"&&i.extras.vrm||null}function x(i){const t=[];for(const e of i.tracks){const r=d(e);r&&t.push(r)}return t}function T(i){const t=[];for(const e of i.tracks){const r=y(e);r&&t.push(r)}return t}function v(i){const t=[];for(const e of i.tracks){if("title"in e&&typeof e.title=="string"){t.push(e.title);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractTitle(r);s&&t.push(s)}}}return t}function U(i){const t=[];for(const e of i.tracks){if("artist"in e&&typeof e.artist=="string"){t.push(e.artist);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractArtist(r);s&&t.push(s)}}}return t}function S(i){const t=new Set;for(const e of i.tracks){if("genre"in e&&typeof e.genre=="string"&&e.genre){t.add(e.genre);continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);r&&typeof r.genre=="string"&&r.genre&&t.add(r.genre)}}return Array.from(t).sort()}function F(i){const t=new Set;for(const e of i.tracks){if("tags"in e&&Array.isArray(e.tags)){for(const r of e.tags)r&&t.add(r.toLowerCase());continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r&&Array.isArray(r.tags))for(const s of r.tags)s&&t.add(String(s).toLowerCase())}}return Array.from(t).sort()}function I(i){let t=0;for(const e of i.tracks){if("duration"in e&&typeof e.duration=="number"){t+=e.duration;continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);r&&typeof r.duration=="number"&&(t+=r.duration)}}return t}function L(i){return i.tracks.length}function M(i){const t=[];for(const e of i.tracks){const r=d(e),s=y(e),o=_(e);let u="",c="",f;if("title"in e)u=e.title||"",c=e.artist||"",f=e.description||void 0;else if("metadata"in e){const a=n.parseMetadata(e.metadata);a&&(u=n.extractTitle(a)||"",c=n.extractArtist(a)||"",f=n.extractDescription(a)||void 0)}if(r){const a={title:u,artist:c,audio_url:r,image_url:s||""},l=w(e);l&&l!==r&&(a.audio_url_lossless=l),o&&(a.image_thumb_url=o),f&&(a.description=f),"audio_ipfs_hash"in e&&typeof e.audio_ipfs_hash=="string"&&(a.audio_ipfs_hash=e.audio_ipfs_hash),"artwork_ipfs_hash"in e&&typeof e.artwork_ipfs_hash=="string"&&(a.artwork_ipfs_hash=e.artwork_ipfs_hash),t.push(a)}}return t}function D(i){const t=[];for(const e of i.tracks){if("audio_url"in e){t.push({...e});continue}if("metadata"in e){const r=n.parseMetadata(e.metadata);if(r){const s=n.extractAudioUrlLossless(r),o=n.extractAudioUrl(r);t.push({id:e.chain_name==="AR"?`AR-${e.tx_id}`:`${e.chain_name}-${e.token_address}-${e.token_id}`,chain_name:e.chain_name,token_address:e.token_address,token_id:e.token_id,tx_id:e.tx_id,platform:e.platform,title:n.extractTitle(r),artist:n.extractArtist(r),audio_url:o,image_url:n.extractImageUrl(r),image_thumb_url:n.extractImageThumbUrl(r),duration:r.duration,genre:r.genre,tags:r.tags,bpm:r.bpm,key:r.key,album:r.album,description:n.extractDescription(r),attributes:n.convertAttributes(r.attributes),...s&&s!==o?{audio_url_lossless:s}:{},...e.audio_ipfs_hash?{audio_ipfs_hash:e.audio_ipfs_hash}:{},...e.artwork_ipfs_hash?{artwork_ipfs_hash:e.artwork_ipfs_hash}:{}})}}}return t}function P(i){const t=[];for(const e of i.tracks){const r=h(e);r&&t.push(r)}return t}function $(i){const t=[];for(const e of i.tracks){const r=h(e);if(!r)continue;const s=d(e),o=y(e),u=_(e);let c="",f="",a;if("title"in e)c=e.title||"",f=e.artist||"",a=e.description||void 0;else if("metadata"in e){const p=n.parseMetadata(e.metadata);p&&(c=n.extractTitle(p)||"",f=n.extractArtist(p)||"",a=n.extractDescription(p)||void 0)}const l={title:c,artist:f,audio_url:s||"",image_url:o||"",vrm:r};u&&(l.image_thumb_url=u),a&&(l.description=a),t.push(l)}return t}const g=["ipfs.io","cloudflare-ipfs.com","dweb.link","gateway.pinata.cloud","ipfs.infura.io","nftstorage.link","web3-music-pipeline.mypinata.cloud","soundxyz.mypinata.cloud","gold-broad-gibbon-29.mypinata.cloud","bonfire.mypinata.cloud","spinamp.mypinata.cloud","catalogworks.b-cdn.net","www.heds.cloud"],A="ipfs.io",m="/ipfs/",j=/^Qm[1-9A-HJ-NP-Za-km-z]{44}$/,C=/^b[a-z2-7]{55,}$/;function E(i){return j.test(i)||C.test(i)}const W=/^ipfs_[a-z]+$/;function b(i){const t=i.split("/").filter(Boolean);for(let e=0;e<t.length-1;e++)if(W.test(t[e])&&E(t[e+1])){const r=t[e+1],s=t.slice(e+2);return s.length>0?`${r}/${s.join("/")}`:r}return null}function k(i){if(!i||typeof i!="string")return null;if(i.startsWith("ipfs://ipfs/"))return i.slice(12);if(i.startsWith("ipfs://"))return i.slice(7);try{const t=new URL(i),{hostname:e,pathname:r}=t,s=e.match(/^([A-Za-z0-9]+)\.ipfs\.dweb\.link$/);if(s)return`${s[1]}${r}`;if(g.some(c=>e===c||e.endsWith("."+c))&&r.startsWith(m))return r.slice(m.length);const u=b(r);if(u)return u}catch{}return null}function H(i){if(!i||typeof i!="string")return!1;if(i.startsWith("ipfs://"))return!0;try{const t=new URL(i),{hostname:e,pathname:r}=t;if(/^[A-Za-z0-9]+\.ipfs\.dweb\.link$/.test(e)||g.some(o=>e===o||e.endsWith("."+o))&&r.startsWith(m)||b(r))return!0}catch{}return!1}function N(i){if(!(!i||i.startsWith("ipfs://")))try{const{hostname:t}=new URL(i);return g.some(r=>t===r||t.endsWith("."+r))?t:void 0}catch{return}}function R(i,t={}){if(!i)return i;const e=typeof t=="string"?{gatewayHost:t}:t,{gatewayHost:r=A,preserveOriginalGateway:s=!1}=e,o=k(i);if(o){if(s){const u=N(i);if(u)return`https://${u}/ipfs/${o}`}return`https://${r}/ipfs/${o}`}return i}exports.DEFAULT_IPFS_GATEWAY=A;exports.KNOWN_IPFS_GATEWAY_HOSTS=g;exports.MetadataExtractor=n;exports.extractIPFSPath=k;exports.getArtists=U;exports.getAudioUrls=x;exports.getFullTracks=D;exports.getGenres=S;exports.getImageUrls=T;exports.getTags=F;exports.getTotalDuration=I;exports.getTrackCount=L;exports.getTrackTitles=v;exports.getTracks=M;exports.getVRMTracks=$;exports.getVRMs=P;exports.isIPFS=H;exports.resolveIPFSLink=R;
package/dist/gateway.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./arweaveGatewayManager-C9SIMDTd.cjs"),e=require("./gateway-CtmUPK4J.cjs");exports.ArweaveGatewayManager=a.ArweaveGatewayManager;exports.DEFAULT_GATEWAYS=a.DEFAULT_GATEWAYS;exports.KNOWN_GATEWAY_HOSTS=a.KNOWN_GATEWAY_HOSTS;exports.arweaveGatewayManager=a.arweaveGatewayManager;exports.constructGatewayUrl=a.constructGatewayUrl;exports.getAllGatewayUrls=a.getAllGatewayUrls;exports.isArweaveUrl=a.isArweaveUrl;exports.parseArweaveUrl=a.parseArweaveUrl;exports.DEFAULT_IPFS_GATEWAY=e.DEFAULT_IPFS_GATEWAY;exports.KNOWN_IPFS_GATEWAY_HOSTS=e.KNOWN_IPFS_GATEWAY_HOSTS;exports.MetadataExtractor=e.MetadataExtractor;exports.extractIPFSPath=e.extractIPFSPath;exports.getVRMTracks=e.getVRMTracks;exports.getVRMs=e.getVRMs;exports.isIPFS=e.isIPFS;exports.resolveIPFSLink=e.resolveIPFSLink;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./arweaveGatewayManager-C9SIMDTd.cjs"),e=require("./gateway-UffqbE1i.cjs");exports.ArweaveGatewayManager=a.ArweaveGatewayManager;exports.DEFAULT_GATEWAYS=a.DEFAULT_GATEWAYS;exports.KNOWN_GATEWAY_HOSTS=a.KNOWN_GATEWAY_HOSTS;exports.arweaveGatewayManager=a.arweaveGatewayManager;exports.constructGatewayUrl=a.constructGatewayUrl;exports.getAllGatewayUrls=a.getAllGatewayUrls;exports.isArweaveUrl=a.isArweaveUrl;exports.parseArweaveUrl=a.parseArweaveUrl;exports.DEFAULT_IPFS_GATEWAY=e.DEFAULT_IPFS_GATEWAY;exports.KNOWN_IPFS_GATEWAY_HOSTS=e.KNOWN_IPFS_GATEWAY_HOSTS;exports.MetadataExtractor=e.MetadataExtractor;exports.extractIPFSPath=e.extractIPFSPath;exports.getVRMTracks=e.getVRMTracks;exports.getVRMs=e.getVRMs;exports.isIPFS=e.isIPFS;exports.resolveIPFSLink=e.resolveIPFSLink;
package/dist/gateway.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { A as s, D as r, K as t, a as A, c as S, g as T, i as l, p as w } from "./arweaveGatewayManager-DDSO5sLJ.js";
2
- import { D as _, K as o, M as E, e as F, l as c, m as g, n as M, r as P } from "./gateway-PjLtANkX.js";
2
+ import { D as _, K as o, M as E, e as F, l as c, m as g, n as M, r as P } from "./gateway-DYTdioNs.js";
3
3
  export {
4
4
  s as ArweaveGatewayManager,
5
5
  r as DEFAULT_GATEWAYS,