Files
CapaKraken/packages/api/package.json
T
Hartmut fe79810a85
CI / Architecture Guardrails (push) Successful in 6m1s
CI / Assistant Split Regression (push) Successful in 6m52s
CI / Lint (push) Successful in 8m40s
CI / Typecheck (push) Successful in 9m45s
CI / Unit Tests (push) Successful in 7m28s
CI / Build (push) Failing after 10m16s
CI / E2E Tests (push) Has been cancelled
CI / Fresh-Linux Docker Deploy (push) Has been cancelled
CI / Release Images (push) Has been cancelled
security: MFA backup codes — issue on enable, redeem at login, regenerate on demand (#43)
Adds a one-time-use backup code set so users with a lost authenticator are not
locked out. Codes are Crockford base32 (XXXXX-XXXXX), hashed with argon2id, and
redeemed under a WHERE-guarded delete so a concurrent replay race fails closed.

- New MfaBackupCode model + migration
- Issue 10 codes inside the enable transaction; show plaintext exactly once
- Sign-in page accepts TOTP or backup code, reporting remaining count
- regenerateBackupCodes tRPC mutation wipes + reissues atomically
- Unit coverage for generator, normalizer, verify, redeem, and race path

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 18:47:18 +02:00

48 lines
1.5 KiB
JSON

{
"name": "@capakraken/api",
"version": "0.1.0",
"private": true,
"type": "module",
"exports": {
".": "./src/index.ts",
"./router": "./src/router/index.ts",
"./trpc": "./src/trpc.ts",
"./sse": "./src/sse/index.ts",
"./lib/audit": "./src/lib/audit.ts",
"./lib/reminder-scheduler": "./src/lib/reminder-scheduler.ts",
"./lib/logger": "./src/lib/logger.ts",
"./lib/runtime-security": "./src/lib/runtime-security.ts",
"./lib/totp-consume": "./src/lib/totp-consume.ts",
"./lib/mfa-backup-code-redeem": "./src/lib/mfa-backup-code-redeem.ts",
"./middleware/rate-limit": "./src/middleware/rate-limit.ts"
},
"scripts": {
"typecheck": "tsc --noEmit",
"test:unit": "vitest run",
"test:assistant-split": "node ./scripts/run-assistant-tool-split-regression.mjs"
},
"dependencies": {
"@capakraken/application": "workspace:*",
"@capakraken/db": "workspace:*",
"@capakraken/engine": "workspace:*",
"@capakraken/shared": "workspace:*",
"@capakraken/staffing": "workspace:*",
"@node-rs/argon2": "^2.0.2",
"@trpc/server": "^11.0.0",
"@types/nodemailer": "^7.0.11",
"ioredis": "^5.10.0",
"nodemailer": "^8.0.5",
"openai": "^6.27.0",
"otpauth": "^9.5.0",
"pino": "^10.3.1",
"zod": "^3.23.8"
},
"devDependencies": {
"@capakraken/tsconfig": "workspace:*",
"@types/node": "^22.10.2",
"typescript": "^5.6.3",
"vitest": "^2.1.8",
"@vitest/coverage-v8": "^2.1.9"
}
}