playlist-data-engine 1.7.3 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/bin/cli.cjs +85 -0
- package/dist/gateway-CDMPqFEH.js +1320 -0
- package/dist/gateway-DKa45Uz6.cjs +6 -0
- package/dist/gateway.d.ts +1 -0
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +1 -1
- package/dist/gateway.mjs +22 -19
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/playlist-data-engine.js +4 -4
- package/dist/playlist-data-engine.mjs +30 -27
- package/dist/utils/engineDocs.d.ts +33 -0
- package/dist/utils/engineDocs.d.ts.map +1 -0
- package/docs/DATA_ENGINE_REFERENCE.md +6660 -0
- package/docs/USAGE_IN_OTHER_PROJECTS.md +587 -0
- package/docs/features/AUDIO_ANALYSIS.md +610 -0
- package/docs/features/BEAT_DETECTION.md +5250 -0
- package/docs/features/COMBAT_SYSTEM.md +1632 -0
- package/docs/features/CONTENT_PACKS.md +464 -0
- package/docs/features/CUSTOM_CONTENT.md +603 -0
- package/docs/features/ENEMY_GENERATION.md +1711 -0
- package/docs/features/EQUIPMENT_SYSTEM.md +2279 -0
- package/docs/features/EXTENSIBILITY_GUIDE.md +1106 -0
- package/docs/features/GATEWAY_RESOLUTION.md +725 -0
- package/docs/features/IRL_SENSORS.md +360 -0
- package/docs/features/PLAYLIST_PARSING.md +446 -0
- package/docs/features/PREREQUISITES.md +571 -0
- package/docs/features/ROLLS_AND_SEEDS.md +687 -0
- package/docs/features/XP_AND_STATS.md +1221 -0
- package/llms.txt +33 -0
- package/package.json +9 -2
- package/skills/playlist-data-engine/SKILL.md +69 -0
- package/dist/gateway-C_p9Ku3O.js +0 -1211
- package/dist/gateway-Ceg-5xug.cjs +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const D=require("./arweaveGatewayManager-C9SIMDTd.cjs");class l{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 n=r.value;Array.isArray(n)?e.push(...n):typeof n=="string"&&e.push(...n.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 n=r[s];Array.isArray(n)?e.push(...n):typeof n=="string"&&e.push(...n.split(","))}}return l.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 l.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)?l.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)?l.deepFindString(r,/description|bio|about/i):null}static deepFindString(t,e,r=5){const s=new Set,n=[{node:t,depth:0}];for(;n.length>0;){const{node:c,depth:a}=n.shift();for(const o of Object.keys(c)){const u=c[o];if(typeof u=="string"&&u&&e.test(o))return u}if(!(a>=r))for(const o of Object.keys(c)){const u=c[o];u&&typeof u=="object"&&!Array.isArray(u)&&!s.has(u)&&(s.add(u),n.push({node:u,depth:a+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 W(i){if(!i||!i.metadata)return null;if(typeof i.metadata=="string")try{const t=JSON.parse(i.metadata);return typeof t=="object"&&t!==null&&!Array.isArray(t)?t:null}catch{return null}return typeof i.metadata=="object"&&!Array.isArray(i.metadata)?i.metadata:null}function y(i){const t={stems:[],mixes:[],hasExtras:!1};if(!i)return t;const e=tt(i),r=et(i),s=typeof i.vrm=="string"?i.vrm:void 0,n=Q(i.lyrics),c=w(i.visualizer),a=w(i.video),o=Z(i.merch),u=X(i.credits),p=typeof i.midi=="string"?i.midi:void 0,f=typeof i.step_mania=="string"?i.step_mania:void 0,m=typeof i.clone_hero=="string"?i.clone_hero:void 0,d=typeof i.external_url=="string"?i.external_url:void 0;return{hasExtras:e.length>0||r.length>0||!!s||!!n||!!c||!!a||!!o||!!u||!!p||!!f||!!m||!!d,...e.length>0?{stems:e}:{},...r.length>0?{mixes:r}:{},...s?{vrm:s}:{},...n?{lyrics:n}:{},...c?{visualizer:c}:{},...a?{video:a}:{},...o?{merch:o}:{},...u?{credits:u}:{},...p?{midi:p}:{},...f?{step_mania:f}:{},...m?{clone_hero:m}:{},...d?{external_url:d}:{}}}const M=["audio/wav","audio/x-wav","audio/flac"];function A(i,t,e){const r=t?.["Selected Mix"],s=typeof i=="string"&&i||typeof r=="string"&&r||null;if(!s||s==="default")return null;const n=(e??[]).filter(u=>u.name===s);if(n.length===0)return null;const c=u=>M.includes((u.mime_type??"").toLowerCase()),a=n.find(c),o=n.find(u=>!c(u))??n[0];return{name:s,...o?.uri?{audio_url:o.uri}:{},...a?.uri&&a.uri!==o?.uri?{audio_url_lossless:a.uri}:{}}}function H(i,t,e){if(!i||!t)return null;const r=$(i,t,e?.caseInsensitive!==!1,e?.aliases!==!1);return r.length>0?b(r,e?.prefer??"lossy"):null}function b(i,t="lossy"){if(!i||i.length===0)return null;if(i.length===1)return i[0];const e=t==="lossy"?["audio/mpeg","audio/wav","audio/flac"]:["audio/wav","audio/flac","audio/mpeg"];for(const r of e){const s=i.find(n=>S(n.mime_type)===r);if(s)return s}return i[0]}function R(i){if(!i||!Array.isArray(i))return[];const t=new Map;for(const e of i){const r=e.name.trim().toLowerCase(),s=t.get(r);s?s.push(e):t.set(r,[e])}return Array.from(t.values()).map(e=>({name:e[0].name,mixes:e}))}async function v(i,t){if(!i)return null;const e=i,r=e.uri??e.audio_url??e.audio_url_lossless;if(!r)return null;let s=r;if(t?.followMetadata!==!1&&q(i,r)){const n=await J(r,t?.fetchTimeoutMs);if(!n)return null;s=n}if(t?.resolveUrl===!1)return s;try{return await D.arweaveGatewayManager.resolveUrl(s)}catch{return null}}async function G(i,t,e){const r=i.extras?.mixes;if(!r||r.length===0||!t)return null;let s=$(r,t,!0,e?.aliases!==!1);if(s.length===0)return null;if(e?.conditionsContext){const p=U({hasExtras:i.extras?.hasExtras??!0,mixes:r},e.conditionsContext),f=new Set(p.filter(m=>m.allMet).map(m=>m.mix.name));if(s=s.filter(m=>f.has(m.name)),s.length===0)return null}const n=b(s,e?.prefer??"lossy");if(!n||!n.uri)return null;const c={resolveUrl:e?.resolveUrl,followMetadata:e?.followMetadata},a=await v(n,c);if(!a)return null;const o=s.find(O),u=o&&o!==n&&o.uri?await v(o,c):void 0;return{...i,audio_url:a,audio_url_lossless:u&&u!==a?u:void 0,selected_mix:n.name}}const z=["application/json","application/ld+json"],B={"audio/x-wav":"audio/wav","audio/wave":"audio/wav","audio/vnd.wave":"audio/wav","audio/x-flac":"audio/flac","audio/mp3":"audio/mpeg","audio/mpeg3":"audio/mpeg"};function S(i){const t=(i??"").trim().toLowerCase();return B[t]??t}function O(i){return M.includes(S(i.mime_type))}function K(i,t,e){if(!i||!t)return[];const r=n=>e?n.trim().toLowerCase():n.trim(),s=r(t);return i.filter(n=>r(n.name)===s)}const V=[["no vocals","instrumental"],["vocals only","acapella"],["vocal only","acapella"],["a cappella","acapella"],["tv mix","karaoke"],["tv version","karaoke"],["karaoke version","karaoke"],["karaoke mix","karaoke"]],Y={inst:"instrumental",instr:"instrumental",instrument:"instrumental",instrumentals:"instrumental",aca:"acapella",acap:"acapella",acappella:"acapella",cappella:"acapella",vox:"acapella",vocal:"acapella",vocals:"acapella",rmx:"remix",tvmix:"karaoke",tv:"karaoke",karoake:"karaoke"};function k(i){let t=" "+i.toLowerCase().replace(/[^a-z0-9\s]/g," ").replace(/\s+/g," ").trim()+" ";for(const[e,r]of V)t=t.split(" "+e+" ").join(" "+r+" ");return t.trim().split(" ").filter(Boolean).map(e=>Y[e]??e)}function $(i,t,e,r){const s=K(i,t,e);if(s.length>0||!r||!e)return s;const n=k(t);return n.length===0?[]:i.filter(c=>{const a=k(c.name);return n.every(o=>a.includes(o))})}function q(i,t){const e=("mime_type"in i?i.mime_type:"")??"";return z.includes(e.toLowerCase())?!0:e?!1:t.split(/[?#]/)[0].toLowerCase().endsWith(".json")}async function J(i,t=1e4){const e=new AbortController,r=setTimeout(()=>e.abort(),t);try{const s=await fetch(i,{signal:e.signal});if(!s.ok)return null;const n=l.parseMetadata(await s.text());return n?l.extractAudioUrl(n):null}catch{return null}finally{clearTimeout(r)}}function Q(i){if(i){if(typeof i=="string")return{text:i};if(typeof i=="object"&&!Array.isArray(i)){const t=i;return{text:typeof t.text=="string"?t.text:void 0}}}}function w(i){if(!i||typeof i!="object"||Array.isArray(i))return;const t=i;if(typeof t.uri=="string")return{uri:t.uri,mime_type:typeof t.mime_type=="string"?t.mime_type:void 0}}function Z(i){if(!i||typeof i!="object"||Array.isArray(i))return;const t=i;if(typeof t.uri=="string")return{uri:t.uri,mime_type:typeof t.mime_type=="string"?t.mime_type:void 0,type:typeof t.type=="string"?t.type:void 0}}function X(i){if(!Array.isArray(i))return;const t=[];for(const e of i)if(e&&typeof e=="object"){const r=e;typeof r.name=="string"&&typeof r.credit=="string"&&t.push({name:r.name,credit:r.credit})}return t.length>0?t:void 0}function tt(i){const t=i.stems;if(!Array.isArray(t))return[];const e=[];for(const r of t)if(r&&typeof r=="object"){const s=r;e.push({name:typeof s.name=="string"?s.name:"",uri:typeof s.uri=="string"?s.uri:void 0,mime_type:typeof s.mime_type=="string"?s.mime_type:void 0})}return e}function et(i){const t=i.mixes;if(!Array.isArray(t))return[];const e=[];for(const r of t)if(r&&typeof r=="object"){const s=r,n=rt(s.name),c=it(s.conditions);e.push({name:n||"",uri:typeof s.uri=="string"?s.uri:void 0,mime_type:typeof s.mime_type=="string"?s.mime_type:void 0,conditions:c})}return e}function rt(i){if(typeof i=="string")return i;if(i&&typeof i=="object"&&!Array.isArray(i)){const t=i;if(typeof t.value=="string")return t.value}return""}function it(i){if(!Array.isArray(i))return[];const t=[];for(const e of i)if(e&&typeof e=="object"){const r=e;typeof r.type=="string"&&(typeof r.value=="string"||typeof r.value=="number"||typeof r.value=="boolean")&&t.push({type:r.type,value:String(r.value)})}return t}function U(i,t){const e=[],r=new Date;for(const s of i.mixes||[]){if(s.conditions.length===0){e.push({mix:s,conditions:[],allMet:!0,unmetConditions:[]});continue}const n=[],c=[];for(const a of s.conditions){const o=st(a,t,r);n.push(o),o.met||c.push(o)}e.push({mix:s,conditions:n,allMet:c.length===0,unmetConditions:c})}return e}function st(i,t,e=new Date){const{type:r,value:s}=i,n=t?.environment,c=t?.appState;switch(r){case"weather":{const a=n?.weather?.weatherType||"",o=a.toLowerCase()===s.toLowerCase();return{type:r,value:s,met:o,reason:o?`Weather is ${a}`:`Weather is ${a} (need ${s})`}}case"day":{const o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][e.getDay()],u=o.toLowerCase()===s.toLowerCase();return{type:r,value:s,met:u,reason:u?`Today is ${o}`:`Today is ${o} (need ${s})`}}case"start_time":{const a=e.getHours()*60+e.getMinutes(),o=T(s),u=a>=o;return{type:r,value:s,met:u,reason:u?`Time is after ${s}`:`Time is before ${s}`}}case"end_time":{const a=e.getHours()*60+e.getMinutes(),o=T(s),u=a<o;return{type:r,value:s,met:u,reason:u?`Time is before ${s}`:`Time is after ${s}`}}case"min_plays":{const a=parseInt(s,10),o=c?.playCount??0,u=o>=a;return{type:r,value:s,met:u,reason:u?`Played ${o} times (need ${a})`:`Played ${o} times (need ${a})`}}case"max_plays":{const a=parseInt(s,10),o=c?.playCount??0,u=o<=a;return{type:r,value:s,met:u,reason:u?`Played ${o} times (max ${a})`:`Played ${o} times (exceeds max ${a})`}}case"every_x_plays":{const a=parseInt(s,10),o=c?.playCount??0,u=a>0&&o>0&&o%a===0;return{type:r,value:s,met:u,reason:u?`Play #${o} (every ${a} plays)`:`Play #${o} (not a multiple of ${a})`}}case"altitude":{const a=n?.geolocation?.altitude;if(a==null)return{type:r,value:s,met:!1,reason:"Altitude unavailable"};const o=nt(s),u=ot(a,o.operator,o.threshold);return{type:r,value:s,met:u,reason:u?`Altitude ${a}m ${o.operator} ${o.threshold}m`:`Altitude ${a}m (need ${o.operator} ${o.threshold}m)`}}case"favorite":{const a=c?.isFavorite??!1,o=s.toLowerCase()==="true",u=a===o;return{type:r,value:s,met:u,reason:u?a?"Track is favorited":"Track is not favorited":a?"Track is favorited (need unfavorited)":"Track is not favorited (need favorited)"}}case"birthday":{if(!c?.userBirthday)return{type:r,value:s,met:!1,reason:"Birthday not set"};const o=`${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`===c.userBirthday;return{type:r,value:s,met:o,reason:o?"It's your birthday!":`Not your birthday (need ${c.userBirthday})`}}case"weight":return{type:r,value:s,met:!0,reason:`Weight ${s} (used for random selection, always available)`};default:return{type:r,value:s,met:!0,reason:`Custom condition: ${r} = ${s}`}}}function T(i){const t=i.split(":");if(t.length!==2)return 0;const e=parseInt(t[0],10),r=parseInt(t[1],10);return isNaN(e)||isNaN(r)?0:e*60+r}function nt(i){const t=i.match(/^(>=|<=|>|<|=)?\s*(\d+(?:\.\d+)?)\s*$/);return t?{operator:t[1]||">=",threshold:parseFloat(t[2])}:{operator:">=",threshold:parseFloat(i)||0}}function ot(i,t,e){switch(t){case">":return i>e;case">=":return i>=e;case"<":return i<e;case"<=":return i<=e;case"=":case"==":return i===e;default:return i>=e}}function g(i){if("audio_url"in i&&typeof i.audio_url=="string")return i.audio_url;if("metadata"in i){const t=l.parseMetadata(i.metadata);if(t)return l.extractAudioUrl(t)}return null}function L(i){if("audio_url_lossless"in i&&typeof i.audio_url_lossless=="string")return i.audio_url_lossless;if("metadata"in i){const t=l.parseMetadata(i.metadata);if(t)return l.extractAudioUrlLossless(t)}return null}function _(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=l.parseMetadata(i.metadata);if(t)return l.extractImageUrl(t)}return null}function C(i){if("image_thumb_url"in i&&typeof i.image_thumb_url=="string")return i.image_thumb_url;if("metadata"in i){const t=l.parseMetadata(i.metadata);if(t)return l.extractImageThumbUrl(t)}return null}function I(i){if("metadata"in i){const t=l.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 j(i){if("extras"in i&&i.extras?.mixes)return i.extras.mixes;if("metadata"in i){const t=l.parseMetadata(i.metadata);if(t)return y(t).mixes??[]}return[]}function E(i){if("audio_url"in i||!("metadata"in i))return null;const t=l.parseMetadata(i.metadata);return A(i.selected_mix,l.convertAttributes(t?.attributes),t?y(t).mixes:void 0)}function at(i){const t=[];for(const e of i.tracks){const r=g(e);r&&t.push(r)}return t}function ut(i){const t=[];for(const e of i.tracks){const r=_(e);r&&t.push(r)}return t}function ct(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=l.parseMetadata(e.metadata);if(r){const s=l.extractTitle(r);s&&t.push(s)}}}return t}function lt(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=l.parseMetadata(e.metadata);if(r){const s=l.extractArtist(r);s&&t.push(s)}}}return t}function ft(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=l.parseMetadata(e.metadata);r&&typeof r.genre=="string"&&r.genre&&t.add(r.genre)}}return Array.from(t).sort()}function pt(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=l.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 mt(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=l.parseMetadata(e.metadata);r&&typeof r.duration=="number"&&(t+=r.duration)}}return t}function dt(i){return i.tracks.length}function yt(i){const t=[];for(const e of i.tracks){let r=g(e);const s=_(e),n=C(e),c=E(e);c?.audio_url&&(r=c.audio_url);const a=c?c.name:"audio_url"in e?e.selected_mix:void 0;let o="",u="",p;if("title"in e)o=e.title||"",u=e.artist||"",p=e.description||void 0;else if("metadata"in e){const f=l.parseMetadata(e.metadata);f&&(o=l.extractTitle(f)||"",u=l.extractArtist(f)||"",p=l.extractDescription(f)||void 0)}if(r){const f={title:o,artist:u,audio_url:r,image_url:s||""},m=L(e),d=c?c.audio_url_lossless:m&&m!==r?m:void 0;d&&(f.audio_url_lossless=d),a&&(f.selected_mix=a),n&&(f.image_thumb_url=n),p&&(f.description=p),"audio_ipfs_hash"in e&&typeof e.audio_ipfs_hash=="string"&&(f.audio_ipfs_hash=e.audio_ipfs_hash),"artwork_ipfs_hash"in e&&typeof e.artwork_ipfs_hash=="string"&&(f.artwork_ipfs_hash=e.artwork_ipfs_hash),"mint_function"in e&&typeof e.mint_function=="string"&&(f.mint_function=e.mint_function),"mint_price"in e&&typeof e.mint_price=="string"&&(f.mint_price=e.mint_price),"mint_snapshot_time"in e&&typeof e.mint_snapshot_time=="number"&&(f.mint_snapshot_time=e.mint_snapshot_time),"mint_token"in e&&typeof e.mint_token=="string"&&(f.mint_token=e.mint_token),t.push(f)}}return t}function gt(i){const t=[];for(const e of i.tracks){if("audio_url"in e){t.push({...e});continue}if("metadata"in e){const r=l.parseMetadata(e.metadata);if(r){const s=y(r),n=A(e.selected_mix,l.convertAttributes(r.attributes),s.mixes),c=l.extractAudioUrlLossless(r),a=l.extractAudioUrl(r),o=n?.audio_url||a,u=n?n.audio_url_lossless:c&&c!==o?c:void 0;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:l.extractTitle(r),artist:l.extractArtist(r),audio_url:o,image_url:l.extractImageUrl(r),image_thumb_url:l.extractImageThumbUrl(r),duration:r.duration,genre:r.genre,tags:r.tags,bpm:r.bpm,key:r.key,album:r.album,description:l.extractDescription(r),attributes:l.convertAttributes(r.attributes),...u?{audio_url_lossless:u}:{},...n?{selected_mix:n.name}:{},...s.hasExtras?{extras:s}:{},...e.audio_ipfs_hash?{audio_ipfs_hash:e.audio_ipfs_hash}:{},...e.artwork_ipfs_hash?{artwork_ipfs_hash:e.artwork_ipfs_hash}:{},...e.mint_function?{mint_function:e.mint_function}:{},...e.mint_price?{mint_price:e.mint_price}:{},...e.mint_snapshot_time?{mint_snapshot_time:e.mint_snapshot_time}:{},...e.mint_token?{mint_token:e.mint_token}:{}})}}}return t}function _t(i){const t=[];for(const e of i.tracks){const r=I(e);r&&t.push(r)}return t}function ht(i){const t=[];for(const e of i.tracks){const r=I(e);if(!r)continue;const s=g(e),n=_(e),c=C(e);let a="",o="",u;if("title"in e)a=e.title||"",o=e.artist||"",u=e.description||void 0;else if("metadata"in e){const f=l.parseMetadata(e.metadata);f&&(a=l.extractTitle(f)||"",o=l.extractArtist(f)||"",u=l.extractDescription(f)||void 0)}const p={title:a,artist:o,audio_url:s||"",image_url:n||"",vrm:r};c&&(p.image_thumb_url=c),u&&(p.description=u),t.push(p)}return t}function vt(i){const t=[];for(const e of i.tracks)t.push(...j(e));return t}function xt(i){const t=[];for(const e of i.tracks){const r=j(e);if(r.length===0)continue;const s=E(e);let n="",c="",a;if("title"in e)n=e.title||"",c=e.artist||"",a=e.description||void 0;else if("metadata"in e){const f=l.parseMetadata(e.metadata);f&&(n=l.extractTitle(f)||"",c=l.extractArtist(f)||"",a=l.extractDescription(f)||void 0)}let o=g(e)||"",u;if(s)o=s.audio_url||o,u=s.audio_url_lossless;else{const f=L(e);u=f&&f!==o?f:void 0}const p=s?s.name:"audio_url"in e?e.selected_mix:void 0;t.push({title:n,artist:c,audio_url:o,image_url:_(e)||"",...u?{audio_url_lossless:u}:{},...p?{selected_mix:p}:{},...a?{description:a}:{},mixes:r})}return t}const h=["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"],F="ipfs.io",x="/ipfs/",At=/^Qm[1-9A-HJ-NP-Za-km-z]{44}$/,bt=/^b[a-z2-7]{55,}$/;function kt(i){return At.test(i)||bt.test(i)}const wt=/^ipfs_[a-z]+$/;function P(i){const t=i.split("/").filter(Boolean);for(let e=0;e<t.length-1;e++)if(wt.test(t[e])&&kt(t[e+1])){const r=t[e+1],s=t.slice(e+2);return s.length>0?`${r}/${s.join("/")}`:r}return null}function N(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(h.some(a=>e===a||e.endsWith("."+a))&&r.startsWith(x))return r.slice(x.length);const c=P(r);if(c)return c}catch{}return null}function Tt(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)||h.some(n=>e===n||e.endsWith("."+n))&&r.startsWith(x)||P(r))return!0}catch{}return!1}function Mt(i){if(!(!i||i.startsWith("ipfs://")))try{const{hostname:t}=new URL(i);return h.some(r=>t===r||t.endsWith("."+r))?t:void 0}catch{return}}function St(i,t={}){if(!i)return i;const e=typeof t=="string"?{gatewayHost:t}:t,{gatewayHost:r=F,preserveOriginalGateway:s=!1}=e,n=N(i);if(n){if(s){const c=Mt(i);if(c)return`https://${c}/ipfs/${n}`}return`https://${r}/ipfs/${n}`}return i}exports.DEFAULT_IPFS_GATEWAY=F;exports.KNOWN_IPFS_GATEWAY_HOSTS=h;exports.MetadataExtractor=l;exports.evaluateMixConditions=U;exports.extractIPFSPath=N;exports.findMixByName=H;exports.getArtists=lt;exports.getAudioUrls=at;exports.getFullTracks=gt;exports.getGenres=ft;exports.getImageUrls=ut;exports.getMixTracks=xt;exports.getMixes=vt;exports.getPreferredMixByQuality=b;exports.getTags=pt;exports.getTotalDuration=mt;exports.getTrackCount=dt;exports.getTrackExtras=y;exports.getTrackMetadata=W;exports.getTrackTitles=ct;exports.getTracks=yt;exports.getUniqueMixes=R;exports.getVRMTracks=ht;exports.getVRMs=_t;exports.isIPFS=Tt;exports.resolveIPFSLink=St;exports.resolveMixUrl=v;exports.resolveSelectedMix=A;exports.selectMix=G;
|