mirror of
https://github.com/better-auth/better-auth.git
synced 2026-10-20 20:26:55 -05:00
Merge branch 'canary' into tunis
This commit is contained in:
@@ -40,3 +40,4 @@ vite
|
||||
electronjs
|
||||
wagmi
|
||||
tldts
|
||||
headimgurl
|
||||
|
||||
Generated
+34
-39
@@ -1745,9 +1745,9 @@ packages:
|
||||
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
camelcase@6.3.0:
|
||||
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
|
||||
engines: {node: '>=10'}
|
||||
camelcase@9.0.0:
|
||||
resolution: {integrity: sha512-TO9xmyXTZ9HUHI8M1OnvExxYB0eYVS/1e5s7IDMTAoIcwUd+aNcFODs6Xk83mobk0velyHFQgA1yIrvYc6wclw==}
|
||||
engines: {node: '>=20'}
|
||||
|
||||
caniuse-lite@1.0.30001775:
|
||||
resolution: {integrity: sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==}
|
||||
@@ -2002,11 +2002,11 @@ packages:
|
||||
fast-uri@3.1.0:
|
||||
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
|
||||
|
||||
fast-xml-builder@1.0.0:
|
||||
resolution: {integrity: sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==}
|
||||
fast-xml-builder@1.1.0:
|
||||
resolution: {integrity: sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg==}
|
||||
|
||||
fast-xml-parser@5.4.2:
|
||||
resolution: {integrity: sha512-pw/6pIl4k0CSpElPEJhDppLzaixDEuWui2CUQQBH/ECDf7+y6YwA4Gf7Tyb0Rfe4DIMuZipYj4AEL0nACKglvQ==}
|
||||
fast-xml-parser@5.5.1:
|
||||
resolution: {integrity: sha512-JTpMz8P5mDoNYzXTmTT/xzWjFiCWi0U+UQTJtrFH9muXsr2RqtXZPbnCW5h2mKsOd4u3XcPWCvDSrnaBPlUcMQ==}
|
||||
hasBin: true
|
||||
|
||||
fetch-blob@3.2.0:
|
||||
@@ -2377,10 +2377,6 @@ packages:
|
||||
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
node-forge@1.3.3:
|
||||
resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
|
||||
engines: {node: '>= 6.13.0'}
|
||||
|
||||
node-rsa@1.1.1:
|
||||
resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==}
|
||||
|
||||
@@ -2402,9 +2398,6 @@ packages:
|
||||
once@1.4.0:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
|
||||
pako@1.0.11:
|
||||
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
|
||||
|
||||
parseley@0.12.1:
|
||||
resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
|
||||
|
||||
@@ -2412,6 +2405,10 @@ packages:
|
||||
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
path-expression-matcher@1.1.2:
|
||||
resolution: {integrity: sha512-LXWqJmcpp2BKOEmgt4CyuESFmBfPuhJlAHKJsFzuJU6CxErWk75BrO+Ni77M9OxHN6dCYKM4vj+21Z6cOL96YQ==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
|
||||
path-key@3.1.1:
|
||||
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -2596,8 +2593,8 @@ packages:
|
||||
safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
|
||||
samlify@2.10.2:
|
||||
resolution: {integrity: sha512-y5s1cHwclqwP8h7K2Wj9SfP1q+1S9+jrs5OAegYTLAiuFi7nDvuKqbiXLmUTvYPMpzHcX94wTY2+D604jgTKvA==}
|
||||
samlify@2.11.0:
|
||||
resolution: {integrity: sha512-1C9ukjlf0rRsuyqdzztqikdItqa33j9NCCDZgeBiWk0etU6vxNB+SWJKW4Flk07ZlhXeev/twALEKrPhIAyfDg==}
|
||||
|
||||
scheduler@0.27.0:
|
||||
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
|
||||
@@ -2771,10 +2768,6 @@ packages:
|
||||
resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
|
||||
hasBin: true
|
||||
|
||||
uuid@8.3.2:
|
||||
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
|
||||
hasBin: true
|
||||
|
||||
vary@1.1.2:
|
||||
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
@@ -2830,6 +2823,10 @@ packages:
|
||||
resolution: {integrity: sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==}
|
||||
engines: {node: '>=0.6.0'}
|
||||
|
||||
xpath@0.0.34:
|
||||
resolution: {integrity: sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==}
|
||||
engines: {node: '>=0.6.0'}
|
||||
|
||||
yallist@4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
|
||||
@@ -2897,9 +2894,9 @@ snapshots:
|
||||
'@better-fetch/fetch': 1.1.21
|
||||
better-auth: link:../../packages/better-auth
|
||||
better-call: 2.0.0-beta.4(zod@4.3.6)
|
||||
fast-xml-parser: 5.4.2
|
||||
fast-xml-parser: 5.5.1
|
||||
jose: 6.1.3
|
||||
samlify: 2.10.2
|
||||
samlify: 2.11.0
|
||||
zod: 4.3.6
|
||||
|
||||
'@better-auth/utils@0.3.1': {}
|
||||
@@ -4262,7 +4259,7 @@ snapshots:
|
||||
call-bind-apply-helpers: 1.0.2
|
||||
get-intrinsic: 1.3.0
|
||||
|
||||
camelcase@6.3.0: {}
|
||||
camelcase@9.0.0: {}
|
||||
|
||||
caniuse-lite@1.0.30001775: {}
|
||||
|
||||
@@ -4494,11 +4491,14 @@ snapshots:
|
||||
|
||||
fast-uri@3.1.0: {}
|
||||
|
||||
fast-xml-builder@1.0.0: {}
|
||||
|
||||
fast-xml-parser@5.4.2:
|
||||
fast-xml-builder@1.1.0:
|
||||
dependencies:
|
||||
fast-xml-builder: 1.0.0
|
||||
path-expression-matcher: 1.1.2
|
||||
|
||||
fast-xml-parser@5.5.1:
|
||||
dependencies:
|
||||
fast-xml-builder: 1.1.0
|
||||
path-expression-matcher: 1.1.2
|
||||
strnum: 2.2.0
|
||||
|
||||
fetch-blob@3.2.0:
|
||||
@@ -4818,8 +4818,6 @@ snapshots:
|
||||
fetch-blob: 3.2.0
|
||||
formdata-polyfill: 4.0.10
|
||||
|
||||
node-forge@1.3.3: {}
|
||||
|
||||
node-rsa@1.1.1:
|
||||
dependencies:
|
||||
asn1: 0.2.6
|
||||
@@ -4840,8 +4838,6 @@ snapshots:
|
||||
dependencies:
|
||||
wrappy: 1.0.2
|
||||
|
||||
pako@1.0.11: {}
|
||||
|
||||
parseley@0.12.1:
|
||||
dependencies:
|
||||
leac: 0.6.0
|
||||
@@ -4849,6 +4845,8 @@ snapshots:
|
||||
|
||||
parseurl@1.3.3: {}
|
||||
|
||||
path-expression-matcher@1.1.2: {}
|
||||
|
||||
path-key@3.1.1: {}
|
||||
|
||||
path-to-regexp@8.3.0: {}
|
||||
@@ -5033,19 +5031,16 @@ snapshots:
|
||||
|
||||
safer-buffer@2.1.2: {}
|
||||
|
||||
samlify@2.10.2:
|
||||
samlify@2.11.0:
|
||||
dependencies:
|
||||
'@authenio/xml-encryption': 2.0.2
|
||||
'@xmldom/xmldom': 0.8.11
|
||||
camelcase: 6.3.0
|
||||
node-forge: 1.3.3
|
||||
camelcase: 9.0.0
|
||||
node-rsa: 1.1.1
|
||||
pako: 1.0.11
|
||||
uuid: 8.3.2
|
||||
xml: 1.0.1
|
||||
xml-crypto: 6.1.2
|
||||
xml-escape: 1.1.0
|
||||
xpath: 0.0.32
|
||||
xpath: 0.0.34
|
||||
|
||||
scheduler@0.27.0: {}
|
||||
|
||||
@@ -5236,8 +5231,6 @@ snapshots:
|
||||
|
||||
uuid@10.0.0: {}
|
||||
|
||||
uuid@8.3.2: {}
|
||||
|
||||
vary@1.1.2: {}
|
||||
|
||||
vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
|
||||
@@ -5290,6 +5283,8 @@ snapshots:
|
||||
|
||||
xpath@0.0.33: {}
|
||||
|
||||
xpath@0.0.34: {}
|
||||
|
||||
yallist@4.0.0: {}
|
||||
|
||||
zod-to-json-schema@3.25.1(zod@4.3.6):
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
title: WeChat
|
||||
description: WeChat provider setup and usage.
|
||||
---
|
||||
|
||||
<Steps>
|
||||
<Step>
|
||||
### Get your WeChat Credentials
|
||||
To use WeChat sign in, you need to register a website application on the [WeChat Open Platform](https://open.weixin.qq.com/), set the `Authorization Callback Domain` to the better auth domain and get your App ID and App Secret.
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### Configure the provider
|
||||
To configure the provider, you need to import the provider and pass it to the `socialProviders` option of the auth instance.
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth"
|
||||
|
||||
export const auth = betterAuth({
|
||||
socialProviders: {
|
||||
wechat: { // [!code highlight]
|
||||
clientId: process.env.WECHAT_CLIENT_ID, // [!code highlight]
|
||||
clientSecret: process.env.WECHAT_CLIENT_SECRET, // [!code highlight]
|
||||
}, // [!code highlight]
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
#### Optional Configuration
|
||||
|
||||
You can customize the WeChat provider with additional options:
|
||||
|
||||
```ts title="auth.ts"
|
||||
export const auth = betterAuth({
|
||||
socialProviders: {
|
||||
wechat: {
|
||||
clientId: process.env.WECHAT_CLIENT_ID,
|
||||
clientSecret: process.env.WECHAT_CLIENT_SECRET,
|
||||
// Optional: Set UI language for the WeChat login page
|
||||
lang: "cn", // or "en" for English
|
||||
// Optional: Use custom scopes
|
||||
scope: [], // "snsapi_login" for web QR code login.
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
</Step>
|
||||
|
||||
<Step>
|
||||
### Sign In with WeChat
|
||||
To sign in with WeChat, you can use the `signIn.social` function provided by the client. The `signIn` function takes an object with the following properties:
|
||||
- `provider`: The provider to use. It should be set to `wechat`.
|
||||
|
||||
```ts title="auth-client.ts"
|
||||
import { createAuthClient } from "better-auth/client"
|
||||
const authClient = createAuthClient()
|
||||
|
||||
const signIn = async () => {
|
||||
const data = await authClient.signIn.social({
|
||||
provider: "wechat"
|
||||
})
|
||||
}
|
||||
```
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## Usage
|
||||
|
||||
### Platform Support
|
||||
|
||||
WeChat provider currently supports the Website Application platform type, which enables WeChat QR code login for web applications.
|
||||
|
||||
### Development Notes
|
||||
|
||||
- The redirect URL domain must match the domain configured in the WeChat Open Platform
|
||||
|
||||
@@ -81,7 +81,7 @@ const { headers, response } = await auth.api.signUpEmail({
|
||||
The `headers` will be a `Headers` object, which you can use to get the cookies or the headers.
|
||||
|
||||
```ts
|
||||
const cookies = headers.get("set-cookie");
|
||||
const cookies = headers.getSetCookie();
|
||||
const headers = headers.get("x-custom-header");
|
||||
```
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ Before you start, make sure you have a Better Auth instance configured. If you h
|
||||
|
||||
### Mount the handler
|
||||
|
||||
We need to mount the handler to SolidStart server. Put the following code in your `*auth.ts` file inside `/routes/api/auth` folder.
|
||||
We need to mount the handler to SolidStart server. Put the following code in your `[...auth].ts` file inside `/routes/api/auth` folder.
|
||||
|
||||
```ts title="*auth.ts"
|
||||
```ts title="[...auth].ts"
|
||||
import { auth } from "~/lib/auth";
|
||||
import { toSolidStartHandler } from "better-auth/solid-start";
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ Or optionally, you can pass a `customAPIKeyGetter` function to the plugin option
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth"
|
||||
import { apiKey } from "better-auth/plugins"
|
||||
import { apiKey } from "@better-auth/api-key"
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
|
||||
@@ -171,7 +171,7 @@ Default is `false`.
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth";
|
||||
import { apiKey } from "better-auth/plugins"
|
||||
import { apiKey } from "@better-auth/api-key"
|
||||
|
||||
export const auth = betterAuth({
|
||||
secondaryStorage: {
|
||||
@@ -202,7 +202,7 @@ Useful when you want to use a different storage backend specifically for API key
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth";
|
||||
import { apiKey } from "better-auth/plugins"
|
||||
import { apiKey } from "@better-auth/api-key"
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
@@ -307,7 +307,7 @@ You can configure default permissions that will be applied to all newly created
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth"
|
||||
import { apiKey } from "better-auth/plugins"
|
||||
import { apiKey } from "@better-auth/api-key"
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
@@ -327,7 +327,7 @@ You can also provide a function that returns permissions dynamically:
|
||||
|
||||
```ts title="auth.ts"
|
||||
import { betterAuth } from "better-auth"
|
||||
import { apiKey } from "better-auth/plugins"
|
||||
import { apiKey } from "@better-auth/api-key"
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
|
||||
@@ -913,6 +913,7 @@ stripe({
|
||||
| `limits` | `object` | Limits for plan (e.g. `{ projects: 10, storage: 5 }`). |
|
||||
| `group` | `string` | Defines the subscription lane for the plan. Plugin-managed flows allow one active or trialing subscription per `referenceId + group`. Omitted plans use `"default"`. |
|
||||
| `seatPriceId` | `string` | Per-seat billing price ID. Requires the `organization` plugin. |
|
||||
| `prorationBehavior` | `string` | Proration behavior on subscription updates: `"create_prorations"` (default), `"always_invoice"`, or `"none"`. |
|
||||
| `lineItems` | `LineItem[]` | Additional line items to include in the checkout session. |
|
||||
| `freeTrial` | `object` | Trial configuration. See [below](#free-trial-configuration). |
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
"@better-auth/sso": "workspace:*",
|
||||
"better-auth": "workspace:*",
|
||||
"drizzle-orm": "^0.45.1",
|
||||
"hono": "^4.12.4"
|
||||
"hono": "^4.12.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/vitest-pool-workers": "^0.12.18",
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@
|
||||
"dependencies": {
|
||||
"@hono/node-server": "^1.19.10",
|
||||
"better-auth": "workspace:*",
|
||||
"hono": "^4.12.4"
|
||||
"hono": "^4.12.7"
|
||||
}
|
||||
}
|
||||
|
||||
+12
@@ -117,6 +117,18 @@
|
||||
],
|
||||
"project": ["src/**/*.ts", "test/**/*.ts"]
|
||||
},
|
||||
"packages/kysely-adapter": {
|
||||
"ignoreDependencies": [
|
||||
// optional peer dependency
|
||||
"kysely"
|
||||
]
|
||||
},
|
||||
"packages/mongo-adapter": {
|
||||
"ignoreDependencies": [
|
||||
// optional peer dependency
|
||||
"mongodb"
|
||||
]
|
||||
},
|
||||
"packages/stripe": {
|
||||
"ignoreDependencies": [
|
||||
// implicit dependencies
|
||||
|
||||
@@ -1136,6 +1136,24 @@ C0.7,239.6,62.1,0.5,62.2,0.4c0,0,54,13.8,119.9,30.8S302.1,62,302.2,62c0.2,0,0.2,
|
||||
</svg>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "WeChat",
|
||||
href: "/docs/authentication/wechat",
|
||||
isNew: true,
|
||||
icon: () => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="1.2em"
|
||||
height="1.2em"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.504c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "Zoom",
|
||||
href: "/docs/authentication/zoom",
|
||||
|
||||
@@ -37,6 +37,26 @@ describe("forget password", async () => {
|
||||
expect(token.length).toBeGreaterThan(10);
|
||||
});
|
||||
|
||||
it("should reject untrusted redirectTo", async () => {
|
||||
const { client, testUser } = await getTestInstance({
|
||||
emailAndPassword: {
|
||||
enabled: true,
|
||||
async sendResetPassword() {},
|
||||
},
|
||||
trustedOrigins: ["http://localhost:3000"],
|
||||
advanced: {
|
||||
disableOriginCheck: false,
|
||||
},
|
||||
});
|
||||
const res = await client.requestPasswordReset({
|
||||
email: testUser.email,
|
||||
redirectTo: "http://malicious.com",
|
||||
});
|
||||
|
||||
expect(res.error?.status).toBe(403);
|
||||
expect(res.error?.message).toBe("Invalid redirectURL");
|
||||
});
|
||||
|
||||
it("should fail on invalid password", async () => {
|
||||
const res = await client.resetPassword(
|
||||
{
|
||||
|
||||
@@ -84,6 +84,7 @@ export const requestPasswordReset = createAuthEndpoint(
|
||||
},
|
||||
},
|
||||
},
|
||||
use: [originCheck((ctx) => ctx.body.redirectTo)],
|
||||
},
|
||||
async (ctx) => {
|
||||
if (!ctx.context.options.emailAndPassword?.sendResetPassword) {
|
||||
|
||||
@@ -41,6 +41,28 @@ type ReplaceAuthUserAndSession<
|
||||
InferSessionFromClient<ClientOpts>
|
||||
>;
|
||||
|
||||
type MergeCustomSessionField<
|
||||
R extends object,
|
||||
Field extends "user" | "session",
|
||||
InferType,
|
||||
> = Field extends keyof R
|
||||
? {
|
||||
[K in Field]: KeepNullishFromOriginal<
|
||||
R[K],
|
||||
NonNullable<R[K]> & InferType
|
||||
>;
|
||||
}
|
||||
: {};
|
||||
|
||||
type MergeCustomSessionWithInferred<
|
||||
R,
|
||||
ClientOpts extends BetterAuthClientOptions,
|
||||
> = R extends object
|
||||
? Omit<R, "user" | "session"> &
|
||||
MergeCustomSessionField<R, "user", InferUserFromClient<ClientOpts>> &
|
||||
MergeCustomSessionField<R, "session", InferSessionFromClient<ClientOpts>>
|
||||
: never;
|
||||
|
||||
type RefineAuthResponse<
|
||||
Data,
|
||||
ClientOpts extends BetterAuthClientOptions,
|
||||
@@ -194,7 +216,10 @@ export type InferRoute<API, COpts extends BetterAuthClientOptions> =
|
||||
Meta extends {
|
||||
CUSTOM_SESSION: boolean;
|
||||
}
|
||||
? NonNullable<Awaited<R>>
|
||||
? MergeCustomSessionWithInferred<
|
||||
NonNullable<Awaited<R>>,
|
||||
COpts
|
||||
>
|
||||
: T["path"] extends "/get-session"
|
||||
? {
|
||||
user: InferUserFromClient<COpts>;
|
||||
|
||||
@@ -3,6 +3,7 @@ import { createAuthClient } from "../../client";
|
||||
import { parseSetCookieHeader } from "../../cookies";
|
||||
import { getTestInstance } from "../../test-utils/test-instance";
|
||||
import type { BetterAuthOptions } from "../../types";
|
||||
import { inferAdditionalFields } from "../additional-fields/client";
|
||||
import { admin } from "../admin";
|
||||
import { adminClient } from "../admin/client";
|
||||
import { multiSession } from "../multi-session";
|
||||
@@ -300,4 +301,81 @@ describe("Custom Session Plugin Tests", async () => {
|
||||
};
|
||||
}>();
|
||||
});
|
||||
|
||||
it("should not add user/session to client getSession type when custom session omits them", async () => {
|
||||
const { auth } = await getTestInstance({
|
||||
plugins: [
|
||||
customSession(async () => {
|
||||
return {
|
||||
custom: {
|
||||
field: "field",
|
||||
},
|
||||
};
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const client = createAuthClient({
|
||||
plugins: [customSessionClient<typeof auth>()],
|
||||
});
|
||||
|
||||
type SessionData = typeof client.$Infer.Session;
|
||||
|
||||
// When custom session omits user/session, the client type must not claim they exist
|
||||
expectTypeOf<SessionData>().toEqualTypeOf<{
|
||||
custom: {
|
||||
field: string;
|
||||
};
|
||||
}>();
|
||||
|
||||
// Verify user and session are not in the type
|
||||
expectTypeOf<keyof SessionData>().toEqualTypeOf<"custom">();
|
||||
});
|
||||
|
||||
it("should infer both customSessionClient and inferAdditionalFields when combined", async () => {
|
||||
const { auth } = await getTestInstance({
|
||||
user: {
|
||||
additionalFields: {
|
||||
role: {
|
||||
type: "string",
|
||||
required: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
customSession(async ({ user, session }) => {
|
||||
return {
|
||||
user: {
|
||||
firstName: user.name.split(" ")[0],
|
||||
lastName: user.name.split(" ")[1],
|
||||
},
|
||||
session,
|
||||
customData: { message: "hello" },
|
||||
};
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const client = createAuthClient({
|
||||
plugins: [
|
||||
customSessionClient<typeof auth>(),
|
||||
inferAdditionalFields<typeof auth>(),
|
||||
],
|
||||
});
|
||||
|
||||
type SessionData = typeof client.$Infer.Session;
|
||||
type User = SessionData["user"];
|
||||
|
||||
expectTypeOf<User>().toMatchObjectType<{
|
||||
id: string;
|
||||
firstName: string | undefined;
|
||||
lastName: string | undefined;
|
||||
role?: string | undefined | null;
|
||||
}>();
|
||||
|
||||
type CustomData = SessionData["customData"];
|
||||
expectTypeOf<CustomData>().toMatchObjectType<{
|
||||
message: string;
|
||||
}>();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@ import { APIError } from "@better-auth/core/error";
|
||||
import { isBrowserFetchRequest } from "@better-auth/core/utils/fetch-metadata";
|
||||
import { getSessionFromCtx } from "../../api";
|
||||
import { generateRandomString } from "../../crypto";
|
||||
import { InvalidClient, InvalidRequest } from "./error";
|
||||
import { getClient } from "./index";
|
||||
import type { AuthorizationQuery, OIDCOptions } from "./types";
|
||||
import { parsePrompt } from "./utils/prompt";
|
||||
@@ -58,15 +59,38 @@ export async function authorize(
|
||||
error: "invalid_request",
|
||||
});
|
||||
}
|
||||
const query = ctx.query as AuthorizationQuery;
|
||||
const session = await getSessionFromCtx(ctx);
|
||||
if (!session) {
|
||||
// Handle prompt=none per OIDC spec - must return error instead of redirecting
|
||||
const query = ctx.query as AuthorizationQuery;
|
||||
const promptSet = parsePrompt(query.prompt ?? "");
|
||||
if (promptSet.has("none") && query.redirect_uri) {
|
||||
if (promptSet.has("none")) {
|
||||
if (!query.redirect_uri) {
|
||||
throw new InvalidRequest(
|
||||
"redirect_uri is required when prompt=none and must be usable to return errors without displaying UI",
|
||||
);
|
||||
}
|
||||
if (!query.client_id) {
|
||||
throw new InvalidClient("client_id is required");
|
||||
}
|
||||
const client = await getClient(
|
||||
query.client_id,
|
||||
options.trustedClients || [],
|
||||
);
|
||||
if (!client) {
|
||||
throw new InvalidClient("client_id is required");
|
||||
}
|
||||
const validRedirectURI = client.redirectUrls.find(
|
||||
(url) => url === query.redirect_uri,
|
||||
);
|
||||
if (!validRedirectURI) {
|
||||
throw new InvalidRequest(
|
||||
"redirect_uri is invalid or not registered for this client",
|
||||
);
|
||||
}
|
||||
return handleRedirect(
|
||||
formatErrorURL(
|
||||
query.redirect_uri,
|
||||
validRedirectURI,
|
||||
"login_required",
|
||||
"Authentication required but prompt is none",
|
||||
),
|
||||
@@ -91,7 +115,6 @@ export async function authorize(
|
||||
return handleRedirect(`${options.loginPage}?${queryFromURL}`);
|
||||
}
|
||||
|
||||
const query = ctx.query as AuthorizationQuery;
|
||||
if (!query.client_id) {
|
||||
const errorURL = getErrorURL(
|
||||
ctx,
|
||||
|
||||
@@ -5,9 +5,20 @@ class OIDCProviderError extends APIError {}
|
||||
export class InvalidRequest extends OIDCProviderError {
|
||||
constructor(error_description: string, error_detail?: string) {
|
||||
super("BAD_REQUEST", {
|
||||
message: "invalid_request",
|
||||
message: error_description,
|
||||
error: "invalid_request",
|
||||
error_description,
|
||||
error_detail,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class InvalidClient extends OIDCProviderError {
|
||||
constructor(error_description: string) {
|
||||
super("BAD_REQUEST", {
|
||||
message: error_description,
|
||||
error: "invalid_client",
|
||||
error_description,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,24 +460,22 @@ describe("oidc", async () => {
|
||||
it("should return login_required error when prompt=none and user not authenticated", async ({
|
||||
expect,
|
||||
}) => {
|
||||
// Create an unauthenticated client
|
||||
const unauthClient = createAuthClient({
|
||||
plugins: [oidcClient()],
|
||||
baseURL: "http://localhost:3000",
|
||||
fetchOptions: {
|
||||
customFetchImpl,
|
||||
},
|
||||
// Create an OAuth client
|
||||
const testClient = await serverClient.oauth2.register({
|
||||
client_name: "test-login-required-prompt-none",
|
||||
redirect_uris: [
|
||||
"http://localhost:3000/api/auth/oauth2/callback/login-required",
|
||||
],
|
||||
});
|
||||
const clientId = testClient.data?.client_id ?? "";
|
||||
const redirectUri = testClient.data?.redirect_uris?.[0] ?? "";
|
||||
|
||||
// Try to authorize with prompt=none
|
||||
const authUrl = new URL(
|
||||
"http://localhost:3000/api/auth/oauth2/authorize",
|
||||
);
|
||||
authUrl.searchParams.set("client_id", application.clientId);
|
||||
authUrl.searchParams.set(
|
||||
"redirect_uri",
|
||||
application.redirectUrls[0] || "",
|
||||
);
|
||||
authUrl.searchParams.set("client_id", clientId);
|
||||
authUrl.searchParams.set("redirect_uri", redirectUri);
|
||||
authUrl.searchParams.set("response_type", "code");
|
||||
authUrl.searchParams.set("scope", "openid profile email");
|
||||
authUrl.searchParams.set("state", "test-state");
|
||||
@@ -485,13 +483,11 @@ describe("oidc", async () => {
|
||||
authUrl.searchParams.set("code_challenge", "test-challenge");
|
||||
authUrl.searchParams.set("code_challenge_method", "S256");
|
||||
|
||||
let redirectURI = "";
|
||||
await unauthClient.$fetch(authUrl.toString(), {
|
||||
const response = await customFetchImpl(authUrl.toString(), {
|
||||
method: "GET",
|
||||
onError(context) {
|
||||
redirectURI = context.response.headers.get("Location") || "";
|
||||
},
|
||||
redirect: "manual",
|
||||
});
|
||||
const redirectURI = response.headers.get("Location") || "";
|
||||
|
||||
expect(redirectURI).toContain("error=login_required");
|
||||
expect(redirectURI).toContain("error_description=Authentication");
|
||||
@@ -499,6 +495,57 @@ describe("oidc", async () => {
|
||||
expect(redirectURI).toContain("none");
|
||||
});
|
||||
|
||||
it("should not redirect to invalid redirect_uri when prompt=none", async ({
|
||||
expect,
|
||||
}) => {
|
||||
const attackerRedirect = "https://malicious.com/callback";
|
||||
const authUrl = new URL(
|
||||
"http://localhost:3000/api/auth/oauth2/authorize",
|
||||
);
|
||||
authUrl.searchParams.set("client_id", application.clientId);
|
||||
authUrl.searchParams.set("redirect_uri", attackerRedirect);
|
||||
authUrl.searchParams.set("response_type", "code");
|
||||
authUrl.searchParams.set("scope", "openid");
|
||||
authUrl.searchParams.set("state", "x");
|
||||
authUrl.searchParams.set("prompt", "none");
|
||||
|
||||
const response = await customFetchImpl(authUrl.toString(), {
|
||||
method: "GET",
|
||||
redirect: "manual",
|
||||
});
|
||||
|
||||
const location = response.headers.get("Location") || "";
|
||||
expect(location === null || location === "").not.toContain(
|
||||
"malicious.com",
|
||||
);
|
||||
expect([400, 302]).toContain(response.status);
|
||||
});
|
||||
|
||||
it("should return 400 invalid_request when prompt=none without redirect_uri", async ({
|
||||
expect,
|
||||
}) => {
|
||||
const authUrl = new URL(
|
||||
"http://localhost:3000/api/auth/oauth2/authorize",
|
||||
);
|
||||
authUrl.searchParams.set("client_id", application.clientId);
|
||||
authUrl.searchParams.set("response_type", "code");
|
||||
authUrl.searchParams.set("scope", "openid");
|
||||
authUrl.searchParams.set("state", "x");
|
||||
authUrl.searchParams.set("prompt", "none");
|
||||
// No redirect_uri - must not fall through to login page
|
||||
|
||||
const response = await customFetchImpl(authUrl.toString(), {
|
||||
method: "GET",
|
||||
redirect: "manual",
|
||||
});
|
||||
|
||||
expect(response.status).toBe(400);
|
||||
const location = response.headers.get("Location") || "";
|
||||
expect(location).not.toContain("/login");
|
||||
const body = await response.json().catch(() => ({}));
|
||||
expect(body.error ?? body.code).toBe("invalid_request");
|
||||
});
|
||||
|
||||
it("should return consent_required error when prompt=none and consent needed", async ({
|
||||
expect,
|
||||
}) => {
|
||||
|
||||
@@ -33,6 +33,7 @@ import { twitch } from "./twitch";
|
||||
import { twitter } from "./twitter";
|
||||
import { vercel } from "./vercel";
|
||||
import { vk } from "./vk";
|
||||
import { wechat } from "./wechat";
|
||||
import { zoom } from "./zoom";
|
||||
|
||||
export const socialProviders = {
|
||||
@@ -70,6 +71,7 @@ export const socialProviders = {
|
||||
polar,
|
||||
railway,
|
||||
vercel,
|
||||
wechat,
|
||||
};
|
||||
|
||||
export const socialProviderList = Object.keys(socialProviders) as [
|
||||
@@ -126,6 +128,7 @@ export * from "./twitch";
|
||||
export * from "./twitter";
|
||||
export * from "./vercel";
|
||||
export * from "./vk";
|
||||
export * from "./wechat";
|
||||
export * from "./zoom";
|
||||
|
||||
export type SocialProviderList = typeof socialProviderList;
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
import { betterFetch } from "@better-fetch/fetch";
|
||||
import type { OAuth2Tokens, OAuthProvider, ProviderOptions } from "../oauth2";
|
||||
|
||||
/**
|
||||
* WeChat user profile information
|
||||
* @see https://developers.weixin.qq.com/doc/oplatform/en/Website_App/WeChat_Login/Wechat_Login.html
|
||||
*/
|
||||
export interface WeChatProfile extends Record<string, any> {
|
||||
/**
|
||||
* User's unique OpenID
|
||||
*/
|
||||
openid: string;
|
||||
/**
|
||||
* User's nickname
|
||||
*/
|
||||
nickname: string;
|
||||
/**
|
||||
* User's avatar image URL
|
||||
*/
|
||||
headimgurl: string;
|
||||
/**
|
||||
* User's privileges
|
||||
*/
|
||||
privilege: string[];
|
||||
/**
|
||||
* User's UnionID (unique across the developer's various applications)
|
||||
*/
|
||||
unionid?: string;
|
||||
/** @note Email is currently unsupported by WeChat */
|
||||
email?: string;
|
||||
}
|
||||
|
||||
export interface WeChatOptions extends ProviderOptions<WeChatProfile> {
|
||||
/**
|
||||
* WeChat App ID
|
||||
*/
|
||||
clientId: string;
|
||||
/**
|
||||
* WeChat App Secret
|
||||
*/
|
||||
clientSecret: string;
|
||||
/**
|
||||
* Platform type for WeChat login
|
||||
* - Currently only supports "WebsiteApp" for WeChat Website Application (网站应用)
|
||||
* @default "WebsiteApp"
|
||||
*/
|
||||
platformType?: "WebsiteApp";
|
||||
|
||||
/**
|
||||
* UI language for the WeChat login page
|
||||
* cn for Simplified Chinese, en for English
|
||||
* @default "cn" if left undefined
|
||||
*/
|
||||
lang?: "cn" | "en";
|
||||
}
|
||||
|
||||
export const wechat = (options: WeChatOptions) => {
|
||||
return {
|
||||
id: "wechat",
|
||||
name: "WeChat",
|
||||
createAuthorizationURL({ state, scopes, redirectURI }) {
|
||||
const _scopes = options.disableDefaultScope ? [] : ["snsapi_login"];
|
||||
options.scope && _scopes.push(...options.scope);
|
||||
scopes && _scopes.push(...scopes);
|
||||
|
||||
// WeChat uses non-standard OAuth2 parameters (appid instead of client_id)
|
||||
// and requires a fragment (#wechat_redirect), so we construct the URL manually.
|
||||
const url = new URL("https://open.weixin.qq.com/connect/qrconnect");
|
||||
url.searchParams.set("scope", _scopes.join(","));
|
||||
url.searchParams.set("response_type", "code");
|
||||
url.searchParams.set("appid", options.clientId);
|
||||
url.searchParams.set("redirect_uri", options.redirectURI || redirectURI);
|
||||
url.searchParams.set("state", state);
|
||||
url.searchParams.set("lang", options.lang || "cn");
|
||||
url.hash = "wechat_redirect";
|
||||
|
||||
return url;
|
||||
},
|
||||
|
||||
// WeChat uses non-standard token exchange (appid/secret instead of
|
||||
// client_id/client_secret, GET instead of POST), so shared helpers
|
||||
// like validateAuthorizationCode/getOAuth2Tokens cannot be used directly.
|
||||
validateAuthorizationCode: async ({ code }) => {
|
||||
const params = new URLSearchParams({
|
||||
appid: options.clientId,
|
||||
secret: options.clientSecret,
|
||||
code: code,
|
||||
grant_type: "authorization_code",
|
||||
});
|
||||
|
||||
const { data: tokenData, error } = await betterFetch<{
|
||||
access_token: string;
|
||||
expires_in: number;
|
||||
refresh_token: string;
|
||||
openid: string;
|
||||
scope: string;
|
||||
unionid?: string;
|
||||
errcode?: number;
|
||||
errmsg?: string;
|
||||
}>(
|
||||
"https://api.weixin.qq.com/sns/oauth2/access_token?" +
|
||||
params.toString(),
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
);
|
||||
|
||||
if (error || !tokenData || tokenData.errcode) {
|
||||
throw new Error(
|
||||
`Failed to validate authorization code: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
tokenType: "Bearer" as const,
|
||||
accessToken: tokenData.access_token,
|
||||
refreshToken: tokenData.refresh_token,
|
||||
accessTokenExpiresAt: new Date(
|
||||
Date.now() + tokenData.expires_in * 1000,
|
||||
),
|
||||
scopes: tokenData.scope.split(","),
|
||||
// WeChat requires openid for the userinfo endpoint, which is
|
||||
// returned alongside the access token.
|
||||
openid: tokenData.openid,
|
||||
unionid: tokenData.unionid,
|
||||
};
|
||||
},
|
||||
|
||||
refreshAccessToken: options.refreshAccessToken
|
||||
? options.refreshAccessToken
|
||||
: async (refreshToken) => {
|
||||
const params = new URLSearchParams({
|
||||
appid: options.clientId,
|
||||
grant_type: "refresh_token",
|
||||
refresh_token: refreshToken,
|
||||
});
|
||||
|
||||
const { data: tokenData, error } = await betterFetch<{
|
||||
access_token: string;
|
||||
expires_in: number;
|
||||
refresh_token: string;
|
||||
openid: string;
|
||||
scope: string;
|
||||
errcode?: number;
|
||||
errmsg?: string;
|
||||
}>(
|
||||
"https://api.weixin.qq.com/sns/oauth2/refresh_token?" +
|
||||
params.toString(),
|
||||
{
|
||||
method: "GET",
|
||||
},
|
||||
);
|
||||
|
||||
if (error || !tokenData || tokenData.errcode) {
|
||||
throw new Error(
|
||||
`Failed to refresh access token: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
tokenType: "Bearer" as const,
|
||||
accessToken: tokenData.access_token,
|
||||
refreshToken: tokenData.refresh_token,
|
||||
accessTokenExpiresAt: new Date(
|
||||
Date.now() + tokenData.expires_in * 1000,
|
||||
),
|
||||
scopes: tokenData.scope.split(","),
|
||||
};
|
||||
},
|
||||
|
||||
async getUserInfo(token) {
|
||||
if (options.getUserInfo) {
|
||||
return options.getUserInfo(token);
|
||||
}
|
||||
|
||||
const openid = (token as OAuth2Tokens & { openid?: string }).openid;
|
||||
|
||||
if (!openid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const params = new URLSearchParams({
|
||||
access_token: token.accessToken || "",
|
||||
openid: openid,
|
||||
lang: "zh_CN",
|
||||
});
|
||||
|
||||
const { data: profile, error } = await betterFetch<
|
||||
WeChatProfile & { errcode?: number; errmsg?: string }
|
||||
>("https://api.weixin.qq.com/sns/userinfo?" + params.toString(), {
|
||||
method: "GET",
|
||||
});
|
||||
|
||||
if (error || !profile || profile.errcode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const userMap = await options.mapProfileToUser?.(profile);
|
||||
return {
|
||||
user: {
|
||||
id: profile.unionid || profile.openid || openid,
|
||||
name: profile.nickname,
|
||||
email: profile.email || null,
|
||||
image: profile.headimgurl,
|
||||
emailVerified: false,
|
||||
...userMap,
|
||||
},
|
||||
data: profile,
|
||||
};
|
||||
},
|
||||
options,
|
||||
} satisfies OAuthProvider<WeChatProfile, WeChatOptions>;
|
||||
};
|
||||
@@ -51,6 +51,11 @@
|
||||
"@better-auth/utils": "^0.3.0",
|
||||
"kysely": "^0.27.0 || ^0.28.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"kysely": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20250121.0",
|
||||
"@better-auth/core": "workspace:*",
|
||||
|
||||
@@ -46,6 +46,11 @@
|
||||
"@better-auth/utils": "^0.3.0",
|
||||
"mongodb": "^6.0.0 || ^7.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"mongodb": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@better-auth/core": "workspace:*",
|
||||
"@better-auth/utils": "^0.3.1",
|
||||
|
||||
@@ -148,6 +148,37 @@ describe("oauth authorize - unauthenticated", async () => {
|
||||
`redirect_uri=${encodeURIComponent(redirectUri)}`,
|
||||
);
|
||||
});
|
||||
|
||||
it("should return login_required when prompt=none and user is not logged in", async () => {
|
||||
if (!oauthClient?.client_id) {
|
||||
throw Error("beforeAll not run properly");
|
||||
}
|
||||
|
||||
const authUrl = new URL(`${authServerBaseUrl}/api/auth/oauth2/authorize`);
|
||||
authUrl.searchParams.set("client_id", oauthClient.client_id);
|
||||
authUrl.searchParams.set("redirect_uri", redirectUri);
|
||||
authUrl.searchParams.set("response_type", "code");
|
||||
authUrl.searchParams.set("scope", "openid");
|
||||
authUrl.searchParams.set("state", "prompt-none-login-required");
|
||||
authUrl.searchParams.set("prompt", "none");
|
||||
authUrl.searchParams.set("code_challenge", generateRandomString(43));
|
||||
authUrl.searchParams.set("code_challenge_method", "S256");
|
||||
|
||||
let callbackRedirectUrl = "";
|
||||
await unauthenticatedClient.$fetch(authUrl.toString(), {
|
||||
onError(context) {
|
||||
callbackRedirectUrl = context.response.headers.get("Location") || "";
|
||||
},
|
||||
});
|
||||
|
||||
expect(callbackRedirectUrl).toContain(redirectUri);
|
||||
expect(callbackRedirectUrl).toContain("error=login_required");
|
||||
expect(callbackRedirectUrl).toContain("state=prompt-none-login-required");
|
||||
expect(callbackRedirectUrl).toContain(
|
||||
`iss=${encodeURIComponent(authServerBaseUrl)}`,
|
||||
);
|
||||
expect(callbackRedirectUrl).not.toContain("/login");
|
||||
});
|
||||
});
|
||||
|
||||
describe("oauth authorize - authenticated", async () => {
|
||||
@@ -179,6 +210,7 @@ describe("oauth authorize - authenticated", async () => {
|
||||
});
|
||||
|
||||
let oauthClient: OAuthClient | null;
|
||||
let oauthClientNeedsConsent: OAuthClient | null;
|
||||
const providerId = "test";
|
||||
const redirectUri = `${rpBaseUrl}/api/auth/oauth2/callback/${providerId}`;
|
||||
// Registers a confidential client application to work with
|
||||
@@ -195,6 +227,19 @@ describe("oauth authorize - authenticated", async () => {
|
||||
expect(response?.client_secret).toBeDefined();
|
||||
expect(response?.redirect_uris).toEqual([redirectUri]);
|
||||
oauthClient = response;
|
||||
|
||||
const responseNeedsConsent = await auth.api.adminCreateOAuthClient({
|
||||
headers,
|
||||
body: {
|
||||
redirect_uris: [redirectUri],
|
||||
skip_consent: false,
|
||||
},
|
||||
});
|
||||
expect(responseNeedsConsent?.client_id).toBeDefined();
|
||||
expect(responseNeedsConsent?.user_id).toBeDefined();
|
||||
expect(responseNeedsConsent?.client_secret).toBeDefined();
|
||||
expect(responseNeedsConsent?.redirect_uris).toEqual([redirectUri]);
|
||||
oauthClientNeedsConsent = responseNeedsConsent;
|
||||
});
|
||||
|
||||
it("should authorize and include iss parameter", async () => {
|
||||
@@ -292,4 +337,35 @@ describe("oauth authorize - authenticated", async () => {
|
||||
|
||||
expect(issParam).toBe(metadataIssuer);
|
||||
});
|
||||
|
||||
it("should return consent_required when prompt=none and consent is needed", async () => {
|
||||
if (!oauthClientNeedsConsent?.client_id) {
|
||||
throw Error("beforeAll not run properly");
|
||||
}
|
||||
|
||||
const authUrl = new URL(`${authServerBaseUrl}/api/auth/oauth2/authorize`);
|
||||
authUrl.searchParams.set("client_id", oauthClientNeedsConsent.client_id);
|
||||
authUrl.searchParams.set("redirect_uri", redirectUri);
|
||||
authUrl.searchParams.set("response_type", "code");
|
||||
authUrl.searchParams.set("scope", "openid");
|
||||
authUrl.searchParams.set("state", "prompt-none-consent-required");
|
||||
authUrl.searchParams.set("prompt", "none");
|
||||
authUrl.searchParams.set("code_challenge", generateRandomString(43));
|
||||
authUrl.searchParams.set("code_challenge_method", "S256");
|
||||
|
||||
let callbackRedirectUrl = "";
|
||||
await client.$fetch(authUrl.toString(), {
|
||||
onError(context) {
|
||||
callbackRedirectUrl = context.response.headers.get("Location") || "";
|
||||
},
|
||||
});
|
||||
|
||||
expect(callbackRedirectUrl).toContain(redirectUri);
|
||||
expect(callbackRedirectUrl).toContain("error=consent_required");
|
||||
expect(callbackRedirectUrl).toContain("state=prompt-none-consent-required");
|
||||
expect(callbackRedirectUrl).toContain(
|
||||
`iss=${encodeURIComponent(authServerBaseUrl)}`,
|
||||
);
|
||||
expect(callbackRedirectUrl).not.toContain("/consent");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,6 +21,16 @@ import {
|
||||
storeToken,
|
||||
} from "./utils";
|
||||
|
||||
/**
|
||||
* OIDC Error Codes
|
||||
* @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError
|
||||
*/
|
||||
type OIDCAuthError =
|
||||
| "login_required"
|
||||
| "consent_required"
|
||||
| "interaction_required"
|
||||
| "account_selection_required";
|
||||
|
||||
/**
|
||||
* Formats an error url
|
||||
*/
|
||||
@@ -53,6 +63,25 @@ export const handleRedirect = (ctx: GenericEndpointContext, uri: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
function redirectWithPromptNoneError(
|
||||
ctx: GenericEndpointContext,
|
||||
opts: OAuthOptions<Scope[]>,
|
||||
query: OAuthAuthorizationQuery,
|
||||
error: OIDCAuthError,
|
||||
description: string,
|
||||
) {
|
||||
return handleRedirect(
|
||||
ctx,
|
||||
formatErrorURL(
|
||||
query.redirect_uri,
|
||||
error,
|
||||
description,
|
||||
query.state,
|
||||
getIssuer(ctx, opts),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that the issuer URL
|
||||
* - MUST use HTTPS scheme (HTTP allowed for localhost in dev)
|
||||
@@ -160,6 +189,7 @@ export async function authorizeEndpoint(
|
||||
const promptSet = ctx.query?.prompt
|
||||
? parsePrompt(ctx.query?.prompt)
|
||||
: undefined;
|
||||
const promptNone = promptSet?.has("none") ?? false;
|
||||
if (promptSet?.has("select_account") && !opts.selectAccount?.page) {
|
||||
throw ctx.redirect(
|
||||
getErrorURL(
|
||||
@@ -278,6 +308,15 @@ export async function authorizeEndpoint(
|
||||
// Check for session
|
||||
const session = await getSessionFromCtx(ctx);
|
||||
if (!session || promptSet?.has("login") || promptSet?.has("create")) {
|
||||
if (promptNone) {
|
||||
return redirectWithPromptNoneError(
|
||||
ctx,
|
||||
opts,
|
||||
query,
|
||||
"login_required",
|
||||
"authentication required",
|
||||
);
|
||||
}
|
||||
return redirectWithPromptCode(
|
||||
ctx,
|
||||
opts,
|
||||
@@ -302,6 +341,15 @@ export async function authorizeEndpoint(
|
||||
scopes: requestedScopes,
|
||||
});
|
||||
if (selectedAccountRedirect) {
|
||||
if (promptNone) {
|
||||
return redirectWithPromptNoneError(
|
||||
ctx,
|
||||
opts,
|
||||
query,
|
||||
"account_selection_required",
|
||||
"End-User account selection is required",
|
||||
);
|
||||
}
|
||||
return redirectWithPromptCode(ctx, opts, "select_account");
|
||||
}
|
||||
}
|
||||
@@ -315,6 +363,15 @@ export async function authorizeEndpoint(
|
||||
scopes: requestedScopes,
|
||||
});
|
||||
if (signupRedirect) {
|
||||
if (promptNone) {
|
||||
return redirectWithPromptNoneError(
|
||||
ctx,
|
||||
opts,
|
||||
query,
|
||||
"interaction_required",
|
||||
"End-User interaction is required",
|
||||
);
|
||||
}
|
||||
return redirectWithPromptCode(
|
||||
ctx,
|
||||
opts,
|
||||
@@ -332,6 +389,15 @@ export async function authorizeEndpoint(
|
||||
scopes: requestedScopes,
|
||||
});
|
||||
if (postLoginRedirect) {
|
||||
if (promptNone) {
|
||||
return redirectWithPromptNoneError(
|
||||
ctx,
|
||||
opts,
|
||||
query,
|
||||
"interaction_required",
|
||||
"End-User interaction is required",
|
||||
);
|
||||
}
|
||||
return redirectWithPromptCode(ctx, opts, "post_login");
|
||||
}
|
||||
}
|
||||
@@ -384,6 +450,15 @@ export async function authorizeEndpoint(
|
||||
!consent ||
|
||||
!requestedScopes.every((val) => consent.scopes.includes(val))
|
||||
) {
|
||||
if (promptNone) {
|
||||
return redirectWithPromptNoneError(
|
||||
ctx,
|
||||
opts,
|
||||
query,
|
||||
"consent_required",
|
||||
"End-User consent is required",
|
||||
);
|
||||
}
|
||||
return redirectWithPromptCode(ctx, opts, "consent");
|
||||
}
|
||||
|
||||
|
||||
@@ -107,7 +107,13 @@ describe("oauth metadata", async () => {
|
||||
id_token_signing_alg_values_supported: ["EdDSA"],
|
||||
end_session_endpoint: `${baseURL}/oauth2/end-session`,
|
||||
acr_values_supported: ["urn:mace:incommon:iap:bronze"],
|
||||
prompt_values_supported: ["login", "consent", "create", "select_account"],
|
||||
prompt_values_supported: [
|
||||
"login",
|
||||
"consent",
|
||||
"create",
|
||||
"select_account",
|
||||
"none",
|
||||
],
|
||||
});
|
||||
const oauthMetadata = await auth.api.getOAuthServerConfig();
|
||||
expect(oauthMetadata).toMatchObject(metadata ?? {});
|
||||
|
||||
@@ -100,7 +100,13 @@ export function oidcServerMetadata(
|
||||
: ["EdDSA"],
|
||||
end_session_endpoint: `${baseURL}/oauth2/end-session`,
|
||||
acr_values_supported: ["urn:mace:incommon:iap:bronze"],
|
||||
prompt_values_supported: ["login", "consent", "create", "select_account"],
|
||||
prompt_values_supported: [
|
||||
"login",
|
||||
"consent",
|
||||
"create",
|
||||
"select_account",
|
||||
"none",
|
||||
],
|
||||
};
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@@ -1164,6 +1164,109 @@ describe("oauth - prompt", async () => {
|
||||
enableSelectAccount = false;
|
||||
});
|
||||
|
||||
it("none - should return account_selection_required when account selection is required", async () => {
|
||||
if (!oauthClient?.client_id || !oauthClient?.client_secret) {
|
||||
throw Error("beforeAll not run properly");
|
||||
}
|
||||
|
||||
enableSelectAccount = true;
|
||||
try {
|
||||
const { customFetchImpl: customFetchImplRP } = await createTestInstance({
|
||||
prompt: "none",
|
||||
});
|
||||
const client = createAuthClient({
|
||||
plugins: [genericOAuthClient()],
|
||||
baseURL: rpBaseUrl,
|
||||
fetchOptions: {
|
||||
customFetchImpl: customFetchImplRP,
|
||||
},
|
||||
});
|
||||
|
||||
const data = await client.signIn.oauth2(
|
||||
{
|
||||
providerId,
|
||||
callbackURL: "/success",
|
||||
},
|
||||
{
|
||||
headers,
|
||||
throw: true,
|
||||
},
|
||||
);
|
||||
expect(data.url).toContain(`prompt=none`);
|
||||
|
||||
let callbackRedirectUri = "";
|
||||
await serverClient.$fetch(data.url, {
|
||||
method: "GET",
|
||||
headers,
|
||||
onError(context) {
|
||||
callbackRedirectUri = context.response.headers.get("Location") || "";
|
||||
},
|
||||
});
|
||||
|
||||
expect(callbackRedirectUri).toContain(redirectUri);
|
||||
expect(callbackRedirectUri).toContain("error=account_selection_required");
|
||||
expect(callbackRedirectUri).toContain("state=");
|
||||
expect(callbackRedirectUri).toContain(
|
||||
`iss=${encodeURIComponent(authServerBaseUrl)}`,
|
||||
);
|
||||
expect(callbackRedirectUri).not.toContain("/select-account");
|
||||
} finally {
|
||||
enableSelectAccount = false;
|
||||
}
|
||||
});
|
||||
|
||||
it("none - should return interaction_required when post login is required", async () => {
|
||||
if (!oauthClient?.client_id || !oauthClient?.client_secret) {
|
||||
throw Error("beforeAll not run properly");
|
||||
}
|
||||
|
||||
enableSelectAccount = false;
|
||||
enablePostLogin = true;
|
||||
try {
|
||||
const { customFetchImpl: customFetchImplRP } = await createTestInstance({
|
||||
prompt: "none",
|
||||
});
|
||||
const client = createAuthClient({
|
||||
plugins: [genericOAuthClient()],
|
||||
baseURL: rpBaseUrl,
|
||||
fetchOptions: {
|
||||
customFetchImpl: customFetchImplRP,
|
||||
},
|
||||
});
|
||||
|
||||
const data = await client.signIn.oauth2(
|
||||
{
|
||||
providerId,
|
||||
callbackURL: "/success",
|
||||
},
|
||||
{
|
||||
headers,
|
||||
throw: true,
|
||||
},
|
||||
);
|
||||
expect(data.url).toContain(`prompt=none`);
|
||||
|
||||
let callbackRedirectUri = "";
|
||||
await serverClient.$fetch(data.url, {
|
||||
method: "GET",
|
||||
headers,
|
||||
onError(context) {
|
||||
callbackRedirectUri = context.response.headers.get("Location") || "";
|
||||
},
|
||||
});
|
||||
|
||||
expect(callbackRedirectUri).toContain(redirectUri);
|
||||
expect(callbackRedirectUri).toContain("error=interaction_required");
|
||||
expect(callbackRedirectUri).toContain("state=");
|
||||
expect(callbackRedirectUri).toContain(
|
||||
`iss=${encodeURIComponent(authServerBaseUrl)}`,
|
||||
);
|
||||
expect(callbackRedirectUri).not.toContain("/select-organization");
|
||||
} finally {
|
||||
enablePostLogin = false;
|
||||
}
|
||||
});
|
||||
|
||||
it("login+consent - should always redirect to login and force consent (notice consent previously given)", async ({
|
||||
onTestFinished,
|
||||
}) => {
|
||||
|
||||
@@ -77,7 +77,7 @@ export const getPasskeyActions = (
|
||||
data: null,
|
||||
error: {
|
||||
code: "AUTH_CANCELLED",
|
||||
message: "auth cancelled",
|
||||
message: PASSKEY_ERROR_CODES.AUTH_CANCELLED,
|
||||
status: 400,
|
||||
statusText: "BAD_REQUEST",
|
||||
},
|
||||
@@ -158,7 +158,7 @@ export const getPasskeyActions = (
|
||||
data: null,
|
||||
error: {
|
||||
code: e.code,
|
||||
message: "previously registered",
|
||||
message: PASSKEY_ERROR_CODES.PREVIOUSLY_REGISTERED,
|
||||
status: 400,
|
||||
statusText: "BAD_REQUEST",
|
||||
},
|
||||
@@ -169,7 +169,7 @@ export const getPasskeyActions = (
|
||||
data: null,
|
||||
error: {
|
||||
code: e.code,
|
||||
message: "registration cancelled",
|
||||
message: PASSKEY_ERROR_CODES.REGISTRATION_CANCELLED,
|
||||
status: 400,
|
||||
statusText: "BAD_REQUEST",
|
||||
},
|
||||
@@ -189,7 +189,8 @@ export const getPasskeyActions = (
|
||||
data: null,
|
||||
error: {
|
||||
code: "UNKNOWN_ERROR",
|
||||
message: e instanceof Error ? e.message : "unknown error",
|
||||
message:
|
||||
e instanceof Error ? e.message : PASSKEY_ERROR_CODES.UNKNOWN_ERROR,
|
||||
status: 500,
|
||||
statusText: "INTERNAL_SERVER_ERROR",
|
||||
},
|
||||
|
||||
@@ -9,4 +9,8 @@ export const PASSKEY_ERROR_CODES = defineErrorCodes({
|
||||
AUTHENTICATION_FAILED: "Authentication failed",
|
||||
UNABLE_TO_CREATE_SESSION: "Unable to create session",
|
||||
FAILED_TO_UPDATE_PASSKEY: "Failed to update passkey",
|
||||
PREVIOUSLY_REGISTERED: "Previously registered",
|
||||
REGISTRATION_CANCELLED: "Registration cancelled",
|
||||
AUTH_CANCELLED: "Auth cancelled",
|
||||
UNKNOWN_ERROR: "Unknown error",
|
||||
});
|
||||
|
||||
@@ -21,6 +21,8 @@ declare module "@better-auth/core" {
|
||||
}
|
||||
}
|
||||
|
||||
export { PASSKEY_ERROR_CODES } from "./error-codes";
|
||||
|
||||
const MAX_AGE_IN_SECONDS = 60 * 5; // 5 minutes
|
||||
|
||||
export const passkey = (options?: PasskeyOptions | undefined) => {
|
||||
|
||||
@@ -239,7 +239,7 @@ export const stripe = <O extends StripeOptions>(options: O) => {
|
||||
|
||||
await client.subscriptions.update(stripeSub.id, {
|
||||
items,
|
||||
proration_behavior: "create_prorations",
|
||||
proration_behavior: plan.prorationBehavior ?? "create_prorations",
|
||||
});
|
||||
await ctx.adapter.update({
|
||||
model: "subscription",
|
||||
|
||||
@@ -1064,7 +1064,13 @@ export const upgradeSubscription = (options: StripeOptions) => {
|
||||
try {
|
||||
await client.subscriptions.update(activeSubscription.id, {
|
||||
items: itemUpdates,
|
||||
proration_behavior: "create_prorations",
|
||||
proration_behavior: plan.prorationBehavior ?? "create_prorations",
|
||||
})
|
||||
.catch(async (e) => {
|
||||
throw ctx.error("BAD_REQUEST", {
|
||||
message: e.message,
|
||||
code: e.code,
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
const err = e as { message?: string; code?: string };
|
||||
|
||||
@@ -81,6 +81,20 @@ export type StripePlan = {
|
||||
* automatically sync the seat quantity in Stripe.
|
||||
*/
|
||||
seatPriceId?: string | undefined;
|
||||
/**
|
||||
* Proration behavior when updating this plan's subscription.
|
||||
*
|
||||
* Controls how Stripe handles mid-cycle price changes.
|
||||
* - `create_prorations`: Add proration line items to the next invoice (default)
|
||||
* - `always_invoice`: Create prorations and immediately invoice
|
||||
* - `none`: No proration; new price applies at next billing cycle
|
||||
*
|
||||
* @default "create_prorations"
|
||||
* @see https://docs.stripe.com/billing/subscriptions/prorations
|
||||
*/
|
||||
prorationBehavior?:
|
||||
| Stripe.SubscriptionUpdateParams.ProrationBehavior
|
||||
| undefined;
|
||||
/**
|
||||
* Additional line items to include in the checkout session.
|
||||
*
|
||||
|
||||
@@ -516,6 +516,121 @@ describe("seat-based billing", () => {
|
||||
expect(updateCall[1]!.proration_behavior).toBe("create_prorations");
|
||||
});
|
||||
|
||||
it("should use custom prorationBehavior from plan config", async () => {
|
||||
const customProrationOptions: StripeOptions = {
|
||||
...seatPlanOptions,
|
||||
subscription: {
|
||||
enabled: true,
|
||||
plans: [
|
||||
{
|
||||
priceId: "price_team_base",
|
||||
name: "team",
|
||||
seatPriceId: "price_team_seat",
|
||||
prorationBehavior: "always_invoice",
|
||||
},
|
||||
{
|
||||
priceId: "price_enterprise_base",
|
||||
name: "enterprise",
|
||||
seatPriceId: "price_enterprise_seat",
|
||||
prorationBehavior: "always_invoice",
|
||||
},
|
||||
],
|
||||
authorizeReference: async () => true,
|
||||
},
|
||||
};
|
||||
|
||||
const { client, auth, sessionSetter } = await getTestInstance(
|
||||
{
|
||||
plugins: [organization(), stripe(customProrationOptions)],
|
||||
},
|
||||
{
|
||||
disableTestUser: true,
|
||||
clientOptions: {
|
||||
plugins: [
|
||||
organizationClient(),
|
||||
stripeClient({ subscription: true }),
|
||||
],
|
||||
},
|
||||
},
|
||||
);
|
||||
const ctx = await auth.$context;
|
||||
|
||||
await client.signUp.email(
|
||||
{
|
||||
email: "proration-test@test.com",
|
||||
password: "password",
|
||||
name: "Proration User",
|
||||
},
|
||||
{ throw: true },
|
||||
);
|
||||
const headers = new Headers();
|
||||
await client.signIn.email(
|
||||
{ email: "proration-test@test.com", password: "password" },
|
||||
{ throw: true, onSuccess: sessionSetter(headers) },
|
||||
);
|
||||
|
||||
const org = await client.organization.create({
|
||||
name: "Proration Org",
|
||||
slug: "proration-org",
|
||||
fetchOptions: { headers },
|
||||
});
|
||||
const orgId = org.data?.id as string;
|
||||
|
||||
await ctx.adapter.update({
|
||||
model: "organization",
|
||||
update: { stripeCustomerId: "cus_proration" },
|
||||
where: [{ field: "id", value: orgId }],
|
||||
});
|
||||
await ctx.adapter.create({
|
||||
model: "subscription",
|
||||
data: {
|
||||
referenceId: orgId,
|
||||
stripeCustomerId: "cus_proration",
|
||||
stripeSubscriptionId: "sub_proration",
|
||||
status: "active",
|
||||
plan: "team",
|
||||
seats: 2,
|
||||
},
|
||||
});
|
||||
|
||||
mockStripe.subscriptions.list.mockResolvedValue({
|
||||
data: [
|
||||
{
|
||||
id: "sub_proration",
|
||||
status: "active",
|
||||
cancel_at_period_end: false,
|
||||
cancel_at: null,
|
||||
items: {
|
||||
data: [
|
||||
{
|
||||
id: "si_base",
|
||||
price: { id: "price_team_base", lookup_key: null },
|
||||
quantity: 1,
|
||||
},
|
||||
{
|
||||
id: "si_seat",
|
||||
price: { id: "price_team_seat", lookup_key: null },
|
||||
quantity: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const res = await client.subscription.upgrade({
|
||||
plan: "enterprise",
|
||||
customerType: "organization",
|
||||
referenceId: orgId,
|
||||
fetchOptions: { headers },
|
||||
});
|
||||
|
||||
expect(res.data?.url).toBeDefined();
|
||||
|
||||
const updateCall = mockStripe.subscriptions.update.mock.calls[0]!;
|
||||
expect(updateCall[1]!.proration_behavior).toBe("always_invoice");
|
||||
});
|
||||
|
||||
it("should skip seat item swap when seat pricing is unchanged", async () => {
|
||||
const sameSeatOptions: StripeOptions = {
|
||||
...seatPlanOptions,
|
||||
@@ -995,6 +1110,130 @@ describe("seat-based billing", () => {
|
||||
expect.objectContaining({ id: "si_seat", quantity: 1 }),
|
||||
);
|
||||
});
|
||||
|
||||
it("should use custom prorationBehavior on member removal", async () => {
|
||||
mockStripe.subscriptions.retrieve.mockResolvedValue({
|
||||
id: "sub_seat_remove_proration",
|
||||
status: "active",
|
||||
items: {
|
||||
data: [
|
||||
{
|
||||
id: "si_base",
|
||||
price: { id: "price_team_base" },
|
||||
quantity: 1,
|
||||
},
|
||||
{
|
||||
id: "si_seat",
|
||||
price: { id: "price_team_seat" },
|
||||
quantity: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
const customProrationOptions: StripeOptions = {
|
||||
...seatPlanOptions,
|
||||
subscription: {
|
||||
enabled: true,
|
||||
plans: [
|
||||
{
|
||||
priceId: "price_team_base",
|
||||
name: "team",
|
||||
seatPriceId: "price_team_seat",
|
||||
prorationBehavior: "none",
|
||||
},
|
||||
{
|
||||
priceId: "price_enterprise_base",
|
||||
name: "enterprise",
|
||||
seatPriceId: "price_enterprise_seat",
|
||||
prorationBehavior: "none",
|
||||
},
|
||||
],
|
||||
authorizeReference: async () => true,
|
||||
},
|
||||
};
|
||||
|
||||
const { client, auth, sessionSetter } = await getTestInstance(
|
||||
{
|
||||
plugins: [organization(), stripe(customProrationOptions)],
|
||||
},
|
||||
{
|
||||
disableTestUser: true,
|
||||
clientOptions: {
|
||||
plugins: [
|
||||
organizationClient(),
|
||||
stripeClient({ subscription: true }),
|
||||
],
|
||||
},
|
||||
},
|
||||
);
|
||||
const ctx = await auth.$context;
|
||||
|
||||
await client.signUp.email(
|
||||
{
|
||||
email: "proration-remove@test.com",
|
||||
password: "password",
|
||||
name: "Proration Remove User",
|
||||
},
|
||||
{ throw: true },
|
||||
);
|
||||
const headers = new Headers();
|
||||
await client.signIn.email(
|
||||
{ email: "proration-remove@test.com", password: "password" },
|
||||
{ throw: true, onSuccess: sessionSetter(headers) },
|
||||
);
|
||||
|
||||
const org = await client.organization.create({
|
||||
name: "Proration Remove Org",
|
||||
slug: "proration-remove-org",
|
||||
fetchOptions: { headers },
|
||||
});
|
||||
const orgId = org.data?.id as string;
|
||||
|
||||
await ctx.adapter.update({
|
||||
model: "organization",
|
||||
update: { stripeCustomerId: "cus_proration_remove" },
|
||||
where: [{ field: "id", value: orgId }],
|
||||
});
|
||||
await ctx.adapter.create({
|
||||
model: "subscription",
|
||||
data: {
|
||||
referenceId: orgId,
|
||||
stripeCustomerId: "cus_proration_remove",
|
||||
stripeSubscriptionId: "sub_seat_remove_proration",
|
||||
status: "active",
|
||||
plan: "team",
|
||||
seats: 2,
|
||||
},
|
||||
});
|
||||
|
||||
const memberUser = await ctx.adapter.create({
|
||||
model: "user",
|
||||
data: { email: "proration-removable@test.com", name: "Removable" },
|
||||
});
|
||||
const member = await ctx.adapter.create({
|
||||
model: "member",
|
||||
data: {
|
||||
userId: memberUser.id,
|
||||
organizationId: orgId,
|
||||
role: "member",
|
||||
createdAt: new Date(),
|
||||
},
|
||||
});
|
||||
|
||||
await client.organization.removeMember({
|
||||
memberIdOrEmail: member.id,
|
||||
organizationId: orgId,
|
||||
fetchOptions: { headers },
|
||||
});
|
||||
|
||||
expect(mockStripe.subscriptions.update).toHaveBeenCalledWith(
|
||||
"sub_seat_remove_proration",
|
||||
expect.objectContaining({
|
||||
proration_behavior: "none",
|
||||
}),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("webhook seat handling", () => {
|
||||
|
||||
Generated
+150
-150
@@ -223,7 +223,7 @@ importers:
|
||||
version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
'@vercel/analytics':
|
||||
specifier: ^1.6.1
|
||||
version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
|
||||
version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
|
||||
'@vercel/og':
|
||||
specifier: ^0.8.6
|
||||
version: 0.8.6
|
||||
@@ -262,7 +262,7 @@ importers:
|
||||
version: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
|
||||
fumadocs-mdx:
|
||||
specifier: 14.2.7
|
||||
version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
fumadocs-typescript:
|
||||
specifier: ^5.1.2
|
||||
version: 5.1.4(f245ce4745497b47498caec764b8c0fe)
|
||||
@@ -441,13 +441,13 @@ importers:
|
||||
version: 0.30.6
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
mongodb:
|
||||
specifier: ^7.1.0
|
||||
version: 7.1.0(socks@2.8.7)
|
||||
mysql2:
|
||||
specifier: ^3.18.2
|
||||
version: 3.18.2(@types/node@25.3.3)
|
||||
version: 3.18.2(@types/node@25.4.0)
|
||||
pg:
|
||||
specifier: ^8.19.0
|
||||
version: 8.19.0
|
||||
@@ -580,7 +580,7 @@ importers:
|
||||
version: 0.15.4(solid-js@1.9.11)
|
||||
'@solidjs/start':
|
||||
specifier: ^1.3.2
|
||||
version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
better-auth:
|
||||
specifier: workspace:*
|
||||
version: link:../../../packages/better-auth
|
||||
@@ -589,7 +589,7 @@ importers:
|
||||
version: 1.9.11
|
||||
vinxi:
|
||||
specifier: ^0.5.11
|
||||
version: 0.5.11(211ca8da8f7f1018663ab89a0cf5077c)
|
||||
version: 0.5.11(a10131c95cf7e0ba6b16b1f12a658513)
|
||||
devDependencies:
|
||||
'@better-auth-test/test-utils':
|
||||
specifier: workspace:*
|
||||
@@ -621,7 +621,7 @@ importers:
|
||||
version: link:../test-utils
|
||||
vite:
|
||||
specifier: ^7.3.1
|
||||
version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
version: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
e2e/smoke:
|
||||
devDependencies:
|
||||
@@ -642,7 +642,7 @@ importers:
|
||||
version: 5.9.3
|
||||
msw:
|
||||
specifier: ^2.12.10
|
||||
version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
|
||||
version: 2.12.10(@types/node@25.4.0)(typescript@5.9.3)
|
||||
|
||||
e2e/smoke/test/fixtures/cloudflare:
|
||||
dependencies:
|
||||
@@ -654,10 +654,10 @@ importers:
|
||||
version: link:../../../../../packages/better-auth
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
hono:
|
||||
specifier: ^4.12.4
|
||||
version: 4.12.5
|
||||
specifier: ^4.12.7
|
||||
version: 4.12.7
|
||||
devDependencies:
|
||||
'@cloudflare/vitest-pool-workers':
|
||||
specifier: ^0.12.18
|
||||
@@ -686,13 +686,13 @@ importers:
|
||||
dependencies:
|
||||
'@hono/node-server':
|
||||
specifier: ^1.19.10
|
||||
version: 1.19.11(hono@4.12.5)
|
||||
version: 1.19.11(hono@4.12.7)
|
||||
better-auth:
|
||||
specifier: workspace:*
|
||||
version: link:../../../../../packages/better-auth
|
||||
hono:
|
||||
specifier: ^4.12.4
|
||||
version: 4.12.5
|
||||
specifier: ^4.12.7
|
||||
version: 4.12.7
|
||||
|
||||
e2e/smoke/test/fixtures/tsconfig-declaration:
|
||||
dependencies:
|
||||
@@ -713,7 +713,7 @@ importers:
|
||||
version: link:../../../../../packages/better-auth
|
||||
stripe:
|
||||
specifier: ^20.4.0
|
||||
version: 20.4.0(@types/node@25.3.3)
|
||||
version: 20.4.0(@types/node@25.4.0)
|
||||
|
||||
e2e/smoke/test/fixtures/tsconfig-exact-optional-property-types:
|
||||
dependencies:
|
||||
@@ -750,7 +750,7 @@ importers:
|
||||
devDependencies:
|
||||
vite:
|
||||
specifier: ^7.3.1
|
||||
version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
version: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
landing:
|
||||
dependencies:
|
||||
@@ -777,7 +777,7 @@ importers:
|
||||
version: 5.2.2(react-hook-form@7.71.2(react@19.2.4))
|
||||
'@inkeep/ai-sdk-provider':
|
||||
specifier: ^0.54.0
|
||||
version: 0.54.0(1b78cb9635f1622c0428a81b09f6eeb0)
|
||||
version: 0.54.0(0641e63febbcd12aff52f2c9ed736642)
|
||||
'@radix-ui/react-checkbox':
|
||||
specifier: ^1.3.3
|
||||
version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
@@ -1049,7 +1049,7 @@ importers:
|
||||
version: 0.31.9
|
||||
drizzle-orm:
|
||||
specifier: '>=0.41.0'
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
jose:
|
||||
specifier: ^6.1.3
|
||||
version: 6.1.3
|
||||
@@ -1061,7 +1061,7 @@ importers:
|
||||
version: 7.1.0(socks@2.8.7)
|
||||
mysql2:
|
||||
specifier: ^3.0.0
|
||||
version: 3.18.2(@types/node@25.3.3)
|
||||
version: 3.18.2(@types/node@25.4.0)
|
||||
nanostores:
|
||||
specifier: ^1.1.1
|
||||
version: 1.1.1
|
||||
@@ -1092,13 +1092,13 @@ importers:
|
||||
version: 1.30.1(@opentelemetry/api@1.9.0)
|
||||
'@sveltejs/kit':
|
||||
specifier: ^2.53.3
|
||||
version: 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/react-start':
|
||||
specifier: ^1.163.2
|
||||
version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/solid-start':
|
||||
specifier: ^1.163.2
|
||||
version: 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
version: 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@types/better-sqlite3':
|
||||
specifier: ^7.6.13
|
||||
version: 7.6.13
|
||||
@@ -1128,7 +1128,7 @@ importers:
|
||||
version: 1.9.0
|
||||
msw:
|
||||
specifier: ^2.12.10
|
||||
version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
|
||||
version: 2.12.10(@types/node@25.4.0)(typescript@5.9.3)
|
||||
next:
|
||||
specifier: ^16.1.6
|
||||
version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
|
||||
@@ -1161,7 +1161,7 @@ importers:
|
||||
version: 5.9.3
|
||||
vitest:
|
||||
specifier: ^4.0.18
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vue:
|
||||
specifier: ^3.5.29
|
||||
version: 3.5.29(typescript@5.9.3)
|
||||
@@ -1215,7 +1215,7 @@ importers:
|
||||
version: 17.3.1
|
||||
drizzle-orm:
|
||||
specifier: ^0.41.0
|
||||
version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
get-tsconfig:
|
||||
specifier: ^4.13.6
|
||||
version: 4.13.6
|
||||
@@ -1331,7 +1331,7 @@ importers:
|
||||
version: 0.3.1
|
||||
drizzle-orm:
|
||||
specifier: ^0.45.1
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
tsdown:
|
||||
specifier: 'catalog:'
|
||||
version: 0.21.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
|
||||
@@ -1687,7 +1687,7 @@ importers:
|
||||
version: 2.0.2(zod@4.3.6)
|
||||
stripe:
|
||||
specifier: ^20.4.0
|
||||
version: 20.4.0(@types/node@25.3.3)
|
||||
version: 20.4.0(@types/node@25.4.0)
|
||||
tsdown:
|
||||
specifier: 'catalog:'
|
||||
version: 0.21.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
|
||||
@@ -1724,7 +1724,7 @@ importers:
|
||||
version: 0.21.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
|
||||
vitest:
|
||||
specifier: catalog:vitest
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
test:
|
||||
devDependencies:
|
||||
@@ -1739,7 +1739,7 @@ importers:
|
||||
version: link:../packages/better-auth
|
||||
msw:
|
||||
specifier: ^2.12.10
|
||||
version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
|
||||
version: 2.12.10(@types/node@25.4.0)(typescript@5.9.3)
|
||||
openid-client:
|
||||
specifier: ^6.8.2
|
||||
version: 6.8.2
|
||||
@@ -1748,7 +1748,7 @@ importers:
|
||||
version: 7.22.0
|
||||
vitest:
|
||||
specifier: catalog:vitest
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
packages:
|
||||
|
||||
@@ -4656,8 +4656,8 @@ packages:
|
||||
resolution: {integrity: sha512-qziF8R9kf7mRNgSpmUH96O0aV1ZiwK4c9ZecFQbDSQuYhgy9GY1WTjiQF0oQnohjTjWNtXhrU39LAeXWNLaBJg==}
|
||||
engines: {node: ^18.14.0 || >=20}
|
||||
|
||||
'@netlify/otel@5.1.1':
|
||||
resolution: {integrity: sha512-WCSlOsd0a0Vn+iPC5PYru7rq/5/QpBGnvam6C7cq9DEiTFqfwExNoxk6SWI0T6nI56gkBryaGsENLTEnUue1lg==}
|
||||
'@netlify/otel@5.1.2':
|
||||
resolution: {integrity: sha512-tIA8W/rC+Duz815uwoEaFTZ4oiIU478gE180hNREMWefJxBcZoS5GYky808FdGNbML2sxNX56LhkD20rSnUTbg==}
|
||||
engines: {node: ^18.14.0 || >=20.6.1}
|
||||
|
||||
'@netlify/runtime-utils@2.2.1':
|
||||
@@ -8040,8 +8040,8 @@ packages:
|
||||
'@types/node@25.3.2':
|
||||
resolution: {integrity: sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==}
|
||||
|
||||
'@types/node@25.3.3':
|
||||
resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==}
|
||||
'@types/node@25.4.0':
|
||||
resolution: {integrity: sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==}
|
||||
|
||||
'@types/offscreencanvas@2019.7.3':
|
||||
resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==}
|
||||
@@ -11542,8 +11542,8 @@ packages:
|
||||
resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==}
|
||||
engines: {node: '>=16.9.0'}
|
||||
|
||||
hono@4.12.5:
|
||||
resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==}
|
||||
hono@4.12.7:
|
||||
resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==}
|
||||
engines: {node: '>=16.9.0'}
|
||||
|
||||
hookable@5.5.3:
|
||||
@@ -18313,7 +18313,7 @@ snapshots:
|
||||
cjs-module-lexer: 1.4.3
|
||||
esbuild: 0.27.3
|
||||
miniflare: 4.20260305.0
|
||||
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
wrangler: 4.69.0(@cloudflare/workers-types@4.20260226.1)
|
||||
transitivePeerDependencies:
|
||||
- '@cloudflare/workers-types'
|
||||
@@ -19461,25 +19461,25 @@ snapshots:
|
||||
|
||||
'@hongzhiyuan/preact@10.28.0-fc4af453': {}
|
||||
|
||||
'@hono/node-server@1.19.11(hono@4.12.5)':
|
||||
'@hono/node-server@1.19.11(hono@4.12.7)':
|
||||
dependencies:
|
||||
hono: 4.12.5
|
||||
hono: 4.12.7
|
||||
|
||||
'@hono/node-server@1.19.9(hono@4.11.4)':
|
||||
dependencies:
|
||||
hono: 4.11.4
|
||||
|
||||
'@hono/zod-openapi@1.2.2(hono@4.12.5)(zod@4.3.6)':
|
||||
'@hono/zod-openapi@1.2.2(hono@4.12.7)(zod@4.3.6)':
|
||||
dependencies:
|
||||
'@asteasolutions/zod-to-openapi': 8.4.3(zod@4.3.6)
|
||||
'@hono/zod-validator': 0.7.6(hono@4.12.5)(zod@4.3.6)
|
||||
hono: 4.12.5
|
||||
'@hono/zod-validator': 0.7.6(hono@4.12.7)(zod@4.3.6)
|
||||
hono: 4.12.7
|
||||
openapi3-ts: 4.5.0
|
||||
zod: 4.3.6
|
||||
|
||||
'@hono/zod-validator@0.7.6(hono@4.12.5)(zod@4.3.6)':
|
||||
'@hono/zod-validator@0.7.6(hono@4.12.7)(zod@4.3.6)':
|
||||
dependencies:
|
||||
hono: 4.12.5
|
||||
hono: 4.12.7
|
||||
zod: 4.3.6
|
||||
|
||||
'@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.4))':
|
||||
@@ -19591,7 +19591,7 @@ snapshots:
|
||||
'@img/sharp-win32-x64@0.34.5':
|
||||
optional: true
|
||||
|
||||
'@inkeep/agents-core@0.54.0(c35fa3d50074c0ae47b211ab383999b2)':
|
||||
'@inkeep/agents-core@0.54.0(ac93cd682e6997680cde6e3fe049558b)':
|
||||
dependencies:
|
||||
'@ai-sdk/anthropic': 3.0.7(zod@4.3.6)
|
||||
'@ai-sdk/azure': 3.0.38(zod@4.3.6)
|
||||
@@ -19605,7 +19605,7 @@ snapshots:
|
||||
'@better-auth/sso': 1.4.19(@better-auth/utils@0.3.0)(better-auth@1.4.19(37874412ccc7e51cb3cf44cf8d1a18ef))(better-call@1.1.8(zod@4.3.6))
|
||||
'@composio/core': 0.2.6(ws@8.19.0)(zod@4.3.6)
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
'@hono/zod-openapi': 1.2.2(hono@4.12.5)(zod@4.3.6)
|
||||
'@hono/zod-openapi': 1.2.2(hono@4.12.7)(zod@4.3.6)
|
||||
'@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6)
|
||||
'@nangohq/node': 0.69.38
|
||||
'@nangohq/types': 0.69.38
|
||||
@@ -19623,7 +19623,7 @@ snapshots:
|
||||
drizzle-zod: 0.8.3(drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(zod@4.3.6)
|
||||
exit-hook: 4.0.0
|
||||
find-up: 7.0.0
|
||||
hono: 4.12.5
|
||||
hono: 4.12.7
|
||||
iwanthue: 2.0.0
|
||||
jmespath: 0.16.0
|
||||
jose: 6.1.3
|
||||
@@ -19694,11 +19694,11 @@ snapshots:
|
||||
- vue
|
||||
- ws
|
||||
|
||||
'@inkeep/ai-sdk-provider@0.54.0(1b78cb9635f1622c0428a81b09f6eeb0)':
|
||||
'@inkeep/ai-sdk-provider@0.54.0(0641e63febbcd12aff52f2c9ed736642)':
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 3.0.2
|
||||
'@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
|
||||
'@inkeep/agents-core': 0.54.0(c35fa3d50074c0ae47b211ab383999b2)
|
||||
'@inkeep/agents-core': 0.54.0(ac93cd682e6997680cde6e3fe049558b)
|
||||
zod: 4.3.6
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/client-rds-data'
|
||||
@@ -19761,12 +19761,12 @@ snapshots:
|
||||
'@types/node': 25.3.2
|
||||
optional: true
|
||||
|
||||
'@inquirer/confirm@5.1.21(@types/node@25.3.3)':
|
||||
'@inquirer/confirm@5.1.21(@types/node@25.4.0)':
|
||||
dependencies:
|
||||
'@inquirer/core': 10.3.2(@types/node@25.3.3)
|
||||
'@inquirer/type': 3.0.10(@types/node@25.3.3)
|
||||
'@inquirer/core': 10.3.2(@types/node@25.4.0)
|
||||
'@inquirer/type': 3.0.10(@types/node@25.4.0)
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
|
||||
'@inquirer/core@10.3.2(@types/node@25.3.2)':
|
||||
dependencies:
|
||||
@@ -19782,18 +19782,18 @@ snapshots:
|
||||
'@types/node': 25.3.2
|
||||
optional: true
|
||||
|
||||
'@inquirer/core@10.3.2(@types/node@25.3.3)':
|
||||
'@inquirer/core@10.3.2(@types/node@25.4.0)':
|
||||
dependencies:
|
||||
'@inquirer/ansi': 1.0.2
|
||||
'@inquirer/figures': 1.0.15
|
||||
'@inquirer/type': 3.0.10(@types/node@25.3.3)
|
||||
'@inquirer/type': 3.0.10(@types/node@25.4.0)
|
||||
cli-width: 4.1.0
|
||||
mute-stream: 2.0.0
|
||||
signal-exit: 4.1.0
|
||||
wrap-ansi: 6.2.0
|
||||
yoctocolors-cjs: 2.1.3
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
|
||||
'@inquirer/figures@1.0.15': {}
|
||||
|
||||
@@ -19802,9 +19802,9 @@ snapshots:
|
||||
'@types/node': 25.3.2
|
||||
optional: true
|
||||
|
||||
'@inquirer/type@3.0.10(@types/node@25.3.3)':
|
||||
'@inquirer/type@3.0.10(@types/node@25.4.0)':
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
|
||||
'@ioredis/commands@1.5.0': {}
|
||||
|
||||
@@ -20176,7 +20176,7 @@ snapshots:
|
||||
|
||||
'@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@hono/node-server': 1.19.11(hono@4.12.5)
|
||||
'@hono/node-server': 1.19.11(hono@4.12.7)
|
||||
ajv: 8.18.0
|
||||
ajv-formats: 3.0.1(ajv@8.18.0)
|
||||
content-type: 1.0.5
|
||||
@@ -20186,7 +20186,7 @@ snapshots:
|
||||
eventsource-parser: 3.0.6
|
||||
express: 5.2.1
|
||||
express-rate-limit: 8.2.1(express@5.2.1)
|
||||
hono: 4.12.5
|
||||
hono: 4.12.7
|
||||
jose: 6.1.3
|
||||
json-schema-typed: 8.0.2
|
||||
pkce-challenge: 5.0.1
|
||||
@@ -20198,7 +20198,7 @@ snapshots:
|
||||
|
||||
'@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)':
|
||||
dependencies:
|
||||
'@hono/node-server': 1.19.11(hono@4.12.5)
|
||||
'@hono/node-server': 1.19.11(hono@4.12.7)
|
||||
ajv: 8.18.0
|
||||
ajv-formats: 3.0.1(ajv@8.18.0)
|
||||
content-type: 1.0.5
|
||||
@@ -20208,7 +20208,7 @@ snapshots:
|
||||
eventsource-parser: 3.0.6
|
||||
express: 5.2.1
|
||||
express-rate-limit: 8.2.1(express@5.2.1)
|
||||
hono: 4.12.5
|
||||
hono: 4.12.7
|
||||
jose: 6.1.3
|
||||
json-schema-typed: 8.0.2
|
||||
pkce-challenge: 5.0.1
|
||||
@@ -20320,7 +20320,7 @@ snapshots:
|
||||
'@netlify/blobs@10.5.0':
|
||||
dependencies:
|
||||
'@netlify/dev-utils': 4.3.3
|
||||
'@netlify/otel': 5.1.1
|
||||
'@netlify/otel': 5.1.2
|
||||
'@netlify/runtime-utils': 2.2.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -20345,7 +20345,7 @@ snapshots:
|
||||
write-file-atomic: 5.0.1
|
||||
optional: true
|
||||
|
||||
'@netlify/otel@5.1.1':
|
||||
'@netlify/otel@5.1.2':
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
|
||||
@@ -23674,11 +23674,11 @@ snapshots:
|
||||
dependencies:
|
||||
solid-js: 1.9.11
|
||||
|
||||
'@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))
|
||||
'@vinxi/server-components': 0.5.1(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))
|
||||
'@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))
|
||||
'@vinxi/server-components': 0.5.1(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))
|
||||
cookie-es: 2.0.0
|
||||
defu: 6.1.4
|
||||
error-stack-parser: 2.1.4
|
||||
@@ -23690,8 +23690,8 @@ snapshots:
|
||||
source-map-js: 1.2.1
|
||||
terracotta: 1.1.0(solid-js@1.9.11)
|
||||
tinyglobby: 0.2.15
|
||||
vinxi: 0.5.11(211ca8da8f7f1018663ab89a0cf5077c)
|
||||
vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vinxi: 0.5.11(a10131c95cf7e0ba6b16b1f12a658513)
|
||||
vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
transitivePeerDependencies:
|
||||
- '@testing-library/jest-dom'
|
||||
- solid-js
|
||||
@@ -23732,11 +23732,11 @@ snapshots:
|
||||
typescript: 5.9.3
|
||||
optional: true
|
||||
|
||||
'@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.1.0
|
||||
'@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
|
||||
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@types/cookie': 0.6.0
|
||||
acorn: 8.16.0
|
||||
cookie: 0.6.0
|
||||
@@ -23748,7 +23748,7 @@ snapshots:
|
||||
set-cookie-parser: 3.0.1
|
||||
sirv: 3.0.2
|
||||
svelte: 5.53.5
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
optionalDependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
typescript: 5.9.3
|
||||
@@ -23761,12 +23761,12 @@ snapshots:
|
||||
vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
optional: true
|
||||
|
||||
'@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
obug: 2.1.1
|
||||
svelte: 5.53.5
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
@@ -23781,15 +23781,15 @@ snapshots:
|
||||
- supports-color
|
||||
optional: true
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
debug: 4.4.3
|
||||
deepmerge: 4.3.1
|
||||
magic-string: 0.30.21
|
||||
svelte: 5.53.5
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -23870,7 +23870,7 @@ snapshots:
|
||||
postcss: 8.5.6
|
||||
tailwindcss: 4.2.1
|
||||
|
||||
'@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.26.2
|
||||
'@babel/core': 7.29.0
|
||||
@@ -23879,7 +23879,7 @@ snapshots:
|
||||
'@tanstack/router-utils': 1.161.4
|
||||
babel-dead-code-elimination: 1.0.12
|
||||
tiny-invariant: 1.3.3
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -23939,19 +23939,19 @@ snapshots:
|
||||
- webpack
|
||||
optional: true
|
||||
|
||||
'@tanstack/react-start@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/react-start@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
'@tanstack/react-start-client': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
'@tanstack/react-start-server': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
'@tanstack/router-utils': 1.161.4
|
||||
'@tanstack/start-client-core': 1.163.2
|
||||
'@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/start-server-core': 1.163.2
|
||||
pathe: 2.0.3
|
||||
react: 19.2.4
|
||||
react-dom: 19.2.4(react@19.2.4)
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
transitivePeerDependencies:
|
||||
- '@rsbuild/core'
|
||||
- crossws
|
||||
@@ -24018,7 +24018,7 @@ snapshots:
|
||||
- supports-color
|
||||
optional: true
|
||||
|
||||
'@tanstack/router-plugin@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/router-plugin@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@babel/core': 7.29.0
|
||||
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
|
||||
@@ -24035,8 +24035,8 @@ snapshots:
|
||||
zod: 3.25.76
|
||||
optionalDependencies:
|
||||
'@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -24054,7 +24054,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.26.2
|
||||
'@babel/core': 7.29.0
|
||||
@@ -24063,7 +24063,7 @@ snapshots:
|
||||
'@babel/template': 7.28.6
|
||||
'@babel/traverse': 7.29.0
|
||||
'@babel/types': 7.29.0
|
||||
'@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
babel-dead-code-elimination: 1.0.12
|
||||
tiny-invariant: 1.3.3
|
||||
transitivePeerDependencies:
|
||||
@@ -24124,17 +24124,17 @@ snapshots:
|
||||
- webpack
|
||||
optional: true
|
||||
|
||||
'@tanstack/solid-start@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/solid-start@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@tanstack/solid-router': 1.163.2(solid-js@1.9.11)
|
||||
'@tanstack/solid-start-client': 1.163.2(solid-js@1.9.11)
|
||||
'@tanstack/solid-start-server': 1.163.2(solid-js@1.9.11)
|
||||
'@tanstack/start-client-core': 1.163.2
|
||||
'@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/start-server-core': 1.163.2
|
||||
pathe: 2.0.3
|
||||
solid-js: 1.9.11
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
transitivePeerDependencies:
|
||||
- '@rsbuild/core'
|
||||
- '@tanstack/react-router'
|
||||
@@ -24192,7 +24192,7 @@ snapshots:
|
||||
- webpack
|
||||
optional: true
|
||||
|
||||
'@tanstack/start-plugin-core@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@tanstack/start-plugin-core@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@babel/code-frame': 7.27.1
|
||||
'@babel/core': 7.29.0
|
||||
@@ -24200,7 +24200,7 @@ snapshots:
|
||||
'@rolldown/pluginutils': 1.0.0-beta.40
|
||||
'@tanstack/router-core': 1.163.2
|
||||
'@tanstack/router-generator': 1.163.2
|
||||
'@tanstack/router-plugin': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/router-plugin': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@tanstack/router-utils': 1.161.4
|
||||
'@tanstack/start-client-core': 1.163.2
|
||||
'@tanstack/start-server-core': 1.163.2
|
||||
@@ -24212,8 +24212,8 @@ snapshots:
|
||||
srvx: 0.11.8
|
||||
tinyglobby: 0.2.15
|
||||
ufo: 1.6.3
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
xmlbuilder2: 4.0.3
|
||||
zod: 3.25.76
|
||||
transitivePeerDependencies:
|
||||
@@ -24734,7 +24734,7 @@ snapshots:
|
||||
dependencies:
|
||||
undici-types: 7.18.2
|
||||
|
||||
'@types/node@25.3.3':
|
||||
'@types/node@25.4.0':
|
||||
dependencies:
|
||||
undici-types: 7.18.2
|
||||
|
||||
@@ -24908,10 +24908,10 @@ snapshots:
|
||||
vue: 3.5.29(typescript@5.9.3)
|
||||
vue-router: 4.6.4(vue@3.5.29(typescript@5.9.3))
|
||||
|
||||
'@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
|
||||
'@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
|
||||
optionalDependencies:
|
||||
'@remix-run/react': 2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
'@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
|
||||
react: 19.2.4
|
||||
svelte: 5.53.5
|
||||
@@ -24973,7 +24973,7 @@ snapshots:
|
||||
untun: 0.1.3
|
||||
uqr: 0.1.2
|
||||
|
||||
'@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))':
|
||||
'@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))':
|
||||
dependencies:
|
||||
'@babel/parser': 7.29.0
|
||||
acorn: 8.16.0
|
||||
@@ -24984,18 +24984,18 @@ snapshots:
|
||||
magicast: 0.2.11
|
||||
recast: 0.23.11
|
||||
tslib: 2.8.1
|
||||
vinxi: 0.5.11(211ca8da8f7f1018663ab89a0cf5077c)
|
||||
vinxi: 0.5.11(a10131c95cf7e0ba6b16b1f12a658513)
|
||||
|
||||
'@vinxi/server-components@0.5.1(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))':
|
||||
'@vinxi/server-components@0.5.1(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))':
|
||||
dependencies:
|
||||
'@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c))
|
||||
'@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513))
|
||||
acorn: 8.16.0
|
||||
acorn-loose: 8.5.2
|
||||
acorn-typescript: 1.4.13(acorn@8.16.0)
|
||||
astring: 1.9.0
|
||||
magicast: 0.2.11
|
||||
recast: 0.23.11
|
||||
vinxi: 0.5.11(211ca8da8f7f1018663ab89a0cf5077c)
|
||||
vinxi: 0.5.11(a10131c95cf7e0ba6b16b1f12a658513)
|
||||
|
||||
'@vitest/coverage-istanbul@4.0.18(vitest@4.0.18)':
|
||||
dependencies:
|
||||
@@ -25031,14 +25031,14 @@ snapshots:
|
||||
msw: 2.12.10(@types/node@25.3.2)(typescript@5.9.3)
|
||||
vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
'@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
'@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
|
||||
dependencies:
|
||||
'@vitest/spy': 4.0.18
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.21
|
||||
optionalDependencies:
|
||||
msw: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
|
||||
vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
msw: 2.12.10(@types/node@25.4.0)(typescript@5.9.3)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
'@vitest/pretty-format@4.0.18':
|
||||
dependencies:
|
||||
@@ -25066,7 +25066,7 @@ snapshots:
|
||||
sirv: 3.0.2
|
||||
tinyglobby: 0.2.15
|
||||
tinyrainbow: 3.0.3
|
||||
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
'@vitest/utils@4.0.18':
|
||||
dependencies:
|
||||
@@ -26790,13 +26790,13 @@ snapshots:
|
||||
|
||||
dayjs@1.11.19: {}
|
||||
|
||||
db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)):
|
||||
db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0)):
|
||||
optionalDependencies:
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
'@libsql/client': 0.17.0(encoding@0.1.13)
|
||||
better-sqlite3: 12.6.2
|
||||
drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
|
||||
mysql2: 3.18.2(@types/node@25.4.0)
|
||||
|
||||
debounce-fn@6.0.0:
|
||||
dependencies:
|
||||
@@ -26949,7 +26949,7 @@ snapshots:
|
||||
|
||||
dotenv-expand@11.0.7:
|
||||
dependencies:
|
||||
dotenv: 16.4.7
|
||||
dotenv: 16.6.1
|
||||
|
||||
dotenv-expand@12.0.3:
|
||||
dependencies:
|
||||
@@ -26982,7 +26982,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
@@ -26995,7 +26995,7 @@ snapshots:
|
||||
bun-types: 1.3.9
|
||||
gel: 2.2.0
|
||||
kysely: 0.28.11
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
mysql2: 3.18.2(@types/node@25.4.0)
|
||||
pg: 8.19.0
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
@@ -27018,7 +27018,7 @@ snapshots:
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
@@ -27031,12 +27031,12 @@ snapshots:
|
||||
bun-types: 1.3.9
|
||||
gel: 2.2.0
|
||||
kysely: 0.28.11
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
mysql2: 3.18.2(@types/node@25.4.0)
|
||||
pg: 8.19.0
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
|
||||
optionalDependencies:
|
||||
'@cloudflare/workers-types': 4.20260226.1
|
||||
'@electric-sql/pglite': 0.3.15
|
||||
@@ -27049,7 +27049,7 @@ snapshots:
|
||||
bun-types: 1.3.9
|
||||
gel: 2.2.0
|
||||
kysely: 0.28.11
|
||||
mysql2: 3.18.2(@types/node@25.3.3)
|
||||
mysql2: 3.18.2(@types/node@25.4.0)
|
||||
pg: 8.19.0
|
||||
postgres: 3.4.8
|
||||
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
|
||||
@@ -28133,7 +28133,7 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
dependencies:
|
||||
'@mdx-js/mdx': 3.1.1
|
||||
'@standard-schema/spec': 1.1.0
|
||||
@@ -28161,7 +28161,7 @@ snapshots:
|
||||
mdast-util-mdx-jsx: 3.2.0
|
||||
next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
|
||||
react: 19.2.4
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -28771,7 +28771,7 @@ snapshots:
|
||||
|
||||
hono@4.11.4: {}
|
||||
|
||||
hono@4.12.5: {}
|
||||
hono@4.12.7: {}
|
||||
|
||||
hookable@5.5.3: {}
|
||||
|
||||
@@ -31201,9 +31201,9 @@ snapshots:
|
||||
- '@types/node'
|
||||
optional: true
|
||||
|
||||
msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3):
|
||||
msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@inquirer/confirm': 5.1.21(@types/node@25.3.3)
|
||||
'@inquirer/confirm': 5.1.21(@types/node@25.4.0)
|
||||
'@mswjs/interceptors': 0.41.3
|
||||
'@open-draft/deferred-promise': 2.2.0
|
||||
'@types/statuses': 2.0.6
|
||||
@@ -31253,9 +31253,9 @@ snapshots:
|
||||
sql-escaper: 1.3.3
|
||||
optional: true
|
||||
|
||||
mysql2@3.18.2(@types/node@25.3.3):
|
||||
mysql2@3.18.2(@types/node@25.4.0):
|
||||
dependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
aws-ssl-profiles: 1.1.2
|
||||
denque: 2.1.0
|
||||
generate-function: 2.3.1
|
||||
@@ -31332,7 +31332,7 @@ snapshots:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
||||
nitropack@2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.3.3))(rolldown@1.0.0-rc.8):
|
||||
nitropack@2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.4.0))(rolldown@1.0.0-rc.8):
|
||||
dependencies:
|
||||
'@cloudflare/kv-asset-handler': 0.4.2
|
||||
'@rollup/plugin-alias': 6.0.0(rollup@4.59.0)
|
||||
@@ -31353,7 +31353,7 @@ snapshots:
|
||||
cookie-es: 2.0.0
|
||||
croner: 9.1.0
|
||||
crossws: 0.3.5
|
||||
db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3))
|
||||
db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0))
|
||||
defu: 6.1.4
|
||||
destr: 2.0.5
|
||||
dot-prop: 10.1.0
|
||||
@@ -31399,7 +31399,7 @@ snapshots:
|
||||
unenv: 2.0.0-rc.24
|
||||
unimport: 5.7.0
|
||||
unplugin-utils: 0.3.1
|
||||
unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3)
|
||||
unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0)))(ioredis@5.9.3)
|
||||
untyped: 2.0.0
|
||||
unwasm: 0.5.3
|
||||
youch: 4.1.0
|
||||
@@ -34719,9 +34719,9 @@ snapshots:
|
||||
dependencies:
|
||||
js-tokens: 9.0.1
|
||||
|
||||
stripe@20.4.0(@types/node@25.3.3):
|
||||
stripe@20.4.0(@types/node@25.4.0):
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
|
||||
strnum@1.1.2:
|
||||
optional: true
|
||||
@@ -35527,7 +35527,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
synckit: 0.11.11
|
||||
|
||||
unstorage@1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3):
|
||||
unstorage@1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0)))(ioredis@5.9.3):
|
||||
dependencies:
|
||||
anymatch: 3.1.3
|
||||
chokidar: 5.0.0
|
||||
@@ -35540,7 +35540,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@azure/identity': 4.13.0
|
||||
'@netlify/blobs': 10.5.0
|
||||
db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3))
|
||||
db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0))
|
||||
ioredis: 5.9.3
|
||||
|
||||
until-async@3.0.2: {}
|
||||
@@ -35699,7 +35699,7 @@ snapshots:
|
||||
d3-time: 3.1.0
|
||||
d3-timer: 3.0.1
|
||||
|
||||
vinxi@0.5.11(211ca8da8f7f1018663ab89a0cf5077c):
|
||||
vinxi@0.5.11(a10131c95cf7e0ba6b16b1f12a658513):
|
||||
dependencies:
|
||||
'@babel/core': 7.29.0
|
||||
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
|
||||
@@ -35720,7 +35720,7 @@ snapshots:
|
||||
hookable: 5.5.3
|
||||
http-proxy: 1.18.1
|
||||
micromatch: 4.0.8
|
||||
nitropack: 2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.3.3))(rolldown@1.0.0-rc.8)
|
||||
nitropack: 2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.4.0))(rolldown@1.0.0-rc.8)
|
||||
node-fetch-native: 1.6.7
|
||||
path-to-regexp: 6.3.0
|
||||
pathe: 1.1.2
|
||||
@@ -35732,8 +35732,8 @@ snapshots:
|
||||
ufo: 1.6.3
|
||||
unctx: 2.5.0
|
||||
unenv: 1.10.0
|
||||
unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3)
|
||||
vite: 6.4.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.4.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.4.0)))(ioredis@5.9.3)
|
||||
vite: 6.4.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
zod: 4.3.6
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
@@ -35794,7 +35794,7 @@ snapshots:
|
||||
- supports-color
|
||||
optional: true
|
||||
|
||||
vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
dependencies:
|
||||
'@babel/core': 7.29.0
|
||||
'@types/babel__core': 7.20.5
|
||||
@@ -35802,12 +35802,12 @@ snapshots:
|
||||
merge-anything: 5.1.7
|
||||
solid-js: 1.9.11
|
||||
solid-refresh: 0.6.3(solid-js@1.9.11)
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vitefu: 1.1.2(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
vite@6.4.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
vite@6.4.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
dependencies:
|
||||
esbuild: 0.25.12
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
@@ -35816,7 +35816,7 @@ snapshots:
|
||||
rollup: 4.59.0
|
||||
tinyglobby: 0.2.15
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.6.1
|
||||
less: 4.5.1
|
||||
@@ -35845,7 +35845,7 @@ snapshots:
|
||||
tsx: 4.21.0
|
||||
yaml: 2.8.2
|
||||
|
||||
vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
dependencies:
|
||||
esbuild: 0.27.3
|
||||
fdir: 6.5.0(picomatch@4.0.3)
|
||||
@@ -35854,7 +35854,7 @@ snapshots:
|
||||
rollup: 4.59.0
|
||||
tinyglobby: 0.2.15
|
||||
optionalDependencies:
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
fsevents: 2.3.3
|
||||
jiti: 2.6.1
|
||||
less: 4.5.1
|
||||
@@ -35869,9 +35869,9 @@ snapshots:
|
||||
vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
optional: true
|
||||
|
||||
vitefu@1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
vitefu@1.1.2(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
|
||||
optionalDependencies:
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
|
||||
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
dependencies:
|
||||
@@ -35913,10 +35913,10 @@ snapshots:
|
||||
- tsx
|
||||
- yaml
|
||||
|
||||
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.4.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
|
||||
dependencies:
|
||||
'@vitest/expect': 4.0.18
|
||||
'@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.4.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
|
||||
'@vitest/pretty-format': 4.0.18
|
||||
'@vitest/runner': 4.0.18
|
||||
'@vitest/snapshot': 4.0.18
|
||||
@@ -35933,11 +35933,11 @@ snapshots:
|
||||
tinyexec: 1.0.2
|
||||
tinyglobby: 0.2.15
|
||||
tinyrainbow: 3.0.3
|
||||
vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
vite: 7.3.1(@types/node@25.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@opentelemetry/api': 1.9.0
|
||||
'@types/node': 25.3.3
|
||||
'@types/node': 25.4.0
|
||||
'@vitest/ui': 4.0.18(vitest@4.0.18)
|
||||
happy-dom: 20.7.0
|
||||
transitivePeerDependencies:
|
||||
|
||||
Reference in New Issue
Block a user