88 lines
4.8 KiB
Markdown
88 lines
4.8 KiB
Markdown
# Transfer WebRTC Share Implementation Plan
|
|
|
|
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
|
|
**Goal:** Turn the current mock transfer page into a real QR-to-webpage sharing flow where a sender opens `/transfer`, the receiver opens a public share URL, and the browsers exchange files over WebRTC P2P.
|
|
|
|
**Architecture:** Add a minimal backend signaling layer under `backend/src/main/java/com/yoyuzh/transfer` using in-memory session storage with short TTL. Keep the sender workspace inside the authenticated portal, add a public receiver route in the frontend, and exchange SDP / ICE over authenticated-or-public HTTP endpoints while the actual file bytes move through `RTCDataChannel`.
|
|
|
|
**Tech Stack:** React 19 + Vite + TypeScript, Spring Boot 3.3.8 + Java 17, WebRTC `RTCPeerConnection`, existing OSS deploy script, Maven tests, Node test runner.
|
|
|
|
---
|
|
|
|
### Task 1: Define Share URL And Pure Frontend Protocol Helpers
|
|
|
|
**Files:**
|
|
- Modify: `front/src/pages/transfer-state.ts`
|
|
- Modify: `front/src/pages/transfer-state.test.ts`
|
|
- Modify: `front/src/App.tsx`
|
|
|
|
- [ ] **Step 1: Write failing tests for share URL and protocol helpers**
|
|
- [ ] **Step 2: Run `cd front && npm run test` to verify the new tests fail**
|
|
- [ ] **Step 3: Implement minimal helpers for public share URLs, protocol message typing, and code parsing**
|
|
- [ ] **Step 4: Run `cd front && npm run test` to verify the helpers pass**
|
|
|
|
### Task 2: Add Backend Signaling Session APIs
|
|
|
|
**Files:**
|
|
- Create: `backend/src/main/java/com/yoyuzh/transfer/TransferController.java`
|
|
- Create: `backend/src/main/java/com/yoyuzh/transfer/TransferService.java`
|
|
- Create: `backend/src/main/java/com/yoyuzh/transfer/TransferSessionStore.java`
|
|
- Create: `backend/src/main/java/com/yoyuzh/transfer/*.java` DTOs for create/join/poll/post signal
|
|
- Modify: `backend/src/main/java/com/yoyuzh/config/SecurityConfig.java`
|
|
- Test: `backend/src/test/java/com/yoyuzh/transfer/TransferControllerIntegrationTest.java`
|
|
- Test: `backend/src/test/java/com/yoyuzh/config/SecurityConfigTest.java`
|
|
|
|
- [ ] **Step 1: Write failing backend integration tests for session creation, public join, offer/answer exchange, ICE polling, and access rules**
|
|
- [ ] **Step 2: Run `cd backend && mvn test` to verify the transfer tests fail for the expected missing endpoints**
|
|
- [ ] **Step 3: Implement the minimal in-memory signaling service and public `/api/transfer/**` endpoints**
|
|
- [ ] **Step 4: Run `cd backend && mvn test` to verify backend green**
|
|
|
|
### Task 3: Replace Mock Transfer UI With Sender Workspace
|
|
|
|
**Files:**
|
|
- Modify: `front/src/pages/Transfer.tsx`
|
|
- Create: `front/src/lib/transfer-client.ts` if needed for request wrappers
|
|
- Test: `front/src/pages/transfer-state.test.ts`
|
|
|
|
- [ ] **Step 1: Add failing tests for sender-side state transitions that now depend on created share sessions instead of mock codes**
|
|
- [ ] **Step 2: Run `cd front && npm run test` to verify failure**
|
|
- [ ] **Step 3: Implement sender-side session creation, QR/share URL generation, and WebRTC offer / data channel sending**
|
|
- [ ] **Step 4: Run `cd front && npm run test` to verify green**
|
|
|
|
### Task 4: Add Public Receiver Page
|
|
|
|
**Files:**
|
|
- Create: `front/src/pages/TransferReceive.tsx`
|
|
- Modify: `front/src/App.tsx`
|
|
- Modify: `front/src/pages/Transfer.tsx`
|
|
|
|
- [ ] **Step 1: Add failing tests for public share route parsing or receiver helper logic**
|
|
- [ ] **Step 2: Run `cd front && npm run test` to verify failure**
|
|
- [ ] **Step 3: Implement the public receiver page, session join flow, answer/ICE exchange, and browser download assembly**
|
|
- [ ] **Step 4: Run `cd front && npm run test` to verify green**
|
|
|
|
### Task 5: Make OSS Publish Recognize Public Share Routes
|
|
|
|
**Files:**
|
|
- Modify: `scripts/oss-deploy-lib.mjs`
|
|
- Modify: `scripts/oss-deploy-lib.test.mjs`
|
|
|
|
- [ ] **Step 1: Write failing tests for new SPA aliases such as `t` or `transfer/receive`**
|
|
- [ ] **Step 2: Run `node scripts/oss-deploy-lib.test.mjs` only if already used elsewhere; otherwise verify through existing frontend build and test coverage**
|
|
- [ ] **Step 3: Implement the minimal alias updates**
|
|
- [ ] **Step 4: Re-run the relevant checked-in verification command**
|
|
|
|
### Task 6: Full Verification And Release
|
|
|
|
**Files:**
|
|
- Modify only if verification reveals issues
|
|
|
|
- [ ] **Step 1: Run `cd front && npm run test`**
|
|
- [ ] **Step 2: Run `cd front && npm run lint`**
|
|
- [ ] **Step 3: Run `cd front && npm run build`**
|
|
- [ ] **Step 4: Run `cd backend && mvn test`**
|
|
- [ ] **Step 5: Run `cd backend && mvn package`**
|
|
- [ ] **Step 6: Deploy frontend with `node scripts/deploy-front-oss.mjs`**
|
|
- [ ] **Step 7: Deploy backend jar to the discovered production host and restart `my-site-api.service` using the real server procedure**
|