Scrum4Me/lib
Madhura68 a0a10001d5 feat(rate-limit): per-user mutation-rate-limiting (v1-readiness #3)
lib/rate-limit.ts: 11 nieuwe scope-configs + enforceUserRateLimit(scope, userId)
helper. Returnt { error, code: 429 } shape voor consistent foutbeleid.

Toegepast op de high-value mutation-paths:
- actions/pbis.ts createPbiAction
- actions/stories.ts createStoryAction
- actions/tasks.ts saveTask (alleen create-path) + createTaskAction
- actions/todos.ts createTodoAction
- actions/sprints.ts createSprintAction
- actions/products.ts createProductAction + createProductFormAction
- actions/api-tokens.ts createApiTokenAction
- actions/questions.ts answerQuestion
- actions/claude-jobs.ts enqueueClaudeJobAction + enqueueClaudeJobsBatchAction
- app/api/profile/avatar/route.ts POST
- app/api/stories/[id]/log/route.ts POST

Limits zijn ruim genoeg voor normaal gebruik, eng genoeg voor abuse-loops:
create-task 100/min, create-todo 60/min, create-pbi 30/min, create-product
5/min, create-token 10/uur, etc. Per-user scope (geen globale block).

Niet aangeraakt: reorder/status-toggle (intra-session frequent, lage abuse),
update/delete (laag-volume), cron-routes (CRON_SECRET-gated).

Consumer-tweaks: 'success' in result narrowing waar TS de bredere union niet
meer accepteerde. Tests: 9 nieuwe op rate-limit-helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 13:48:59 +02:00
..
auth M10: Password-loze inlog via QR-pairing (ST-1001..ST-1008) (#12) 2026-04-28 00:01:04 +02:00
insights fix(insights): narrow Sprint.completed_at to Date in velocity.ts (#56) 2026-05-02 20:21:30 +02:00
realtime fix(realtime): force-destroy pg socket on cleanup timeout (SSE leak) (#44) 2026-05-01 20:04:22 +02:00
schemas feat(codes): generateNextTaskCode + CODE_REGEX export + Zod regex op alle 3 schemas 2026-05-04 08:36:28 +02:00
api-auth.ts feat(M8): Realtime Solo Paneel via Postgres LISTEN/NOTIFY (ST-801..ST-806) (#8) 2026-04-27 13:59:32 +02:00
auth-guard.ts feat(ST-1134): (mobile) route group + auth-guard helper + manifest (T-321) 2026-05-04 09:55:18 +02:00
auth.ts feat(ST-350): add auth helpers — getSession, requireUser, requireWriter, requireProductAccess, requireProductWriter 2026-04-26 16:03:32 +02:00
chart-colors.ts Foundation: route, recharts, sprint-dates migration, chart-colors helper (#46) 2026-05-02 15:58:15 +02:00
code-server.ts feat(codes): generateNextTaskCode + CODE_REGEX export + Zod regex op alle 3 schemas 2026-05-04 08:36:28 +02:00
code.ts feat(codes): generateNextTaskCode + CODE_REGEX export + Zod regex op alle 3 schemas 2026-05-04 08:36:28 +02:00
env.ts M11: Claude vraagt, gebruiker antwoordt (ST-1101..ST-1108) (#13) 2026-04-29 11:38:23 +02:00
job-status-url.ts M13: Veilige Claude-agent-workflow (Scrum4Me-side) (#26) 2026-05-01 13:42:18 +02:00
job-status.ts M13: Claude job queue — 'Voer uit'-knop + worker presence (ST-1111) (#18) 2026-04-29 19:51:48 +02:00
prisma.ts chore: SQLite verwijderd — alleen PostgreSQL via Neon 2026-04-25 12:15:19 +02:00
product-access.ts feat: show active product name in navbar, links to product page 2026-04-26 17:56:50 +02:00
rate-limit.ts feat(rate-limit): per-user mutation-rate-limiting (v1-readiness #3) 2026-05-04 13:48:59 +02:00
session.ts M10: Password-loze inlog via QR-pairing (ST-1001..ST-1008) (#12) 2026-04-28 00:01:04 +02:00
task-status.ts M12 / ST-1109: PBI krijgt een status (Ready / Blocked / Done) (#16) 2026-04-29 17:52:34 +02:00
tasks-status-update.ts M14: TaskDialog (create/edit) + story auto-promotion (#21) 2026-04-30 16:55:20 +02:00
user-agent.ts feat(ST-1135): UA-redirect bij login — phone naar /m/* (T-322/T-323/T-324) 2026-05-04 10:09:09 +02:00
utils.ts feat: ST-001–ST-005 foundation — scaffolding, Prisma, schema, seed, env 2026-04-22 21:04:48 +02:00