+
+
+
Examples
diff --git a/docs/components/techstack-icons.tsx b/docs/components/techstack-icons.tsx
index c91ad5b4..0876f065 100644
--- a/docs/components/techstack-icons.tsx
+++ b/docs/components/techstack-icons.tsx
@@ -1,36 +1,37 @@
-
-import {Icons} from './icons'
+import { Icons } from "./icons";
type TechStackIconType = {
- [key: string]: {
- name: string;
- icon: any;
- };
+ [key: string]: {
+ name: string;
+ icon: any;
};
+};
export const techStackIcons: TechStackIconType = {
- nextJs: {
- name: "Nextjs",
- icon:
,
- },
- nuxt: {
- name: "Nuxt",
- icon:
,
- },
- svelteKit: {
- name: "Svelte Kit",
- icon:
,
- },
- solidStart: {
- name: "Solid Start",
- icon:
,
- },
- react: {
- name: "Reaact",
- icon:
,
- },
- hono: {
- name: "Hono",
- icon:
,
- },
-
-
- };
\ No newline at end of file
+ nextJs: {
+ name: "Nextjs",
+ icon:
,
+ },
+ nuxt: {
+ name: "Nuxt",
+ icon:
,
+ },
+ svelteKit: {
+ name: "Svelte Kit",
+ icon:
,
+ },
+ solidStart: {
+ name: "Solid Start",
+ icon:
,
+ },
+ react: {
+ name: "Reaact",
+ icon:
,
+ },
+ hono: {
+ name: "Hono",
+ icon:
,
+ },
+ astro: {
+ name: "Astro",
+ icon:
,
+ },
+};
diff --git a/docs/content/docs/installation.mdx b/docs/content/docs/installation.mdx
index 495ef54c..54e1512f 100644
--- a/docs/content/docs/installation.mdx
+++ b/docs/content/docs/installation.mdx
@@ -150,7 +150,7 @@ Create a new file or route in your framework's designated catch-all route handle
Better auth supports any backend framework with standard Request and Response objects and offers helper functions for popular frameworks.
-
+
```ts title="/app/api/[...auth]/route.ts"
import { auth } from "@/lib/auth"; // path to your auth file
@@ -222,17 +222,16 @@ Better auth supports any backend framework with standard Request and Response ob
```ts title="/pages/api/auth/[...all].ts"
import type { APIRoute } from "astro";
- import { auth } from "../../../auth";
+ import { auth } from "@/auth"; // path to your auth file
export const GET: APIRoute = async (ctx) => {
return auth.handler(ctx.request);
};
- export const ALL: APIRoute = async (ctx) => {
+ export const POST: APIRoute = async (ctx) => {
return auth.handler(ctx.request);
};
```
- This also works for any other node server framework like express, fastify, hapi, etc.
diff --git a/examples/astro-example/package.json b/examples/astro-example/package.json
index d67f5289..c6057eaa 100644
--- a/examples/astro-example/package.json
+++ b/examples/astro-example/package.json
@@ -4,7 +4,8 @@
"private": true,
"version": "0.0.1",
"scripts": {
- "dev": "astro dev --port 3000",
+ "dev": "pnpm migrate:auth && astro dev --port 3000",
+ "migrate:auth": "pnpm better-auth migrate",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
diff --git a/examples/astro-example/src/auth.ts b/examples/astro-example/src/auth.ts
index 0537e000..1609f9ce 100644
--- a/examples/astro-example/src/auth.ts
+++ b/examples/astro-example/src/auth.ts
@@ -29,12 +29,13 @@ export const auth = betterAuth({
twoFactor({
otpOptions: {
async sendOTP(user, otp) {
- await resend.emails.send({
- from: "Acme ",
- to: user.email,
- subject: "Your OTP",
- html: `Your OTP is ${otp}`,
- });
+ console.log(`Sending OTP to ${user.email}: ${otp}`);
+ // await resend.emails.send({
+ // from: "Acme ",
+ // to: user.email,
+ // subject: "Your OTP",
+ // html: `Your OTP is ${otp}`,
+ // });
},
},
}),
diff --git a/examples/astro-example/src/components/two-factor.tsx b/examples/astro-example/src/components/two-factor.tsx
index 5eec4daa..c8b594c2 100644
--- a/examples/astro-example/src/components/two-factor.tsx
+++ b/examples/astro-example/src/components/two-factor.tsx
@@ -95,13 +95,15 @@ export function TwoFactorEmail() {
createEffect(() => {
if (otp().length === 6) {
- twoFactorActions.verifyTotp({
+ twoFactorActions.verifyOtp({
code: otp(),
- callbackURL: "/dashboard",
fetchOptions: {
onError(context) {
alert(context.error.message);
},
+ onSuccess(context) {
+ window.location.href = "/dashboard";
+ },
},
});
}
diff --git a/examples/astro-example/src/components/user-card.tsx b/examples/astro-example/src/components/user-card.tsx
index ce120751..da33ae04 100644
--- a/examples/astro-example/src/components/user-card.tsx
+++ b/examples/astro-example/src/components/user-card.tsx
@@ -135,6 +135,7 @@ export function UserCard(props: {
class="gap-2"
onClick={async () => {
await signOut();
+ window.location.reload();
}}
>
{
+ const opts = {
+ period: new TimeSpan(options?.period || 5, "m"),
+ };
+ const totp = new TOTPController({
+ digits: 6,
+ period: opts.period,
+ });
/**
* Generate OTP and send it to the user.
*/
@@ -46,24 +55,9 @@ export const otp2fa = (options?: OTPOptions) => {
message: "otp isn't configured",
});
}
- const randomNumber = generateRandomInteger(100000);
- const otp = await generateHOTP(
- Buffer.from(ctx.context.secret),
- randomNumber,
- );
- await options.sendOTP(ctx.context.session.user as UserWithTwoFactor, otp);
- const cookie = ctx.context.createAuthCookie(
- OTP_RANDOM_NUMBER_COOKIE_NAME,
- {
- maxAge: options.period,
- },
- );
- await ctx.setSignedCookie(
- cookie.name,
- randomNumber.toString(),
- ctx.context.secret,
- cookie.options,
- );
+ const user = ctx.context.session.user as UserWithTwoFactor;
+ const code = await totp.generate(Buffer.from(user.twoFactorSecret));
+ await options.sendOTP(user, code);
return ctx.json({ status: true, OTP: undefined });
},
);
@@ -84,30 +78,8 @@ export const otp2fa = (options?: OTPOptions) => {
message: "two factor isn't enabled",
});
}
- const cookie = ctx.context.createAuthCookie(
- OTP_RANDOM_NUMBER_COOKIE_NAME,
- );
- const randomNumber = await ctx.getSignedCookie(
- cookie.name,
- ctx.context.secret,
- );
- if (!randomNumber) {
- throw new APIError("UNAUTHORIZED", {
- message: "OTP is expired",
- });
- }
- const toCheckOtp = await generateHOTP(
- Buffer.from(ctx.context.secret),
- parseInt(randomNumber),
- );
+ const toCheckOtp = await totp.generate(Buffer.from(user.twoFactorSecret));
if (toCheckOtp === ctx.body.code) {
- ctx.setCookie(cookie.name, "", {
- path: "/",
- sameSite: "lax",
- httpOnly: true,
- secure: false,
- maxAge: 0,
- });
return ctx.context.valid();
} else {
return ctx.context.invalid();
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f0ba1148..5286da7c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -397,7 +397,7 @@ importers:
version: link:../../packages/better-auth
nuxt:
specifier: ^3.13.0
- version: 3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.5)(typescript@5.6.1-rc)(vite@5.4.7)
+ version: 3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.5)(typescript@5.6.1-rc)(vite@5.4.8)
vue:
specifier: latest
version: 3.5.7(typescript@5.6.1-rc)
@@ -783,6 +783,39 @@ importers:
specifier: ^0.7.39
version: 0.7.39
+ examples/svelte-example:
+ devDependencies:
+ '@sveltejs/adapter-auto':
+ specifier: ^3.0.0
+ version: 3.2.5(@sveltejs/kit@2.5.28)
+ '@sveltejs/kit':
+ specifier: ^2.0.0
+ version: 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.8)
+ '@sveltejs/vite-plugin-svelte':
+ specifier: ^3.0.0
+ version: 3.1.2(svelte@4.2.19)(vite@5.4.8)
+ '@tailwindcss/typography':
+ specifier: ^0.5.14
+ version: 0.5.15(tailwindcss@3.4.13)
+ autoprefixer:
+ specifier: ^10.4.20
+ version: 10.4.20(postcss@8.4.47)
+ svelte:
+ specifier: ^4.2.7
+ version: 4.2.19
+ svelte-check:
+ specifier: ^4.0.0
+ version: 4.0.2(svelte@4.2.19)(typescript@5.6.2)
+ tailwindcss:
+ specifier: ^3.4.9
+ version: 3.4.13
+ typescript:
+ specifier: ^5.0.0
+ version: 5.6.2
+ vite:
+ specifier: ^5.0.3
+ version: 5.4.8(@types/node@20.16.5)
+
packages/better-auth:
dependencies:
'@babel/preset-react':
@@ -4036,7 +4069,7 @@ packages:
resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
dev: false
- /@nuxt/devtools-kit@1.5.0(magicast@0.3.5)(vite@5.4.7):
+ /@nuxt/devtools-kit@1.5.0(magicast@0.3.5)(vite@5.4.8):
resolution: {integrity: sha512-Q8sOquz9CoUMTABo6Bq+nkbNMZi+WVN4xpz1USZPZazcJhSj9imSmQRSycY2fBYqkfB1AKBRhm2UV2ujCQfw0Q==}
peerDependencies:
vite: '*'
@@ -4044,7 +4077,7 @@ packages:
'@nuxt/kit': 3.13.2(magicast@0.3.5)
'@nuxt/schema': 3.13.2
execa: 7.2.0
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
transitivePeerDependencies:
- magicast
- rollup
@@ -4068,17 +4101,17 @@ packages:
semver: 7.6.3
dev: false
- /@nuxt/devtools@1.5.0(vite@5.4.7)(vue@3.5.7):
+ /@nuxt/devtools@1.5.0(vite@5.4.8)(vue@3.5.7):
resolution: {integrity: sha512-82LEPZUVU0osPRypSTq/bPXfl1Oo/+R2UaXx/pq9WkE8Vj1V/n0v7a40EVHJsusZ+e/JGjed8+8oYDwF8nNIQw==}
hasBin: true
peerDependencies:
vite: '*'
dependencies:
'@antfu/utils': 0.7.10
- '@nuxt/devtools-kit': 1.5.0(magicast@0.3.5)(vite@5.4.7)
+ '@nuxt/devtools-kit': 1.5.0(magicast@0.3.5)(vite@5.4.8)
'@nuxt/devtools-wizard': 1.5.0
'@nuxt/kit': 3.13.2(magicast@0.3.5)
- '@vue/devtools-core': 7.4.4(vite@5.4.7)(vue@3.5.7)
+ '@vue/devtools-core': 7.4.4(vite@5.4.8)(vue@3.5.7)
'@vue/devtools-kit': 7.4.4
birpc: 0.2.17
consola: 3.2.3
@@ -4107,9 +4140,9 @@ packages:
sirv: 2.0.4
tinyglobby: 0.2.6
unimport: 3.12.0(rollup@4.22.2)
- vite: 5.4.7(@types/node@20.16.5)
- vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2)(vite@5.4.7)
- vite-plugin-vue-inspector: 5.2.0(vite@5.4.7)
+ vite: 5.4.8(@types/node@20.16.5)
+ vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2)(vite@5.4.8)
+ vite-plugin-vue-inspector: 5.2.0(vite@5.4.8)
which: 3.0.1
ws: 8.18.0
transitivePeerDependencies:
@@ -4211,8 +4244,8 @@ packages:
dependencies:
'@nuxt/kit': 3.13.2(magicast@0.3.5)
'@rollup/plugin-replace': 5.0.7(rollup@4.22.2)
- '@vitejs/plugin-vue': 5.1.4(vite@5.4.7)(vue@3.5.7)
- '@vitejs/plugin-vue-jsx': 4.0.1(vite@5.4.7)(vue@3.5.7)
+ '@vitejs/plugin-vue': 5.1.4(vite@5.4.8)(vue@3.5.7)
+ '@vitejs/plugin-vue-jsx': 4.0.1(vite@5.4.8)(vue@3.5.7)
autoprefixer: 10.4.20(postcss@8.4.47)
clear: 0.1.0
consola: 3.2.3
@@ -4238,9 +4271,9 @@ packages:
ufo: 1.5.4
unenv: 1.10.0
unplugin: 1.14.1
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
vite-node: 2.1.1(@types/node@20.16.5)
- vite-plugin-checker: 0.8.0(@biomejs/biome@1.7.3)(typescript@5.6.1-rc)(vite@5.4.7)
+ vite-plugin-checker: 0.8.0(@biomejs/biome@1.7.3)(typescript@5.6.1-rc)(vite@5.4.8)
vue: 3.5.7(typescript@5.6.1-rc)
vue-bundle-renderer: 2.1.0
transitivePeerDependencies:
@@ -7896,14 +7929,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-android-arm-eabi@4.22.4:
- resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-android-arm64@4.22.2:
resolution: {integrity: sha512-I+B1v0a4iqdS9DvYt1RJZ3W+Oh9EVWjbY6gp79aAYipIbxSLEoQtFQlZEnUuwhDXCqMxJ3hluxKAdPD+GiluFQ==}
cpu: [arm64]
@@ -7911,14 +7936,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-android-arm64@4.22.4:
- resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-darwin-arm64@4.22.2:
resolution: {integrity: sha512-BTHO7rR+LC67OP7I8N8GvdvnQqzFujJYWo7qCQ8fGdQcb8Gn6EQY+K1P+daQLnDCuWKbZ+gHAQZuKiQkXkqIYg==}
cpu: [arm64]
@@ -7926,14 +7943,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-darwin-arm64@4.22.4:
- resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-darwin-x64@4.22.2:
resolution: {integrity: sha512-1esGwDNFe2lov4I6GsEeYaAMHwkqk0IbuGH7gXGdBmd/EP9QddJJvTtTF/jv+7R8ZTYPqwcdLpMTxK8ytP6k6Q==}
cpu: [x64]
@@ -7941,14 +7950,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-darwin-x64@4.22.4:
- resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-arm-gnueabihf@4.22.2:
resolution: {integrity: sha512-GBHuY07x96OTEM3OQLNaUSUwrOhdMea/LDmlFHi/HMonrgF6jcFrrFFwJhhe84XtA1oK/Qh4yFS+VMREf6dobg==}
cpu: [arm]
@@ -7956,14 +7957,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.22.4:
- resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-arm-musleabihf@4.22.2:
resolution: {integrity: sha512-Dbfa9Sc1G1lWxop0gNguXOfGhaXQWAGhZUcqA0Vs6CnJq8JW/YOw/KvyGtQFmz4yDr0H4v9X248SM7bizYj4yQ==}
cpu: [arm]
@@ -7971,14 +7964,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm-musleabihf@4.22.4:
- resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-arm64-gnu@4.22.2:
resolution: {integrity: sha512-Z1YpgBvFYhZIyBW5BoopwSg+t7yqEhs5HCei4JbsaXnhz/eZehT18DaXl957aaE9QK7TRGFryCAtStZywcQe1A==}
cpu: [arm64]
@@ -7986,14 +7971,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.22.4:
- resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-arm64-musl@4.22.2:
resolution: {integrity: sha512-66Zszr7i/JaQ0u/lefcfaAw16wh3oT72vSqubIMQqWzOg85bGCPhoeykG/cC5uvMzH80DQa2L539IqKht6twVA==}
cpu: [arm64]
@@ -8001,14 +7978,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm64-musl@4.22.4:
- resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-powerpc64le-gnu@4.22.2:
resolution: {integrity: sha512-HpJCMnlMTfEhwo19bajvdraQMcAq3FX08QDx3OfQgb+414xZhKNf3jNvLFYKbbDSGBBrQh5yNwWZrdK0g0pokg==}
cpu: [ppc64]
@@ -8016,14 +7985,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-powerpc64le-gnu@4.22.4:
- resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-riscv64-gnu@4.22.2:
resolution: {integrity: sha512-/egzQzbOSRef2vYCINKITGrlwkzP7uXRnL+xU2j75kDVp3iPdcF0TIlfwTRF8woBZllhk3QaxNOEj2Ogh3t9hg==}
cpu: [riscv64]
@@ -8031,14 +7992,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-riscv64-gnu@4.22.4:
- resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-s390x-gnu@4.22.2:
resolution: {integrity: sha512-qgYbOEbrPfEkH/OnUJd1/q4s89FvNJQIUldx8X2F/UM5sEbtkqZpf2s0yly2jSCKr1zUUOY1hnTP2J1WOzMAdA==}
cpu: [s390x]
@@ -8046,14 +7999,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-s390x-gnu@4.22.4:
- resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-x64-gnu@4.22.2:
resolution: {integrity: sha512-a0lkvNhFLhf+w7A95XeBqGQaG0KfS3hPFJnz1uraSdUe/XImkp/Psq0Ca0/UdD5IEAGoENVmnYrzSC9Y2a2uKQ==}
cpu: [x64]
@@ -8061,14 +8006,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-x64-gnu@4.22.4:
- resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-linux-x64-musl@4.22.2:
resolution: {integrity: sha512-sSWBVZgzwtsuG9Dxi9kjYOUu/wKW+jrbzj4Cclabqnfkot8Z3VEHcIgyenA3lLn/Fu11uDviWjhctulkhEO60g==}
cpu: [x64]
@@ -8076,14 +8013,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-linux-x64-musl@4.22.4:
- resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-win32-arm64-msvc@4.22.2:
resolution: {integrity: sha512-t/YgCbZ638R/r7IKb9yCM6nAek1RUvyNdfU0SHMDLOf6GFe/VG1wdiUAsxTWHKqjyzkRGg897ZfCpdo1bsCSsA==}
cpu: [arm64]
@@ -8091,14 +8020,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.22.4:
- resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-win32-ia32-msvc@4.22.2:
resolution: {integrity: sha512-kTmX5uGs3WYOA+gYDgI6ITkZng9SP71FEMoHNkn+cnmb9Zuyyay8pf0oO5twtTwSjNGy1jlaWooTIr+Dw4tIbw==}
cpu: [ia32]
@@ -8106,14 +8027,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.22.4:
- resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
/@rollup/rollup-win32-x64-msvc@4.22.2:
resolution: {integrity: sha512-Yy8So+SoRz8I3NS4Bjh91BICPOSVgdompTIPYTByUqU66AXSIOgmW3Lv1ke3NORPqxdF+RdrZET+8vYai6f4aA==}
cpu: [x64]
@@ -8121,14 +8034,6 @@ packages:
requiresBuild: true
optional: true
- /@rollup/rollup-win32-x64-msvc@4.22.4:
- resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: false
- optional: true
-
/@rtsao/scc@1.1.0:
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
dev: true
@@ -8428,7 +8333,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.0.0
dependencies:
- '@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.7)
+ '@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.8)
import-meta-resolve: 4.1.0
dev: true
@@ -8459,6 +8364,33 @@ packages:
vite: 5.4.7(@types/node@20.16.5)
dev: true
+ /@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.8):
+ resolution: {integrity: sha512-/O7pvFGBsQPcFa9UrW8eUC5uHTOXLsUp3SN0dY6YmRAL9nfPSrJsSJk//j5vMpinSshzUjteAFcfQTU+04Ka1w==}
+ engines: {node: '>=18.13'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.3
+ dependencies:
+ '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8)
+ '@types/cookie': 0.6.0
+ cookie: 0.6.0
+ devalue: 5.0.0
+ esm-env: 1.0.0
+ import-meta-resolve: 4.1.0
+ kleur: 4.1.5
+ magic-string: 0.30.11
+ mrmime: 2.0.0
+ sade: 1.8.1
+ set-cookie-parser: 2.7.0
+ sirv: 2.0.4
+ svelte: 4.2.19
+ tiny-glob: 0.2.9
+ vite: 5.4.8(@types/node@20.16.5)
+ dev: true
+
/@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.7):
resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
engines: {node: ^18.0.0 || >=20}
@@ -8475,6 +8407,22 @@ packages:
- supports-color
dev: true
+ /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.8):
+ resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==}
+ engines: {node: ^18.0.0 || >=20}
+ peerDependencies:
+ '@sveltejs/vite-plugin-svelte': ^3.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
+ dependencies:
+ '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8)
+ debug: 4.3.7
+ svelte: 4.2.19
+ vite: 5.4.8(@types/node@20.16.5)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.7):
resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
engines: {node: ^18.0.0 || >=20}
@@ -8495,6 +8443,26 @@ packages:
- supports-color
dev: true
+ /@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8):
+ resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==}
+ engines: {node: ^18.0.0 || >=20}
+ peerDependencies:
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ vite: ^5.0.0
+ dependencies:
+ '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2)(svelte@4.2.19)(vite@5.4.8)
+ debug: 4.3.7
+ deepmerge: 4.3.1
+ kleur: 4.1.5
+ magic-string: 0.30.11
+ svelte: 4.2.19
+ svelte-hmr: 0.16.0(svelte@4.2.19)
+ vite: 5.4.8(@types/node@20.16.5)
+ vitefu: 0.2.5(vite@5.4.8)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@swc/counter@0.1.3:
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
@@ -8535,6 +8503,18 @@ packages:
tailwindcss: 3.4.12
dev: false
+ /@tailwindcss/typography@0.5.15(tailwindcss@3.4.13):
+ resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
+ dependencies:
+ lodash.castarray: 4.4.0
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ postcss-selector-parser: 6.0.10
+ tailwindcss: 3.4.13
+ dev: true
+
/@tanstack/query-core@5.56.2:
resolution: {integrity: sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==}
dev: false
@@ -9542,7 +9522,7 @@ packages:
- supports-color
dev: true
- /@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.7)(vue@3.5.7):
+ /@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8)(vue@3.5.7):
resolution: {integrity: sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
@@ -9552,20 +9532,20 @@ packages:
'@babel/core': 7.25.2
'@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
vue: 3.5.7(typescript@5.6.1-rc)
transitivePeerDependencies:
- supports-color
dev: false
- /@vitejs/plugin-vue@5.1.4(vite@5.4.7)(vue@3.5.7):
+ /@vitejs/plugin-vue@5.1.4(vite@5.4.8)(vue@3.5.7):
resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vue: ^3.2.25
dependencies:
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
vue: 3.5.7(typescript@5.6.1-rc)
dev: false
@@ -9814,7 +9794,7 @@ packages:
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
dev: false
- /@vue/devtools-core@7.4.4(vite@5.4.7)(vue@3.5.7):
+ /@vue/devtools-core@7.4.4(vite@5.4.8)(vue@3.5.7):
resolution: {integrity: sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==}
peerDependencies:
vue: ^3.0.0
@@ -9824,7 +9804,7 @@ packages:
mitt: 3.0.1
nanoid: 3.3.7
pathe: 1.1.2
- vite-hot-client: 0.2.3(vite@5.4.7)
+ vite-hot-client: 0.2.3(vite@5.4.8)
vue: 3.5.7(typescript@5.6.1-rc)
transitivePeerDependencies:
- vite
@@ -16445,7 +16425,6 @@ packages:
/lodash.castarray@4.4.0:
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
- dev: false
/lodash.defaults@4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
@@ -16461,7 +16440,6 @@ packages:
/lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
- dev: false
/lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
@@ -18220,7 +18198,7 @@ packages:
fsevents: 2.3.3
dev: false
- /nuxt@3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.5)(typescript@5.6.1-rc)(vite@5.4.7):
+ /nuxt@3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.5)(typescript@5.6.1-rc)(vite@5.4.8):
resolution: {integrity: sha512-Bjc2qRsipfBhjXsBEJCN+EUAukhdgFv/KoIR5HFB2hZOYRSqXBod3oWQs78k3ja1nlIhAEdBG533898KJxUtJw==}
engines: {node: ^14.18.0 || >=16.10.0}
hasBin: true
@@ -18234,7 +18212,7 @@ packages:
optional: true
dependencies:
'@nuxt/devalue': 2.0.2
- '@nuxt/devtools': 1.5.0(vite@5.4.7)(vue@3.5.7)
+ '@nuxt/devtools': 1.5.0(vite@5.4.8)(vue@3.5.7)
'@nuxt/kit': 3.13.2(magicast@0.3.5)
'@nuxt/schema': 3.13.2
'@nuxt/telemetry': 2.6.0
@@ -19363,7 +19341,6 @@ packages:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- dev: false
/postcss-selector-parser@6.1.2:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
@@ -20653,32 +20630,6 @@ packages:
'@rollup/rollup-win32-x64-msvc': 4.22.2
fsevents: 2.3.3
- /rollup@4.22.4:
- resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
- dependencies:
- '@types/estree': 1.0.5
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.22.4
- '@rollup/rollup-android-arm64': 4.22.4
- '@rollup/rollup-darwin-arm64': 4.22.4
- '@rollup/rollup-darwin-x64': 4.22.4
- '@rollup/rollup-linux-arm-gnueabihf': 4.22.4
- '@rollup/rollup-linux-arm-musleabihf': 4.22.4
- '@rollup/rollup-linux-arm64-gnu': 4.22.4
- '@rollup/rollup-linux-arm64-musl': 4.22.4
- '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4
- '@rollup/rollup-linux-riscv64-gnu': 4.22.4
- '@rollup/rollup-linux-s390x-gnu': 4.22.4
- '@rollup/rollup-linux-x64-gnu': 4.22.4
- '@rollup/rollup-linux-x64-musl': 4.22.4
- '@rollup/rollup-win32-arm64-msvc': 4.22.4
- '@rollup/rollup-win32-ia32-msvc': 4.22.4
- '@rollup/rollup-win32-x64-msvc': 4.22.4
- fsevents: 2.3.3
- dev: false
-
/rou3@0.5.1:
resolution: {integrity: sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==}
dev: false
@@ -21736,6 +21687,25 @@ packages:
- sugarss
dev: true
+ /svelte-check@4.0.2(svelte@4.2.19)(typescript@5.6.2):
+ resolution: {integrity: sha512-w2yqcG9ELJe2RJCnAvB7v0OgkHhL3czzz/tVoxGFfO6y4mOrF6QHCDhXijeXzsU7LVKEwWS3Qd9tza4JBuDxqA==}
+ engines: {node: '>= 18.0.0'}
+ hasBin: true
+ peerDependencies:
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ typescript: '>=5.0.0'
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ chokidar: 3.6.0
+ fdir: 6.3.0(picomatch@4.0.2)
+ picocolors: 1.1.0
+ sade: 1.8.1
+ svelte: 4.2.19
+ typescript: 5.6.2
+ transitivePeerDependencies:
+ - picomatch
+ dev: true
+
/svelte-hmr@0.16.0(svelte@4.2.19):
resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
@@ -21926,7 +21896,6 @@ packages:
sucrase: 3.35.0
transitivePeerDependencies:
- ts-node
- dev: false
/tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
@@ -23207,12 +23176,12 @@ packages:
- xml2js
dev: false
- /vite-hot-client@0.2.3(vite@5.4.7):
+ /vite-hot-client@0.2.3(vite@5.4.8):
resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==}
peerDependencies:
vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0
dependencies:
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
dev: false
/vite-node@1.6.0(@types/node@20.16.5):
@@ -23224,7 +23193,7 @@ packages:
debug: 4.3.7
pathe: 1.1.2
picocolors: 1.1.0
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
transitivePeerDependencies:
- '@types/node'
- less
@@ -23245,7 +23214,7 @@ packages:
cac: 6.7.14
debug: 4.3.7
pathe: 1.1.2
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
transitivePeerDependencies:
- '@types/node'
- less
@@ -23258,7 +23227,7 @@ packages:
- terser
dev: false
- /vite-plugin-checker@0.8.0(@biomejs/biome@1.7.3)(typescript@5.6.1-rc)(vite@5.4.7):
+ /vite-plugin-checker@0.8.0(@biomejs/biome@1.7.3)(typescript@5.6.1-rc)(vite@5.4.8):
resolution: {integrity: sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==}
engines: {node: '>=14.16'}
peerDependencies:
@@ -23304,7 +23273,7 @@ packages:
strip-ansi: 6.0.1
tiny-invariant: 1.3.3
typescript: 5.6.1-rc
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
vscode-languageclient: 7.0.0
vscode-languageserver: 7.0.0
vscode-languageserver-textdocument: 1.0.12
@@ -23335,7 +23304,7 @@ packages:
- supports-color
dev: false
- /vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2)(vite@5.4.7):
+ /vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2)(vite@5.4.8):
resolution: {integrity: sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==}
engines: {node: '>=14'}
peerDependencies:
@@ -23355,7 +23324,7 @@ packages:
perfect-debounce: 1.0.0
picocolors: 1.1.0
sirv: 2.0.4
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
transitivePeerDependencies:
- rollup
- supports-color
@@ -23405,7 +23374,7 @@ packages:
- supports-color
dev: false
- /vite-plugin-vue-inspector@5.2.0(vite@5.4.7):
+ /vite-plugin-vue-inspector@5.2.0(vite@5.4.8):
resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==}
peerDependencies:
vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0
@@ -23419,7 +23388,7 @@ packages:
'@vue/compiler-dom': 3.5.7
kolorist: 1.8.0
magic-string: 0.30.11
- vite: 5.4.7(@types/node@20.16.5)
+ vite: 5.4.8(@types/node@20.16.5)
transitivePeerDependencies:
- supports-color
dev: false
@@ -23496,10 +23465,9 @@ packages:
'@types/node': 20.16.5
esbuild: 0.21.5
postcss: 8.4.47
- rollup: 4.22.4
+ rollup: 4.22.2
optionalDependencies:
fsevents: 2.3.3
- dev: false
/vitefu@0.2.5(vite@5.4.7):
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
@@ -23521,7 +23489,6 @@ packages:
optional: true
dependencies:
vite: 5.4.8(@types/node@20.16.5)
- dev: false
/vitefu@1.0.2(vite@5.4.7):
resolution: {integrity: sha512-0/iAvbXyM3RiPPJ4lyD4w6Mjgtf4ejTK6TPvTNG3H32PLwuT0N/ZjJLiXug7ETE/LWtTeHw9WRv7uX/tIKYyKg==}