From 55a29b9c1a48152aafd931730a49f0505d54e3d8 Mon Sep 17 00:00:00 2001 From: NeilClack Date: Wed, 8 Jul 2026 15:01:08 -0500 Subject: [PATCH] feat: wire GHL webhook to Resend email templates - Replace raw Resend text emails with sendMail using Resend templates - automated-user-registration template: firstName, tempPassword, verifyUrl, loginUrl - license-key-delivery template: firstName, license_key - Remove requestPasswordReset call (temp password is the one-time credential; verification link handles email confirmation) - Add .catch() to Better Auth email callbacks to prevent unhandled rejections from missing templates crashing the server --- AGENTS.md | 40 +- src/lib/auth.ts | 4 + src/lib/generated/prisma/browser.ts | 74 +- src/lib/generated/prisma/client.ts | 98 +- src/lib/generated/prisma/commonInputTypes.ts | 666 ++- src/lib/generated/prisma/enums.ts | 15 +- src/lib/generated/prisma/internal/class.ts | 586 +-- .../prisma/internal/prismaNamespace.ts | 3418 +++++++------- .../prisma/internal/prismaNamespaceBrowser.ts | 365 +- src/lib/generated/prisma/models.ts | 35 +- src/lib/generated/prisma/models/Account.ts | 3126 ++++++------ src/lib/generated/prisma/models/Address.ts | 2972 ++++++------ src/lib/generated/prisma/models/ApiKey.ts | 2191 +++++---- src/lib/generated/prisma/models/LicenseKey.ts | 2573 +++++----- .../generated/prisma/models/Proclamation.ts | 3553 ++++++++------ .../prisma/models/ProclamationCategory.ts | 3363 +++++++------ .../ProclamationCategorySubscriptionLevel.ts | 2834 ++++++----- src/lib/generated/prisma/models/Profile.ts | 2753 ++++++----- src/lib/generated/prisma/models/Session.ts | 2752 ++++++----- .../prisma/models/SolfeggioFrequency.ts | 2468 +++++----- .../prisma/models/SubscriptionLevel.ts | 2654 ++++++----- src/lib/generated/prisma/models/User.ts | 4172 +++++++++-------- .../prisma/models/UserProclamations.ts | 2799 ++++++----- src/lib/generated/prisma/models/UserRole.ts | 2362 +++++----- .../generated/prisma/models/Verification.ts | 2239 +++++---- .../CategoryForm.svelte | 2 +- .../proclamations/ProclamationForm.svelte | 46 +- .../ProclamationForm.svelte.spec.ts | 24 +- .../v1/automations/create/account/+server.ts | 29 +- 29 files changed, 26572 insertions(+), 21641 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 86549ef..25b1610 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -58,16 +58,16 @@ State variables declared with `$state('')` are set once on component mount. To k ```svelte ``` @@ -164,17 +164,18 @@ For every admin route, write BOTH: These methods are available on `page` from `vitest/browser`: -| Method | Works? | Example | -|--------|--------|---------| -| `getByRole` | ✅ | `page.getByRole('textbox', { name: 'Name' })` | -| `getByText` | ✅ | `page.getByText('Content')` | -| `getByPlaceholder` | ✅ | `page.getByPlaceholder('Email Address')` | -| `getByAltText` | ✅ | `page.getByAltText('Sign In with Google')` | -| `getByTestId` | ✅ | `page.getByTestId('tiptap-mock')` | -| `getByLabel` | ❌ | Not available in this version | -| `getByDisplayValue` | ❌ | Not available in this version | +| Method | Works? | Example | +| ------------------- | ------ | --------------------------------------------- | +| `getByRole` | ✅ | `page.getByRole('textbox', { name: 'Name' })` | +| `getByText` | ✅ | `page.getByText('Content')` | +| `getByPlaceholder` | ✅ | `page.getByPlaceholder('Email Address')` | +| `getByAltText` | ✅ | `page.getByAltText('Sign In with Google')` | +| `getByTestId` | ✅ | `page.getByTestId('tiptap-mock')` | +| `getByLabel` | ❌ | Not available in this version | +| `getByDisplayValue` | ❌ | Not available in this version | For label-identified elements, use `getByRole` with `name` option: + - Text inputs → `getByRole('textbox', { name: /^Name$/ })` - Selects → `getByRole('combobox', { name: /^Frequency$/ })` - Buttons → `getByRole('button', { name: 'Save' })` @@ -186,7 +187,9 @@ For label-identified elements, use `getByRole` with `name` option: Since `bind:value` on selects doesn't work with `$effect`-driven state, and we use `selected` on `