playlist-data-engine 1.2.0 → 1.3.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.
@@ -15,6 +15,15 @@
15
15
  * @module utils/arweaveGatewayManager
16
16
  */
17
17
  import type { GatewayConfig } from './arweaveUtils.js';
18
+ /**
19
+ * Options for resolveUrl()
20
+ */
21
+ export interface ResolveUrlOptions {
22
+ /** Optional AbortSignal to cancel in-flight gateway checks */
23
+ signal?: AbortSignal;
24
+ /** Skip arweave.net in the resolution chain — go persisted → fallbacks → Wayfinder */
25
+ bypassArweaveNet?: boolean;
26
+ }
18
27
  /**
19
28
  * Configuration for the gateway cache entry
20
29
  */
@@ -167,6 +176,28 @@ export interface HealthCheckOptions {
167
176
  /** Maximum response time to consider a gateway "fast" in ms (default: 2000) */
168
177
  fastThreshold?: number;
169
178
  }
179
+ /**
180
+ * Diagnostic snapshot of the gateway manager's current state
181
+ */
182
+ export interface GatewayDiagnostics {
183
+ /** Currently active gateway host, or null */
184
+ activeGateway: string | null;
185
+ /** Milliseconds since the active gateway was set, or null */
186
+ activeGatewayAge: number | null;
187
+ /** Available gateway hosts in priority order */
188
+ availableGateways: string[];
189
+ /** Timing of the most recent real fetch (ms) */
190
+ lastFetchTiming: number;
191
+ /** Number of consecutive slow responses from the active gateway */
192
+ consecutiveSlowResponses: number;
193
+ /** Per-gateway health summary */
194
+ healthSummary: {
195
+ host: string;
196
+ avgMs: number;
197
+ successRate: number;
198
+ checks: number;
199
+ }[];
200
+ }
170
201
  /**
171
202
  * ArweaveGatewayManager class
172
203
  *
@@ -217,6 +248,42 @@ export declare class ArweaveGatewayManager {
217
248
  * Useful for third-party calls (e.g., Wayfinder) that have no built-in timeout.
218
249
  */
219
250
  private withTimeout;
251
+ /**
252
+ * Resolve an Arweave URL to a gateway URL using the active gateway, with no network checks.
253
+ *
254
+ * This is the fast path — it returns instantly by reusing the current active gateway
255
+ * (or arweave.net if none is set). Use this for the hot path where latency matters.
256
+ * When real fetches fail, call {@link reportGatewayFailure} to trigger gateway rotation.
257
+ *
258
+ * @param url - The URL to resolve
259
+ * @returns A gateway URL constructed from the active gateway, or the original URL if not Arweave
260
+ */
261
+ resolveUrlSimple(url: string): string;
262
+ /**
263
+ * Set a preferred gateway by host name.
264
+ *
265
+ * If the host is in the known gateways list, it becomes the active gateway
266
+ * and is persisted to localStorage. Returns true on success.
267
+ *
268
+ * @param host - Gateway hostname (e.g. 'ardrive.net')
269
+ * @returns True if the gateway was found and set, false otherwise
270
+ */
271
+ setPreferredGateway(host: string): boolean;
272
+ /**
273
+ * Clear the preferred/active gateway.
274
+ *
275
+ * Removes the active gateway, clears the persisted gateway from localStorage,
276
+ * and clears the cache. The next resolveUrl() call will re-discover the best gateway.
277
+ */
278
+ clearPreferredGateway(): void;
279
+ /**
280
+ * Get a diagnostic snapshot of the gateway manager's current state.
281
+ *
282
+ * Useful for debugging and console inspection.
283
+ *
284
+ * @returns Current gateway manager diagnostics
285
+ */
286
+ getDiagnostics(): GatewayDiagnostics;
220
287
  /**
221
288
  * Resolve an Arweave URL to a working gateway URL.
222
289
  *
@@ -224,10 +291,10 @@ export declare class ArweaveGatewayManager {
224
291
  * fall back to Wayfinder only if all static gateways fail.
225
292
  *
226
293
  * @param url - The URL to resolve
227
- * @param signal - Optional AbortSignal to cancel in-flight gateway checks
294
+ * @param options - Optional resolve options (signal, bypassArweaveNet, monitorArweaveNet)
228
295
  * @returns A working URL (or original URL if all gateways fail or signal is aborted)
229
296
  */
230
- resolveUrl(url: string, signal?: AbortSignal): Promise<string>;
297
+ resolveUrl(url: string, options?: ResolveUrlOptions): Promise<string>;
231
298
  /**
232
299
  * The actual gateway fallback chain. Extracted from resolveUrl() for
233
300
  * request deduplication — concurrent callers for the same txId share
@@ -325,6 +392,12 @@ export declare class ArweaveGatewayManager {
325
392
  * Clear all cached gateway entries
326
393
  */
