mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-10 04:19:32 +00:00
fix: remove db falt config (#57)
* remove db object config * change docs
This commit is contained in:
@@ -6,7 +6,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hono/node-server": "^1.12.2",
|
"@hono/node-server": "^1.12.2",
|
||||||
"better-auth": "^0.0.4",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"hono": "^4.5.9",
|
"hono": "^4.5.9",
|
||||||
"tsx": "^4.19.0"
|
"tsx": "^4.19.0"
|
||||||
|
|||||||
@@ -1,20 +1,17 @@
|
|||||||
|
import Database from "better-sqlite3";
|
||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
import { organization, twoFactor, username } from "better-auth/plugins";
|
import { organization, twoFactor, username } from "better-auth/plugins";
|
||||||
import { github } from "better-auth/social-providers";
|
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
baseURL: "http://localhost:3000",
|
baseURL: "http://localhost:3000",
|
||||||
basePath: "/auth",
|
basePath: "/auth",
|
||||||
database: {
|
database: new Database("./db.sqlite"),
|
||||||
provider: "sqlite",
|
socialProviders: {
|
||||||
url: "./db.sqlite",
|
github: {
|
||||||
|
clientId: process.env.GITHUB_CLIENT_ID || "",
|
||||||
|
clientSecret: process.env.GITHUB_CLIENT_SECRET || "",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
socialProviders: [
|
|
||||||
github({
|
|
||||||
clientId: process.env.GITHUB_CLIENT_ID as string,
|
|
||||||
clientSecret: process.env.GITHUB_CLIENT_SECRET as string,
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
plugins: [
|
plugins: [
|
||||||
twoFactor({
|
twoFactor({
|
||||||
issuer: "BetterAuth",
|
issuer: "BetterAuth",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noble/ciphers": "^0.6.0",
|
"@noble/ciphers": "^0.6.0",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
"better-sqlite3": "^11.3.0",
|
"better-sqlite3": "^11.3.0",
|
||||||
"oslo": "^1.2.1",
|
"oslo": "^1.2.1",
|
||||||
"pg": "^8.13.0"
|
"pg": "^8.13.0"
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
"@types/express": "^4.17.21"
|
"@types/express": "^4.17.21"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "^5.0.0"
|
"typescript": "^5.0.0",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ description: Apple
|
|||||||
import { apple } from "better-auth/social-providers"
|
import { apple } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
apple({ // [!code highlight]
|
apple({ // [!code highlight]
|
||||||
clientId: process.env.APPLE_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.APPLE_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Discord Provider
|
|||||||
import { discord } from "better-auth/social-providers"
|
import { discord } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
discord: { // [!code highlight]
|
discord: { // [!code highlight]
|
||||||
clientId: process.env.DISCORD_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.DISCORD_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ To enable email and password authentication, you need to set the `emailAndPasswo
|
|||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
emailAndPassword: { // [!code highlight]
|
emailAndPassword: { // [!code highlight]
|
||||||
enabled: true // [!code highlight]
|
enabled: true // [!code highlight]
|
||||||
} // [!code highlight]
|
} // [!code highlight]
|
||||||
@@ -116,10 +112,6 @@ to allow users to reset a password first you need to provider `sendResetPassword
|
|||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
emailAndPassword: { // [!code highlight]
|
emailAndPassword: { // [!code highlight]
|
||||||
enabled: true, // [!code highlight]
|
enabled: true, // [!code highlight]
|
||||||
async sendResetPassword(url, user) { // [!code highlight]
|
async sendResetPassword(url, user) { // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Facebook Provider
|
|||||||
import { facebook } from "better-auth/social-providers"
|
import { facebook } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
facebook: { // [!code highlight]
|
facebook: { // [!code highlight]
|
||||||
clientId: process.env.FACEBOOK_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.FACEBOOK_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Github Provider
|
|||||||
import { github } from "better-auth/social-providers"
|
import { github } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
github: { // [!code highlight]
|
github: { // [!code highlight]
|
||||||
clientId: process.env.GITHUB_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.GITHUB_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Google Provider
|
|||||||
import { google } from "better-auth/social-providers"
|
import { google } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
google: { // [!code highlight]
|
google: { // [!code highlight]
|
||||||
clientId: process.env.GOOGLE_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.GOOGLE_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ description: Spotify Provider
|
|||||||
import { spotify } from "better-auth/social-providers"
|
import { spotify } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
spotify: { // [!code highlight]
|
spotify: { // [!code highlight]
|
||||||
clientId: process.env.SPOTIFY_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.SPOTIFY_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Twitch Provider
|
|||||||
import { twitch } from "better-auth/social-providers"
|
import { twitch } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: { // [!code highlight]
|
socialProviders: { // [!code highlight]
|
||||||
twitch: { // [!code highlight]
|
twitch: { // [!code highlight]
|
||||||
clientId: process.env.TWITCH_CLIENT_ID as string, // [!code highlight]
|
clientId: process.env.TWITCH_CLIENT_ID as string, // [!code highlight]
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ description: Twitter Provider
|
|||||||
import { twitter } from "better-auth/social-providers"
|
import { twitter } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: {// [!code highlight]
|
socialProviders: {// [!code highlight]
|
||||||
twitter: { // [!code highlight]
|
twitter: { // [!code highlight]
|
||||||
clientId: process.env.TWITTER_CLIENT_ID, // [!code highlight]
|
clientId: process.env.TWITTER_CLIENT_ID, // [!code highlight]
|
||||||
|
|||||||
@@ -15,10 +15,6 @@ Better auth uses a library called [better-call](https://github.com/bekacru/bette
|
|||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
// add your plugins here
|
// add your plugins here
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,33 +12,37 @@ You can also pass a kysley dialect directly to use other databases supported by
|
|||||||
**Example: Sqlite**
|
**Example: Sqlite**
|
||||||
```ts title="auth.ts"
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
import Database from "better-sqlite3"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
database: new Database("database.sqlite")
|
||||||
provider: "sqlite",
|
|
||||||
url: "path/to/database.sqlite"
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**Example: Postgres**
|
**Example: Postgres**
|
||||||
```ts title="auth.ts"
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
import { Pool } from "pg"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
database: new Pool({
|
||||||
provider: "postgres",
|
connectionString: "postgres://user:password@localhost:5432/database"
|
||||||
url: "postgres://user:password@localhost:5432/database"
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
**Exmaple: Mysql**
|
**Exmaple: Mysql**
|
||||||
```ts title="auth.ts"
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
import { createPool } from "mysql2/promise"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
database: createPool({
|
||||||
provider: "mysql",
|
host: "localhost",
|
||||||
url: "mysql://user:password@localhost:3306/database"
|
user: "root",
|
||||||
}
|
password: "password",
|
||||||
|
database: "database"
|
||||||
|
})
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ To add a plugin on the server, include it in the `plugins` array in your auth co
|
|||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
// Add your plugins here
|
// Add your plugins here
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -23,12 +23,10 @@ You can also infer types on the server side.
|
|||||||
|
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts" twoslash
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
|
import Database from "better-sqlite3"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
database: new Database("database.db")
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
type Session = typeof auth.$Infer.Session
|
type Session = typeof auth.$Infer.Session
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: Installtion
|
title: Installation
|
||||||
description: Learn how to configure Better Auth in your project.
|
description: Learn how to configure Better Auth in your project.
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -69,16 +69,42 @@ export const auth = betterAuth({
|
|||||||
|
|
||||||
Better Auth requires a database to store user data. By default, it uses [Kysely](https://kysely.dev/) for database connections and queries, with support for `postgresql`, `mysql`, and `sqlite` out of the box.
|
Better Auth requires a database to store user data. By default, it uses [Kysely](https://kysely.dev/) for database connections and queries, with support for `postgresql`, `mysql`, and `sqlite` out of the box.
|
||||||
|
|
||||||
|
<Tabs items={["sqlite", "postgres", "mysql"]}>
|
||||||
|
<Tab value="sqlite">
|
||||||
```ts title="auth.ts"
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
database: new Database("./sqlite.db"),
|
||||||
provider: "sqlite", // or "mysql", "postgresql"
|
|
||||||
url: "./db.sqlite", // path to your database or connection string
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
</Tab>
|
||||||
|
<Tab value="postgres">
|
||||||
|
```ts title="auth.ts"
|
||||||
|
import { betterAuth } from "better-auth";
|
||||||
|
import { Pool } from "pg";
|
||||||
|
|
||||||
|
export const auth = betterAuth({
|
||||||
|
database: new Pool({
|
||||||
|
// connection options
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
</Tab>
|
||||||
|
<Tab value="mysql">
|
||||||
|
```ts title="auth.ts"
|
||||||
|
import { betterAuth } from "better-auth";
|
||||||
|
import { createPool } from "mysql2/promise";
|
||||||
|
|
||||||
|
export const auth = betterAuth({
|
||||||
|
database: createPool({
|
||||||
|
// connection options
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
</Tab>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
You can also use any dialect supported by Kysely in the database configuration.
|
You can also use any dialect supported by Kysely in the database configuration.
|
||||||
|
|
||||||
@@ -96,6 +122,8 @@ export const auth = betterAuth({
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
We recommend using the built-in Kysely adapter for better performance if your database is supported.
|
||||||
|
|
||||||
**Adapters**
|
**Adapters**
|
||||||
|
|
||||||
If your database isn’t supported by Kysely, you can use an adapter to connect. Simply import the adapter and pass it into the `database` option.
|
If your database isn’t supported by Kysely, you can use an adapter to connect. Simply import the adapter and pass it into the `database` option.
|
||||||
@@ -178,10 +206,7 @@ import { betterAuth } from "better-auth"
|
|||||||
import { github } from "better-auth/social-providers"
|
import { github } from "better-auth/social-providers"
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
//...other options
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
emailAndPassword: { // [!code highlight]
|
emailAndPassword: { // [!code highlight]
|
||||||
enabled: true // [!code highlight]
|
enabled: true // [!code highlight]
|
||||||
},// [!code highlight]
|
},// [!code highlight]
|
||||||
|
|||||||
@@ -11,20 +11,7 @@ Before you start, make sure you have a better auth instance configured. If you h
|
|||||||
|
|
||||||
We need to mount the handler to an API route. Create a route file inside `/api/[...auth]` directory. And add the following code:
|
We need to mount the handler to an API route. Create a route file inside `/api/[...auth]` directory. And add the following code:
|
||||||
|
|
||||||
```ts twoslash title="api/[...auth]/route.ts"
|
```ts title="api/[...auth]/route.ts"
|
||||||
//@filename: @/lib/auth.ts
|
|
||||||
import { betterAuth } from "better-auth"
|
|
||||||
|
|
||||||
export const auth = betterAuth({
|
|
||||||
database: {
|
|
||||||
provider: "sqlite", //change this to your database provider
|
|
||||||
url: "./db.sqlite", // path to your database or connection string
|
|
||||||
}
|
|
||||||
// Refer to the api documentation for more configuration options
|
|
||||||
})
|
|
||||||
// ---cut---
|
|
||||||
//@filename: api/[...auth]/route.ts
|
|
||||||
//---cut---
|
|
||||||
import { auth } from "@/lib/auth";
|
import { auth } from "@/lib/auth";
|
||||||
import { toNextJsHandler } from "better-auth/next-js";
|
import { toNextJsHandler } from "better-auth/next-js";
|
||||||
|
|
||||||
@@ -39,7 +26,7 @@ export const { GET, POST } = toNextJsHandler(auth.handler);
|
|||||||
|
|
||||||
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
||||||
|
|
||||||
```ts twoslash title="client.ts"
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/react" // make sure to import from better-auth/react
|
import { createAuthClient } from "better-auth/react" // make sure to import from better-auth/react
|
||||||
|
|
||||||
export const client = createAuthClient({
|
export const client = createAuthClient({
|
||||||
@@ -58,20 +45,7 @@ The `api` object exported from the auth instance contains all the actions that y
|
|||||||
|
|
||||||
**Example: Getting Session on a server action**
|
**Example: Getting Session on a server action**
|
||||||
|
|
||||||
```tsx twoslash title="server.ts"
|
```tsx title="server.ts"
|
||||||
//@filename: @/lib/auth.ts
|
|
||||||
import { betterAuth } from "better-auth"
|
|
||||||
|
|
||||||
export const auth = betterAuth({
|
|
||||||
database: {
|
|
||||||
provider: "sqlite", //change this to your database provider
|
|
||||||
url: "./db.sqlite", // path to your database or connection string
|
|
||||||
}
|
|
||||||
// Refer to the api documentation for more configuration options
|
|
||||||
})
|
|
||||||
// ---cut---
|
|
||||||
//@filename: server.ts
|
|
||||||
//---cut---
|
|
||||||
import { auth } from "@/lib/auth"
|
import { auth } from "@/lib/auth"
|
||||||
import { headers } from "next/headers"
|
import { headers } from "next/headers"
|
||||||
|
|
||||||
@@ -109,7 +83,7 @@ export async function ServerComponent() {
|
|||||||
|
|
||||||
You can use the `authMiddleware` to protect your routes. It's a wrapper around the Next.js middleware.
|
You can use the `authMiddleware` to protect your routes. It's a wrapper around the Next.js middleware.
|
||||||
|
|
||||||
```ts twoslash title="middleware.ts"s
|
```ts title="middleware.ts"s
|
||||||
import { authMiddleware } from "better-auth/next-js"
|
import { authMiddleware } from "better-auth/next-js"
|
||||||
|
|
||||||
export default authMiddleware({
|
export default authMiddleware({
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ npx better-auth migrate
|
|||||||
|
|
||||||
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
||||||
|
|
||||||
```ts twoslash title="client.ts"
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/vue" // make sure to import from better-auth/vue
|
import { createAuthClient } from "better-auth/vue" // make sure to import from better-auth/vue
|
||||||
|
|
||||||
export const client = createAuthClient({
|
export const client = createAuthClient({
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ npx better-auth migrate
|
|||||||
|
|
||||||
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
Create a client instance. You can name the file anything you want. Here we are creating `client.ts` file inside the `lib/` directory.
|
||||||
|
|
||||||
```ts twoslash title="client.ts"
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/svelte" // make sure to import from better-auth/svlete
|
import { createAuthClient } from "better-auth/svelte" // make sure to import from better-auth/svlete
|
||||||
|
|
||||||
export const client = createAuthClient({
|
export const client = createAuthClient({
|
||||||
|
|||||||
@@ -182,15 +182,11 @@ OTP (One-Time Password) is similar to TOTP but the code is sent directly to the
|
|||||||
|
|
||||||
Before using OTP to verify the second factor, you need to configure `sendOTP` in your better auth instance. This function is responsible for sending the OTP to the user's email, phone, or any other method supported by your application.
|
Before using OTP to verify the second factor, you need to configure `sendOTP` in your better auth instance. This function is responsible for sending the OTP to the user's email, phone, or any other method supported by your application.
|
||||||
|
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
import { twoFactor } from "better-auth/plugins"
|
import { twoFactor } from "better-auth/plugins"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
twoFactor({
|
twoFactor({
|
||||||
otpOptions: {
|
otpOptions: {
|
||||||
@@ -362,7 +358,7 @@ backup codes are generated and stored in the database when the user enabled two
|
|||||||
|
|
||||||
To use the two factor plugin in the client, you need to add it on your plugins list.
|
To use the two factor plugin in the client, you need to add it on your plugins list.
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { twoFactorClient } from "better-auth/client/plugins"
|
import { twoFactorClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,11 @@ The Bearer plugin allows you to authenticate with a Bearer token instead of a br
|
|||||||
|
|
||||||
## Add the Bearer plugin
|
## Add the Bearer plugin
|
||||||
|
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
import { bearer } from "better-auth/plugins";
|
import { bearer } from "better-auth/plugins";
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
|
||||||
provider: 'sqlite',
|
|
||||||
url: './db.sqlite'
|
|
||||||
},
|
|
||||||
plugins: [bearer()]
|
plugins: [bearer()]
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
@@ -17,10 +17,6 @@ Magic link or email link is a way to authenticate users without a password. When
|
|||||||
import { magicLink } from "better-auth/plugins";
|
import { magicLink } from "better-auth/plugins";
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
magicLink({
|
magicLink({
|
||||||
sendMagicLink: async (data: {
|
sendMagicLink: async (data: {
|
||||||
|
|||||||
@@ -11,15 +11,11 @@ Organizations simplifies user access and permissions management. Assign roles an
|
|||||||
<Steps>
|
<Steps>
|
||||||
<Step>
|
<Step>
|
||||||
### Add the plugin to your **auth** config
|
### Add the plugin to your **auth** config
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
import { organization } from "better-auth/plugins"
|
import { organization } from "better-auth/plugins"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [ // [!code highlight]
|
plugins: [ // [!code highlight]
|
||||||
organization() // [!code highlight]
|
organization() // [!code highlight]
|
||||||
] // [!code highlight]
|
] // [!code highlight]
|
||||||
@@ -44,7 +40,7 @@ export const auth = await betterAuth({
|
|||||||
<Step>
|
<Step>
|
||||||
### Add the client plugin
|
### Add the client plugin
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { organizationClient } from "better-auth/client/plugins"
|
import { organizationClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
@@ -72,7 +68,7 @@ To create an organization, you need to provide:
|
|||||||
- `slug`: The slug of the organization.
|
- `slug`: The slug of the organization.
|
||||||
- `logo`: The logo of the organization. (Optional)
|
- `logo`: The logo of the organization. (Optional)
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { organizationClient } from "better-auth/client/plugins"
|
import { organizationClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
|
|||||||
@@ -22,15 +22,12 @@ The passkey plugin implementation is powered by [simple-web-authn](https://simpl
|
|||||||
|
|
||||||
`origin`: The URL at which registrations and authentications should occur. 'http://localhost' and 'http://localhost:PORT' are also valid.Do NOT include any trailing /
|
`origin`: The URL at which registrations and authentications should occur. 'http://localhost' and 'http://localhost:PORT' are also valid.Do NOT include any trailing /
|
||||||
|
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
import { passkey } from "better-auth/plugins"
|
import { passkey } from "better-auth/plugins"
|
||||||
|
|
||||||
export const auth = await betterAuth({
|
export const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [ // [!code highlight]
|
plugins: [ // [!code highlight]
|
||||||
passkey(), // [!code highlight]
|
passkey(), // [!code highlight]
|
||||||
], // [!code highlight]
|
], // [!code highlight]
|
||||||
@@ -53,7 +50,7 @@ The passkey plugin implementation is powered by [simple-web-authn](https://simpl
|
|||||||
<Step>
|
<Step>
|
||||||
### Add the client plugin
|
### Add the client plugin
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { passkeyClient } from "better-auth/client/plugins"
|
import { passkeyClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
@@ -73,7 +70,7 @@ The passkey plugin implementation is powered by [simple-web-authn](https://simpl
|
|||||||
|
|
||||||
To add or register a passkey make sure a user is authenticated and then call the `passkey.addPasskey` function provided by the client.
|
To add or register a passkey make sure a user is authenticated and then call the `passkey.addPasskey` function provided by the client.
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { passkeyClient } from "better-auth/client/plugins"
|
import { passkeyClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
@@ -97,7 +94,7 @@ Signin method accepts:
|
|||||||
|
|
||||||
`callbackURL`: The URL to redirect to after the user has signed in. (optional)
|
`callbackURL`: The URL to redirect to after the user has signed in. (optional)
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { passkeyClient } from "better-auth/client/plugins"
|
import { passkeyClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
|
|||||||
@@ -11,15 +11,11 @@ The username plugin wraps the email and password authenticator and adds username
|
|||||||
<Step>
|
<Step>
|
||||||
### Add Plugin to the server
|
### Add Plugin to the server
|
||||||
|
|
||||||
```ts title="auth.ts" twoslash
|
```ts title="auth.ts"
|
||||||
import { betterAuth } from "better-auth"
|
import { betterAuth } from "better-auth"
|
||||||
import { username } from "better-auth/plugins"
|
import { username } from "better-auth/plugins"
|
||||||
|
|
||||||
const auth = await betterAuth({
|
const auth = await betterAuth({
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [ // [!code highlight]
|
plugins: [ // [!code highlight]
|
||||||
username() // [!code highlight]
|
username() // [!code highlight]
|
||||||
] // [!code highlight]
|
] // [!code highlight]
|
||||||
@@ -42,7 +38,7 @@ The username plugin wraps the email and password authenticator and adds username
|
|||||||
<Step>
|
<Step>
|
||||||
### Add the client plugin
|
### Add the client plugin
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { usernameClient } from "better-auth/client/plugins"
|
import { usernameClient } from "better-auth/client/plugins"
|
||||||
|
|
||||||
@@ -68,7 +64,7 @@ To signup a user with username, you can use the `signUp.username` function provi
|
|||||||
- `image`: The image of the user. (optional)
|
- `image`: The image of the user. (optional)
|
||||||
- `callbackURL`: The url to redirect to after the user has signed up. (optional)
|
- `callbackURL`: The url to redirect to after the user has signed up. (optional)
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { usernameClient } from "better-auth/client/plugins"
|
import { usernameClient } from "better-auth/client/plugins"
|
||||||
const client = createAuthClient({
|
const client = createAuthClient({
|
||||||
@@ -95,7 +91,7 @@ To signin a user with username, you can use the `signIn.username` function provi
|
|||||||
- `password`: The password of the user.
|
- `password`: The password of the user.
|
||||||
- `callbackURL`: The url to redirect to after the user has signed in. (optional)
|
- `callbackURL`: The url to redirect to after the user has signed in. (optional)
|
||||||
|
|
||||||
```ts title="client.ts" twoslash
|
```ts title="client.ts"
|
||||||
import { createAuthClient } from "better-auth/client"
|
import { createAuthClient } from "better-auth/client"
|
||||||
import { usernameClient } from "better-auth/client/plugins"
|
import { usernameClient } from "better-auth/client/plugins"
|
||||||
const client = createAuthClient({
|
const client = createAuthClient({
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
import { betterAuth } from "better-auth";
|
|
||||||
import { organization, twoFactor } from "better-auth/plugins";
|
|
||||||
export const auth = betterAuth({
|
|
||||||
baseURL: "http://localhost:3000",
|
|
||||||
database: {
|
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
twoFactor({
|
|
||||||
issuer: "My App",
|
|
||||||
}),
|
|
||||||
organization(),
|
|
||||||
],
|
|
||||||
});
|
|
||||||
@@ -44,8 +44,10 @@
|
|||||||
"@tsparticles/engine": "^3.5.0",
|
"@tsparticles/engine": "^3.5.0",
|
||||||
"@tsparticles/react": "^3.0.0",
|
"@tsparticles/react": "^3.0.0",
|
||||||
"@tsparticles/slim": "^3.5.0",
|
"@tsparticles/slim": "^3.5.0",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
"@vercel/og": "^0.6.3",
|
"@vercel/og": "^0.6.3",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "1.0.0",
|
"cmdk": "1.0.0",
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
"@oslojs/encoding": "^1.0.0",
|
"@oslojs/encoding": "^1.0.0",
|
||||||
"astro": "^4.15.9",
|
"astro": "^4.15.9",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk-solid": "^1.1.0",
|
"cmdk-solid": "^1.1.0",
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
import { passkey, twoFactor } from "better-auth/plugins";
|
import { passkey, twoFactor } from "better-auth/plugins";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
import { Resend } from "resend";
|
import { Resend } from "resend";
|
||||||
|
|
||||||
const resend = new Resend(import.meta.env.RESEND_API_KEY);
|
const resend = new Resend(import.meta.env.RESEND_API_KEY);
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
database: new Database("./db.sqlite"),
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
account: {
|
account: {
|
||||||
accountLinking: {
|
accountLinking: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
|||||||
@@ -3,14 +3,12 @@ import { organization, passkey, twoFactor } from "better-auth/plugins";
|
|||||||
import { reactInvitationEmail } from "./email/invitation";
|
import { reactInvitationEmail } from "./email/invitation";
|
||||||
import { reactResetPasswordEmail } from "./email/rest-password";
|
import { reactResetPasswordEmail } from "./email/rest-password";
|
||||||
import { resend } from "./email/resend";
|
import { resend } from "./email/resend";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
const from = process.env.BETTER_AUTH_EMAIL || "delivered@resend.dev";
|
const from = process.env.BETTER_AUTH_EMAIL || "delivered@resend.dev";
|
||||||
const to = process.env.TEST_EMAIL || "";
|
const to = process.env.TEST_EMAIL || "";
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
database: new Database("./db.sqlite"),
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
emailAndPassword: {
|
emailAndPassword: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
async sendResetPassword(token, user) {
|
async sendResetPassword(token, user) {
|
||||||
|
|||||||
@@ -47,6 +47,8 @@
|
|||||||
"@react-three/fiber": "^8.17.7",
|
"@react-three/fiber": "^8.17.7",
|
||||||
"@tanstack/react-query": "^5.56.2",
|
"@tanstack/react-query": "^5.56.2",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"better-call": "0.2.3-beta.2",
|
"better-call": "0.2.3-beta.2",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
|
import Database from "better-sqlite3";
|
||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
database: new Database("./db.sqlite"),
|
||||||
provider: "sqlite",
|
|
||||||
url: "./sqlite.db",
|
|
||||||
},
|
|
||||||
socialProviders: {
|
socialProviders: {
|
||||||
google: {
|
google: {
|
||||||
clientId: process.env.GOOGLE_CLIENT_ID || "",
|
clientId: process.env.GOOGLE_CLIENT_ID || "",
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
"@vee-validate/zod": "^4.13.2",
|
"@vee-validate/zod": "^4.13.2",
|
||||||
"@vueuse/core": "^11.1.0",
|
"@vueuse/core": "^11.1.0",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"embla-carousel-vue": "^8.3.0",
|
"embla-carousel-vue": "^8.3.0",
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@internationalized/date": "^3.5.5",
|
"@internationalized/date": "^3.5.5",
|
||||||
"better-auth": "workspace:*",
|
"better-auth": "workspace:*",
|
||||||
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"bits-ui": "^0.21.15",
|
"bits-ui": "^0.21.15",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk-sv": "^0.0.18",
|
"cmdk-sv": "^0.0.18",
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { betterAuth } from "better-auth";
|
import { betterAuth } from "better-auth";
|
||||||
import { env } from "$env/dynamic/private";
|
import { env } from "$env/dynamic/private";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
export const auth = betterAuth({
|
export const auth = betterAuth({
|
||||||
database: {
|
database: new Database("./db.sqlite"),
|
||||||
provider: "sqlite",
|
|
||||||
url: "./db.sqlite",
|
|
||||||
},
|
|
||||||
socialProviders: {
|
socialProviders: {
|
||||||
google: {
|
google: {
|
||||||
clientId: env.GOOGLE_CLIENT_ID || "",
|
clientId: env.GOOGLE_CLIENT_ID || "",
|
||||||
|
|||||||
@@ -55,10 +55,10 @@
|
|||||||
"@prisma/client": "^5.19.1",
|
"@prisma/client": "^5.19.1",
|
||||||
"@simplewebauthn/types": "^10.0.0",
|
"@simplewebauthn/types": "^10.0.0",
|
||||||
"@types/better-sqlite3": "^7.6.11",
|
"@types/better-sqlite3": "^7.6.11",
|
||||||
|
"better-sqlite3": "^11.3.0",
|
||||||
"@types/pg": "^8.11.6",
|
"@types/pg": "^8.11.6",
|
||||||
"@types/prompts": "^2.4.9",
|
"@types/prompts": "^2.4.9",
|
||||||
"@types/react": "^18.3.3",
|
"@types/react": "^18.3.3",
|
||||||
"better-sqlite3": "^11.3.0",
|
|
||||||
"drizzle-orm": "^0.33.0",
|
"drizzle-orm": "^0.33.0",
|
||||||
"happy-dom": "^15.7.4",
|
"happy-dom": "^15.7.4",
|
||||||
"hono": "^4.5.4",
|
"hono": "^4.5.4",
|
||||||
|
|||||||
@@ -9,12 +9,10 @@ import { drizzle } from "drizzle-orm/better-sqlite3";
|
|||||||
import Database from "better-sqlite3";
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
describe("adapter test", async () => {
|
describe("adapter test", async () => {
|
||||||
|
const database = new Database(path.join(__dirname, "test.db"));
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const { runMigrations } = await getMigrations({
|
const { runMigrations } = await getMigrations({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: path.join(__dirname, "test.db"),
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
await runMigrations();
|
await runMigrations();
|
||||||
});
|
});
|
||||||
@@ -22,8 +20,8 @@ describe("adapter test", async () => {
|
|||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await fs.unlink(path.join(__dirname, "test.db"));
|
await fs.unlink(path.join(__dirname, "test.db"));
|
||||||
});
|
});
|
||||||
const sqlite = new Database(path.join(__dirname, "test.db"));
|
|
||||||
const db = drizzle(sqlite, {
|
const db = drizzle(database, {
|
||||||
schema: {
|
schema: {
|
||||||
user,
|
user,
|
||||||
},
|
},
|
||||||
@@ -35,10 +33,7 @@ describe("adapter test", async () => {
|
|||||||
|
|
||||||
it("should create schema", async () => {
|
it("should create schema", async () => {
|
||||||
const res = await adapter.createSchema!({
|
const res = await adapter.createSchema!({
|
||||||
database: {
|
database: new Database(path.join(__dirname, "test.db")),
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
expect(res.code).toMatchSnapshot("__snapshots__/adapter.drizzle");
|
expect(res.code).toMatchSnapshot("__snapshots__/adapter.drizzle");
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,116 +6,50 @@ import {
|
|||||||
SqliteDialect,
|
SqliteDialect,
|
||||||
} from "kysely";
|
} from "kysely";
|
||||||
import type { BetterAuthOptions } from "../../types";
|
import type { BetterAuthOptions } from "../../types";
|
||||||
import {
|
import Database from "better-sqlite3";
|
||||||
BetterAuthError,
|
import { Pool as PostgresPool } from "pg";
|
||||||
MissingDependencyError,
|
|
||||||
} from "../../error/better-auth-error";
|
|
||||||
|
|
||||||
export const getDialect = async (config: BetterAuthOptions) => {
|
export const createKyselyAdapter = async (config: BetterAuthOptions) => {
|
||||||
if (!config.database) {
|
const db = config.database;
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
if ("createDriver" in config.database) {
|
|
||||||
return config.database;
|
|
||||||
}
|
|
||||||
let dialect: Dialect | undefined = undefined;
|
let dialect: Dialect | undefined = undefined;
|
||||||
if ("provider" in config.database) {
|
let databaseType: "sqlite" | "mysql" | "postgres" | undefined = undefined;
|
||||||
const provider = config.database.provider;
|
if ("createDriver" in db) {
|
||||||
const connectionString = config.database?.url?.trim();
|
dialect = db;
|
||||||
if (provider === "postgres") {
|
if (dialect instanceof SqliteDialect) {
|
||||||
try {
|
databaseType = "sqlite";
|
||||||
const pg = await import("pg").catch(async (e) => {
|
|
||||||
throw new MissingDependencyError("pg");
|
|
||||||
});
|
|
||||||
const Pool = pg.default?.Pool || pg.Pool;
|
|
||||||
const pool = new Pool({
|
|
||||||
connectionString,
|
|
||||||
});
|
|
||||||
dialect = new PostgresDialect({
|
|
||||||
pool,
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
if (e instanceof TypeError) {
|
|
||||||
throw new BetterAuthError("Invalid database URL");
|
|
||||||
}
|
}
|
||||||
throw e;
|
if (dialect instanceof MysqlDialect) {
|
||||||
|
databaseType = "mysql";
|
||||||
}
|
}
|
||||||
}
|
if (dialect instanceof PostgresDialect) {
|
||||||
if (provider === "mysql") {
|
databaseType = "postgres";
|
||||||
try {
|
|
||||||
const { createPool } = await import("mysql2/promise").catch(
|
|
||||||
async (e) => {
|
|
||||||
throw new MissingDependencyError("mysql2");
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
const params = new URL(connectionString);
|
|
||||||
const pool = createPool({
|
|
||||||
host: params.hostname,
|
|
||||||
user: params.username,
|
|
||||||
password: params.password,
|
|
||||||
database: params.pathname.split("/")[1],
|
|
||||||
port: Number(params.port),
|
|
||||||
});
|
|
||||||
dialect = new MysqlDialect({ pool });
|
|
||||||
} catch (e) {
|
|
||||||
if (e instanceof TypeError) {
|
|
||||||
throw new BetterAuthError("Invalid database URL");
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (provider === "sqlite") {
|
if (db instanceof Database) {
|
||||||
try {
|
|
||||||
const database = await import("better-sqlite3").catch(async (e) => {
|
|
||||||
throw new MissingDependencyError("better-sqlite3");
|
|
||||||
});
|
|
||||||
const Database = database.default || database;
|
|
||||||
|
|
||||||
const db = new Database(connectionString);
|
|
||||||
dialect = new SqliteDialect({
|
dialect = new SqliteDialect({
|
||||||
database: db,
|
database: db,
|
||||||
});
|
});
|
||||||
} catch (e) {
|
databaseType = "sqlite";
|
||||||
console.error(e);
|
|
||||||
throw new BetterAuthError(
|
|
||||||
"Failed to initialize SQLite. Make sure `better-sqlite3` is properly installed.",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return dialect;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const createKyselyAdapter = async (config: BetterAuthOptions) => {
|
if ("getConnection" in db) {
|
||||||
if ("provider" in config.database) {
|
dialect = new MysqlDialect({
|
||||||
const dialect = await getDialect(config);
|
pool: db,
|
||||||
if (!dialect) {
|
|
||||||
return dialect;
|
|
||||||
}
|
|
||||||
const db = new Kysely<any>({
|
|
||||||
dialect,
|
|
||||||
});
|
});
|
||||||
return db;
|
databaseType = "mysql";
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getDatabaseType = (config: BetterAuthOptions) => {
|
if (db instanceof PostgresPool) {
|
||||||
if ("provider" in config.database) {
|
dialect = new PostgresDialect({
|
||||||
return config.database.provider;
|
pool: db,
|
||||||
|
});
|
||||||
|
databaseType = "postgres";
|
||||||
}
|
}
|
||||||
if ("dialect" in config.database) {
|
|
||||||
if (config.database.dialect instanceof PostgresDialect) {
|
return {
|
||||||
return "postgres";
|
kysely: dialect ? new Kysely({ dialect }) : null,
|
||||||
}
|
dialect,
|
||||||
if (config.database.dialect instanceof MysqlDialect) {
|
databaseType,
|
||||||
return "mysql";
|
};
|
||||||
}
|
|
||||||
if (config.database.dialect instanceof SqliteDialect) {
|
|
||||||
return "sqlite";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "sqlite";
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -9,12 +9,10 @@ import { kyselyAdapter } from "..";
|
|||||||
import { Kysely, SqliteDialect } from "kysely";
|
import { Kysely, SqliteDialect } from "kysely";
|
||||||
|
|
||||||
describe("adapter test", async () => {
|
describe("adapter test", async () => {
|
||||||
|
const database = new Database(path.join(__dirname, "test.db"));
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const { runMigrations } = await getMigrations({
|
const { runMigrations } = await getMigrations({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: path.join(__dirname, "test.db"),
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
await runMigrations();
|
await runMigrations();
|
||||||
});
|
});
|
||||||
@@ -39,10 +37,7 @@ describe("adapter test", async () => {
|
|||||||
|
|
||||||
it("should create schema", async () => {
|
it("should create schema", async () => {
|
||||||
const res = await adapter.createSchema!({
|
const res = await adapter.createSchema!({
|
||||||
database: {
|
database: new Database(path.join(__dirname, "test-2.db")),
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
expect(res.code).toMatchSnapshot("__snapshots__/adapter.drizzle");
|
expect(res.code).toMatchSnapshot("__snapshots__/adapter.drizzle");
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { prismaAdapter } from "..";
|
|||||||
import { runAdapterTest } from "../../test";
|
import { runAdapterTest } from "../../test";
|
||||||
import { twoFactor } from "../../../plugins";
|
import { twoFactor } from "../../../plugins";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
const db = new PrismaClient();
|
const db = new PrismaClient();
|
||||||
describe("adapter test", async () => {
|
describe("adapter test", async () => {
|
||||||
@@ -13,23 +14,17 @@ describe("adapter test", async () => {
|
|||||||
const adapter = prismaAdapter(db, {
|
const adapter = prismaAdapter(db, {
|
||||||
provider: "sqlite",
|
provider: "sqlite",
|
||||||
});
|
});
|
||||||
|
const database = new Database(path.join(__dirname, "test.db"));
|
||||||
it("should create schema", async () => {
|
it("should create schema", async () => {
|
||||||
const res = await adapter.createSchema!({
|
const res = await adapter.createSchema!({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
expect(res.code).toMatchSnapshot("__snapshots__/adapter.prisma");
|
expect(res.code).toMatchSnapshot("__snapshots__/adapter.prisma");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should work with plugins", async () => {
|
it("should work with plugins", async () => {
|
||||||
const res = await adapter.createSchema!({
|
const res = await adapter.createSchema!({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
plugins: [twoFactor()],
|
plugins: [twoFactor()],
|
||||||
});
|
});
|
||||||
expect(res.code).toMatchSnapshot(
|
expect(res.code).toMatchSnapshot(
|
||||||
|
|||||||
@@ -7,10 +7,7 @@ import type { FieldAttribute, FieldType } from "../../db";
|
|||||||
import { logger } from "../../utils/logger";
|
import { logger } from "../../utils/logger";
|
||||||
import type { BetterAuthOptions } from "../../types";
|
import type { BetterAuthOptions } from "../../types";
|
||||||
import { getSchema } from "./get-schema";
|
import { getSchema } from "./get-schema";
|
||||||
import {
|
import { createKyselyAdapter } from "../../adapters/kysely-adapter/dialect";
|
||||||
createKyselyAdapter,
|
|
||||||
getDatabaseType,
|
|
||||||
} from "../../adapters/kysely-adapter/dialect";
|
|
||||||
|
|
||||||
const postgresMap = {
|
const postgresMap = {
|
||||||
string: ["character varying", "text"],
|
string: ["character varying", "text"],
|
||||||
@@ -67,9 +64,10 @@ export function matchType(
|
|||||||
|
|
||||||
export async function getMigrations(config: BetterAuthOptions) {
|
export async function getMigrations(config: BetterAuthOptions) {
|
||||||
const betterAuthSchema = getSchema(config);
|
const betterAuthSchema = getSchema(config);
|
||||||
const dbType = getDatabaseType(config);
|
|
||||||
const db = await createKyselyAdapter(config);
|
const { kysely: db, databaseType: dbType } =
|
||||||
if (!db) {
|
await createKyselyAdapter(config);
|
||||||
|
if (!db || !dbType) {
|
||||||
logger.error("Invalid database configuration.");
|
logger.error("Invalid database configuration.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,7 @@ import { BetterAuthError } from "../error/better-auth-error";
|
|||||||
import type { BetterAuthOptions } from "../types";
|
import type { BetterAuthOptions } from "../types";
|
||||||
import type { Adapter } from "../types/adapter";
|
import type { Adapter } from "../types/adapter";
|
||||||
import { getAuthTables } from "./get-tables";
|
import { getAuthTables } from "./get-tables";
|
||||||
import {
|
import { createKyselyAdapter } from "../adapters/kysely-adapter/dialect";
|
||||||
createKyselyAdapter,
|
|
||||||
getDatabaseType,
|
|
||||||
} from "../adapters/kysely-adapter/dialect";
|
|
||||||
import { kyselyAdapter } from "../adapters/kysely-adapter";
|
import { kyselyAdapter } from "../adapters/kysely-adapter";
|
||||||
|
|
||||||
export async function getAdapter(
|
export async function getAdapter(
|
||||||
@@ -21,8 +18,8 @@ export async function getAdapter(
|
|||||||
return options.database;
|
return options.database;
|
||||||
}
|
}
|
||||||
|
|
||||||
const db = await createKyselyAdapter(options);
|
const { kysely, databaseType } = await createKyselyAdapter(options);
|
||||||
if (!db) {
|
if (!kysely) {
|
||||||
throw new BetterAuthError("Failed to initialize database adapter");
|
throw new BetterAuthError("Failed to initialize database adapter");
|
||||||
}
|
}
|
||||||
const tables = getAuthTables(options);
|
const tables = getAuthTables(options);
|
||||||
@@ -30,11 +27,11 @@ export async function getAdapter(
|
|||||||
for (const table of Object.values(tables)) {
|
for (const table of Object.values(tables)) {
|
||||||
schema[table.tableName] = table.fields;
|
schema[table.tableName] = table.fields;
|
||||||
}
|
}
|
||||||
return kyselyAdapter(db, {
|
return kyselyAdapter(kysely, {
|
||||||
transform: {
|
transform: {
|
||||||
schema,
|
schema,
|
||||||
date: true,
|
date: true,
|
||||||
boolean: getDatabaseType(options) === "sqlite",
|
boolean: databaseType === "sqlite",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
import { init } from "./init";
|
import { init } from "./init";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
describe("init", async () => {
|
describe("init", async () => {
|
||||||
|
const database = new Database(":memory:");
|
||||||
it("should match config", () => {
|
it("should match config", () => {
|
||||||
const res = init({
|
const res = init({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
expect(res).toMatchSnapshot();
|
expect(res).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should mount internal plugins", async () => {
|
it("should mount internal plugins", async () => {
|
||||||
const res = await init({
|
const res = await init({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
advanced: {
|
advanced: {
|
||||||
crossSubDomainCookies: {
|
crossSubDomainCookies: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@@ -34,10 +30,7 @@ describe("init", async () => {
|
|||||||
baseURL: "http://test.test",
|
baseURL: "http://test.test",
|
||||||
};
|
};
|
||||||
const res = await init({
|
const res = await init({
|
||||||
database: {
|
database,
|
||||||
provider: "sqlite",
|
|
||||||
url: ":memory:",
|
|
||||||
},
|
|
||||||
plugins: [
|
plugins: [
|
||||||
{
|
{
|
||||||
id: "test",
|
id: "test",
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export const init = async (opts: BetterAuthOptions) => {
|
|||||||
const plugins = options.plugins || [];
|
const plugins = options.plugins || [];
|
||||||
const internalPlugins = getInternalPlugins(options);
|
const internalPlugins = getInternalPlugins(options);
|
||||||
const adapter = await getAdapter(options);
|
const adapter = await getAdapter(options);
|
||||||
const db = (await createKyselyAdapter(options)) || null;
|
const { kysely: db } = await createKyselyAdapter(options);
|
||||||
const baseURL = getBaseURL(options.baseURL, options.basePath) || "";
|
const baseURL = getBaseURL(options.baseURL, options.basePath) || "";
|
||||||
|
|
||||||
const secret =
|
const secret =
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { getMigrations } from "../cli/utils/get-migration";
|
|||||||
import { parseSetCookieHeader } from "../utils/cookies";
|
import { parseSetCookieHeader } from "../utils/cookies";
|
||||||
import type { SuccessContext } from "@better-fetch/fetch";
|
import type { SuccessContext } from "@better-fetch/fetch";
|
||||||
import { getAdapter } from "../db/utils";
|
import { getAdapter } from "../db/utils";
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
export async function getTestInstance<O extends Partial<BetterAuthOptions>>(
|
export async function getTestInstance<O extends Partial<BetterAuthOptions>>(
|
||||||
options?: O,
|
options?: O,
|
||||||
@@ -31,10 +32,7 @@ export async function getTestInstance<O extends Partial<BetterAuthOptions>>(
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
secret: "better-auth.secret",
|
secret: "better-auth.secret",
|
||||||
database: {
|
database: new Database(dbName),
|
||||||
provider: "sqlite",
|
|
||||||
url: dbName,
|
|
||||||
},
|
|
||||||
emailAndPassword: {
|
emailAndPassword: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
},
|
},
|
||||||
|
|||||||
5
packages/better-auth/src/types/database.ts
Normal file
5
packages/better-auth/src/types/database.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import type Database from "better-sqlite3";
|
||||||
|
import type { Pool } from "mysql2";
|
||||||
|
|
||||||
|
export type BetterSqlite3Database = Database.Database;
|
||||||
|
export type MysqlPool = Pool;
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
import type { Dialect } from "kysely";
|
import type { Dialect, PostgresPool } from "kysely";
|
||||||
import type { Account, Session, User } from "../db/schema";
|
import type { Account, Session, User } from "../db/schema";
|
||||||
import type { BetterAuthPlugin } from "./plugins";
|
import type { BetterAuthPlugin } from "./plugins";
|
||||||
import type { OAuthProviderList } from "./provider";
|
import type { OAuthProviderList } from "./provider";
|
||||||
import type { SocialProviders } from "../social-providers";
|
import type { SocialProviders } from "../social-providers";
|
||||||
import type { RateLimit } from "./models";
|
import type { RateLimit } from "./models";
|
||||||
import type { Adapter } from "./adapter";
|
import type { Adapter } from "./adapter";
|
||||||
|
import type Database from "better-sqlite3";
|
||||||
|
import type { Pool } from "mysql2";
|
||||||
|
import type { BetterSqlite3Database, MysqlPool } from "./database";
|
||||||
|
|
||||||
export interface BetterAuthOptions {
|
export interface BetterAuthOptions {
|
||||||
/**
|
/**
|
||||||
@@ -60,10 +63,9 @@ export interface BetterAuthOptions {
|
|||||||
* Database configuration
|
* Database configuration
|
||||||
*/
|
*/
|
||||||
database:
|
database:
|
||||||
| {
|
| PostgresPool
|
||||||
provider: "postgres" | "sqlite" | "mysql";
|
| MysqlPool
|
||||||
url: string;
|
| BetterSqlite3Database
|
||||||
}
|
|
||||||
| Dialect
|
| Dialect
|
||||||
| Adapter;
|
| Adapter;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -30,6 +30,5 @@ export default defineConfig((env) => {
|
|||||||
treeshake: true,
|
treeshake: true,
|
||||||
skipNodeModulesBundle: true,
|
skipNodeModulesBundle: true,
|
||||||
target: "es2022",
|
target: "es2022",
|
||||||
noExternal: ["pg", "better-sqlite3", "mysql2"],
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
288
pnpm-lock.yaml
generated
288
pnpm-lock.yaml
generated
@@ -285,9 +285,15 @@ importers:
|
|||||||
'@hono/node-server':
|
'@hono/node-server':
|
||||||
specifier: ^1.12.2
|
specifier: ^1.12.2
|
||||||
version: 1.13.1(hono@4.6.3)
|
version: 1.13.1(hono@4.6.3)
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: ^0.0.4
|
specifier: workspace:*
|
||||||
version: 0.0.4(react@18.3.1)(solid-js@1.9.1)(typescript@5.6.2)(vue@3.5.10)
|
version: link:../../../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
dotenv:
|
dotenv:
|
||||||
specifier: ^16.4.5
|
specifier: ^16.4.5
|
||||||
version: 16.4.5
|
version: 16.4.5
|
||||||
@@ -353,6 +359,9 @@ importers:
|
|||||||
'@noble/ciphers':
|
'@noble/ciphers':
|
||||||
specifier: ^0.6.0
|
specifier: ^0.6.0
|
||||||
version: 0.6.0
|
version: 0.6.0
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
@@ -375,9 +384,15 @@ importers:
|
|||||||
|
|
||||||
dev/express:
|
dev/express:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
express:
|
express:
|
||||||
specifier: ^4.21.0
|
specifier: ^4.21.0
|
||||||
version: 4.21.0
|
version: 4.21.0
|
||||||
@@ -520,12 +535,18 @@ importers:
|
|||||||
'@tsparticles/slim':
|
'@tsparticles/slim':
|
||||||
specifier: ^3.5.0
|
specifier: ^3.5.0
|
||||||
version: 3.5.0
|
version: 3.5.0
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
'@vercel/og':
|
'@vercel/og':
|
||||||
specifier: ^0.6.3
|
specifier: ^0.6.3
|
||||||
version: 0.6.3
|
version: 0.6.3
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../packages/better-auth
|
version: link:../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
class-variance-authority:
|
class-variance-authority:
|
||||||
specifier: ^0.7.0
|
specifier: ^0.7.0
|
||||||
version: 0.7.0
|
version: 0.7.0
|
||||||
@@ -695,12 +716,18 @@ importers:
|
|||||||
'@oslojs/encoding':
|
'@oslojs/encoding':
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
version: 1.1.0
|
version: 1.1.0
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
astro:
|
astro:
|
||||||
specifier: ^4.15.9
|
specifier: ^4.15.9
|
||||||
version: 4.15.9(@types/node@20.16.9)(typescript@5.6.2)
|
version: 4.15.9(@types/node@20.16.9)(typescript@5.6.2)
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
class-variance-authority:
|
class-variance-authority:
|
||||||
specifier: ^0.7.0
|
specifier: ^0.7.0
|
||||||
version: 0.7.0
|
version: 0.7.0
|
||||||
@@ -855,12 +882,18 @@ importers:
|
|||||||
'@tanstack/react-query':
|
'@tanstack/react-query':
|
||||||
specifier: ^5.56.2
|
specifier: ^5.56.2
|
||||||
version: 5.56.2(react@19.0.0-rc-7771d3a7-20240827)
|
version: 5.56.2(react@19.0.0-rc-7771d3a7-20240827)
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
better-call:
|
better-call:
|
||||||
specifier: 0.2.3-beta.2
|
specifier: 0.2.3-beta.2
|
||||||
version: 0.2.3-beta.2
|
version: 0.2.3-beta.2
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
class-variance-authority:
|
class-variance-authority:
|
||||||
specifier: ^0.7.0
|
specifier: ^0.7.0
|
||||||
version: 0.7.0
|
version: 0.7.0
|
||||||
@@ -991,6 +1024,9 @@ importers:
|
|||||||
'@radix-icons/vue':
|
'@radix-icons/vue':
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
version: 1.0.0(vue@3.5.9)
|
version: 1.0.0(vue@3.5.9)
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
'@unovis/ts':
|
'@unovis/ts':
|
||||||
specifier: 1.4.3-beta.0
|
specifier: 1.4.3-beta.0
|
||||||
version: 1.4.3-beta.0
|
version: 1.4.3-beta.0
|
||||||
@@ -1006,6 +1042,9 @@ importers:
|
|||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
class-variance-authority:
|
class-variance-authority:
|
||||||
specifier: ^0.7.0
|
specifier: ^0.7.0
|
||||||
version: 0.7.0
|
version: 0.7.0
|
||||||
@@ -1017,7 +1056,7 @@ importers:
|
|||||||
version: 8.3.0(vue@3.5.9)
|
version: 8.3.0(vue@3.5.9)
|
||||||
nuxt:
|
nuxt:
|
||||||
specifier: ^3.13.0
|
specifier: ^3.13.0
|
||||||
version: 3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.9)(typescript@5.6.1-rc)(vite@5.4.8)
|
version: 3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.9)(better-sqlite3@11.3.0)(typescript@5.6.1-rc)(vite@5.4.8)
|
||||||
radix-vue:
|
radix-vue:
|
||||||
specifier: ^1.9.6
|
specifier: ^1.9.6
|
||||||
version: 1.9.6(vue@3.5.9)
|
version: 1.9.6(vue@3.5.9)
|
||||||
@@ -1061,9 +1100,15 @@ importers:
|
|||||||
'@internationalized/date':
|
'@internationalized/date':
|
||||||
specifier: ^3.5.5
|
specifier: ^3.5.5
|
||||||
version: 3.5.5
|
version: 3.5.5
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.11
|
||||||
|
version: 7.6.11
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.3.0
|
||||||
|
version: 11.3.0
|
||||||
bits-ui:
|
bits-ui:
|
||||||
specifier: ^0.21.15
|
specifier: ^0.21.15
|
||||||
version: 0.21.15(svelte@4.2.19)
|
version: 0.21.15(svelte@4.2.19)
|
||||||
@@ -2105,10 +2150,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==}
|
resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@chronark/access-policies@0.0.2:
|
|
||||||
resolution: {integrity: sha512-KNxuQFcjfKIekDVAMXCqR7FBUr0BPOpUZj11vCfsC9v2IRTS3WWYJgxRx1tiZ703sjz8BeLbBnZW9aj6IalUaQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@cloudflare/kv-asset-handler@0.3.4:
|
/@cloudflare/kv-asset-handler@0.3.4:
|
||||||
resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
|
resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
|
||||||
engines: {node: '>=16.13'}
|
engines: {node: '>=16.13'}
|
||||||
@@ -3484,7 +3525,7 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
react-hook-form: ^7.0.0
|
react-hook-form: ^7.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
react-hook-form: 7.53.0(react@19.0.0-rc-7771d3a7-20240827)
|
react-hook-form: 7.53.0(react@18.3.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@humanwhocodes/config-array@0.13.0:
|
/@humanwhocodes/config-array@0.13.0:
|
||||||
@@ -4295,24 +4336,6 @@ packages:
|
|||||||
solid-js: 1.9.1
|
solid-js: 1.9.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@nanostores/vue@0.10.0(nanostores@0.11.3)(vue@3.5.10):
|
|
||||||
resolution: {integrity: sha512-832RAUbzRfHPs1CdqVEwfvgB2+RD/INji4Zo8bUSEfRO2pQRMMeq479gydnohGpRaa0oNwlfKo7TGFXCghq/1g==}
|
|
||||||
engines: {node: ^18.0.0 || >=20.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
'@nanostores/logger': '>=0.2.3'
|
|
||||||
'@vue/devtools-api': '>=6.5.0'
|
|
||||||
nanostores: '>=0.9.2'
|
|
||||||
vue: '>=3.3.1'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
'@nanostores/logger':
|
|
||||||
optional: true
|
|
||||||
'@vue/devtools-api':
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
nanostores: 0.11.3
|
|
||||||
vue: 3.5.10(typescript@5.6.2)
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@nanostores/vue@0.10.0(nanostores@0.11.3)(vue@3.5.9):
|
/@nanostores/vue@0.10.0(nanostores@0.11.3)(vue@3.5.9):
|
||||||
resolution: {integrity: sha512-832RAUbzRfHPs1CdqVEwfvgB2+RD/INji4Zo8bUSEfRO2pQRMMeq479gydnohGpRaa0oNwlfKo7TGFXCghq/1g==}
|
resolution: {integrity: sha512-832RAUbzRfHPs1CdqVEwfvgB2+RD/INji4Zo8bUSEfRO2pQRMMeq479gydnohGpRaa0oNwlfKo7TGFXCghq/1g==}
|
||||||
engines: {node: ^18.0.0 || >=20.0.0}
|
engines: {node: ^18.0.0 || >=20.0.0}
|
||||||
@@ -5136,10 +5159,6 @@ packages:
|
|||||||
'@oslojs/binary': 0.2.3
|
'@oslojs/binary': 0.2.3
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@oslojs/encoding@0.3.0:
|
|
||||||
resolution: {integrity: sha512-i374LSDXuo2l+waPlejutIkw1zOA1wWxpvaXwQgyGsr5eZwX29hH1KIKFopPTriR4DKH+7nL7c5wNx16a/6voQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@oslojs/encoding@0.4.1:
|
/@oslojs/encoding@0.4.1:
|
||||||
resolution: {integrity: sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==}
|
resolution: {integrity: sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -5154,10 +5173,6 @@ packages:
|
|||||||
'@oslojs/encoding': 0.4.1
|
'@oslojs/encoding': 0.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@oslojs/oauth2@0.5.0:
|
|
||||||
resolution: {integrity: sha512-t70+e4EgnzTbU4MrUWXzqWN2A6RJrlSSvwwuBv6E0Ap6/nsIXrjsdRWeTcSvvXTcC6fi0YdWaqEWLipcEm2Cgw==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@oxc-parser/wasm@0.1.0:
|
/@oxc-parser/wasm@0.1.0:
|
||||||
resolution: {integrity: sha512-oA7XhTbg9rRBJhIzxCNhJwYmON/9LFAH4GBQxl7HWmGSS6HTrb2t6Peq82nxY0W7knguH52neh9T7zs27FVvsQ==}
|
resolution: {integrity: sha512-oA7XhTbg9rRBJhIzxCNhJwYmON/9LFAH4GBQxl7HWmGSS6HTrb2t6Peq82nxY0W7knguH52neh9T7zs27FVvsQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -9298,15 +9313,6 @@ packages:
|
|||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@ts-morph/common@0.24.0:
|
|
||||||
resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==}
|
|
||||||
dependencies:
|
|
||||||
fast-glob: 3.3.2
|
|
||||||
minimatch: 9.0.5
|
|
||||||
mkdirp: 3.0.1
|
|
||||||
path-browserify: 1.0.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@tsparticles/basic@3.5.0:
|
/@tsparticles/basic@3.5.0:
|
||||||
resolution: {integrity: sha512-oty33TxM2aHWrzcwWRic1bQ04KBCdpnvzv8JXEkx5Uyp70vgVegUbtKmwGki3shqKZIt3v2qE4I8NsK6onhLrA==}
|
resolution: {integrity: sha512-oty33TxM2aHWrzcwWRic1bQ04KBCdpnvzv8JXEkx5Uyp70vgVegUbtKmwGki3shqKZIt3v2qE4I8NsK6onhLrA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -9594,7 +9600,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==}
|
resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.16.9
|
'@types/node': 20.16.9
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/body-parser@1.19.5:
|
/@types/body-parser@1.19.5:
|
||||||
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
|
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
|
||||||
@@ -10798,16 +10803,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@vue/compiler-core@3.5.10:
|
|
||||||
resolution: {integrity: sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==}
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.25.6
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
entities: 4.5.0
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
source-map-js: 1.2.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-core@3.5.9:
|
/@vue/compiler-core@3.5.9:
|
||||||
resolution: {integrity: sha512-KE1sCdwqSKq0CQ/ltg3XnlMTKeinjegIkuFsuq9DKvNPmqLGdmI51ChZdGBBRXIvEYTLm8X/JxOuBQ1HqF/+PA==}
|
resolution: {integrity: sha512-KE1sCdwqSKq0CQ/ltg3XnlMTKeinjegIkuFsuq9DKvNPmqLGdmI51ChZdGBBRXIvEYTLm8X/JxOuBQ1HqF/+PA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -10817,33 +10812,12 @@ packages:
|
|||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
/@vue/compiler-dom@3.5.10:
|
|
||||||
resolution: {integrity: sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-core': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-dom@3.5.9:
|
/@vue/compiler-dom@3.5.9:
|
||||||
resolution: {integrity: sha512-gEAURwPo902AsJF50vl59VaWR+Cx6cX9SoqLYHu1jq9hDbmQlXvpZyYNIIbxa2JTJ+FD/oBQweVUwuTQv79KTg==}
|
resolution: {integrity: sha512-gEAURwPo902AsJF50vl59VaWR+Cx6cX9SoqLYHu1jq9hDbmQlXvpZyYNIIbxa2JTJ+FD/oBQweVUwuTQv79KTg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-core': 3.5.9
|
'@vue/compiler-core': 3.5.9
|
||||||
'@vue/shared': 3.5.9
|
'@vue/shared': 3.5.9
|
||||||
|
|
||||||
/@vue/compiler-sfc@3.5.10:
|
|
||||||
resolution: {integrity: sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==}
|
|
||||||
dependencies:
|
|
||||||
'@babel/parser': 7.25.6
|
|
||||||
'@vue/compiler-core': 3.5.10
|
|
||||||
'@vue/compiler-dom': 3.5.10
|
|
||||||
'@vue/compiler-ssr': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
estree-walker: 2.0.2
|
|
||||||
magic-string: 0.30.11
|
|
||||||
postcss: 8.4.47
|
|
||||||
source-map-js: 1.2.1
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-sfc@3.5.9:
|
/@vue/compiler-sfc@3.5.9:
|
||||||
resolution: {integrity: sha512-kp9qawcTXakYm0TN6YAwH24IurSywoXh4fWhRbLu0at4UVyo994bhEzJlQn82eiyqtut4GjkQodSfn8drFbpZQ==}
|
resolution: {integrity: sha512-kp9qawcTXakYm0TN6YAwH24IurSywoXh4fWhRbLu0at4UVyo994bhEzJlQn82eiyqtut4GjkQodSfn8drFbpZQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -10857,13 +10831,6 @@ packages:
|
|||||||
postcss: 8.4.47
|
postcss: 8.4.47
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
|
|
||||||
/@vue/compiler-ssr@3.5.10:
|
|
||||||
resolution: {integrity: sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-dom': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/compiler-ssr@3.5.9:
|
/@vue/compiler-ssr@3.5.9:
|
||||||
resolution: {integrity: sha512-fb1g2mQv32QzIei76rlXRTz08Grw+ZzBXSQfHo4StGFutm/flyebw3dGJkexKwcU3GjX9s5fIGjEv/cjO8j8Yw==}
|
resolution: {integrity: sha512-fb1g2mQv32QzIei76rlXRTz08Grw+ZzBXSQfHo4StGFutm/flyebw3dGJkexKwcU3GjX9s5fIGjEv/cjO8j8Yw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -10908,39 +10875,17 @@ packages:
|
|||||||
rfdc: 1.4.1
|
rfdc: 1.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@vue/reactivity@3.5.10:
|
|
||||||
resolution: {integrity: sha512-kW08v06F6xPSHhid9DJ9YjOGmwNDOsJJQk0ax21wKaUYzzuJGEuoKNU2Ujux8FLMrP7CFJJKsHhXN9l2WOVi2g==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/reactivity@3.5.9:
|
/@vue/reactivity@3.5.9:
|
||||||
resolution: {integrity: sha512-88ApgNZ6yPYpyYkTfXzcbWk6O8+LrPRIpa/U4AdeTzpfRUO+EUt5jemnTBVSlAUNmlYY96xa5feUNEq+BouLog==}
|
resolution: {integrity: sha512-88ApgNZ6yPYpyYkTfXzcbWk6O8+LrPRIpa/U4AdeTzpfRUO+EUt5jemnTBVSlAUNmlYY96xa5feUNEq+BouLog==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/shared': 3.5.9
|
'@vue/shared': 3.5.9
|
||||||
|
|
||||||
/@vue/runtime-core@3.5.10:
|
|
||||||
resolution: {integrity: sha512-9Q86I5Qq3swSkFfzrZ+iqEy7Vla325M7S7xc1NwKnRm/qoi1Dauz0rT6mTMmscqx4qz0EDJ1wjB+A36k7rl8mA==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/reactivity': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/runtime-core@3.5.9:
|
/@vue/runtime-core@3.5.9:
|
||||||
resolution: {integrity: sha512-YAeP0zNkjSl5mEc1NxOg9qoAhLNbREElHAhfYbMXT57oF0ixehEEJWBhg2uvVxslCGh23JhpEAyMvJrJHW9WGg==}
|
resolution: {integrity: sha512-YAeP0zNkjSl5mEc1NxOg9qoAhLNbREElHAhfYbMXT57oF0ixehEEJWBhg2uvVxslCGh23JhpEAyMvJrJHW9WGg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/reactivity': 3.5.9
|
'@vue/reactivity': 3.5.9
|
||||||
'@vue/shared': 3.5.9
|
'@vue/shared': 3.5.9
|
||||||
|
|
||||||
/@vue/runtime-dom@3.5.10:
|
|
||||||
resolution: {integrity: sha512-t3x7ht5qF8ZRi1H4fZqFzyY2j+GTMTDxRheT+i8M9Ph0oepUxoadmbwlFwMoW7RYCpNQLpP2Yx3feKs+fyBdpA==}
|
|
||||||
dependencies:
|
|
||||||
'@vue/reactivity': 3.5.10
|
|
||||||
'@vue/runtime-core': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
csstype: 3.1.3
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/runtime-dom@3.5.9:
|
/@vue/runtime-dom@3.5.9:
|
||||||
resolution: {integrity: sha512-5Oq/5oenpB9lw94moKvOHqBDEaMSyDmcu2HS8AtAT6/pwdo/t9fR9aVtLh6FzYGGqZR9yRfoHAN6P7goblq1aA==}
|
resolution: {integrity: sha512-5Oq/5oenpB9lw94moKvOHqBDEaMSyDmcu2HS8AtAT6/pwdo/t9fR9aVtLh6FzYGGqZR9yRfoHAN6P7goblq1aA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -10949,16 +10894,6 @@ packages:
|
|||||||
'@vue/shared': 3.5.9
|
'@vue/shared': 3.5.9
|
||||||
csstype: 3.1.3
|
csstype: 3.1.3
|
||||||
|
|
||||||
/@vue/server-renderer@3.5.10(vue@3.5.10):
|
|
||||||
resolution: {integrity: sha512-IVE97tt2kGKwHNq9yVO0xdh1IvYfZCShvDSy46JIh5OQxP1/EXSpoDqetVmyIzL7CYOWnnmMkVqd7YK2QSWkdw==}
|
|
||||||
peerDependencies:
|
|
||||||
vue: 3.5.10
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-ssr': 3.5.10
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
vue: 3.5.10(typescript@5.6.2)
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/server-renderer@3.5.9(vue@3.5.9):
|
/@vue/server-renderer@3.5.9(vue@3.5.9):
|
||||||
resolution: {integrity: sha512-tbuUsZfMWGazR9LXLNiiDSTwkO8K9sLyR70diY+FbQmKmh7236PPz4jkTxymelV8D89IJUGtbfe4VdmpHkmuxg==}
|
resolution: {integrity: sha512-tbuUsZfMWGazR9LXLNiiDSTwkO8K9sLyR70diY+FbQmKmh7236PPz4jkTxymelV8D89IJUGtbfe4VdmpHkmuxg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -10968,10 +10903,6 @@ packages:
|
|||||||
'@vue/shared': 3.5.9
|
'@vue/shared': 3.5.9
|
||||||
vue: 3.5.9(typescript@5.6.1-rc)
|
vue: 3.5.9(typescript@5.6.1-rc)
|
||||||
|
|
||||||
/@vue/shared@3.5.10:
|
|
||||||
resolution: {integrity: sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@vue/shared@3.5.9:
|
/@vue/shared@3.5.9:
|
||||||
resolution: {integrity: sha512-8wiT/m0mnsLhTME0mPgc57jv+4TipRBSAAmheUdYgiOaO6AobZPNOmm87ub4np65VVDgLcWxc+Edc++5Wyz1uA==}
|
resolution: {integrity: sha512-8wiT/m0mnsLhTME0mPgc57jv+4TipRBSAAmheUdYgiOaO6AobZPNOmm87ub4np65VVDgLcWxc+Edc++5Wyz1uA==}
|
||||||
|
|
||||||
@@ -11871,14 +11802,6 @@ packages:
|
|||||||
zip-stream: 6.0.1
|
zip-stream: 6.0.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/arctic@2.0.0-next.5:
|
|
||||||
resolution: {integrity: sha512-5d2miFSz5v1rTD+OOS5vmzqwgdWXFRJrnjVV0WxfDaADmt0afpjHAOGN5kaNQoHMsEJs+gCidGM92VNhIf6Hng==}
|
|
||||||
dependencies:
|
|
||||||
'@oslojs/crypto': 0.6.0
|
|
||||||
'@oslojs/encoding': 0.3.0
|
|
||||||
'@oslojs/oauth2': 0.5.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/arctic@2.0.0-next.9:
|
/arctic@2.0.0-next.9:
|
||||||
resolution: {integrity: sha512-VUi47ekY8oWEa+NE4AcEl5fwZF5lMn0/PCQUsPieLP8wFVXVFR+vxDKESkMQg+d8Ffd7LBLXWW/DTIgvD8zRtw==}
|
resolution: {integrity: sha512-VUi47ekY8oWEa+NE4AcEl5fwZF5lMn0/PCQUsPieLP8wFVXVFR+vxDKESkMQg+d8Ffd7LBLXWW/DTIgvD8zRtw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -12209,6 +12132,7 @@ packages:
|
|||||||
/aws-ssl-profiles@1.1.2:
|
/aws-ssl-profiles@1.1.2:
|
||||||
resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==}
|
resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==}
|
||||||
engines: {node: '>= 6.0.0'}
|
engines: {node: '>= 6.0.0'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/axe-core@4.10.0:
|
/axe-core@4.10.0:
|
||||||
resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
|
resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
|
||||||
@@ -12308,64 +12232,6 @@ packages:
|
|||||||
/base64-js@1.5.1:
|
/base64-js@1.5.1:
|
||||||
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
||||||
|
|
||||||
/better-auth@0.0.4(react@18.3.1)(solid-js@1.9.1)(typescript@5.6.2)(vue@3.5.10):
|
|
||||||
resolution: {integrity: sha512-PR1bR6zbgNRkSHZAPQQEqaHpHMyASXwBU2IbDY60gDWJO72d3wBSCiOKQcSGJRxJ55O9jitHVMHqHcAtC0++0A==}
|
|
||||||
hasBin: true
|
|
||||||
dependencies:
|
|
||||||
'@better-fetch/fetch': 1.1.9
|
|
||||||
'@better-fetch/logger': 1.1.3
|
|
||||||
'@chronark/access-policies': 0.0.2
|
|
||||||
'@nanostores/query': 0.3.4(nanostores@0.11.3)
|
|
||||||
'@nanostores/react': 0.7.3(nanostores@0.11.3)(react@18.3.1)
|
|
||||||
'@nanostores/solid': 0.4.2(nanostores@0.11.3)(solid-js@1.9.1)
|
|
||||||
'@nanostores/vue': 0.10.0(nanostores@0.11.3)(vue@3.5.10)
|
|
||||||
'@noble/ciphers': 0.6.0
|
|
||||||
'@noble/hashes': 1.5.0
|
|
||||||
'@paralleldrive/cuid2': 2.2.2
|
|
||||||
'@simplewebauthn/browser': 10.0.0
|
|
||||||
'@simplewebauthn/server': 10.0.1
|
|
||||||
arctic: 2.0.0-next.5
|
|
||||||
better-call: 0.1.38(typescript@5.6.2)
|
|
||||||
chalk: 5.3.0
|
|
||||||
commander: 12.1.0
|
|
||||||
consola: 3.2.3
|
|
||||||
dotenv: 16.4.5
|
|
||||||
jiti: 1.21.6
|
|
||||||
jose: 5.9.3
|
|
||||||
kysely: 0.27.4
|
|
||||||
mysql2: 3.11.3
|
|
||||||
nanostores: 0.11.3
|
|
||||||
oauth4webapi: 2.17.0
|
|
||||||
ora: 8.1.0
|
|
||||||
oslo: 1.2.1
|
|
||||||
pg: 8.13.0
|
|
||||||
prompts: 2.4.2
|
|
||||||
tiny-glob: 0.2.9
|
|
||||||
ts-morph: 23.0.0
|
|
||||||
zod: 3.23.8
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- '@nanostores/logger'
|
|
||||||
- '@vue/devtools-api'
|
|
||||||
- encoding
|
|
||||||
- pg-native
|
|
||||||
- react
|
|
||||||
- solid-js
|
|
||||||
- typescript
|
|
||||||
- vue
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/better-call@0.1.38(typescript@5.6.2):
|
|
||||||
resolution: {integrity: sha512-Dx/T6/l1C1yDialymI+q3YN85lFPSwD35BvfsJxwD9G30lfwRSDS3uNKyYlykwacWBNLYrizmuMXnCxxu7oCBA==}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: ^5.6.0-beta
|
|
||||||
dependencies:
|
|
||||||
'@better-fetch/fetch': 1.1.9
|
|
||||||
'@types/set-cookie-parser': 2.4.10
|
|
||||||
rou3: 0.5.1
|
|
||||||
set-cookie-parser: 2.7.0
|
|
||||||
typescript: 5.6.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/better-call@0.2.3-beta.10:
|
/better-call@0.2.3-beta.10:
|
||||||
resolution: {integrity: sha512-yIb0lL6/XNOFEEon28wLdjDy/4oMKThFFt/5Tzz7xcwqqh++FwiLFIDwgVFP9pZYT4ytn6GdqQGQlFMe6ugaVg==}
|
resolution: {integrity: sha512-yIb0lL6/XNOFEEon28wLdjDy/4oMKThFFt/5Tzz7xcwqqh++FwiLFIDwgVFP9pZYT4ytn6GdqQGQlFMe6ugaVg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -13022,10 +12888,6 @@ packages:
|
|||||||
phenomenon: 1.6.0
|
phenomenon: 1.6.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/code-block-writer@13.0.2:
|
|
||||||
resolution: {integrity: sha512-XfXzAGiStXSmCIwrkdfvc7FS5Dtj8yelCtyOf2p2skCAfvLd6zu0rGzuS9NSCO3bq1JKpFZ7tbKdKlcd5occQA==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/code-red@1.0.4:
|
/code-red@1.0.4:
|
||||||
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
|
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -13965,7 +13827,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
|
resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/db0@0.1.4:
|
/db0@0.1.4(better-sqlite3@11.3.0):
|
||||||
resolution: {integrity: sha512-Ft6eCwONYxlwLjBXSJxw0t0RYtA5gW9mq8JfBXn9TtC0nDPlqePAhpv9v4g9aONBi6JI1OXHTKKkUYGd+BOrCA==}
|
resolution: {integrity: sha512-Ft6eCwONYxlwLjBXSJxw0t0RYtA5gW9mq8JfBXn9TtC0nDPlqePAhpv9v4g9aONBi6JI1OXHTKKkUYGd+BOrCA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@libsql/client': ^0.5.2
|
'@libsql/client': ^0.5.2
|
||||||
@@ -13978,6 +13840,8 @@ packages:
|
|||||||
optional: true
|
optional: true
|
||||||
drizzle-orm:
|
drizzle-orm:
|
||||||
optional: true
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
better-sqlite3: 11.3.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/debounce@1.2.1:
|
/debounce@1.2.1:
|
||||||
@@ -16264,6 +16128,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
|
resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
is-property: 1.0.2
|
is-property: 1.0.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/genfun@4.0.1:
|
/genfun@4.0.1:
|
||||||
resolution: {integrity: sha512-48yv1eDS5Qrz6cbSDBBik0u7jCgC/eA9eZrl9MIN1LfKzFTuGt6EHgr31YM8yT9cjb5BplXb4Iz3VtOYmgt8Jg==}
|
resolution: {integrity: sha512-48yv1eDS5Qrz6cbSDBBik0u7jCgC/eA9eZrl9MIN1LfKzFTuGt6EHgr31YM8yT9cjb5BplXb4Iz3VtOYmgt8Jg==}
|
||||||
@@ -17512,6 +17377,7 @@ packages:
|
|||||||
|
|
||||||
/is-property@1.0.2:
|
/is-property@1.0.2:
|
||||||
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
|
resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/is-redirect@1.0.0:
|
/is-redirect@1.0.0:
|
||||||
resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==}
|
resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==}
|
||||||
@@ -18290,6 +18156,7 @@ packages:
|
|||||||
|
|
||||||
/long@5.2.3:
|
/long@5.2.3:
|
||||||
resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
|
resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/longest-streak@3.1.0:
|
/longest-streak@3.1.0:
|
||||||
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
|
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
|
||||||
@@ -18330,10 +18197,12 @@ packages:
|
|||||||
/lru-cache@7.18.3:
|
/lru-cache@7.18.3:
|
||||||
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
|
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/lru.min@1.1.1:
|
/lru.min@1.1.1:
|
||||||
resolution: {integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==}
|
resolution: {integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==}
|
||||||
engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'}
|
engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/lucide-react@0.428.0(react@18.3.1):
|
/lucide-react@0.428.0(react@18.3.1):
|
||||||
resolution: {integrity: sha512-rGrzslfEcgqwh+TLBC5qJ8wvVIXhLvAIXVFKNHndYyb1utSxxn9rXOC+1CNJLi6yNOooyPqIs6+3YCp6uSiEvg==}
|
resolution: {integrity: sha512-rGrzslfEcgqwh+TLBC5qJ8wvVIXhLvAIXVFKNHndYyb1utSxxn9rXOC+1CNJLi6yNOooyPqIs6+3YCp6uSiEvg==}
|
||||||
@@ -19489,12 +19358,6 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
/mkdirp@3.0.1:
|
|
||||||
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
hasBin: true
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/mlly@1.7.1:
|
/mlly@1.7.1:
|
||||||
resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
|
resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -19611,6 +19474,7 @@ packages:
|
|||||||
named-placeholders: 1.1.3
|
named-placeholders: 1.1.3
|
||||||
seq-queue: 0.0.5
|
seq-queue: 0.0.5
|
||||||
sqlstring: 2.3.3
|
sqlstring: 2.3.3
|
||||||
|
dev: true
|
||||||
|
|
||||||
/mz@2.7.0:
|
/mz@2.7.0:
|
||||||
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
|
||||||
@@ -19624,6 +19488,7 @@ packages:
|
|||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
lru-cache: 7.18.3
|
lru-cache: 7.18.3
|
||||||
|
dev: true
|
||||||
|
|
||||||
/nanoassert@1.1.0:
|
/nanoassert@1.1.0:
|
||||||
resolution: {integrity: sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==}
|
resolution: {integrity: sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==}
|
||||||
@@ -19792,7 +19657,7 @@ packages:
|
|||||||
- babel-plugin-macros
|
- babel-plugin-macros
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/nitropack@2.9.7:
|
/nitropack@2.9.7(better-sqlite3@11.3.0):
|
||||||
resolution: {integrity: sha512-aKXvtNrWkOCMsQbsk4A0qQdBjrJ1ZcvwlTQevI/LAgLWLYc5L7Q/YiYxGLal4ITyNSlzir1Cm1D2ZxnYhmpMEw==}
|
resolution: {integrity: sha512-aKXvtNrWkOCMsQbsk4A0qQdBjrJ1ZcvwlTQevI/LAgLWLYc5L7Q/YiYxGLal4ITyNSlzir1Cm1D2ZxnYhmpMEw==}
|
||||||
engines: {node: ^16.11.0 || >=17.0.0}
|
engines: {node: ^16.11.0 || >=17.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -19823,7 +19688,7 @@ packages:
|
|||||||
cookie-es: 1.2.2
|
cookie-es: 1.2.2
|
||||||
croner: 8.1.1
|
croner: 8.1.1
|
||||||
crossws: 0.2.4
|
crossws: 0.2.4
|
||||||
db0: 0.1.4
|
db0: 0.1.4(better-sqlite3@11.3.0)
|
||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
destr: 2.0.3
|
destr: 2.0.3
|
||||||
dot-prop: 8.0.2
|
dot-prop: 8.0.2
|
||||||
@@ -20078,7 +19943,7 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/nuxt@3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.9)(typescript@5.6.1-rc)(vite@5.4.8):
|
/nuxt@3.13.2(@biomejs/biome@1.7.3)(@types/node@20.16.9)(better-sqlite3@11.3.0)(typescript@5.6.1-rc)(vite@5.4.8):
|
||||||
resolution: {integrity: sha512-Bjc2qRsipfBhjXsBEJCN+EUAukhdgFv/KoIR5HFB2hZOYRSqXBod3oWQs78k3ja1nlIhAEdBG533898KJxUtJw==}
|
resolution: {integrity: sha512-Bjc2qRsipfBhjXsBEJCN+EUAukhdgFv/KoIR5HFB2hZOYRSqXBod3oWQs78k3ja1nlIhAEdBG533898KJxUtJw==}
|
||||||
engines: {node: ^14.18.0 || >=16.10.0}
|
engines: {node: ^14.18.0 || >=16.10.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -20127,7 +19992,7 @@ packages:
|
|||||||
magic-string: 0.30.11
|
magic-string: 0.30.11
|
||||||
mlly: 1.7.1
|
mlly: 1.7.1
|
||||||
nanotar: 0.1.1
|
nanotar: 0.1.1
|
||||||
nitropack: 2.9.7
|
nitropack: 2.9.7(better-sqlite3@11.3.0)
|
||||||
nuxi: 3.14.0
|
nuxi: 3.14.0
|
||||||
nypm: 0.3.12
|
nypm: 0.3.12
|
||||||
ofetch: 1.4.0
|
ofetch: 1.4.0
|
||||||
@@ -22810,6 +22675,7 @@ packages:
|
|||||||
|
|
||||||
/seq-queue@0.0.5:
|
/seq-queue@0.0.5:
|
||||||
resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
|
resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/serialize-javascript@6.0.2:
|
/serialize-javascript@6.0.2:
|
||||||
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
|
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
|
||||||
@@ -23242,6 +23108,7 @@ packages:
|
|||||||
/sqlstring@2.3.3:
|
/sqlstring@2.3.3:
|
||||||
resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
|
resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/ssri@4.1.6:
|
/ssri@4.1.6:
|
||||||
resolution: {integrity: sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==}
|
resolution: {integrity: sha512-WUbCdgSAMQjTFZRWvSPpauryvREEA+Krn19rx67UlJEJx/M192ZHxMmJXjZ4tkdFm+Sb0SXGlENeQVlA5wY7kA==}
|
||||||
@@ -24182,13 +24049,6 @@ packages:
|
|||||||
/ts-interface-checker@0.1.13:
|
/ts-interface-checker@0.1.13:
|
||||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||||
|
|
||||||
/ts-morph@23.0.0:
|
|
||||||
resolution: {integrity: sha512-FcvFx7a9E8TUe6T3ShihXJLiJOiqyafzFKUO4aqIHDUCIvADdGNShcbc2W5PMr3LerXRv7mafvFZ9lRENxJmug==}
|
|
||||||
dependencies:
|
|
||||||
'@ts-morph/common': 0.24.0
|
|
||||||
code-block-writer: 13.0.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/tsconfck@3.1.3(typescript@5.6.2):
|
/tsconfck@3.1.3(typescript@5.6.2):
|
||||||
resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==}
|
resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==}
|
||||||
engines: {node: ^18 || >=20}
|
engines: {node: ^18 || >=20}
|
||||||
@@ -25750,22 +25610,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-J5+TwkayiBkieYBG8PGk5PMys8+UZxDmT/CCaX9otDzRONRr5hgTgo2Fha2krUFnUw1d576jsNGXhmAL06ixfA==}
|
resolution: {integrity: sha512-J5+TwkayiBkieYBG8PGk5PMys8+UZxDmT/CCaX9otDzRONRr5hgTgo2Fha2krUFnUw1d576jsNGXhmAL06ixfA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/vue@3.5.10(typescript@5.6.2):
|
|
||||||
resolution: {integrity: sha512-Vy2kmJwHPlouC/tSnIgXVg03SG+9wSqT1xu1Vehc+ChsXsRd7jLkKgMltVEFOzUdBr3uFwBCG+41LJtfAcBRng==}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@vue/compiler-dom': 3.5.10
|
|
||||||
'@vue/compiler-sfc': 3.5.10
|
|
||||||
'@vue/runtime-dom': 3.5.10
|
|
||||||
'@vue/server-renderer': 3.5.10(vue@3.5.10)
|
|
||||||
'@vue/shared': 3.5.10
|
|
||||||
typescript: 5.6.2
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/vue@3.5.9(typescript@5.6.1-rc):
|
/vue@3.5.9(typescript@5.6.1-rc):
|
||||||
resolution: {integrity: sha512-nHzQhZ5cjFKynAY2beAm7XtJ5C13VKAFTLTgRYXy+Id1KEKBeiK6hO2RcW1hUjdbHMadz1YzxyHgQigOC54wug==}
|
resolution: {integrity: sha512-nHzQhZ5cjFKynAY2beAm7XtJ5C13VKAFTLTgRYXy+Id1KEKBeiK6hO2RcW1hUjdbHMadz1YzxyHgQigOC54wug==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
|||||||
Reference in New Issue
Block a user