Repository navigation
feat!: replace Zen SEA with Ed25519 and sync the library over HTTP - #136
Merged
Merged
Conversation
Identity pages derive and sign with vendor/identity.js (WebCrypto Ed25519, same derivation as fid 5.0.0). The player syncs the library to the instance the identity is linked to (signed requests, records encrypted in the browser) instead of a Zen relay; a new device finds that instance via the directory. Removes vendor/zen.min.js, the wasm files, ZEN_RELAY and the relay tests, and updates README and site copy. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeCp9YZh9dCEHXtRdpVeFe
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
profile.htmlandsso.htmlderive and sign withvendor/identity.js(vendored fromfid, WebCrypto Ed25519, same derivation as fid 5.0.0 — the same alias + passphrase gives the same key as the portal).vendor/zen.min.js,crypto.wasm,pen.wasmandwindow.ZEN_RELAYare gone.components/library-sync.js): the player mirrors favorites, artists and playlists to the TuneCamp instance the identity is linked to, through the new/api/auth/zen/library/:pubroutes (scobru/tunecamp#1227, merged). Requests are signed with the identity key; private records are encrypted in the browser (AES-GCM, key derived from the identity key); shared playlists stay public. It reads on open, when the tab becomes visible, and once a minute; writes are debounced; last write wins by the record's own timestamp.config.js) which one holds an account for the key (GET .../:pub/account) and remembers it.player.html?pl=<pub>.<id>@<host>. Old?pl=<pub>.<id>links used the relay and stop resolving.about,ecosystem) no longer mention Zen SEA or a relay.Behaviour changes to be aware of
Test plan
tests/library-sync.test.js(new, 24 assertions): encryption, share tokens, instance discovery, two devices through an in-process instance, tombstones, shared playlists, refusals. Plus library (50), instance-import (36), url-safety (15),check_syntax.js.tests/player.e2e.cjsin headless Chromium: 54 checks, including an unreachable instance reported honestly and a published playlist opened from its link. (It was already failing on a stale text assertion before this change; fixed.)bE9DAycqb9gbxMJHTxh5RRxVQRPpG-wrCojHVl0s9sM;sso.htmlauthorize posts a 64-byte Ed25519 signature withmasterKeySource: { type: 'zen', pubKey }.Based on
main: the website'sdevbranch is a stale, heavily diverged branch (it lackssso.html, the tests andutils.js), and every previous PR here targetsmain.🤖 Generated with Claude Code
https://claude.ai/code/session_01FeCp9YZh9dCEHXtRdpVeFe
Generated by Claude Code