mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-09-11 21:39:01 +00:00
ba01d95111
* feat: add web UI for TOTP 2FA setup in user settings Add a Two-Factor Authentication section to the console settings page so users can enable/disable TOTP 2FA from the browser. The backend API already existed (PR #77); this wires up the frontend. - Add 2FA section to console settings with enable/disable flows - Enable flow: QR code + manual secret + verification code input - Recovery codes displayed with copy/download after setup - Disable flow: password confirmation modal - Add totp.setup/verify/disable methods to API client - Add TOTP types (TOTPSetupResponse, TOTPVerifyResponse, etc.) - Add totp_enabled to User type and /auth/me response - Add qrcode npm dependency for rendering otpauth:// URIs Closes TASK-402 * fix: address codex review — separate QR rendering from setup, use clipboard util - Separate QR code rendering from TOTP setup API call so a QR failure doesn't abort setup when manual entry is still available - Use existing copyToClipboard utility with legacy fallback instead of raw navigator.clipboard.writeText
48 lines
1.3 KiB
JSON
48 lines
1.3 KiB
JSON
{
|
|
"name": "web",
|
|
"private": true,
|
|
"version": "0.0.1",
|
|
"license": "Apache-2.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite dev",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"prepare": "svelte-kit sync || echo ''",
|
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
|
|
},
|
|
"devDependencies": {
|
|
"@sveltejs/adapter-auto": "^7.0.0",
|
|
"@sveltejs/adapter-static": "^3.0.10",
|
|
"@sveltejs/kit": "^2.50.2",
|
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
"@types/marked": "^5.0.2",
|
|
"marked": "^17.0.5",
|
|
"svelte": "^5.51.0",
|
|
"svelte-check": "^4.4.2",
|
|
"typescript": "^5.9.3",
|
|
"vite": "^7.3.1"
|
|
},
|
|
"dependencies": {
|
|
"@tiptap/core": "^3.20.4",
|
|
"@tiptap/extension-bubble-menu": "^3.20.4",
|
|
"@tiptap/extension-code-block-lowlight": "^3.20.4",
|
|
"@tiptap/extension-link": "^3.20.4",
|
|
"@tiptap/extension-placeholder": "^3.20.4",
|
|
"@tiptap/extension-table": "^3.20.4",
|
|
"@tiptap/extension-task-item": "^3.20.4",
|
|
"@tiptap/extension-task-list": "^3.20.4",
|
|
"@tiptap/pm": "^3.20.4",
|
|
"@tiptap/starter-kit": "^3.20.4",
|
|
"@tiptap/suggestion": "^3.20.4",
|
|
"diff": "^8.0.3",
|
|
"dompurify": "^3.3.3",
|
|
"lowlight": "^3.3.0",
|
|
"mermaid": "^11.13.0",
|
|
"qrcode": "^1.5.4",
|
|
"svelte-dnd-action": "^0.9.69",
|
|
"tiptap-markdown": "^0.9.0"
|
|
}
|
|
}
|