feat(frontend): Update better-auth, add orga slug check, add PDF preview, fix invitation

This commit is contained in:
2025-07-27 09:03:11 +02:00
parent bd49291bf2
commit 4d1280749f
6 changed files with 116 additions and 77 deletions

View File

@@ -6,6 +6,12 @@ export function useBetterAuth() {
const { organization } = useAuth()
async function createOrganization(name: string, slug: string, logo?: string) {
const slugCheck = await organization.checkSlug({ slug })
if (!slugCheck.data.available) {
toast.add({ title: 'Slug bereits vergeben', description: 'Bitte wählen Sie einen anderen Slug', color: 'error' })
return Promise.reject()
}
await organization.create(
{ name, slug, logo },
{

View File

@@ -7,12 +7,13 @@
"dev": "nuxt dev --port 3001 --host",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare && pnpm run fix:bettersqlite && pnpm run api:generate",
"postinstall": "nuxt prepare && pnpm run fix:bettersqlite && pnpm run api:generate && pnpm run api:middleware:generate",
"format": "prettier . --write",
"type-check": "nuxi typecheck",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"api:generate": "openapi-generator-cli generate -i ../legalconsenthub-backend/api/legalconsenthub.yml -g typescript-fetch -o .api-client",
"api:middleware:generate": "openapi-generator-cli generate -i ../legalconsenthub-middleware/api/legalconsenthub-middleware.yml -g typescript-fetch -o .api-client-middleware",
"fix:bettersqlite": "cd node_modules/better-sqlite3 && pnpm dlx node-gyp rebuild && cd ../..",
"generate:betterauth": "pnpm dlx @better-auth/cli generate --config server/utils/auth.ts",
"migrate:betterauth": "pnpm dlx @better-auth/cli migrate --config server/utils/auth.ts"
@@ -20,7 +21,7 @@
"dependencies": {
"@nuxt/ui-pro": "3.1.1",
"@pinia/nuxt": "0.10.1",
"better-auth": "1.1.16",
"better-auth": "1.3.4",
"better-sqlite3": "11.8.1",
"nuxt": "3.16.1",
"pinia": "3.0.1",

View File

@@ -89,30 +89,34 @@
<div class="flex-1">
<p class="font-medium mb-2">Invites</p>
<div class="space-y-2">
<div
v-for="inv in activeOrganization?.invitations.filter((i: Invitation) => i.status === 'pending')"
:key="inv.id"
class="flex justify-between items-center"
>
<div>
<p class="text-sm">{{ inv.email }}</p>
<p class="text-xs text-gray-500">{{ inv.role }}</p>
<template v-if="activeOrganization?.invitations">
<div
v-for="invitation in activeOrganization?.invitations.filter(
(i: Invitation) => i.status === 'pending'
)"
:key="invitation.id"
class="flex justify-between items-center"
>
<div>
<p class="text-sm">{{ invitation.email }}</p>
<p class="text-xs text-gray-500">{{ invitation.role }}</p>
</div>
<div class="flex items-center gap-2">
<UButton
size="xs"
color="error"
:loading="isRevoking.includes(invitation.id)"
@click="() => handleRevokeInvitation(invitation.id)"
>
Revoke
</UButton>
<UButton icon="i-lucide-copy" size="xs" @click="copy(getInviteLink(invitation.id))">
{{ copied ? 'Copied!' : 'Copy' }}
</UButton>
</div>
</div>
<div class="flex items-center gap-2">
<UButton
size="xs"
color="error"
:loading="isRevoking.includes(inv.id)"
@click="() => handleRevokeInvitation(inv.id)"
>
Revoke
</UButton>
<UButton icon="i-lucide-copy" size="xs" @click="copy(getInviteLink(inv.id))">
{{ copied ? 'Copied!' : 'Copy' }}
</UButton>
</div>
</div>
<p v-if="!activeOrganization?.invitations.length" class="text-sm text-gray-500">
</template>
<p v-if="!activeOrganization?.invitations?.length" class="text-sm text-gray-500">
No active invitations
</p>
<p v-if="!activeOrganization?.id" class="text-xs text-gray-500">
@@ -137,6 +141,7 @@
<script setup lang="ts">
import { useClipboard } from '@vueuse/core'
import type { Invitation } from 'better-auth/plugins'
const { copy, copied } = useClipboard()
const toast = useToast()
@@ -173,7 +178,7 @@ async function handleRevokeInvitation(invitationId: string) {
isRevoking.value = isRevoking.value.filter((id) => id !== invitationId)
if (activeOrganization.value) {
activeOrganization.value.invitations = activeOrganization.value.invitations.filter(
(inv) => inv.id !== invitationId
(invitation: Invitation) => invitation.id !== invitationId
)
}
},

View File

@@ -14,7 +14,9 @@
</UDashboardNavbar>
<UDashboardToolbar>
<template #left> toolbar left </template>
<template #right>
<UButton icon="i-lucide-file-text" size="md" color="primary" variant="solid" target="_blank" :to="`/api/application-forms/${applicationForm.id}/pdf`">PDF Vorschau</UButton>
</template>
</UDashboardToolbar>
</template>

View File

@@ -10,13 +10,13 @@ importers:
dependencies:
'@nuxt/ui-pro':
specifier: 3.1.1
version: 3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)
version: 3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)
'@pinia/nuxt':
specifier: 0.10.1
version: 0.10.1(magicast@0.3.5)(pinia@3.0.1(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)))
better-auth:
specifier: 1.1.16
version: 1.1.16
specifier: 1.3.4
version: 1.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
better-sqlite3:
specifier: 11.8.1
version: 11.8.1
@@ -220,11 +220,11 @@ packages:
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
'@better-auth/utils@0.2.3':
resolution: {integrity: sha512-Ap1GaSmo6JYhJhxJOpUB0HobkKPTNzfta+bLV89HfpyCAHN7p8ntCrmNFHNAVD0F6v0mywFVEUg1FUhNCc81Rw==}
'@better-auth/utils@0.2.5':
resolution: {integrity: sha512-uI2+/8h/zVsH8RrYdG8eUErbuGBk16rZKQfz8CjxQOyCE6v7BqFYEbFwvOkvl1KbUdxhqOnXp78+uE5h8qVEgQ==}
'@better-fetch/fetch@1.1.12':
resolution: {integrity: sha512-B3bfloI/2UBQWIATRN6qmlORrvx3Mp0kkNjmXLv0b+DtbtR+pP4/I5kQA/rDUv+OReLywCCldf6co4LdDmh8JA==}
'@better-fetch/fetch@1.1.18':
resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==}
'@capsizecss/metrics@3.5.0':
resolution: {integrity: sha512-Ju2I/Qn3c1OaU8FgeW4Tc22D4C9NwyVfKzNmzst59bvxBjPoLYNZMqFYn+HvCtn4MpXwiaDtCE8fNuQLpdi9yA==}
@@ -771,8 +771,8 @@ packages:
'@noble/ciphers@0.6.0':
resolution: {integrity: sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==}
'@noble/hashes@1.7.1':
resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
'@noble/hashes@1.8.0':
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
'@nodelib/fs.scandir@2.1.5':
@@ -1955,11 +1955,19 @@ packages:
resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
engines: {node: '>=10.0.0'}
better-auth@1.1.16:
resolution: {integrity: sha512-Xc5pxafKZw4QVU8WYfkV2z4Hd8KCXXbphrgOpe2gA/EfanysLBhE1G/F7cEi5e0bW2pGR+vw6gf0ARHA7VFihg==}
better-auth@1.3.4:
resolution: {integrity: sha512-JbZYam6Cs3Eu5CSoMK120zSshfaKvrCftSo/+v7524H1RvhryQ7UtMbzagBcXj0Digjj8hZtVkkR4tTZD/wK2g==}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
peerDependenciesMeta:
react:
optional: true
react-dom:
optional: true
better-call@0.3.3:
resolution: {integrity: sha512-N4lDVm0NGmFfDJ0XMQ4O83Zm/3dPlvIQdxvwvgSLSkjFX5PM4GUYSVAuxNzXN27QZMHDkrJTWUqxBrm4tPC3eA==}
better-call@1.0.12:
resolution: {integrity: sha512-ssq5OfB9Ungv2M1WVrRnMBomB0qz1VKuhkY2WxjHaLtlsHoSe9EPolj1xf7xf8LY9o3vfk3Rx6rCWI4oVHeBRg==}
better-sqlite3@11.8.1:
resolution: {integrity: sha512-9BxNaBkblMjhJW8sMRZxnxVTRgbRmssZW0Oxc1MPBTfiR+WW21e2Mk4qu8CzrcZb1LwPCnFsfDEzq+SNcBU8eg==}
@@ -3328,9 +3336,9 @@ packages:
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
kysely@0.27.6:
resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
engines: {node: '>=14.0.0'}
kysely@0.28.3:
resolution: {integrity: sha512-svKnkSH72APRdjfVCCOknxaC9Eb3nA2StHG9d5/sKOqRvHRp2Dtf1XwDvc92b4B5v6LV+EAGWXQbZ5jMOvHaDw==}
engines: {node: '>=20.0.0'}
launch-editor@2.10.0:
resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==}
@@ -4378,6 +4386,9 @@ packages:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
set-cookie-parser@2.7.1:
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -4705,6 +4716,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
typescript@5.8.3:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
hasBin: true
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
@@ -5246,33 +5262,33 @@ packages:
peerDependencies:
zod: ^3.24.1
zod@3.24.2:
resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
zod@4.0.10:
resolution: {integrity: sha512-3vB+UU3/VmLL2lvwcY/4RV2i9z/YU0DTV/tDuYjrwmx5WeJ7hwy+rGEEx8glHp6Yxw7ibRbKSaIFBgReRPe5KA==}
snapshots:
'@ai-sdk/provider-utils@2.2.8(zod@3.24.2)':
'@ai-sdk/provider-utils@2.2.8(zod@4.0.10)':
dependencies:
'@ai-sdk/provider': 1.1.3
nanoid: 3.3.11
secure-json-parse: 2.7.0
zod: 3.24.2
zod: 4.0.10
'@ai-sdk/provider@1.1.3':
dependencies:
json-schema: 0.4.0
'@ai-sdk/ui-utils@1.2.11(zod@3.24.2)':
'@ai-sdk/ui-utils@1.2.11(zod@4.0.10)':
dependencies:
'@ai-sdk/provider': 1.1.3
'@ai-sdk/provider-utils': 2.2.8(zod@3.24.2)
zod: 3.24.2
zod-to-json-schema: 3.24.5(zod@3.24.2)
'@ai-sdk/provider-utils': 2.2.8(zod@4.0.10)
zod: 4.0.10
zod-to-json-schema: 3.24.5(zod@4.0.10)
'@ai-sdk/vue@1.2.12(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)':
'@ai-sdk/vue@1.2.12(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)':
dependencies:
'@ai-sdk/provider-utils': 2.2.8(zod@3.24.2)
'@ai-sdk/ui-utils': 1.2.11(zod@3.24.2)
'@ai-sdk/provider-utils': 2.2.8(zod@4.0.10)
'@ai-sdk/ui-utils': 1.2.11(zod@4.0.10)
swrv: 1.1.0(vue@3.5.13(typescript@5.7.3))
optionalDependencies:
vue: 3.5.13(typescript@5.7.3)
@@ -5468,11 +5484,12 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@better-auth/utils@0.2.3':
'@better-auth/utils@0.2.5':
dependencies:
typescript: 5.8.3
uncrypto: 0.1.3
'@better-fetch/fetch@1.1.12': {}
'@better-fetch/fetch@1.1.18': {}
'@capsizecss/metrics@3.5.0': {}
@@ -5920,7 +5937,7 @@ snapshots:
'@noble/ciphers@0.6.0': {}
'@noble/hashes@1.7.1': {}
'@noble/hashes@1.8.0': {}
'@nodelib/fs.scandir@2.1.5':
dependencies:
@@ -6262,12 +6279,12 @@ snapshots:
transitivePeerDependencies:
- magicast
'@nuxt/ui-pro@3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)':
'@nuxt/ui-pro@3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)':
dependencies:
'@ai-sdk/vue': 1.2.12(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)
'@ai-sdk/vue': 1.2.12(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)
'@nuxt/kit': 3.17.2(magicast@0.3.5)
'@nuxt/schema': 3.17.2
'@nuxt/ui': 3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)
'@nuxt/ui': 3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)
'@standard-schema/spec': 1.0.0
'@vueuse/core': 13.1.0(vue@3.5.13(typescript@5.7.3))
consola: 3.4.2
@@ -6285,7 +6302,7 @@ snapshots:
unplugin-auto-import: 19.1.2(@nuxt/kit@3.17.2(magicast@0.3.5))(@vueuse/core@13.1.0(vue@3.5.13(typescript@5.7.3)))
unplugin-vue-components: 28.5.0(@babel/parser@7.27.0)(@nuxt/kit@3.17.2(magicast@0.3.5))(vue@3.5.13(typescript@5.7.3))
optionalDependencies:
zod: 3.24.2
zod: 4.0.10
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -6326,7 +6343,7 @@ snapshots:
- vue
- vue-router
'@nuxt/ui@3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@3.24.2)':
'@nuxt/ui@3.1.1(@babel/parser@7.27.0)(axios@1.7.9)(db0@0.3.1(better-sqlite3@11.8.1))(embla-carousel@8.6.0)(ioredis@5.6.0)(magicast@0.3.5)(typescript@5.7.3)(vite@6.2.3(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))(zod@4.0.10)':
dependencies:
'@iconify/vue': 4.3.0(vue@3.5.13(typescript@5.7.3))
'@internationalized/date': 3.8.0
@@ -6373,7 +6390,7 @@ snapshots:
vue-component-type-helpers: 2.2.10
optionalDependencies:
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3))
zod: 3.24.2
zod: 4.0.10
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -7497,27 +7514,30 @@ snapshots:
basic-ftp@5.0.5: {}
better-auth@1.1.16:
better-auth@1.3.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@better-auth/utils': 0.2.3
'@better-fetch/fetch': 1.1.12
'@better-auth/utils': 0.2.5
'@better-fetch/fetch': 1.1.18
'@noble/ciphers': 0.6.0
'@noble/hashes': 1.7.1
'@noble/hashes': 1.8.0
'@simplewebauthn/browser': 13.1.0
'@simplewebauthn/server': 13.1.1
better-call: 0.3.3
better-call: 1.0.12
defu: 6.1.4
jose: 5.10.0
kysely: 0.27.6
kysely: 0.28.3
nanostores: 0.11.4
zod: 3.24.2
zod: 4.0.10
optionalDependencies:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
better-call@0.3.3:
better-call@1.0.12:
dependencies:
'@better-fetch/fetch': 1.1.12
'@better-fetch/fetch': 1.1.18
rou3: 0.5.1
set-cookie-parser: 2.7.1
uncrypto: 0.1.3
zod: 3.24.2
better-sqlite3@11.8.1:
dependencies:
@@ -8975,7 +8995,7 @@ snapshots:
kolorist@1.8.0: {}
kysely@0.27.6: {}
kysely@0.28.3: {}
launch-editor@2.10.0:
dependencies:
@@ -10223,6 +10243,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
set-cookie-parser@2.7.1: {}
setprototypeof@1.2.0: {}
shebang-command@2.0.0:
@@ -10534,6 +10556,8 @@ snapshots:
typescript@5.7.3: {}
typescript@5.8.3: {}
ufo@1.5.4: {}
ufo@1.6.1: {}
@@ -11038,8 +11062,8 @@ snapshots:
compress-commons: 6.0.2
readable-stream: 4.7.0
zod-to-json-schema@3.24.5(zod@3.24.2):
zod-to-json-schema@3.24.5(zod@4.0.10):
dependencies:
zod: 3.24.2
zod: 4.0.10
zod@3.24.2: {}
zod@4.0.10: {}

View File

@@ -6,6 +6,7 @@ import { resend } from './mail'
export const auth = betterAuth({
database: new Database('./sqlite.db'),
emailAndPassword: { enabled: true, autoSignIn: false },
trustedOrigins: ["http://localhost:3001"],
plugins: [
jwt({
jwt: {