Commit Graph
39 Commits
Author SHA1 Message Date
UltradesuandClaude Opus 4.6 d6dd046fad feat(node-player): use Service Worker for auth, enable streaming playback
Add a Service Worker that intercepts /api/* requests and injects the
Bearer token. This allows <audio> and <img> elements to use direct
URLs instead of downloading entire files as blobs first.

- Audio now streams progressively (no full download before playback)
- Cover art loads via regular <img src> (SW adds auth header)
- Remove blob-based preloadStream, fetchCoverBlob, useCoverUrl hook
- Register SW in main.tsx, token synced via postMessage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 17:30:17 +01:00
UltradesuandClaude Opus 4.6 6b1aa6b5d5 feat: add recent plays history modal
Publish Metadata Agent Image / build-and-push-image (push) Successful in 1m23s
Publish Node Player Image / build-and-push-image (push) Successful in 37s
Publish Web Player Image / build-and-push-image (push) Successful in 1m49s
- GET /api/me/recent endpoint returning last 50 play events with track
  and artist info
- RecentPlays modal component with time-ago display
- "Recent plays" button in user dropdown menu
- Clicking a track in history starts playback

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 17:08:54 +01:00
UltradesuandClaude Opus 4.6 4fdd56dae4 feat: add user support with play event tracking
Backend (Rust API):
- Add users and play_events tables (migration 0005)
- Extract full user identity from JWT (sub, username, email, name)
  and pass AuthUser via request extensions to all handlers
- Auto-upsert user in background on every authenticated request
- POST /api/tracks/:slug/play endpoint to record play events
- Allow POST method in CORS

Frontend (Node player):
- Call recordPlay() when a track starts playing
- Add user profile avatar with dropdown menu (name, email, sign out)
- Pass user info from App through FurumiPlayer to Header

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:51:53 +01:00
UltradesuandClaude Opus 4.6 5bc2b55ffd feat(node-player): remove run-without-auth option from login page
Publish Metadata Agent Image (dev) / build-and-push-image (push) Successful in 1m28s
Publish Node Player Image (dev) / build-and-push-image (push) Successful in 38s
Publish Web Player Image (dev) / build-and-push-image (push) Successful in 1m56s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:32:19 +01:00
UltradesuandClaude Opus 4.6 ed918b9373 feat(node-player): redesign auth page with loading state
Publish Metadata Agent Image (dev) / build-and-push-image (push) Successful in 1m31s
Publish Node Player Image (dev) / build-and-push-image (push) Successful in 43s
Publish Web Player Image (dev) / build-and-push-image (push) Successful in 2m22s
- Show spinner while checking session (no login form flash on refresh)
- Translate UI to English
- Match player's dark theme (colors, fonts, card style)
- Render login form only when authentication is actually needed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:27:22 +01:00
UltradesuandClaude Opus 4.6 1ea5f66ea3 fix(node-player): add offline_access scope and server-side token refresh
Publish Metadata Agent Image (dev) / build-and-push-image (push) Has been cancelled
Publish Node Player Image (dev) / build-and-push-image (push) Successful in 36s
Publish Web Player Image (dev) / build-and-push-image (push) Successful in 1m50s
- Add offline_access to OIDC scope so Authentik issues a refresh token
- /auth/token now checks if access token is expired and refreshes it
  server-side before returning to the client

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:01:16 +01:00
UltradesuandClaude Opus 4.6 7bc7de44cf fix(node-player): restore useEffect import in QueueList
Publish Metadata Agent Image (dev) / build-and-push-image (push) Has been cancelled
Publish Node Player Image (dev) / build-and-push-image (push) Successful in 38s
Publish Web Player Image (dev) / build-and-push-image (push) Successful in 1m48s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:44:28 +01:00
UltradesuandClaude Opus 4.6 befba57374 fix(node-player): auto-refresh expired JWT tokens on 401
Publish Metadata Agent Image (dev) / build-and-push-image (push) Has been cancelled
Publish Node Player Image (dev) / build-and-push-image (push) Failing after 28s
Publish Web Player Image (dev) / build-and-push-image (push) Has been cancelled
Adds an axios response interceptor that catches 401 errors, fetches a
fresh access token from /auth/token, and retries the original request.
Concurrent refresh attempts are deduplicated.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:41:47 +01:00
UltradesuandClaude Opus 4.6 a9a8ee81b8 fix(node-player): load cover art via axios with Bearer token
Publish Metadata Agent Image (dev) / build-and-push-image (push) Successful in 1m22s
Publish Node Player Image (dev) / build-and-push-image (push) Failing after 29s
Publish Web Player Image (dev) / build-and-push-image (push) Has been cancelled
Cover images were loaded via <img src> which doesn't include the
Authorization header, resulting in 401 from the Rust API. Now covers
are fetched through axios as blobs and displayed via object URLs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:39:52 +01:00
UltradesuandClaude Opus 4.6 b1f75b3ee2 fix(node-player): use Express 5 catch-all route syntax
Publish Metadata Agent Image / build-and-push-image (push) Has been cancelled
Publish Web Player Image / build-and-push-image (push) Has been cancelled
Publish Node Player Image / build-and-push-image (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:20:02 +01:00
UltradesuandClaude Opus 4.6 f3392eff9f fix(node-player): use expires_in instead of expires_at on AccessToken type
Publish Web Player Image / build-and-push-image (push) Waiting to run
Publish Metadata Agent Image / build-and-push-image (push) Successful in 4m18s
Publish Node Player Image / build-and-push-image (push) Successful in 1m20s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:01:30 +01:00
UltradesuandClaude Opus 4.6 e99cacae8b feat(auth): replace cookie/api-key auth with JWT Bearer tokens, separate UI from API
Publish Metadata Agent Image / build-and-push-image (push) Successful in 6m3s
Publish Node Player Image / build-and-push-image (push) Failing after 58s
Publish Web Player Image / build-and-push-image (push) Has been cancelled
- Add JWT Bearer token validation to Rust API via OIDC provider JWKS
  with automatic key rotation and 1-hour cache
- Remove x-api-key auth support and built-in web UI from furumi-web-player,
  leaving it as a pure API server
- Add /auth/token endpoint to Node player server to expose OIDC access
  tokens to the frontend
- Move Node player auth endpoints from /api/* to /auth/* to avoid
  path conflicts with Rust API
- Add static file serving to Node Express server for production
  single-container deployment
- Fix SameSite=Strict cookie issue breaking OIDC redirect flow (use Lax)
- Add Dockerfile.node-player with multi-stage Node.js build
- Add CI workflows for node-player Docker image (dev + release)
- Optimize Rust Dockerfiles with dependency caching layer
- Update docker-compose with OIDC env vars and OLLAMA_MODEL support
- Cherry-pick agent LLM client fixes from DEV branch

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 14:51:52 +01:00
Ultradesu 85b3cb6852 Fixed docker CI
Publish Server Image / build-and-push-image (push) Successful in 2m12s
2026-03-17 19:03:48 +00:00
Ultradesu bfc0675f5a Improve web UI 2026-03-17 17:21:15 +00:00
Ultradesu 722183047d Improve web UI
Build and Publish Deb Package / build-deb (push) Failing after 33s
Publish Server Image / build-and-push-image (push) Successful in 2m11s
2026-03-17 16:16:43 +00:00
Ultradesu 106ab96c56 Improve web UI
Build and Publish Deb Package / build-deb (push) Successful in 35s
Publish Server Image / build-and-push-image (push) Successful in 2m9s
2026-03-17 16:05:14 +00:00
Ultradesu cbc5639f99 Fixed UI
Build and Publish Deb Package / build-deb (push) Successful in 47s
Publish Server Image / build-and-push-image (push) Successful in 2m19s
2026-03-17 15:17:30 +00:00
Ultradesu 754097f894 Fixed OIDC
Build and Publish Deb Package / build-deb (push) Successful in 2m10s
Publish Server Image / build-and-push-image (push) Successful in 4m43s
2026-03-17 15:04:04 +00:00
Ultradesu b761245fd0 Fixed OIDC 2026-03-17 15:03:36 +00:00
Ultradesu 0f49d8d079 Furumi: Added web ui with OIDC SSO
Build and Publish Deb Package / build-deb (push) Successful in 59s
Publish Server Image / build-and-push-image (push) Successful in 4m28s
2026-03-17 14:53:16 +00:00
Ultradesu a17ff322ad Added web ui with OIDC SSO
Build and Publish Deb Package / build-deb (push) Successful in 1m3s
Publish Server Image / build-and-push-image (push) Successful in 11m44s
2026-03-17 14:25:58 +00:00
Ultradesu 707ef85e5d Added web ui with OIDC SSO
Publish Server Image / build-and-push-image (push) Has been cancelled
Build and Publish Deb Package / build-deb (push) Has been cancelled
2026-03-17 14:25:04 +00:00
Ultradesu ec4c53497f Added oauth2 OIDC support 2026-03-17 14:23:49 +00:00
Ultradesu 46ba3d5490 Added web player 2026-03-17 13:49:03 +00:00
Ultradesu 64f292c7b1 Added win client plan 2026-03-11 14:28:10 +00:00
Ultradesu 64b59ba72d fix macos clinet unmounting 2026-03-11 10:42:19 +00:00
Ultradesu c54af23845 Fix logging
Publish Server Image / build-and-push-image (push) Has been cancelled
2026-03-11 10:29:31 +00:00
Ultradesu dd3f3721b2 Adjust logging. Added tcp ping 2026-03-11 10:12:57 +00:00
Ultradesu dc77933c9e Fix active streams metric
Publish Server Image / build-and-push-image (push) Successful in 4m50s
2026-03-11 01:39:29 +00:00
Ultradesu 848d1643a5 Fix CI
Publish Server Image / build-and-push-image (push) Successful in 5m3s
2026-03-11 00:56:10 +00:00
Ultradesu 8afd942aad Fix CI
Publish Server Image / build-and-push-image (push) Failing after 3m18s
2026-03-11 00:28:15 +00:00
Ultradesu 7aee798a01 Fix CI
Publish Server Image / build-and-push-image (push) Failing after 42s
2026-03-11 00:26:56 +00:00
Ultradesu 3a31173046 Fixed Dockerfile
Publish Server Image / build-and-push-image (push) Failing after 34s
2026-03-11 00:25:21 +00:00
Ultradesu b0fc1fa92c Added Dockerfile
Publish Server Image / build-and-push-image (push) Failing after 25s
2026-03-11 00:23:04 +00:00
Ultradesu 5cd53f277b Added CI
Publish Server Image / build-and-push-image (push) Failing after 2m21s
2026-03-11 00:19:13 +00:00
Ultradesu 80bfc69c0b Added macos client 2026-03-11 00:11:00 +00:00
Ultradesu dc4fbd7407 Added macos client 2026-03-11 00:09:10 +00:00
Ultradesu 57c9a3f456 Added macos client 2026-03-11 00:05:13 +00:00
Ultradesu 0040ae531c init 2026-03-10 14:09:01 +00:00