1.9 KiB
1.9 KiB
Plan 32-02 Summary: Share Link Backend
Status: Complete
Commit: da159d1
What was done
-
Share service (
src/server/services/share.service.ts):createShareLink: 128-bit random base64url token, configurable expirationgetShareLinks: Lists all shares for a setup (ownership verified)revokeShareLink: Sets revokedAt (ownership verified via join)validateShareToken: Returns setupId/permission, rejects expired/revoked/nonexistentdeactivateShareLinks: Bulk revoke all active links for a setupreactivateShareLinks: Clears revokedAt on non-expired shares
-
Visibility transition side effects (
src/server/services/setup.service.ts):updateSetupnow detects visibility transitions and calls deactivate/reactivate- Uses dynamic import to avoid circular dependency
-
New function
getSetupWithItemsByIdfor share-token-authorized access (no user/visibility check) -
API routes (added to
src/server/routes/setups.ts):POST /api/setups/:id/shares— Create share link (auth required)GET /api/setups/:id/shares— List share links (auth required)DELETE /api/setups/:id/shares/:shareId— Revoke share link (auth required)
-
Public endpoints (added to
src/server/index.ts):GET /api/shared/:token— Access setup via share token (no auth)GET /s/:token— Short URL redirect to/setups/:id?share=:token- Auth middleware skip for
/api/shared/and rate limiting applied
-
Share schema (
src/shared/schemas.ts):createShareLinkSchemawithexpiresInDays: 7 | 14 | 30 | null
-
Tests (
tests/services/share.service.test.ts):- 16 tests covering all service functions and visibility transitions
- All pass (62/62 across 5 affected test files)
Verification
bun run lint: Passes- All share service tests pass (16/16)
- All affected tests pass (62/62 across 5 files)