You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[ ] Pages/groups CRUD, realtime/collab, Stripe webhook (no RevenueCat).
41
+
-[x]**Users**`POST /api/users` registration (crypto payload aligned with demo; conflict / unverified parity; `SEND_EMAILS=false` auto-verifies; when mail is on, `RESEND_API_KEY` required and registration email is sent after commit).
42
+
-[x]**Users — email verification**
43
+
-[x]`POST /api/users/email-verification/resend` — public, `{ "email" }` (legacy `resendVerificationEmail`); 204 / 400 / 404 / 409 / 502 / 503; [docs/TRPC_REST_MAP.md](./docs/TRPC_REST_MAP.md) updated (paths are **not** under `/me/`; legacy was never cookie-based).
-[ ]**Pages** (user prefs + CRUD) and **groups** CRUD / privacy / passwords per map.
51
+
-[ ]**Realtime / collab** (new or adapted protocols; no key rotation).
52
+
-[ ]**Stripe:**`POST /api/webhooks/stripe`, checkout/portal (no RevenueCat).
42
53
43
54
---
44
55
@@ -111,6 +122,7 @@ Cross-cutting work so the new SPA does not repeat **legacy `apps/client`** patte
111
122
112
123
| Date | Change |
113
124
|------|--------|
125
+
| 2026-04-26 | Phase 3: email verification `POST /api/users/email-verification/resend` and `…/confirm`; `performResendEmailVerification` / `performConfirmEmailVerification`; Resend in `sendRegistrationEmail`; `RESEND_API_KEY` + `PUBLIC_APP_URL`; first mail on register + re-send on duplicate unverified; OpenAPI 502 on register if provider fails; `c.env?.HYPERDRIVE` on confirm for Vitest. |
114
126
| 2026-04-26 | Phase 3: **`POST /api/users`** (`performUserRegister`), `encryptUserRehashedLoginHash`, `addHours`, OpenAPI 201/400/401/409; optional **`SEND_EMAILS`** on session env (auto-verify when `false`); group password on register still rejected (same as demo). |
|`users.account.resendVerificationEmail`|`POST /api/users/email-verification/resend` (public; body `{ "email" }` — matches legacy, not an authenticated “me” call)|
20
+
|`users.account.verifyEmail`|`POST /api/users/email-verification/confirm` (public; body `{ "emailVerificationCode" }`, nanoid)|
0 commit comments