327
394
  clearCache(): void;
395
+ /**
396
+ * Invalidate the cached gateway for a specific URL's transaction ID.
397
+ * Also clears the active gateway and persisted gateway so that resolveUrl()
398
+ * runs the full fallback chain instead of short-circuiting.
399
+ */
400
+ invalidateCacheForUrl(url: string): void;
328
401
  /**
329
402
  * Prefetch and cache gateways for multiple URLs in parallel
330
403
  *
@@ -1 +1 @@
1
- {"version":3,"file":"arweaveGatewayManager.d.ts","sourceRoot":"","sources":["../../src/utils/arweaveGatewayManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arweaveGatewayManager.d.ts","sourceRoot":"","sources":["../../src/utils/arweaveGatewayManager.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export declare const DEFAULT_GATEWAYS: GatewayConfig[];
35
35
  /**
36
36
  * Known Arweave gateway hosts for URL detection
37
37
  */
38
- export declare const KNOWN_GATEWAY_HOSTS: readonly ["arweave.net", "ar.io", "ardrive.net", "turbo-gateway.com"];
38
+ export declare const KNOWN_GATEWAY_HOSTS: readonly ["arweave.net", "arweave.dev", "www.arweave.net", "ardrive.net", "turbo-gateway.com", "irys.xyz", "ar-io.dev", "ar-io.net", "arweave.rocks", "g8way.io"];
39
39
  /**
40
40
  * Check if a URL is an Arweave URL
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"arweaveUtils.d.ts","sourceRoot":"","sources":["../../src/utils/arweaveUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAK3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,uEAKtB,CAAC;AAQX;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAajD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA8DlE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,GAAE,MAAW,GAAG,MAAM,CAGzG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,aAAa,EAAqB,EAC5C,UAAU,GAAE,MAAW,GACxB,MAAM,EAAE,CAIV"}
1
+ {"version":3,"file":"arweaveUtils.d.ts","sourceRoot":"","sources":["../../src/utils/arweaveUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAI3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,mKAWtB,CAAC;AAQX;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAsBjD;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAuElE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,GAAE,MAAW,GAAG,MAAM,CAGzG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,aAAa,EAAqB,EAC5C,UAAU,GAAE,MAAW,GACxB,MAAM,EAAE,CAIV"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * IPFS URL utility functions for detecting, extracting, and resolving IPFS links.
3
+ *
4
+ * @module utils/ipfsUtils
5
+ */
6
+ /**
7
+ * Known IPFS HTTP gateway host prefixes.
8
+ * Each entry is checked with hostname matching (exact or subdomain).
9
+ * All known gateway hosts — extend this array to add new gateways.
10
+ */
11
+ export declare const KNOWN_IPFS_GATEWAY_HOSTS: readonly ["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"];
12
+ /** Default gateway used by resolveIPFSLink */
13
+ export declare const DEFAULT_IPFS_GATEWAY = "ipfs.io";
14
+ /**
15
+ * Extract the IPFS CID and optional path from any IPFS URL.
16
+ * Returns null if the URL isn't a recognized IPFS URL.
17
+ *
18
+ * Handles:
19
+ * - `ipfs://ipfs/{cid}/path` — native scheme (double ipfs)
20
+ * - `ipfs://{cid}/path` — native scheme
21
+ * - `https://gateway/ipfs/{cid}/path` — standard gateway format
22
+ * - `https://{cid}.ipfs.dweb.link` — subdomain format
23
+ *
24
+ * @param url - The URL to extract from
25
+ * @returns The CID + path (e.g. "QmXxx/file.jpg"), or null
26
+ */
27
+ export declare function extractIPFSPath(url: string): string | null;
28
+ /**
29
+ * Check if a URL is an IPFS URL.
30
+ *
31
+ * Detects:
32
+ * - `ipfs://` protocol URLs (native scheme)
33
+ * - URLs on known IPFS gateway hosts with `/ipfs/` path segment
34
+ * - Subdomain format: `{cid}.ipfs.dweb.link`
35
+ *
36
+ * @param url - The URL to check
37
+ * @returns True if the URL is an IPFS URL
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * isIPFS('ipfs://ipfs/QmXxx'); // true
42
+ * isIPFS('ipfs://QmXxx'); // true
43
+ * isIPFS('https://ipfs.io/ipfs/QmXxx'); // true
44
+ * isIPFS('https://cloudflare-ipfs.com/ipfs/QmXxx'); // true
45
+ * isIPFS('https://dweb.link/ipfs/QmXxx'); // true
46
+ * isIPFS('https://gateway.pinata.cloud/ipfs/QmXxx'); // true
47
+ * isIPFS('https://soundxyz.mypinata.cloud/ipfs/QmXxx'); // true
48
+ * isIPFS('https://nftstorage.link/ipfs/QmXxx'); // true
49
+ * isIPFS('https://QmXxx.ipfs.dweb.link'); // true
50
+ * isIPFS('https://example.com/image.png'); // false
51
+ * isIPFS(undefined); // false
52
+ * ```
53
+ */
54
+ export declare function isIPFS(url: string | undefined): boolean;
55
+ /**
56
+ * Resolve an IPFS URL to a specific gateway.
57
+ *
58
+ * Extracts the IPFS CID/path from any recognized IPFS URL format and
59
+ * reconstructs it with the specified gateway host.
60
+ *
61
+ * @param url - The IPFS URL to resolve
62
+ * @param gatewayHost - Gateway host to resolve to (default: ipfs.io)
63
+ * @returns The resolved URL, or the original URL if not IPFS
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * resolveIPFSLink('ipfs://QmXxx'); // 'https://ipfs.io/ipfs/QmXxx'
68
+ * resolveIPFSLink('ipfs://QmXxx', 'cloudflare-ipfs.com'); // 'https://cloudflare-ipfs.com/ipfs/QmXxx'
69
+ * resolveIPFSLink('https://soundxyz.mypinata.cloud/ipfs/QmXxx'); // 'https://ipfs.io/ipfs/QmXxx'
70
+ * resolveIPFSLink('https://QmXxx.ipfs.dweb.link'); // 'https://ipfs.io/ipfs/QmXxx'
71
+ * resolveIPFSLink('https://example.com/file.png'); // 'https://example.com/file.png'
72
+ * resolveIPFSLink(undefined); // undefined
73
+ * ```
74
+ */
75
+ export declare function resolveIPFSLink(url: string | undefined, gatewayHost?: string): string | undefined;
76
+ //# sourceMappingURL=ipfsUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfsUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ipfsUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,6SAa3B,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAI9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkC1D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAwBvD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC3B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,WAAW,GAAE,MAA6B,GAC3C,MAAM,GAAG,SAAS,CASpB"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * ModelCache — Persistent localForage cache for TensorFlow.js model artifacts.
3
+ *
4
+ * After the first successful download, model artifacts (model.json manifest +
5
+ * weight shard ArrayBuffers) are stored in IndexedDB via localForage. Subsequent
6
+ * loads read from cache without any network requests or gateway resolution.
7
+ *
8
+ * Supports two loading strategies:
9
+ * - `getOrFetchGraphModel()` — loads via custom TF.js IOHandler (for tf.loadGraphModel)
10
+ * - `getOrFetchBlobUrl()` — returns a blob URL (for Essentia TensorflowMusiCNN/VGGish)
11
+ */
12
+ import type * as tf from '@tensorflow/tfjs';
13
+ export interface ModelCacheEntry {
14
+ manifest: string;
15
+ weights: Record<string, ArrayBuffer>;
16
+ savedAt: number;
17
+ originalUrl: string;
18
+ }
19
+ export interface ModelCacheOptions {
20
+ /** Optional custom localForage instance name. @default 'playlist-data-engine-models' */
21
+ storeName?: string;
22
+ /** Optional description for the IndexedDB database. */
23
+ description?: string;
24
+ }
25
+ export interface ModelCacheFetchOptions {
26
+ /** Optional callback to resolve URLs (e.g., arweaveGatewayManager). */
27
+ resolveUrl?: (url: string) => Promise<string>;
28
+ /** Optional callback to invalidate cached gateway for a URL after a fetch failure. */
29
+ invalidateUrlCache?: (url: string) => void;
30
+ /** Maximum download retries. @default 3 */
31
+ maxRetries?: number;
32
+ /** Base delay for exponential backoff in ms. @default 1000 */
33
+ baseDelayMs?: number;
34
+ }
35
+ export declare class ModelCache {
36
+ private store;
37
+ constructor(options?: ModelCacheOptions);
38
+ /**
39
+ * Check if a model is cached.
40
+ */
41
+ has(modelUrl: string): Promise<boolean>;
42
+ /**
43
+ * Get cache metadata for a model (without loading it).
44
+ */
45
+ getCacheInfo(modelUrl: string): Promise<{
46
+ cached: boolean;
47
+ savedAt?: number;
48
+ size?: number;
49
+ } | null>;
50
+ /**
51
+ * Load a GraphModel from cache (no network). Throws if not cached.
52
+ */
53
+ loadFromCache(tfModule: typeof tf, modelUrl: string): Promise<tf.GraphModel>;
54
+ /**
55
+ * Get or fetch a GraphModel with caching.
56
+ *
57
+ * - Cache hit: loads directly from IndexedDB (no network)
58
+ * - Cache miss: resolves URL, fetches with retry, caches artifacts, then loads
59
+ */
60
+ getOrFetchGraphModel(tfModule: typeof tf, modelUrl: string, options?: ModelCacheFetchOptions): Promise<tf.GraphModel>;
61
+ /**
62
+ * Get or fetch a model for use with Essentia constructors (TensorflowMusiCNN/VGGish).
63
+ *
64
+ * Uses tf.io.registerLoadRouter to register a custom IOHandler for `cached://`
65
+ * URLs. When Essentia internally calls tf.loadGraphModel(cachedUrl), TF.js routes
66
+ * to our handler which serves artifacts from localForage — zero network calls.
67
+ *
68
+ * On cache hit: returns `cached://` URL, zero network during Essentia init.
69
+ * On cache miss: fetches with gateway fallback, caches, returns `cached://` URL.
70
+ */
71
+ getOrFetchEssentiaUrl(modelUrl: string, options?: ModelCacheFetchOptions): Promise<string>;
72
+ /**
73
+ * Clear the cache for a specific model or all models.
74
+ */
75
+ clear(modelUrl?: string): Promise<void>;
76
+ /**
77
+ * List all cached model URLs.
78
+ */
79
+ listCachedModels(): Promise<string[]>;
80
+ /**
81
+ * Get total cache size in bytes.
82
+ */
83
+ totalCacheSize(): Promise<number>;
84
+ }
85
+ /** Singleton model cache instance used by default across the engine. */
86
+ export declare const modelCache: ModelCache;
87
+ //# sourceMappingURL=modelCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelCache.d.ts","sourceRoot":"","sources":["../../src/utils/modelCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAM5C,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAC9B,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACnC,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAwOD,qBAAa,UAAU;IACnB,OAAO,CAAC,KAAK,CAAc;gBAEf,OAAO,GAAE,iBAAsB;IAO3C;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7C;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;IAgBT;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;IAQlF;;;;;OAKG;IACG,oBAAoB,CACtB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACrC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;IAiCzB;;;;;;;;;OASG;IACG,qBAAqB,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACrC,OAAO,CAAC,MAAM,CAAC;IA2BlB;;OAEG;IACG,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAO3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAY1C;AAED,wEAAwE;AACxE,eAAO,MAAM,UAAU,YAAmB,CAAC"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/jasondesante/playlist-data-engine.git"
8
8
  },
