src/lib/preview/ — framework-free ESM modules, per design §12–14: - contracts.js: versioned manifest/item/source-ref factories; signed URLs structurally excluded from manifests; Apple identity first-class. - lease.js: discriminated MediaLease union; computeSafeForMs derives lifetimes provider-clock-first with fallback/contradiction handling (margins are ADRs backed by Phase 0 soak evidence). - redact.js: URL redaction (host+hash+exp only) and the HTTPS + exact host allowlist gate applied to initial URLs and every redirect. - manifest.js: artist (rank order, exact-id dedupe), album (disc/track sort, context inheritance) and fixture builders — pure, no fetching. - session.js: reducer with session/generation guards on every async action; keyed active item with derived playable indices/cursor; auto-advance under fresh generations; close is terminal. - resolver.js: PreviewResolver contract + scripted fixture resolver with classified failures (stale_lease/not_found/network/…). - transport.js: transport seam + deterministic fake (manual ticks). - focus.js: revision gateway (all main-player entry points; focus- internal tag) and the coordinator — acquisition only via a generation-bound silence ack, restore only with revisions unchanged. tests/preview/*.test.mjs run via `npm test` (node --test): 61 passing, covering the full Phase 1 list in IMPLEMENTATION-PLAN §6 including the exit gate: stale lease/play events are inert, no restoration after any simulated main command, and no component renders anywhere.
23 lines
523 B
JSON
23 lines
523 B
JSON
{
|
|
"name": "soulstream",
|
|
"version": "0.1.0",
|
|
"type": "module",
|
|
"description": "SoulStream \u2014 music player, downloader and streamer for the Soulseek network",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "vite build",
|
|
"tauri": "tauri",
|
|
"test": "node --test tests/preview/*.test.mjs"
|
|
},
|
|
"license": "ISC",
|
|
"devDependencies": {
|
|
"@sveltejs/vite-plugin-svelte": "^5",
|
|
"@tauri-apps/cli": "^2.11.2",
|
|
"svelte": "^5",
|
|
"vite": "^6"
|
|
},
|
|
"dependencies": {
|
|
"@tauri-apps/api": "^2"
|
|
}
|
|
}
|