Difficulty: Hard · Priority: Critical
Overview
There's no page showing what a connected wallet has purchased. getLicense(holder, sampleId) already exists in crate.ts but is never called anywhere. Add a "My Beats" library page.
Acceptance Criteria
Technical Approach
No on-chain "list samples owned by X" function exists — build a per-address purchase index from purchase_license events (reuse the event-polling approach from the notifications issue), cache resolved sample data client-side keyed by wallet.
The contract's read surface doesn't support this query shape at all, so the indexing/caching layer has to be built from scratch client-side rather than a simple new API call.
Difficulty: Hard · Priority: Critical
Overview
There's no page showing what a connected wallet has purchased.
getLicense(holder, sampleId)already exists incrate.tsbut is never called anywhere. Add a "My Beats" library page.Acceptance Criteria
getLicensebefore exposing the download linkTechnical Approach
No on-chain "list samples owned by X" function exists — build a per-address purchase index from
purchase_licenseevents (reuse the event-polling approach from the notifications issue), cache resolved sample data client-side keyed by wallet.The contract's read surface doesn't support this query shape at all, so the indexing/caching layer has to be built from scratch client-side rather than a simple new API call.