9
- "version": "1.2.0",
9
+ "version": "1.3.0",
10
10
  "type": "module",
11
11
  "main": "./dist/playlist-data-engine.js",
12
12
  "module": "./dist/playlist-data-engine.mjs",
@@ -22,24 +22,28 @@
22
22
  "dist"
23
23
  ],
24
24
  "keywords": [
25
- "d&d",
26
- "character-generation",
27
- "audio-analysis",
28
- "progression-system",
29
- "rpg",
25
+ "arweave",
26
+ "ethereum",
27
+ "music-nfts",
28
+ "web3-music",
29
+ "decentralized-music",
30
+ "serverless-playlists",
31
+ "permaweb",
32
+ "ario-wayfinder",
33
+ "decentralized-playlists",
34
+ "gamified-music",
35
+ "music-gamification",
36
+ "rhythm-game-engine",
37
+ "rpg-character-generator",
38
+ "dnd-5e",
39
+ "xp-system",
30
40
  "beat-detection",
31
- "rhythm-game",
32
- "audio-processing",
33
- "character-sheet",
41
+ "audio-analysis",
42
+ "music-classification",
43
+ "pitch-detection",
34
44
  "combat-simulator",
35
- "dnd-5e",
36
- "typescript",
37
- "game-engine",
38
- "music-analysis",
39
- "ethereum",
40
- "arweave",
41
- "nfts",
42
- "decentralized-music-infrastructure"
45
+ "sensor-integration",
46
+ "rhythm-game"
43
47
  ],
44
48
  "scripts": {
45
49
  "dev": "vite",
@@ -58,6 +62,7 @@
58
62
  "@ar.io/wayfinder-core": "^1.9.1",
59
63
  "@tensorflow/tfjs": "^4.22.0",
60
64
  "essentia.js": "^0.1.3",
65
+ "localforage": "^1.10.0",
61
66
  "murmurhash-v3": "^1.0.2",
62
67
  "uuid": "^13.0.0",
63
68
  "zod": "^4.1.13"
@@ -72,9 +77,9 @@
72
77
  "devDependencies": {
73
78
  "@eslint/js": "^9.39.1",
74
79
  "@types/node": "^24.10.1",
75
- "@types/uuid": "^10.0.0",
76
80
  "@types/react": "^19.2.5",
77
81
  "@types/react-dom": "^19.2.3",
82
+ "@types/uuid": "^10.0.0",
78
83
  "@vitejs/plugin-react": "^5.1.1",
79
84
  "@vitest/coverage-v8": "^4.0.14",
80
85
  "@vitest/ui": "^4.0.14",