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
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>
48 lines
1.5 KiB
JSON
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"
|
|
}
|
|
}
|