├── src ├── plugin.ts ├── react.ts ├── types │ ├── fetch-error.ts │ └── auth-client.ts ├── index.ts ├── client │ ├── tauri-fetch-impl.ts │ ├── setup-better-auth-tauri.ts │ ├── handle-auth-deep-link.ts │ └── sign-in-social.ts ├── react │ └── use-better-auth-tauri.ts └── plugin │ ├── callback-success.ts │ ├── check-callback-url.ts │ ├── append-callback-url.ts │ ├── tauri.ts │ └── html.ts ├── turbo.json ├── tsconfig.json ├── tsup.config.ts ├── LICENSE ├── biome.json ├── package.json ├── .gitignore ├── README.md └── pnpm-lock.yaml /src/plugin.ts: -------------------------------------------------------------------------------- 1 | export * from "./plugin/tauri" 2 | -------------------------------------------------------------------------------- /src/react.ts: -------------------------------------------------------------------------------- 1 | export * from "./react/use-better-auth-tauri" 2 | -------------------------------------------------------------------------------- /src/types/fetch-error.ts: -------------------------------------------------------------------------------- 1 | export type FetchError = { 2 | code?: string | undefined 3 | message?: string | undefined 4 | status: number 5 | statusText: string 6 | } 7 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./client/handle-auth-deep-link" 2 | export * from "./client/setup-better-auth-tauri" 3 | export * from "./client/sign-in-social" 4 | export * from "./client/tauri-fetch-impl" 5 | -------------------------------------------------------------------------------- /src/types/auth-client.ts: -------------------------------------------------------------------------------- 1 | import type { createAuthClient } from "better-auth/client" 2 | 3 | export type AuthClient = Omit< 4 | ReturnType, 5 | "signUp" | "getSession" | "useSession" 6 | > 7 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "tasks": { 4 | "build": { 5 | "dependsOn": [ 6 | "^build" 7 | ], 8 | "outputs": [ 9 | "dist/**" 10 | ] 11 | }, 12 | "dev": { 13 | "persistent": true, 14 | "cache": false 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/client/tauri-fetch-impl.ts: -------------------------------------------------------------------------------- 1 | import { isTauri } from "@tauri-apps/api/core" 2 | import { fetch as tauriFetch } from "@tauri-apps/plugin-http" 3 | import { platform } from "@tauri-apps/plugin-os" 4 | 5 | export const tauriFetchImpl: typeof fetch = (...params) => 6 | isTauri() && 7 | ((platform() === "macos" && window.location.protocol === "tauri:") || 8 | platform() === "windows") 9 | ? tauriFetch(...params) 10 | : fetch(...params) 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "declaration": true, 5 | "outDir": "dist", 6 | "strict": true, 7 | "esModuleInterop": true, 8 | "skipLibCheck": true, 9 | "resolveJsonModule": true, 10 | "allowJs": true, 11 | "incremental": false, 12 | "lib": [ 13 | "dom", 14 | "dom.iterable", 15 | "esnext" 16 | ], 17 | "module": "esnext", 18 | "moduleResolution": "bundler" 19 | }, 20 | "include": [ 21 | "src" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { preserveDirectivesPlugin } from "esbuild-plugin-preserve-directives" 2 | import { defineConfig } from "tsup" 3 | 4 | export default defineConfig((env) => { 5 | return { 6 | entry: { 7 | index: "./src/index.ts", 8 | react: "./src/react.ts", 9 | plugin: "./src/plugin.ts" 10 | }, 11 | format: ["esm", "cjs"], 12 | splitting: true, 13 | cjsInterop: true, 14 | skipNodeModulesBundle: true, 15 | treeshake: true, 16 | metafile: true, 17 | esbuildPlugins: [ 18 | preserveDirectivesPlugin({ 19 | directives: ["use client", "use strict"], 20 | include: /\.(js|ts|jsx|tsx)$/, 21 | exclude: /node_modules/ 22 | }) 23 | ] 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /src/react/use-better-auth-tauri.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react" 2 | import { 3 | type SetupBetterAuthTauriOptions, 4 | setupBetterAuthTauri 5 | } from "../client/setup-better-auth-tauri" 6 | 7 | export function useBetterAuthTauri({ 8 | authClient, 9 | debugLogs, 10 | mainWindowLabel, 11 | scheme, 12 | onError, 13 | onRequest, 14 | onSuccess 15 | }: SetupBetterAuthTauriOptions) { 16 | useEffect(() => { 17 | return setupBetterAuthTauri({ 18 | authClient, 19 | debugLogs, 20 | mainWindowLabel, 21 | scheme, 22 | onError, 23 | onRequest, 24 | onSuccess 25 | }) 26 | }, [ 27 | authClient, 28 | debugLogs, 29 | mainWindowLabel, 30 | scheme, 31 | onError, 32 | onRequest, 33 | onSuccess 34 | ]) 35 | } 36 | -------------------------------------------------------------------------------- /src/plugin/callback-success.ts: -------------------------------------------------------------------------------- 1 | import { createAuthEndpoint } from "better-auth/plugins" 2 | import { html } from "./html" 3 | 4 | export const callbackSuccess = (successText: string) => 5 | createAuthEndpoint( 6 | "/callback/success", 7 | { 8 | method: "GET" 9 | }, 10 | async (ctx) => { 11 | if (!ctx.request) return 12 | 13 | const redirectTo = new URL(ctx.request.url).searchParams.get( 14 | "redirectTo" 15 | ) 16 | 17 | const hideUI = new URL(ctx.request.url).searchParams.get("hideUI") 18 | 19 | return new Response( 20 | `${hideUI ? "" : html(successText)}`, 21 | { 22 | headers: { 23 | "Content-Type": "text/html" 24 | } 25 | } 26 | ) 27 | } 28 | ) 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 daveyplate 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/plugin/check-callback-url.ts: -------------------------------------------------------------------------------- 1 | import type { MiddlewareContext, MiddlewareOptions } from "better-auth" 2 | import type { AuthContext } from "better-auth/types" 3 | 4 | export function checkCallbackURL({ 5 | ctx, 6 | debugLogs, 7 | scheme, 8 | successURL, 9 | url 10 | }: { 11 | ctx: MiddlewareContext 12 | debugLogs?: boolean 13 | scheme: string 14 | successURL?: string 15 | url: URL 16 | }) { 17 | if (!ctx.request) return 18 | 19 | // const userAgent = ctx.request.headers.get("user-agent") 20 | // if (userAgent?.includes("Tauri/") || userAgent?.includes("tauri")) return 21 | 22 | // If not Tauri user agent then check callbackURL for deep link redirects 23 | const searchParams = url.searchParams 24 | const callbackURL = searchParams.get("callbackURL") 25 | 26 | if (debugLogs) { 27 | console.log( 28 | "[Better Auth Tauri] Callback URL:", 29 | callbackURL, 30 | url.pathname 31 | ) 32 | } 33 | 34 | if (!callbackURL?.startsWith(`${scheme}://`)) return 35 | 36 | // Remove the Deep Link URL scheme from the callbackURL 37 | searchParams.set("callbackURL", callbackURL.replace(`${scheme}:/`, "")) 38 | 39 | const deepLinkURL = `${scheme}:/${url.pathname}?${searchParams.toString()}` 40 | 41 | if (debugLogs) { 42 | console.log( 43 | "[Better Auth Tauri] Redirecting to:", 44 | deepLinkURL, 45 | url.pathname 46 | ) 47 | } 48 | 49 | throw ctx.redirect( 50 | successURL 51 | ? `${successURL}?redirectTo=${encodeURIComponent(deepLinkURL)}` 52 | : `${ctx.context.baseURL}/callback/success?redirectTo=${encodeURIComponent(deepLinkURL)}` 53 | ) 54 | } 55 | -------------------------------------------------------------------------------- /src/plugin/append-callback-url.ts: -------------------------------------------------------------------------------- 1 | import type { MiddlewareContext, MiddlewareOptions } from "better-auth" 2 | import type { SocialProvider } from "better-auth/social-providers" 3 | import type { AuthContext } from "better-auth/types" 4 | 5 | export function appendCallbackURL({ 6 | callbackURL, 7 | ctx, 8 | debugLogs, 9 | scheme 10 | }: { 11 | callbackURL: string 12 | ctx: MiddlewareContext 13 | debugLogs?: boolean 14 | scheme: string 15 | }) { 16 | if (!ctx.context.options.socialProviders) return 17 | if (ctx.path !== "/sign-in/social") return 18 | 19 | const platform = ctx.request?.headers.get("platform") || "" 20 | 21 | Object.keys(ctx.context.options.socialProviders).forEach((key) => { 22 | if (platform && !["android", "ios"].includes(platform)) { 23 | if (debugLogs) { 24 | console.log( 25 | "[Better Auth Tauri] Appending callback URL to social provider", 26 | key, 27 | `${ctx.context.baseURL}/callback/${key}?callbackURL=${scheme}:/${callbackURL}` 28 | ) 29 | } 30 | 31 | ctx.context.options.socialProviders![ 32 | key as SocialProvider 33 | ]!.redirectURI = 34 | `${ctx.context.baseURL}/callback/${key}?callbackURL=${scheme}:/${callbackURL}` 35 | } else { 36 | if (debugLogs) { 37 | console.log( 38 | "[Better Auth Tauri] Removing callback URL from social provider", 39 | key 40 | ) 41 | } 42 | 43 | ctx.context.options.socialProviders![ 44 | key as SocialProvider 45 | ]!.redirectURI = undefined 46 | } 47 | }) 48 | } 49 | -------------------------------------------------------------------------------- /src/client/setup-better-auth-tauri.ts: -------------------------------------------------------------------------------- 1 | import { isTauri } from "@tauri-apps/api/core" 2 | import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow" 3 | import { getCurrent, onOpenUrl } from "@tauri-apps/plugin-deep-link" 4 | import type { AuthClient } from "../types/auth-client" 5 | import type { FetchError } from "../types/fetch-error" 6 | import { handleAuthDeepLink } from "./handle-auth-deep-link" 7 | 8 | export interface SetupBetterAuthTauriOptions { 9 | authClient: AuthClient 10 | debugLogs?: boolean 11 | mainWindowLabel?: string 12 | scheme: string 13 | onError?: (error: FetchError) => void 14 | onRequest?: (href: string) => void 15 | onSuccess?: (callbackURL?: string | null) => void 16 | } 17 | 18 | export function setupBetterAuthTauri({ 19 | authClient, 20 | debugLogs, 21 | mainWindowLabel = "main", 22 | scheme, 23 | onError, 24 | onRequest, 25 | onSuccess 26 | }: SetupBetterAuthTauriOptions) { 27 | if (!isTauri()) return 28 | 29 | const handleUrls = (urls: string[] | null) => { 30 | if (!urls?.length) return 31 | const url = urls[0] 32 | 33 | handleAuthDeepLink({ 34 | authClient, 35 | scheme, 36 | url, 37 | debugLogs, 38 | onError, 39 | onRequest, 40 | onSuccess 41 | }) 42 | } 43 | 44 | if (!sessionStorage.getItem("getCurrentUrlChecked")) { 45 | if (getCurrentWebviewWindow().label === mainWindowLabel) { 46 | getCurrent().then(handleUrls) 47 | 48 | if (debugLogs) { 49 | console.log("[Better Auth Tauri] check getCurrent() url") 50 | } 51 | 52 | sessionStorage.setItem("getCurrentUrlChecked", "true") 53 | } 54 | } 55 | 56 | const unlisten = onOpenUrl(handleUrls) 57 | 58 | return () => { 59 | unlisten.then((f) => f()) 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/client/handle-auth-deep-link.ts: -------------------------------------------------------------------------------- 1 | import type { SetupBetterAuthTauriOptions } from "./setup-better-auth-tauri" 2 | 3 | export async function handleAuthDeepLink({ 4 | authClient, 5 | debugLogs, 6 | scheme, 7 | url, 8 | onError, 9 | onRequest, 10 | onSuccess 11 | }: SetupBetterAuthTauriOptions & { url: string }) { 12 | const basePath = "/api/auth/" 13 | 14 | const newUrl = new URL(url) 15 | 16 | if ( 17 | !url.startsWith(`${scheme}:/${basePath}`) && 18 | !newUrl.pathname.startsWith(basePath) 19 | ) 20 | return false 21 | 22 | const href = `/${ 23 | newUrl.protocol.startsWith("http") 24 | ? url.replace(newUrl.origin, "").replace(basePath, "") 25 | : url.replace(`${scheme}:/${basePath}`, "") 26 | }` 27 | 28 | if (debugLogs) { 29 | console.log("[Better Auth Tauri] handleAuthDeepLink fetch", href) 30 | } 31 | 32 | onRequest?.(href) 33 | const response = await authClient.$fetch(href) 34 | 35 | if (debugLogs) { 36 | console.log( 37 | "[Better Auth Tauri] handleAuthDeepLink response", 38 | response, 39 | href 40 | ) 41 | } 42 | 43 | if ( 44 | response.error?.status !== 302 && 45 | (response.error?.message || response.error?.statusText) 46 | ) { 47 | if (debugLogs) { 48 | console.error( 49 | "[Better Auth Tauri] handleAuthDeepLink error", 50 | response.error, 51 | href 52 | ) 53 | } 54 | 55 | onError?.(response.error) 56 | } else { 57 | const searchParams = new URL(url).searchParams 58 | const callbackURL = searchParams 59 | .get("callbackURL") 60 | ?.replace(`${scheme}:/`, "") 61 | 62 | if (debugLogs) { 63 | console.log( 64 | "[Better Auth Tauri] handleAuthDeepLink onSuccess callbackURL", 65 | callbackURL, 66 | href 67 | ) 68 | } 69 | 70 | onSuccess?.(callbackURL) 71 | } 72 | 73 | return true 74 | } 75 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", 3 | "vcs": { 4 | "enabled": true, 5 | "clientKind": "git", 6 | "useIgnoreFile": true 7 | }, 8 | "files": { 9 | "includes": [ 10 | "**", 11 | "!**/*.css", 12 | "!src/components/ui/**/*" 13 | ] 14 | }, 15 | "formatter": { 16 | "indentStyle": "space", 17 | "indentWidth": 4 18 | }, 19 | "linter": { 20 | "rules": { 21 | "a11y": { 22 | "noSvgWithoutTitle": "off" 23 | }, 24 | "correctness": { 25 | "noUnusedFunctionParameters": "off", 26 | "noUnusedImports": { 27 | "fix": "safe", 28 | "level": "info", 29 | "options": {} 30 | }, 31 | "useParseIntRadix": "off", 32 | "useHookAtTopLevel": "off" 33 | }, 34 | "style": { 35 | "noNonNullAssertion": "off", 36 | "useSelfClosingElements": { 37 | "fix": "safe", 38 | "level": "info", 39 | "options": {} 40 | }, 41 | "useTemplate": { 42 | "fix": "safe", 43 | "level": "info", 44 | "options": {} 45 | } 46 | }, 47 | "suspicious": { 48 | "noArrayIndexKey": "off", 49 | "noDoubleEquals": { 50 | "fix": "safe", 51 | "level": "warn", 52 | "options": {} 53 | } 54 | }, 55 | "nursery": { 56 | "useSortedClasses": { 57 | "fix": "safe", 58 | "level": "info", 59 | "options": { 60 | "functions": [ 61 | "cn" 62 | ] 63 | } 64 | } 65 | } 66 | } 67 | }, 68 | "javascript": { 69 | "formatter": { 70 | "semicolons": "asNeeded", 71 | "trailingCommas": "none" 72 | } 73 | }, 74 | "json": { 75 | "formatter": { 76 | "expand": "always" 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/client/sign-in-social.ts: -------------------------------------------------------------------------------- 1 | import { isTauri } from "@tauri-apps/api/core" 2 | import { openUrl } from "@tauri-apps/plugin-opener" 3 | import { platform } from "@tauri-apps/plugin-os" 4 | 5 | import type { BetterFetchOption } from "better-auth/client" 6 | import type { AuthClient } from "../types/auth-client" 7 | import type { FetchError } from "../types/fetch-error" 8 | 9 | const isOpenerEnabled = () => 10 | isTauri() && 11 | (window.location.protocol === "tauri:" || platform() !== "macos") 12 | 13 | export type SocialSignInParams = Parameters[0] 14 | 15 | type SocialSignInData = { redirect: boolean; url?: string } 16 | type SocialSignInResult = { 17 | data: SocialSignInData | null 18 | error: FetchError | null 19 | } 20 | 21 | export interface SignInSocialProps extends SocialSignInParams { 22 | authClient: AuthClient 23 | } 24 | 25 | export function signInSocial( 26 | params: SignInSocialProps 27 | ): Promise 28 | 29 | export function signInSocial( 30 | params: Omit & { 31 | fetchOptions: Omit & { throw: true } 32 | } 33 | ): Promise 34 | 35 | export async function signInSocial({ 36 | authClient, 37 | fetchOptions, 38 | callbackURL, 39 | ...rest 40 | }: SignInSocialProps): Promise { 41 | const openerEnabled = isOpenerEnabled() 42 | const params: SocialSignInParams = { 43 | ...rest, 44 | disableRedirect: openerEnabled, 45 | callbackURL: openerEnabled ? undefined : callbackURL, 46 | fetchOptions: { 47 | ...(fetchOptions ?? {}), 48 | headers: { 49 | ...(fetchOptions?.headers ?? {}), 50 | ...(openerEnabled ? { Platform: platform() } : {}) 51 | } 52 | } 53 | } 54 | 55 | if (fetchOptions?.throw) { 56 | const data = await authClient.signIn.social({ 57 | ...params, 58 | fetchOptions: { ...params.fetchOptions, throw: true } 59 | }) 60 | 61 | handleSocialSignIn(data) 62 | 63 | return data 64 | } 65 | 66 | const response = await authClient.signIn.social(params) 67 | 68 | handleSocialSignIn(response.data) 69 | 70 | return response 71 | } 72 | 73 | function handleSocialSignIn(data: SocialSignInData | null) { 74 | if (!data?.url || data.redirect || !isOpenerEnabled()) return 75 | 76 | openUrl(data.url) 77 | } 78 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@daveyplate/better-auth-tauri", 3 | "homepage": "https://github.com/daveyplate/better-auth-tauri", 4 | "version": "0.1.6", 5 | "description": "Better Auth Tauri Plugin", 6 | "files": [ 7 | "src", 8 | "dist" 9 | ], 10 | "scripts": { 11 | "build": "tsup --clean --dts", 12 | "dev": "tsc-watch --onSuccess 'biome check --fix'", 13 | "prepublishOnly": "rm -rf dist && tsup --clean --dts" 14 | }, 15 | "type": "module", 16 | "main": "./dist/index.cjs", 17 | "module": "./dist/index.js", 18 | "exports": { 19 | ".": { 20 | "import": { 21 | "types": "./dist/index.d.ts", 22 | "default": "./dist/index.js" 23 | }, 24 | "require": { 25 | "types": "./dist/index.d.cts", 26 | "default": "./dist/index.cjs" 27 | } 28 | }, 29 | "./react": { 30 | "import": { 31 | "types": "./dist/react.d.ts", 32 | "default": "./dist/react.js" 33 | }, 34 | "require": { 35 | "types": "./dist/react.d.cts", 36 | "default": "./dist/react.cjs" 37 | } 38 | }, 39 | "./plugin": { 40 | "import": { 41 | "types": "./dist/plugin.d.ts", 42 | "default": "./dist/plugin.js" 43 | }, 44 | "require": { 45 | "types": "./dist/plugin.d.cts", 46 | "default": "./dist/plugin.cjs" 47 | } 48 | } 49 | }, 50 | "keywords": [ 51 | "typescript" 52 | ], 53 | "author": "daveycodez", 54 | "license": "MIT", 55 | "devDependencies": { 56 | "@biomejs/biome": "2.2.4", 57 | "@types/node": "^24.5.2", 58 | "@types/react": "^19.1.13", 59 | "@types/react-dom": "^19.1.9", 60 | "esbuild-plugin-preserve-directives": "^0.0.11", 61 | "react": "^19.1.1", 62 | "react-dom": "^19.1.1", 63 | "tsc-watch": "^7.1.1", 64 | "tsup": "^8.5.0", 65 | "tsx": "^4.20.5", 66 | "turbo": "^2.5.6", 67 | "typescript": "^5.9.2" 68 | }, 69 | "peerDependencies": { 70 | "@tauri-apps/api": ">=2.5.0", 71 | "@tauri-apps/plugin-deep-link": ">=2.2.1", 72 | "@tauri-apps/plugin-http": ">=2.4.3", 73 | "@tauri-apps/plugin-opener": ">=2.2.6", 74 | "@tauri-apps/plugin-os": ">=2.2.1", 75 | "better-auth": ">=1.2.7", 76 | "react": ">=18.0.0", 77 | "react-dom": ">=18.0.0" 78 | }, 79 | "packageManager": "pnpm@10.10.0" 80 | } 81 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | .vscode 132 | .turbo 133 | .DS_Store 134 | -------------------------------------------------------------------------------- /src/plugin/tauri.ts: -------------------------------------------------------------------------------- 1 | import type { BetterAuthPlugin } from "better-auth" 2 | import { createAuthMiddleware } from "better-auth/plugins" 3 | import { appendCallbackURL } from "./append-callback-url" 4 | import { callbackSuccess } from "./callback-success" 5 | import { checkCallbackURL } from "./check-callback-url" 6 | 7 | export const tauri = ({ 8 | callbackURL = "/", 9 | debugLogs, 10 | scheme, 11 | successText = "Your authentication was successful. You may now close this window and return to the application.", 12 | successURL 13 | }: { 14 | baseURL?: string 15 | callbackURL?: string 16 | debugLogs?: boolean 17 | scheme: string 18 | successText?: string 19 | successURL?: string 20 | }) => 21 | ({ 22 | id: "tauriPlugin", 23 | hooks: { 24 | before: [ 25 | { 26 | matcher: (context) => 27 | !context.request?.url?.includes("/reset-password") && 28 | !context.request?.url?.includes("/callback/success"), 29 | handler: createAuthMiddleware(async (ctx) => { 30 | if (!ctx.request) return 31 | 32 | // Always use /api/auth as basePath when redirecting to Tauri 33 | const basePath = 34 | ctx.context.options.basePath ?? "/api/auth" 35 | const url = new URL(ctx.request.url) 36 | url.pathname = url.pathname.replace( 37 | basePath, 38 | "/api/auth" 39 | ) 40 | 41 | if (debugLogs) { 42 | const userAgent = 43 | ctx.request.headers.get("user-agent") 44 | const host = ctx.request.headers.get("host") 45 | 46 | console.log( 47 | "[Better Auth Tauri] Request URL:", 48 | ctx.request.url, 49 | "User Agent:", 50 | userAgent, 51 | "Host:", 52 | host, 53 | "Pathname:", 54 | url.pathname 55 | ) 56 | } 57 | 58 | appendCallbackURL({ 59 | callbackURL, 60 | ctx, 61 | debugLogs, 62 | scheme 63 | }) 64 | 65 | checkCallbackURL({ 66 | ctx, 67 | debugLogs, 68 | scheme, 69 | successURL, 70 | url 71 | }) 72 | }) 73 | } 74 | ] 75 | }, 76 | endpoints: { 77 | getCallbackSuccess: callbackSuccess(successText) 78 | } 79 | }) satisfies BetterAuthPlugin 80 | -------------------------------------------------------------------------------- /src/plugin/html.ts: -------------------------------------------------------------------------------- 1 | export const html = (successText: string) => ` 2 | 3 | 4 | 5 | 6 | Authentication Success 7 | 90 | 91 | 92 |
93 |
94 |

Authentication Successful

95 |

${successText}

96 |
97 | 98 | ` 99 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Better Auth Tauri Plugin 2 | 3 | A plugin for [Better Auth](https://better-auth.com) that provides seamless integration with [Tauri](https://tauri.app) applications. 4 | 5 | ## Installation 6 | 7 | ```bash 8 | # npm 9 | npm install @daveyplate/better-auth-tauri 10 | 11 | # pnpm 12 | pnpm add @daveyplate/better-auth-tauri 13 | 14 | # yarn 15 | yarn add @daveyplate/better-auth-tauri 16 | 17 | # bun 18 | bun add @daveyplate/better-auth-tauri 19 | ``` 20 | 21 | ## Prerequisites 22 | 23 | This plugin requires the following Tauri plugins: 24 | 25 | - `@tauri-apps/plugin-deep-link` 26 | - `@tauri-apps/plugin-http` 27 | - `@tauri-apps/plugin-os` 28 | 29 | Make sure these are installed and properly configured in your Tauri application. 30 | 31 | ## Server Setup 32 | 33 | ### 1. Configure the Tauri Plugin in your `auth.ts` file 34 | 35 | ```typescript 36 | import { betterAuth } from "better-auth"; 37 | import { tauri } from "@daveyplate/better-auth-tauri/plugin"; 38 | 39 | export const auth = betterAuth({ 40 | // Your existing Better Auth configuration 41 | plugins: [ 42 | // Your existing plugins 43 | tauri({ 44 | scheme: "your-app", // Your app's deep link scheme 45 | callbackURL: "/", // Optional: Where to redirect after auth (default: "/") 46 | successText: "Authentication successful! You can close this window.", // Optional 47 | successURL: "/auth/success", // Optional: Custom success page URL that will receive a ?redirectTo search parameter 48 | debugLogs: false, // Optional: Enable debug logs 49 | }), 50 | ], 51 | }); 52 | ``` 53 | 54 | ### 2. Register the Deep Link Scheme in Tauri 55 | 56 | In your `tauri.conf.json` file, add your deep link scheme: 57 | 58 | ```json 59 | { 60 | "plugins": { 61 | "deep-link": { 62 | "desktop": { 63 | "schemes": ["my-app"] 64 | } 65 | } 66 | } 67 | } 68 | ``` 69 | 70 | ## Client Setup 71 | 72 | ### Option 1: Standard JavaScript/TypeScript Setup 73 | 74 | ```typescript 75 | import { setupBetterAuthTauri } from "@daveyplate/better-auth-tauri"; 76 | import { authClient } from "./your-auth-client"; 77 | 78 | // Initialize in your app's entry point 79 | setupBetterAuthTauri({ 80 | authClient, // Your Better Auth client instance 81 | scheme: "your-app", // Must match the scheme in your server config 82 | debugLogs: false, // Optional: Enable debug logs 83 | mainWindowLabel: "main", // Optional: Your main window label (default: "main") 84 | onRequest: (href) => { 85 | console.log("Auth request:", href); 86 | }, 87 | onSuccess: (callbackURL) => { 88 | console.log("Auth successful, callback URL:", callbackURL); 89 | // Handle successful authentication 90 | window.location.href = callbackURL 91 | }, 92 | onError: (error) => { 93 | console.error("Auth error:", error); 94 | // Handle authentication error 95 | }, 96 | }); 97 | ``` 98 | 99 | ### Option 2: React Setup 100 | 101 | ```typescript 102 | import { useBetterAuthTauri } from "@daveyplate/better-auth-tauri/react"; 103 | import { authClient } from "./your-auth-client"; 104 | 105 | function App() { 106 | useBetterAuthTauri({ 107 | authClient, 108 | scheme: "your-app", 109 | debugLogs: false, 110 | onRequest: (href) => { 111 | console.log("Auth request:", href); 112 | }, 113 | onSuccess: (callbackURL) => { 114 | console.log("Auth successful"); 115 | // Navigate or update UI as needed 116 | }, 117 | onError: (error) => { 118 | console.error("Auth error:", error); 119 | // Show error notification 120 | }, 121 | }); 122 | 123 | return ( 124 | // Your app components 125 | ); 126 | } 127 | ``` 128 | 129 | ### Option 3: Svelte Setup 130 | 131 | ```typescript 132 | 164 | ``` 165 | 166 | ## Social Sign In 167 | 168 | First install the official Tauri Opener plugin: 169 | https://v2.tauri.app/plugin/opener/ 170 | 171 | To properly use Social Sign in with the Opener plugin we provide a helper function: 172 | 173 | ```ts 174 | import { signInSocial } from "@daveyplate/better-auth-tauri" 175 | import { authClient } from "@/lib/auth-client" 176 | 177 | export function Page() { 178 | return ( 179 | 187 | ) 188 | } 189 | ``` 190 | 191 | ## macOS Cookies 192 | 193 | You must update your auth-client.ts to use Tauri HTTP plugin for macOS in production in order for cookies to work: 194 | 195 | ```tsx 196 | import { isTauri } from "@tauri-apps/api/core" 197 | import { fetch as tauriFetch } from "@tauri-apps/plugin-http" 198 | import { platform } from "@tauri-apps/plugin-os" 199 | import { createAuthClient } from "better-auth/react" 200 | 201 | export const authClient = createAuthClient({ 202 | fetchOptions: { 203 | customFetchImpl: (...params) => 204 | isTauri() && platform() === "macos" && window.location.protocol === "tauri:" 205 | ? tauriFetch(...params) 206 | : fetch(...params) 207 | } 208 | }) 209 | ``` 210 | 211 | ## How It Works 212 | 213 | This plugin enables seamless authentication in Tauri apps by: 214 | 215 | 1. **Handling Deep Links**: Properly processes authentication redirects through your app's custom URL scheme. 216 | 2. **Managing Authentication State**: Ensures that your app's auth state remains consistent across the authentication flow. 217 | 3. **Simplifying Tauri Integration**: Removes the boilerplate needed to make authentication work in desktop applications. 218 | 219 | ## License 220 | 221 | MIT -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@tauri-apps/api': 12 | specifier: '>=2.5.0' 13 | version: 2.5.0 14 | '@tauri-apps/plugin-deep-link': 15 | specifier: '>=2.2.1' 16 | version: 2.2.1 17 | '@tauri-apps/plugin-http': 18 | specifier: '>=2.4.3' 19 | version: 2.4.3 20 | '@tauri-apps/plugin-opener': 21 | specifier: '>=2.2.6' 22 | version: 2.2.6 23 | '@tauri-apps/plugin-os': 24 | specifier: '>=2.2.1' 25 | version: 2.2.1 26 | better-auth: 27 | specifier: '>=1.2.7' 28 | version: 1.2.7 29 | devDependencies: 30 | '@biomejs/biome': 31 | specifier: 2.2.4 32 | version: 2.2.4 33 | '@types/node': 34 | specifier: ^24.5.2 35 | version: 24.5.2 36 | '@types/react': 37 | specifier: ^19.1.13 38 | version: 19.1.13 39 | '@types/react-dom': 40 | specifier: ^19.1.9 41 | version: 19.1.9(@types/react@19.1.13) 42 | esbuild-plugin-preserve-directives: 43 | specifier: ^0.0.11 44 | version: 0.0.11(esbuild@0.25.10) 45 | react: 46 | specifier: ^19.1.1 47 | version: 19.1.1 48 | react-dom: 49 | specifier: ^19.1.1 50 | version: 19.1.1(react@19.1.1) 51 | tsc-watch: 52 | specifier: ^7.1.1 53 | version: 7.1.1(typescript@5.9.2) 54 | tsup: 55 | specifier: ^8.5.0 56 | version: 8.5.0(tsx@4.20.5)(typescript@5.9.2) 57 | tsx: 58 | specifier: ^4.20.5 59 | version: 4.20.5 60 | turbo: 61 | specifier: ^2.5.6 62 | version: 2.5.6 63 | typescript: 64 | specifier: ^5.9.2 65 | version: 5.9.2 66 | 67 | packages: 68 | 69 | '@better-auth/utils@0.2.4': 70 | resolution: {integrity: sha512-ayiX87Xd5sCHEplAdeMgwkA0FgnXsEZBgDn890XHHwSWNqqRZDYOq3uj2Ei2leTv1I2KbG5HHn60Ah1i2JWZjQ==} 71 | 72 | '@better-fetch/fetch@1.1.18': 73 | resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==} 74 | 75 | '@biomejs/biome@2.2.4': 76 | resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==} 77 | engines: {node: '>=14.21.3'} 78 | hasBin: true 79 | 80 | '@biomejs/cli-darwin-arm64@2.2.4': 81 | resolution: {integrity: sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==} 82 | engines: {node: '>=14.21.3'} 83 | cpu: [arm64] 84 | os: [darwin] 85 | 86 | '@biomejs/cli-darwin-x64@2.2.4': 87 | resolution: {integrity: sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==} 88 | engines: {node: '>=14.21.3'} 89 | cpu: [x64] 90 | os: [darwin] 91 | 92 | '@biomejs/cli-linux-arm64-musl@2.2.4': 93 | resolution: {integrity: sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==} 94 | engines: {node: '>=14.21.3'} 95 | cpu: [arm64] 96 | os: [linux] 97 | 98 | '@biomejs/cli-linux-arm64@2.2.4': 99 | resolution: {integrity: sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==} 100 | engines: {node: '>=14.21.3'} 101 | cpu: [arm64] 102 | os: [linux] 103 | 104 | '@biomejs/cli-linux-x64-musl@2.2.4': 105 | resolution: {integrity: sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==} 106 | engines: {node: '>=14.21.3'} 107 | cpu: [x64] 108 | os: [linux] 109 | 110 | '@biomejs/cli-linux-x64@2.2.4': 111 | resolution: {integrity: sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==} 112 | engines: {node: '>=14.21.3'} 113 | cpu: [x64] 114 | os: [linux] 115 | 116 | '@biomejs/cli-win32-arm64@2.2.4': 117 | resolution: {integrity: sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==} 118 | engines: {node: '>=14.21.3'} 119 | cpu: [arm64] 120 | os: [win32] 121 | 122 | '@biomejs/cli-win32-x64@2.2.4': 123 | resolution: {integrity: sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==} 124 | engines: {node: '>=14.21.3'} 125 | cpu: [x64] 126 | os: [win32] 127 | 128 | '@esbuild/aix-ppc64@0.25.10': 129 | resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} 130 | engines: {node: '>=18'} 131 | cpu: [ppc64] 132 | os: [aix] 133 | 134 | '@esbuild/android-arm64@0.25.10': 135 | resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} 136 | engines: {node: '>=18'} 137 | cpu: [arm64] 138 | os: [android] 139 | 140 | '@esbuild/android-arm@0.25.10': 141 | resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} 142 | engines: {node: '>=18'} 143 | cpu: [arm] 144 | os: [android] 145 | 146 | '@esbuild/android-x64@0.25.10': 147 | resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} 148 | engines: {node: '>=18'} 149 | cpu: [x64] 150 | os: [android] 151 | 152 | '@esbuild/darwin-arm64@0.25.10': 153 | resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} 154 | engines: {node: '>=18'} 155 | cpu: [arm64] 156 | os: [darwin] 157 | 158 | '@esbuild/darwin-x64@0.25.10': 159 | resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} 160 | engines: {node: '>=18'} 161 | cpu: [x64] 162 | os: [darwin] 163 | 164 | '@esbuild/freebsd-arm64@0.25.10': 165 | resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} 166 | engines: {node: '>=18'} 167 | cpu: [arm64] 168 | os: [freebsd] 169 | 170 | '@esbuild/freebsd-x64@0.25.10': 171 | resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} 172 | engines: {node: '>=18'} 173 | cpu: [x64] 174 | os: [freebsd] 175 | 176 | '@esbuild/linux-arm64@0.25.10': 177 | resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} 178 | engines: {node: '>=18'} 179 | cpu: [arm64] 180 | os: [linux] 181 | 182 | '@esbuild/linux-arm@0.25.10': 183 | resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} 184 | engines: {node: '>=18'} 185 | cpu: [arm] 186 | os: [linux] 187 | 188 | '@esbuild/linux-ia32@0.25.10': 189 | resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} 190 | engines: {node: '>=18'} 191 | cpu: [ia32] 192 | os: [linux] 193 | 194 | '@esbuild/linux-loong64@0.25.10': 195 | resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} 196 | engines: {node: '>=18'} 197 | cpu: [loong64] 198 | os: [linux] 199 | 200 | '@esbuild/linux-mips64el@0.25.10': 201 | resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} 202 | engines: {node: '>=18'} 203 | cpu: [mips64el] 204 | os: [linux] 205 | 206 | '@esbuild/linux-ppc64@0.25.10': 207 | resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} 208 | engines: {node: '>=18'} 209 | cpu: [ppc64] 210 | os: [linux] 211 | 212 | '@esbuild/linux-riscv64@0.25.10': 213 | resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} 214 | engines: {node: '>=18'} 215 | cpu: [riscv64] 216 | os: [linux] 217 | 218 | '@esbuild/linux-s390x@0.25.10': 219 | resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} 220 | engines: {node: '>=18'} 221 | cpu: [s390x] 222 | os: [linux] 223 | 224 | '@esbuild/linux-x64@0.25.10': 225 | resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} 226 | engines: {node: '>=18'} 227 | cpu: [x64] 228 | os: [linux] 229 | 230 | '@esbuild/netbsd-arm64@0.25.10': 231 | resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} 232 | engines: {node: '>=18'} 233 | cpu: [arm64] 234 | os: [netbsd] 235 | 236 | '@esbuild/netbsd-x64@0.25.10': 237 | resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} 238 | engines: {node: '>=18'} 239 | cpu: [x64] 240 | os: [netbsd] 241 | 242 | '@esbuild/openbsd-arm64@0.25.10': 243 | resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} 244 | engines: {node: '>=18'} 245 | cpu: [arm64] 246 | os: [openbsd] 247 | 248 | '@esbuild/openbsd-x64@0.25.10': 249 | resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} 250 | engines: {node: '>=18'} 251 | cpu: [x64] 252 | os: [openbsd] 253 | 254 | '@esbuild/openharmony-arm64@0.25.10': 255 | resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} 256 | engines: {node: '>=18'} 257 | cpu: [arm64] 258 | os: [openharmony] 259 | 260 | '@esbuild/sunos-x64@0.25.10': 261 | resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} 262 | engines: {node: '>=18'} 263 | cpu: [x64] 264 | os: [sunos] 265 | 266 | '@esbuild/win32-arm64@0.25.10': 267 | resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} 268 | engines: {node: '>=18'} 269 | cpu: [arm64] 270 | os: [win32] 271 | 272 | '@esbuild/win32-ia32@0.25.10': 273 | resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} 274 | engines: {node: '>=18'} 275 | cpu: [ia32] 276 | os: [win32] 277 | 278 | '@esbuild/win32-x64@0.25.10': 279 | resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} 280 | engines: {node: '>=18'} 281 | cpu: [x64] 282 | os: [win32] 283 | 284 | '@hexagon/base64@1.1.28': 285 | resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} 286 | 287 | '@isaacs/cliui@8.0.2': 288 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 289 | engines: {node: '>=12'} 290 | 291 | '@jridgewell/gen-mapping@0.3.13': 292 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 293 | 294 | '@jridgewell/resolve-uri@3.1.2': 295 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 296 | engines: {node: '>=6.0.0'} 297 | 298 | '@jridgewell/sourcemap-codec@1.5.5': 299 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 300 | 301 | '@jridgewell/trace-mapping@0.3.31': 302 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 303 | 304 | '@levischuck/tiny-cbor@0.2.11': 305 | resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} 306 | 307 | '@noble/ciphers@0.6.0': 308 | resolution: {integrity: sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==} 309 | 310 | '@noble/hashes@1.8.0': 311 | resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} 312 | engines: {node: ^14.21.3 || >=16} 313 | 314 | '@peculiar/asn1-android@2.3.16': 315 | resolution: {integrity: sha512-a1viIv3bIahXNssrOIkXZIlI2ePpZaNmR30d4aBL99mu2rO+mT9D6zBsp7H6eROWGtmwv0Ionp5olJurIo09dw==} 316 | 317 | '@peculiar/asn1-ecc@2.3.15': 318 | resolution: {integrity: sha512-/HtR91dvgog7z/WhCVdxZJ/jitJuIu8iTqiyWVgRE9Ac5imt2sT/E4obqIVGKQw7PIy+X6i8lVBoT6wC73XUgA==} 319 | 320 | '@peculiar/asn1-rsa@2.3.15': 321 | resolution: {integrity: sha512-p6hsanvPhexRtYSOHihLvUUgrJ8y0FtOM97N5UEpC+VifFYyZa0iZ5cXjTkZoDwxJ/TTJ1IJo3HVTB2JJTpXvg==} 322 | 323 | '@peculiar/asn1-schema@2.3.15': 324 | resolution: {integrity: sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==} 325 | 326 | '@peculiar/asn1-x509@2.3.15': 327 | resolution: {integrity: sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg==} 328 | 329 | '@pkgjs/parseargs@0.11.0': 330 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 331 | engines: {node: '>=14'} 332 | 333 | '@rollup/rollup-android-arm-eabi@4.52.0': 334 | resolution: {integrity: sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==} 335 | cpu: [arm] 336 | os: [android] 337 | 338 | '@rollup/rollup-android-arm64@4.52.0': 339 | resolution: {integrity: sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==} 340 | cpu: [arm64] 341 | os: [android] 342 | 343 | '@rollup/rollup-darwin-arm64@4.52.0': 344 | resolution: {integrity: sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==} 345 | cpu: [arm64] 346 | os: [darwin] 347 | 348 | '@rollup/rollup-darwin-x64@4.52.0': 349 | resolution: {integrity: sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==} 350 | cpu: [x64] 351 | os: [darwin] 352 | 353 | '@rollup/rollup-freebsd-arm64@4.52.0': 354 | resolution: {integrity: sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==} 355 | cpu: [arm64] 356 | os: [freebsd] 357 | 358 | '@rollup/rollup-freebsd-x64@4.52.0': 359 | resolution: {integrity: sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==} 360 | cpu: [x64] 361 | os: [freebsd] 362 | 363 | '@rollup/rollup-linux-arm-gnueabihf@4.52.0': 364 | resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} 365 | cpu: [arm] 366 | os: [linux] 367 | 368 | '@rollup/rollup-linux-arm-musleabihf@4.52.0': 369 | resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} 370 | cpu: [arm] 371 | os: [linux] 372 | 373 | '@rollup/rollup-linux-arm64-gnu@4.52.0': 374 | resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} 375 | cpu: [arm64] 376 | os: [linux] 377 | 378 | '@rollup/rollup-linux-arm64-musl@4.52.0': 379 | resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} 380 | cpu: [arm64] 381 | os: [linux] 382 | 383 | '@rollup/rollup-linux-loong64-gnu@4.52.0': 384 | resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} 385 | cpu: [loong64] 386 | os: [linux] 387 | 388 | '@rollup/rollup-linux-ppc64-gnu@4.52.0': 389 | resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} 390 | cpu: [ppc64] 391 | os: [linux] 392 | 393 | '@rollup/rollup-linux-riscv64-gnu@4.52.0': 394 | resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} 395 | cpu: [riscv64] 396 | os: [linux] 397 | 398 | '@rollup/rollup-linux-riscv64-musl@4.52.0': 399 | resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} 400 | cpu: [riscv64] 401 | os: [linux] 402 | 403 | '@rollup/rollup-linux-s390x-gnu@4.52.0': 404 | resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} 405 | cpu: [s390x] 406 | os: [linux] 407 | 408 | '@rollup/rollup-linux-x64-gnu@4.52.0': 409 | resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} 410 | cpu: [x64] 411 | os: [linux] 412 | 413 | '@rollup/rollup-linux-x64-musl@4.52.0': 414 | resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} 415 | cpu: [x64] 416 | os: [linux] 417 | 418 | '@rollup/rollup-openharmony-arm64@4.52.0': 419 | resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} 420 | cpu: [arm64] 421 | os: [openharmony] 422 | 423 | '@rollup/rollup-win32-arm64-msvc@4.52.0': 424 | resolution: {integrity: sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==} 425 | cpu: [arm64] 426 | os: [win32] 427 | 428 | '@rollup/rollup-win32-ia32-msvc@4.52.0': 429 | resolution: {integrity: sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==} 430 | cpu: [ia32] 431 | os: [win32] 432 | 433 | '@rollup/rollup-win32-x64-gnu@4.52.0': 434 | resolution: {integrity: sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==} 435 | cpu: [x64] 436 | os: [win32] 437 | 438 | '@rollup/rollup-win32-x64-msvc@4.52.0': 439 | resolution: {integrity: sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==} 440 | cpu: [x64] 441 | os: [win32] 442 | 443 | '@simplewebauthn/browser@13.1.0': 444 | resolution: {integrity: sha512-WuHZ/PYvyPJ9nxSzgHtOEjogBhwJfC8xzYkPC+rR/+8chl/ft4ngjiK8kSU5HtRJfczupyOh33b25TjYbvwAcg==} 445 | 446 | '@simplewebauthn/server@13.1.1': 447 | resolution: {integrity: sha512-1hsLpRHfSuMB9ee2aAdh0Htza/X3f4djhYISrggqGe3xopNjOcePiSDkDDoPzDYaaMCrbqGP1H2TYU7bgL9PmA==} 448 | engines: {node: '>=20.0.0'} 449 | 450 | '@tauri-apps/api@2.5.0': 451 | resolution: {integrity: sha512-Ldux4ip+HGAcPUmuLT8EIkk6yafl5vK0P0c0byzAKzxJh7vxelVtdPONjfgTm96PbN24yjZNESY8CKo8qniluA==} 452 | 453 | '@tauri-apps/plugin-deep-link@2.2.1': 454 | resolution: {integrity: sha512-8skZ6qIH/kWaV8d6jj3aPvvkIOuqkVk0APRDey9n9N3Ueu3n4MIbuxpAKR2EdoAyQxnXxPTNVyjw2D35/vfGyg==} 455 | 456 | '@tauri-apps/plugin-http@2.4.3': 457 | resolution: {integrity: sha512-Us8X+FikzpaZRNr4kH4HLwyXascHbM42p6LxAqRTQnHPrrqp1usaH4vxWAZalPvTbHJ3gBEMJPHusFJgtjGJjA==} 458 | 459 | '@tauri-apps/plugin-opener@2.2.6': 460 | resolution: {integrity: sha512-bSdkuP71ZQRepPOn8BOEdBKYJQvl6+jb160QtJX/i2H9BF6ZySY/kYljh76N2Ne5fJMQRge7rlKoStYQY5Jq1w==} 461 | 462 | '@tauri-apps/plugin-os@2.2.1': 463 | resolution: {integrity: sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A==} 464 | 465 | '@types/estree@1.0.8': 466 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 467 | 468 | '@types/node@24.5.2': 469 | resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} 470 | 471 | '@types/react-dom@19.1.9': 472 | resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==} 473 | peerDependencies: 474 | '@types/react': ^19.0.0 475 | 476 | '@types/react@19.1.13': 477 | resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} 478 | 479 | acorn@8.15.0: 480 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 481 | engines: {node: '>=0.4.0'} 482 | hasBin: true 483 | 484 | ansi-regex@5.0.1: 485 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 486 | engines: {node: '>=8'} 487 | 488 | ansi-regex@6.2.2: 489 | resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 490 | engines: {node: '>=12'} 491 | 492 | ansi-styles@4.3.0: 493 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 494 | engines: {node: '>=8'} 495 | 496 | ansi-styles@6.2.3: 497 | resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 498 | engines: {node: '>=12'} 499 | 500 | any-promise@1.3.0: 501 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 502 | 503 | asn1js@3.0.6: 504 | resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} 505 | engines: {node: '>=12.0.0'} 506 | 507 | balanced-match@1.0.2: 508 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 509 | 510 | better-auth@1.2.7: 511 | resolution: {integrity: sha512-2hCB263GSrgetsMUZw8vv9O1e4S4AlYJW3P4e8bX9u3Q3idv4u9BzDFCblpTLuL4YjYovghMCN0vurAsctXOAQ==} 512 | 513 | better-call@1.0.8: 514 | resolution: {integrity: sha512-/PV8JLqDRUN7JyBPbklVsS/8E4SO3pnf8hbpa8B7xrBrr+BBYpeOAxoqtnsyk/pRs35vNB4MZx8cn9dBuNlLDA==} 515 | 516 | brace-expansion@2.0.2: 517 | resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 518 | 519 | bundle-require@5.1.0: 520 | resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} 521 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 522 | peerDependencies: 523 | esbuild: '>=0.18' 524 | 525 | cac@6.7.14: 526 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 527 | engines: {node: '>=8'} 528 | 529 | chokidar@4.0.3: 530 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 531 | engines: {node: '>= 14.16.0'} 532 | 533 | color-convert@2.0.1: 534 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 535 | engines: {node: '>=7.0.0'} 536 | 537 | color-name@1.1.4: 538 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 539 | 540 | commander@4.1.1: 541 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 542 | engines: {node: '>= 6'} 543 | 544 | confbox@0.1.8: 545 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 546 | 547 | consola@3.4.2: 548 | resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 549 | engines: {node: ^14.18.0 || >=16.10.0} 550 | 551 | cross-spawn@7.0.6: 552 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 553 | engines: {node: '>= 8'} 554 | 555 | csstype@3.1.3: 556 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 557 | 558 | debug@4.4.3: 559 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 560 | engines: {node: '>=6.0'} 561 | peerDependencies: 562 | supports-color: '*' 563 | peerDependenciesMeta: 564 | supports-color: 565 | optional: true 566 | 567 | defu@6.1.4: 568 | resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 569 | 570 | duplexer@0.1.2: 571 | resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 572 | 573 | eastasianwidth@0.2.0: 574 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 575 | 576 | emoji-regex@8.0.0: 577 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 578 | 579 | emoji-regex@9.2.2: 580 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 581 | 582 | esbuild-plugin-preserve-directives@0.0.11: 583 | resolution: {integrity: sha512-OolFhx1h/1ADEEoPjVi0hYWru1pTZBHki7XozawYVkhRhO63mwZT6isLylbwPs7dJ72doVQJGHCT2I1l9z8DcA==} 584 | engines: {node: '>=18.0.0'} 585 | peerDependencies: 586 | esbuild: ^0.21.0 587 | 588 | esbuild@0.25.10: 589 | resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} 590 | engines: {node: '>=18'} 591 | hasBin: true 592 | 593 | event-stream@3.3.4: 594 | resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} 595 | 596 | fdir@6.5.0: 597 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 598 | engines: {node: '>=12.0.0'} 599 | peerDependencies: 600 | picomatch: ^3 || ^4 601 | peerDependenciesMeta: 602 | picomatch: 603 | optional: true 604 | 605 | fix-dts-default-cjs-exports@1.0.1: 606 | resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} 607 | 608 | foreground-child@3.3.1: 609 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 610 | engines: {node: '>=14'} 611 | 612 | from@0.1.7: 613 | resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} 614 | 615 | fsevents@2.3.3: 616 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 617 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 618 | os: [darwin] 619 | 620 | get-tsconfig@4.10.1: 621 | resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} 622 | 623 | glob@10.4.5: 624 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 625 | hasBin: true 626 | 627 | is-fullwidth-code-point@3.0.0: 628 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 629 | engines: {node: '>=8'} 630 | 631 | isexe@2.0.0: 632 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 633 | 634 | jackspeak@3.4.3: 635 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 636 | 637 | jose@5.10.0: 638 | resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} 639 | 640 | joycon@3.1.1: 641 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 642 | engines: {node: '>=10'} 643 | 644 | kysely@0.27.6: 645 | resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==} 646 | engines: {node: '>=14.0.0'} 647 | 648 | lilconfig@3.1.3: 649 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 650 | engines: {node: '>=14'} 651 | 652 | lines-and-columns@1.2.4: 653 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 654 | 655 | load-tsconfig@0.2.5: 656 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 657 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 658 | 659 | lodash.sortby@4.7.0: 660 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 661 | 662 | lru-cache@10.4.3: 663 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 664 | 665 | magic-string@0.30.19: 666 | resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 667 | 668 | map-stream@0.1.0: 669 | resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} 670 | 671 | minimatch@9.0.5: 672 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 673 | engines: {node: '>=16 || 14 >=14.17'} 674 | 675 | minipass@7.1.2: 676 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 677 | engines: {node: '>=16 || 14 >=14.17'} 678 | 679 | mlly@1.8.0: 680 | resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} 681 | 682 | ms@2.1.3: 683 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 684 | 685 | mz@2.7.0: 686 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 687 | 688 | nanostores@0.11.4: 689 | resolution: {integrity: sha512-k1oiVNN4hDK8NcNERSZLQiMfRzEGtfnvZvdBvey3SQbgn8Dcrk0h1I6vpxApjb10PFUflZrgJ2WEZyJQ+5v7YQ==} 690 | engines: {node: ^18.0.0 || >=20.0.0} 691 | 692 | node-cleanup@2.1.2: 693 | resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} 694 | 695 | object-assign@4.1.1: 696 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 697 | engines: {node: '>=0.10.0'} 698 | 699 | package-json-from-dist@1.0.1: 700 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 701 | 702 | path-key@3.1.1: 703 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 704 | engines: {node: '>=8'} 705 | 706 | path-scurry@1.11.1: 707 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 708 | engines: {node: '>=16 || 14 >=14.18'} 709 | 710 | pathe@2.0.3: 711 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 712 | 713 | pause-stream@0.0.11: 714 | resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} 715 | 716 | picocolors@1.1.1: 717 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 718 | 719 | picomatch@4.0.3: 720 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 721 | engines: {node: '>=12'} 722 | 723 | pirates@4.0.7: 724 | resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} 725 | engines: {node: '>= 6'} 726 | 727 | pkg-types@1.3.1: 728 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 729 | 730 | postcss-load-config@6.0.1: 731 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 732 | engines: {node: '>= 18'} 733 | peerDependencies: 734 | jiti: '>=1.21.0' 735 | postcss: '>=8.0.9' 736 | tsx: ^4.8.1 737 | yaml: ^2.4.2 738 | peerDependenciesMeta: 739 | jiti: 740 | optional: true 741 | postcss: 742 | optional: true 743 | tsx: 744 | optional: true 745 | yaml: 746 | optional: true 747 | 748 | ps-tree@1.2.0: 749 | resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} 750 | engines: {node: '>= 0.10'} 751 | hasBin: true 752 | 753 | punycode@2.3.1: 754 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 755 | engines: {node: '>=6'} 756 | 757 | pvtsutils@1.3.6: 758 | resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} 759 | 760 | pvutils@1.1.3: 761 | resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} 762 | engines: {node: '>=6.0.0'} 763 | 764 | react-dom@19.1.1: 765 | resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} 766 | peerDependencies: 767 | react: ^19.1.1 768 | 769 | react@19.1.1: 770 | resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} 771 | engines: {node: '>=0.10.0'} 772 | 773 | readdirp@4.1.2: 774 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 775 | engines: {node: '>= 14.18.0'} 776 | 777 | resolve-from@5.0.0: 778 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 779 | engines: {node: '>=8'} 780 | 781 | resolve-pkg-maps@1.0.0: 782 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 783 | 784 | rollup@4.52.0: 785 | resolution: {integrity: sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==} 786 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 787 | hasBin: true 788 | 789 | rou3@0.5.1: 790 | resolution: {integrity: sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==} 791 | 792 | scheduler@0.26.0: 793 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} 794 | 795 | set-cookie-parser@2.7.1: 796 | resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} 797 | 798 | shebang-command@2.0.0: 799 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 800 | engines: {node: '>=8'} 801 | 802 | shebang-regex@3.0.0: 803 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 804 | engines: {node: '>=8'} 805 | 806 | signal-exit@4.1.0: 807 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 808 | engines: {node: '>=14'} 809 | 810 | source-map@0.8.0-beta.0: 811 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 812 | engines: {node: '>= 8'} 813 | deprecated: The work that was done in this beta branch won't be included in future versions 814 | 815 | split@0.3.3: 816 | resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} 817 | 818 | stream-combiner@0.0.4: 819 | resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} 820 | 821 | string-argv@0.3.2: 822 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 823 | engines: {node: '>=0.6.19'} 824 | 825 | string-width@4.2.3: 826 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 827 | engines: {node: '>=8'} 828 | 829 | string-width@5.1.2: 830 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 831 | engines: {node: '>=12'} 832 | 833 | strip-ansi@6.0.1: 834 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 835 | engines: {node: '>=8'} 836 | 837 | strip-ansi@7.1.2: 838 | resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 839 | engines: {node: '>=12'} 840 | 841 | sucrase@3.35.0: 842 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 843 | engines: {node: '>=16 || 14 >=14.17'} 844 | hasBin: true 845 | 846 | thenify-all@1.6.0: 847 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 848 | engines: {node: '>=0.8'} 849 | 850 | thenify@3.3.1: 851 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 852 | 853 | through@2.3.8: 854 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 855 | 856 | tinyexec@0.3.2: 857 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 858 | 859 | tinyglobby@0.2.15: 860 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 861 | engines: {node: '>=12.0.0'} 862 | 863 | tr46@1.0.1: 864 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 865 | 866 | tree-kill@1.2.2: 867 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 868 | hasBin: true 869 | 870 | ts-interface-checker@0.1.13: 871 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 872 | 873 | tsc-watch@7.1.1: 874 | resolution: {integrity: sha512-r6t37Dkk4vK44HwxOe+OzjpE/gDamZAwqXhtcAJD/hPVblcjJK45NxbK0HcDASXG0U4pEnCh640JZbeDVSC6yA==} 875 | engines: {node: '>=12.12.0'} 876 | hasBin: true 877 | peerDependencies: 878 | typescript: '*' 879 | 880 | tslib@2.8.1: 881 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 882 | 883 | tsup@8.5.0: 884 | resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} 885 | engines: {node: '>=18'} 886 | hasBin: true 887 | peerDependencies: 888 | '@microsoft/api-extractor': ^7.36.0 889 | '@swc/core': ^1 890 | postcss: ^8.4.12 891 | typescript: '>=4.5.0' 892 | peerDependenciesMeta: 893 | '@microsoft/api-extractor': 894 | optional: true 895 | '@swc/core': 896 | optional: true 897 | postcss: 898 | optional: true 899 | typescript: 900 | optional: true 901 | 902 | tsx@4.20.5: 903 | resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} 904 | engines: {node: '>=18.0.0'} 905 | hasBin: true 906 | 907 | turbo-darwin-64@2.5.6: 908 | resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} 909 | cpu: [x64] 910 | os: [darwin] 911 | 912 | turbo-darwin-arm64@2.5.6: 913 | resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==} 914 | cpu: [arm64] 915 | os: [darwin] 916 | 917 | turbo-linux-64@2.5.6: 918 | resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==} 919 | cpu: [x64] 920 | os: [linux] 921 | 922 | turbo-linux-arm64@2.5.6: 923 | resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==} 924 | cpu: [arm64] 925 | os: [linux] 926 | 927 | turbo-windows-64@2.5.6: 928 | resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==} 929 | cpu: [x64] 930 | os: [win32] 931 | 932 | turbo-windows-arm64@2.5.6: 933 | resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==} 934 | cpu: [arm64] 935 | os: [win32] 936 | 937 | turbo@2.5.6: 938 | resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==} 939 | hasBin: true 940 | 941 | typescript@5.8.3: 942 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 943 | engines: {node: '>=14.17'} 944 | hasBin: true 945 | 946 | typescript@5.9.2: 947 | resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} 948 | engines: {node: '>=14.17'} 949 | hasBin: true 950 | 951 | ufo@1.6.1: 952 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 953 | 954 | uncrypto@0.1.3: 955 | resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} 956 | 957 | undici-types@7.12.0: 958 | resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} 959 | 960 | webidl-conversions@4.0.2: 961 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 962 | 963 | whatwg-url@7.1.0: 964 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 965 | 966 | which@2.0.2: 967 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 968 | engines: {node: '>= 8'} 969 | hasBin: true 970 | 971 | wrap-ansi@7.0.0: 972 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 973 | engines: {node: '>=10'} 974 | 975 | wrap-ansi@8.1.0: 976 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 977 | engines: {node: '>=12'} 978 | 979 | zod@3.24.3: 980 | resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} 981 | 982 | snapshots: 983 | 984 | '@better-auth/utils@0.2.4': 985 | dependencies: 986 | typescript: 5.8.3 987 | uncrypto: 0.1.3 988 | 989 | '@better-fetch/fetch@1.1.18': {} 990 | 991 | '@biomejs/biome@2.2.4': 992 | optionalDependencies: 993 | '@biomejs/cli-darwin-arm64': 2.2.4 994 | '@biomejs/cli-darwin-x64': 2.2.4 995 | '@biomejs/cli-linux-arm64': 2.2.4 996 | '@biomejs/cli-linux-arm64-musl': 2.2.4 997 | '@biomejs/cli-linux-x64': 2.2.4 998 | '@biomejs/cli-linux-x64-musl': 2.2.4 999 | '@biomejs/cli-win32-arm64': 2.2.4 1000 | '@biomejs/cli-win32-x64': 2.2.4 1001 | 1002 | '@biomejs/cli-darwin-arm64@2.2.4': 1003 | optional: true 1004 | 1005 | '@biomejs/cli-darwin-x64@2.2.4': 1006 | optional: true 1007 | 1008 | '@biomejs/cli-linux-arm64-musl@2.2.4': 1009 | optional: true 1010 | 1011 | '@biomejs/cli-linux-arm64@2.2.4': 1012 | optional: true 1013 | 1014 | '@biomejs/cli-linux-x64-musl@2.2.4': 1015 | optional: true 1016 | 1017 | '@biomejs/cli-linux-x64@2.2.4': 1018 | optional: true 1019 | 1020 | '@biomejs/cli-win32-arm64@2.2.4': 1021 | optional: true 1022 | 1023 | '@biomejs/cli-win32-x64@2.2.4': 1024 | optional: true 1025 | 1026 | '@esbuild/aix-ppc64@0.25.10': 1027 | optional: true 1028 | 1029 | '@esbuild/android-arm64@0.25.10': 1030 | optional: true 1031 | 1032 | '@esbuild/android-arm@0.25.10': 1033 | optional: true 1034 | 1035 | '@esbuild/android-x64@0.25.10': 1036 | optional: true 1037 | 1038 | '@esbuild/darwin-arm64@0.25.10': 1039 | optional: true 1040 | 1041 | '@esbuild/darwin-x64@0.25.10': 1042 | optional: true 1043 | 1044 | '@esbuild/freebsd-arm64@0.25.10': 1045 | optional: true 1046 | 1047 | '@esbuild/freebsd-x64@0.25.10': 1048 | optional: true 1049 | 1050 | '@esbuild/linux-arm64@0.25.10': 1051 | optional: true 1052 | 1053 | '@esbuild/linux-arm@0.25.10': 1054 | optional: true 1055 | 1056 | '@esbuild/linux-ia32@0.25.10': 1057 | optional: true 1058 | 1059 | '@esbuild/linux-loong64@0.25.10': 1060 | optional: true 1061 | 1062 | '@esbuild/linux-mips64el@0.25.10': 1063 | optional: true 1064 | 1065 | '@esbuild/linux-ppc64@0.25.10': 1066 | optional: true 1067 | 1068 | '@esbuild/linux-riscv64@0.25.10': 1069 | optional: true 1070 | 1071 | '@esbuild/linux-s390x@0.25.10': 1072 | optional: true 1073 | 1074 | '@esbuild/linux-x64@0.25.10': 1075 | optional: true 1076 | 1077 | '@esbuild/netbsd-arm64@0.25.10': 1078 | optional: true 1079 | 1080 | '@esbuild/netbsd-x64@0.25.10': 1081 | optional: true 1082 | 1083 | '@esbuild/openbsd-arm64@0.25.10': 1084 | optional: true 1085 | 1086 | '@esbuild/openbsd-x64@0.25.10': 1087 | optional: true 1088 | 1089 | '@esbuild/openharmony-arm64@0.25.10': 1090 | optional: true 1091 | 1092 | '@esbuild/sunos-x64@0.25.10': 1093 | optional: true 1094 | 1095 | '@esbuild/win32-arm64@0.25.10': 1096 | optional: true 1097 | 1098 | '@esbuild/win32-ia32@0.25.10': 1099 | optional: true 1100 | 1101 | '@esbuild/win32-x64@0.25.10': 1102 | optional: true 1103 | 1104 | '@hexagon/base64@1.1.28': {} 1105 | 1106 | '@isaacs/cliui@8.0.2': 1107 | dependencies: 1108 | string-width: 5.1.2 1109 | string-width-cjs: string-width@4.2.3 1110 | strip-ansi: 7.1.2 1111 | strip-ansi-cjs: strip-ansi@6.0.1 1112 | wrap-ansi: 8.1.0 1113 | wrap-ansi-cjs: wrap-ansi@7.0.0 1114 | 1115 | '@jridgewell/gen-mapping@0.3.13': 1116 | dependencies: 1117 | '@jridgewell/sourcemap-codec': 1.5.5 1118 | '@jridgewell/trace-mapping': 0.3.31 1119 | 1120 | '@jridgewell/resolve-uri@3.1.2': {} 1121 | 1122 | '@jridgewell/sourcemap-codec@1.5.5': {} 1123 | 1124 | '@jridgewell/trace-mapping@0.3.31': 1125 | dependencies: 1126 | '@jridgewell/resolve-uri': 3.1.2 1127 | '@jridgewell/sourcemap-codec': 1.5.5 1128 | 1129 | '@levischuck/tiny-cbor@0.2.11': {} 1130 | 1131 | '@noble/ciphers@0.6.0': {} 1132 | 1133 | '@noble/hashes@1.8.0': {} 1134 | 1135 | '@peculiar/asn1-android@2.3.16': 1136 | dependencies: 1137 | '@peculiar/asn1-schema': 2.3.15 1138 | asn1js: 3.0.6 1139 | tslib: 2.8.1 1140 | 1141 | '@peculiar/asn1-ecc@2.3.15': 1142 | dependencies: 1143 | '@peculiar/asn1-schema': 2.3.15 1144 | '@peculiar/asn1-x509': 2.3.15 1145 | asn1js: 3.0.6 1146 | tslib: 2.8.1 1147 | 1148 | '@peculiar/asn1-rsa@2.3.15': 1149 | dependencies: 1150 | '@peculiar/asn1-schema': 2.3.15 1151 | '@peculiar/asn1-x509': 2.3.15 1152 | asn1js: 3.0.6 1153 | tslib: 2.8.1 1154 | 1155 | '@peculiar/asn1-schema@2.3.15': 1156 | dependencies: 1157 | asn1js: 3.0.6 1158 | pvtsutils: 1.3.6 1159 | tslib: 2.8.1 1160 | 1161 | '@peculiar/asn1-x509@2.3.15': 1162 | dependencies: 1163 | '@peculiar/asn1-schema': 2.3.15 1164 | asn1js: 3.0.6 1165 | pvtsutils: 1.3.6 1166 | tslib: 2.8.1 1167 | 1168 | '@pkgjs/parseargs@0.11.0': 1169 | optional: true 1170 | 1171 | '@rollup/rollup-android-arm-eabi@4.52.0': 1172 | optional: true 1173 | 1174 | '@rollup/rollup-android-arm64@4.52.0': 1175 | optional: true 1176 | 1177 | '@rollup/rollup-darwin-arm64@4.52.0': 1178 | optional: true 1179 | 1180 | '@rollup/rollup-darwin-x64@4.52.0': 1181 | optional: true 1182 | 1183 | '@rollup/rollup-freebsd-arm64@4.52.0': 1184 | optional: true 1185 | 1186 | '@rollup/rollup-freebsd-x64@4.52.0': 1187 | optional: true 1188 | 1189 | '@rollup/rollup-linux-arm-gnueabihf@4.52.0': 1190 | optional: true 1191 | 1192 | '@rollup/rollup-linux-arm-musleabihf@4.52.0': 1193 | optional: true 1194 | 1195 | '@rollup/rollup-linux-arm64-gnu@4.52.0': 1196 | optional: true 1197 | 1198 | '@rollup/rollup-linux-arm64-musl@4.52.0': 1199 | optional: true 1200 | 1201 | '@rollup/rollup-linux-loong64-gnu@4.52.0': 1202 | optional: true 1203 | 1204 | '@rollup/rollup-linux-ppc64-gnu@4.52.0': 1205 | optional: true 1206 | 1207 | '@rollup/rollup-linux-riscv64-gnu@4.52.0': 1208 | optional: true 1209 | 1210 | '@rollup/rollup-linux-riscv64-musl@4.52.0': 1211 | optional: true 1212 | 1213 | '@rollup/rollup-linux-s390x-gnu@4.52.0': 1214 | optional: true 1215 | 1216 | '@rollup/rollup-linux-x64-gnu@4.52.0': 1217 | optional: true 1218 | 1219 | '@rollup/rollup-linux-x64-musl@4.52.0': 1220 | optional: true 1221 | 1222 | '@rollup/rollup-openharmony-arm64@4.52.0': 1223 | optional: true 1224 | 1225 | '@rollup/rollup-win32-arm64-msvc@4.52.0': 1226 | optional: true 1227 | 1228 | '@rollup/rollup-win32-ia32-msvc@4.52.0': 1229 | optional: true 1230 | 1231 | '@rollup/rollup-win32-x64-gnu@4.52.0': 1232 | optional: true 1233 | 1234 | '@rollup/rollup-win32-x64-msvc@4.52.0': 1235 | optional: true 1236 | 1237 | '@simplewebauthn/browser@13.1.0': {} 1238 | 1239 | '@simplewebauthn/server@13.1.1': 1240 | dependencies: 1241 | '@hexagon/base64': 1.1.28 1242 | '@levischuck/tiny-cbor': 0.2.11 1243 | '@peculiar/asn1-android': 2.3.16 1244 | '@peculiar/asn1-ecc': 2.3.15 1245 | '@peculiar/asn1-rsa': 2.3.15 1246 | '@peculiar/asn1-schema': 2.3.15 1247 | '@peculiar/asn1-x509': 2.3.15 1248 | 1249 | '@tauri-apps/api@2.5.0': {} 1250 | 1251 | '@tauri-apps/plugin-deep-link@2.2.1': 1252 | dependencies: 1253 | '@tauri-apps/api': 2.5.0 1254 | 1255 | '@tauri-apps/plugin-http@2.4.3': 1256 | dependencies: 1257 | '@tauri-apps/api': 2.5.0 1258 | 1259 | '@tauri-apps/plugin-opener@2.2.6': 1260 | dependencies: 1261 | '@tauri-apps/api': 2.5.0 1262 | 1263 | '@tauri-apps/plugin-os@2.2.1': 1264 | dependencies: 1265 | '@tauri-apps/api': 2.5.0 1266 | 1267 | '@types/estree@1.0.8': {} 1268 | 1269 | '@types/node@24.5.2': 1270 | dependencies: 1271 | undici-types: 7.12.0 1272 | 1273 | '@types/react-dom@19.1.9(@types/react@19.1.13)': 1274 | dependencies: 1275 | '@types/react': 19.1.13 1276 | 1277 | '@types/react@19.1.13': 1278 | dependencies: 1279 | csstype: 3.1.3 1280 | 1281 | acorn@8.15.0: {} 1282 | 1283 | ansi-regex@5.0.1: {} 1284 | 1285 | ansi-regex@6.2.2: {} 1286 | 1287 | ansi-styles@4.3.0: 1288 | dependencies: 1289 | color-convert: 2.0.1 1290 | 1291 | ansi-styles@6.2.3: {} 1292 | 1293 | any-promise@1.3.0: {} 1294 | 1295 | asn1js@3.0.6: 1296 | dependencies: 1297 | pvtsutils: 1.3.6 1298 | pvutils: 1.1.3 1299 | tslib: 2.8.1 1300 | 1301 | balanced-match@1.0.2: {} 1302 | 1303 | better-auth@1.2.7: 1304 | dependencies: 1305 | '@better-auth/utils': 0.2.4 1306 | '@better-fetch/fetch': 1.1.18 1307 | '@noble/ciphers': 0.6.0 1308 | '@noble/hashes': 1.8.0 1309 | '@simplewebauthn/browser': 13.1.0 1310 | '@simplewebauthn/server': 13.1.1 1311 | better-call: 1.0.8 1312 | defu: 6.1.4 1313 | jose: 5.10.0 1314 | kysely: 0.27.6 1315 | nanostores: 0.11.4 1316 | zod: 3.24.3 1317 | 1318 | better-call@1.0.8: 1319 | dependencies: 1320 | '@better-fetch/fetch': 1.1.18 1321 | rou3: 0.5.1 1322 | set-cookie-parser: 2.7.1 1323 | uncrypto: 0.1.3 1324 | 1325 | brace-expansion@2.0.2: 1326 | dependencies: 1327 | balanced-match: 1.0.2 1328 | 1329 | bundle-require@5.1.0(esbuild@0.25.10): 1330 | dependencies: 1331 | esbuild: 0.25.10 1332 | load-tsconfig: 0.2.5 1333 | 1334 | cac@6.7.14: {} 1335 | 1336 | chokidar@4.0.3: 1337 | dependencies: 1338 | readdirp: 4.1.2 1339 | 1340 | color-convert@2.0.1: 1341 | dependencies: 1342 | color-name: 1.1.4 1343 | 1344 | color-name@1.1.4: {} 1345 | 1346 | commander@4.1.1: {} 1347 | 1348 | confbox@0.1.8: {} 1349 | 1350 | consola@3.4.2: {} 1351 | 1352 | cross-spawn@7.0.6: 1353 | dependencies: 1354 | path-key: 3.1.1 1355 | shebang-command: 2.0.0 1356 | which: 2.0.2 1357 | 1358 | csstype@3.1.3: {} 1359 | 1360 | debug@4.4.3: 1361 | dependencies: 1362 | ms: 2.1.3 1363 | 1364 | defu@6.1.4: {} 1365 | 1366 | duplexer@0.1.2: {} 1367 | 1368 | eastasianwidth@0.2.0: {} 1369 | 1370 | emoji-regex@8.0.0: {} 1371 | 1372 | emoji-regex@9.2.2: {} 1373 | 1374 | esbuild-plugin-preserve-directives@0.0.11(esbuild@0.25.10): 1375 | dependencies: 1376 | esbuild: 0.25.10 1377 | 1378 | esbuild@0.25.10: 1379 | optionalDependencies: 1380 | '@esbuild/aix-ppc64': 0.25.10 1381 | '@esbuild/android-arm': 0.25.10 1382 | '@esbuild/android-arm64': 0.25.10 1383 | '@esbuild/android-x64': 0.25.10 1384 | '@esbuild/darwin-arm64': 0.25.10 1385 | '@esbuild/darwin-x64': 0.25.10 1386 | '@esbuild/freebsd-arm64': 0.25.10 1387 | '@esbuild/freebsd-x64': 0.25.10 1388 | '@esbuild/linux-arm': 0.25.10 1389 | '@esbuild/linux-arm64': 0.25.10 1390 | '@esbuild/linux-ia32': 0.25.10 1391 | '@esbuild/linux-loong64': 0.25.10 1392 | '@esbuild/linux-mips64el': 0.25.10 1393 | '@esbuild/linux-ppc64': 0.25.10 1394 | '@esbuild/linux-riscv64': 0.25.10 1395 | '@esbuild/linux-s390x': 0.25.10 1396 | '@esbuild/linux-x64': 0.25.10 1397 | '@esbuild/netbsd-arm64': 0.25.10 1398 | '@esbuild/netbsd-x64': 0.25.10 1399 | '@esbuild/openbsd-arm64': 0.25.10 1400 | '@esbuild/openbsd-x64': 0.25.10 1401 | '@esbuild/openharmony-arm64': 0.25.10 1402 | '@esbuild/sunos-x64': 0.25.10 1403 | '@esbuild/win32-arm64': 0.25.10 1404 | '@esbuild/win32-ia32': 0.25.10 1405 | '@esbuild/win32-x64': 0.25.10 1406 | 1407 | event-stream@3.3.4: 1408 | dependencies: 1409 | duplexer: 0.1.2 1410 | from: 0.1.7 1411 | map-stream: 0.1.0 1412 | pause-stream: 0.0.11 1413 | split: 0.3.3 1414 | stream-combiner: 0.0.4 1415 | through: 2.3.8 1416 | 1417 | fdir@6.5.0(picomatch@4.0.3): 1418 | optionalDependencies: 1419 | picomatch: 4.0.3 1420 | 1421 | fix-dts-default-cjs-exports@1.0.1: 1422 | dependencies: 1423 | magic-string: 0.30.19 1424 | mlly: 1.8.0 1425 | rollup: 4.52.0 1426 | 1427 | foreground-child@3.3.1: 1428 | dependencies: 1429 | cross-spawn: 7.0.6 1430 | signal-exit: 4.1.0 1431 | 1432 | from@0.1.7: {} 1433 | 1434 | fsevents@2.3.3: 1435 | optional: true 1436 | 1437 | get-tsconfig@4.10.1: 1438 | dependencies: 1439 | resolve-pkg-maps: 1.0.0 1440 | 1441 | glob@10.4.5: 1442 | dependencies: 1443 | foreground-child: 3.3.1 1444 | jackspeak: 3.4.3 1445 | minimatch: 9.0.5 1446 | minipass: 7.1.2 1447 | package-json-from-dist: 1.0.1 1448 | path-scurry: 1.11.1 1449 | 1450 | is-fullwidth-code-point@3.0.0: {} 1451 | 1452 | isexe@2.0.0: {} 1453 | 1454 | jackspeak@3.4.3: 1455 | dependencies: 1456 | '@isaacs/cliui': 8.0.2 1457 | optionalDependencies: 1458 | '@pkgjs/parseargs': 0.11.0 1459 | 1460 | jose@5.10.0: {} 1461 | 1462 | joycon@3.1.1: {} 1463 | 1464 | kysely@0.27.6: {} 1465 | 1466 | lilconfig@3.1.3: {} 1467 | 1468 | lines-and-columns@1.2.4: {} 1469 | 1470 | load-tsconfig@0.2.5: {} 1471 | 1472 | lodash.sortby@4.7.0: {} 1473 | 1474 | lru-cache@10.4.3: {} 1475 | 1476 | magic-string@0.30.19: 1477 | dependencies: 1478 | '@jridgewell/sourcemap-codec': 1.5.5 1479 | 1480 | map-stream@0.1.0: {} 1481 | 1482 | minimatch@9.0.5: 1483 | dependencies: 1484 | brace-expansion: 2.0.2 1485 | 1486 | minipass@7.1.2: {} 1487 | 1488 | mlly@1.8.0: 1489 | dependencies: 1490 | acorn: 8.15.0 1491 | pathe: 2.0.3 1492 | pkg-types: 1.3.1 1493 | ufo: 1.6.1 1494 | 1495 | ms@2.1.3: {} 1496 | 1497 | mz@2.7.0: 1498 | dependencies: 1499 | any-promise: 1.3.0 1500 | object-assign: 4.1.1 1501 | thenify-all: 1.6.0 1502 | 1503 | nanostores@0.11.4: {} 1504 | 1505 | node-cleanup@2.1.2: {} 1506 | 1507 | object-assign@4.1.1: {} 1508 | 1509 | package-json-from-dist@1.0.1: {} 1510 | 1511 | path-key@3.1.1: {} 1512 | 1513 | path-scurry@1.11.1: 1514 | dependencies: 1515 | lru-cache: 10.4.3 1516 | minipass: 7.1.2 1517 | 1518 | pathe@2.0.3: {} 1519 | 1520 | pause-stream@0.0.11: 1521 | dependencies: 1522 | through: 2.3.8 1523 | 1524 | picocolors@1.1.1: {} 1525 | 1526 | picomatch@4.0.3: {} 1527 | 1528 | pirates@4.0.7: {} 1529 | 1530 | pkg-types@1.3.1: 1531 | dependencies: 1532 | confbox: 0.1.8 1533 | mlly: 1.8.0 1534 | pathe: 2.0.3 1535 | 1536 | postcss-load-config@6.0.1(tsx@4.20.5): 1537 | dependencies: 1538 | lilconfig: 3.1.3 1539 | optionalDependencies: 1540 | tsx: 4.20.5 1541 | 1542 | ps-tree@1.2.0: 1543 | dependencies: 1544 | event-stream: 3.3.4 1545 | 1546 | punycode@2.3.1: {} 1547 | 1548 | pvtsutils@1.3.6: 1549 | dependencies: 1550 | tslib: 2.8.1 1551 | 1552 | pvutils@1.1.3: {} 1553 | 1554 | react-dom@19.1.1(react@19.1.1): 1555 | dependencies: 1556 | react: 19.1.1 1557 | scheduler: 0.26.0 1558 | 1559 | react@19.1.1: {} 1560 | 1561 | readdirp@4.1.2: {} 1562 | 1563 | resolve-from@5.0.0: {} 1564 | 1565 | resolve-pkg-maps@1.0.0: {} 1566 | 1567 | rollup@4.52.0: 1568 | dependencies: 1569 | '@types/estree': 1.0.8 1570 | optionalDependencies: 1571 | '@rollup/rollup-android-arm-eabi': 4.52.0 1572 | '@rollup/rollup-android-arm64': 4.52.0 1573 | '@rollup/rollup-darwin-arm64': 4.52.0 1574 | '@rollup/rollup-darwin-x64': 4.52.0 1575 | '@rollup/rollup-freebsd-arm64': 4.52.0 1576 | '@rollup/rollup-freebsd-x64': 4.52.0 1577 | '@rollup/rollup-linux-arm-gnueabihf': 4.52.0 1578 | '@rollup/rollup-linux-arm-musleabihf': 4.52.0 1579 | '@rollup/rollup-linux-arm64-gnu': 4.52.0 1580 | '@rollup/rollup-linux-arm64-musl': 4.52.0 1581 | '@rollup/rollup-linux-loong64-gnu': 4.52.0 1582 | '@rollup/rollup-linux-ppc64-gnu': 4.52.0 1583 | '@rollup/rollup-linux-riscv64-gnu': 4.52.0 1584 | '@rollup/rollup-linux-riscv64-musl': 4.52.0 1585 | '@rollup/rollup-linux-s390x-gnu': 4.52.0 1586 | '@rollup/rollup-linux-x64-gnu': 4.52.0 1587 | '@rollup/rollup-linux-x64-musl': 4.52.0 1588 | '@rollup/rollup-openharmony-arm64': 4.52.0 1589 | '@rollup/rollup-win32-arm64-msvc': 4.52.0 1590 | '@rollup/rollup-win32-ia32-msvc': 4.52.0 1591 | '@rollup/rollup-win32-x64-gnu': 4.52.0 1592 | '@rollup/rollup-win32-x64-msvc': 4.52.0 1593 | fsevents: 2.3.3 1594 | 1595 | rou3@0.5.1: {} 1596 | 1597 | scheduler@0.26.0: {} 1598 | 1599 | set-cookie-parser@2.7.1: {} 1600 | 1601 | shebang-command@2.0.0: 1602 | dependencies: 1603 | shebang-regex: 3.0.0 1604 | 1605 | shebang-regex@3.0.0: {} 1606 | 1607 | signal-exit@4.1.0: {} 1608 | 1609 | source-map@0.8.0-beta.0: 1610 | dependencies: 1611 | whatwg-url: 7.1.0 1612 | 1613 | split@0.3.3: 1614 | dependencies: 1615 | through: 2.3.8 1616 | 1617 | stream-combiner@0.0.4: 1618 | dependencies: 1619 | duplexer: 0.1.2 1620 | 1621 | string-argv@0.3.2: {} 1622 | 1623 | string-width@4.2.3: 1624 | dependencies: 1625 | emoji-regex: 8.0.0 1626 | is-fullwidth-code-point: 3.0.0 1627 | strip-ansi: 6.0.1 1628 | 1629 | string-width@5.1.2: 1630 | dependencies: 1631 | eastasianwidth: 0.2.0 1632 | emoji-regex: 9.2.2 1633 | strip-ansi: 7.1.2 1634 | 1635 | strip-ansi@6.0.1: 1636 | dependencies: 1637 | ansi-regex: 5.0.1 1638 | 1639 | strip-ansi@7.1.2: 1640 | dependencies: 1641 | ansi-regex: 6.2.2 1642 | 1643 | sucrase@3.35.0: 1644 | dependencies: 1645 | '@jridgewell/gen-mapping': 0.3.13 1646 | commander: 4.1.1 1647 | glob: 10.4.5 1648 | lines-and-columns: 1.2.4 1649 | mz: 2.7.0 1650 | pirates: 4.0.7 1651 | ts-interface-checker: 0.1.13 1652 | 1653 | thenify-all@1.6.0: 1654 | dependencies: 1655 | thenify: 3.3.1 1656 | 1657 | thenify@3.3.1: 1658 | dependencies: 1659 | any-promise: 1.3.0 1660 | 1661 | through@2.3.8: {} 1662 | 1663 | tinyexec@0.3.2: {} 1664 | 1665 | tinyglobby@0.2.15: 1666 | dependencies: 1667 | fdir: 6.5.0(picomatch@4.0.3) 1668 | picomatch: 4.0.3 1669 | 1670 | tr46@1.0.1: 1671 | dependencies: 1672 | punycode: 2.3.1 1673 | 1674 | tree-kill@1.2.2: {} 1675 | 1676 | ts-interface-checker@0.1.13: {} 1677 | 1678 | tsc-watch@7.1.1(typescript@5.9.2): 1679 | dependencies: 1680 | cross-spawn: 7.0.6 1681 | node-cleanup: 2.1.2 1682 | ps-tree: 1.2.0 1683 | string-argv: 0.3.2 1684 | typescript: 5.9.2 1685 | 1686 | tslib@2.8.1: {} 1687 | 1688 | tsup@8.5.0(tsx@4.20.5)(typescript@5.9.2): 1689 | dependencies: 1690 | bundle-require: 5.1.0(esbuild@0.25.10) 1691 | cac: 6.7.14 1692 | chokidar: 4.0.3 1693 | consola: 3.4.2 1694 | debug: 4.4.3 1695 | esbuild: 0.25.10 1696 | fix-dts-default-cjs-exports: 1.0.1 1697 | joycon: 3.1.1 1698 | picocolors: 1.1.1 1699 | postcss-load-config: 6.0.1(tsx@4.20.5) 1700 | resolve-from: 5.0.0 1701 | rollup: 4.52.0 1702 | source-map: 0.8.0-beta.0 1703 | sucrase: 3.35.0 1704 | tinyexec: 0.3.2 1705 | tinyglobby: 0.2.15 1706 | tree-kill: 1.2.2 1707 | optionalDependencies: 1708 | typescript: 5.9.2 1709 | transitivePeerDependencies: 1710 | - jiti 1711 | - supports-color 1712 | - tsx 1713 | - yaml 1714 | 1715 | tsx@4.20.5: 1716 | dependencies: 1717 | esbuild: 0.25.10 1718 | get-tsconfig: 4.10.1 1719 | optionalDependencies: 1720 | fsevents: 2.3.3 1721 | 1722 | turbo-darwin-64@2.5.6: 1723 | optional: true 1724 | 1725 | turbo-darwin-arm64@2.5.6: 1726 | optional: true 1727 | 1728 | turbo-linux-64@2.5.6: 1729 | optional: true 1730 | 1731 | turbo-linux-arm64@2.5.6: 1732 | optional: true 1733 | 1734 | turbo-windows-64@2.5.6: 1735 | optional: true 1736 | 1737 | turbo-windows-arm64@2.5.6: 1738 | optional: true 1739 | 1740 | turbo@2.5.6: 1741 | optionalDependencies: 1742 | turbo-darwin-64: 2.5.6 1743 | turbo-darwin-arm64: 2.5.6 1744 | turbo-linux-64: 2.5.6 1745 | turbo-linux-arm64: 2.5.6 1746 | turbo-windows-64: 2.5.6 1747 | turbo-windows-arm64: 2.5.6 1748 | 1749 | typescript@5.8.3: {} 1750 | 1751 | typescript@5.9.2: {} 1752 | 1753 | ufo@1.6.1: {} 1754 | 1755 | uncrypto@0.1.3: {} 1756 | 1757 | undici-types@7.12.0: {} 1758 | 1759 | webidl-conversions@4.0.2: {} 1760 | 1761 | whatwg-url@7.1.0: 1762 | dependencies: 1763 | lodash.sortby: 4.7.0 1764 | tr46: 1.0.1 1765 | webidl-conversions: 4.0.2 1766 | 1767 | which@2.0.2: 1768 | dependencies: 1769 | isexe: 2.0.0 1770 | 1771 | wrap-ansi@7.0.0: 1772 | dependencies: 1773 | ansi-styles: 4.3.0 1774 | string-width: 4.2.3 1775 | strip-ansi: 6.0.1 1776 | 1777 | wrap-ansi@8.1.0: 1778 | dependencies: 1779 | ansi-styles: 6.2.3 1780 | string-width: 5.1.2 1781 | strip-ansi: 7.1.2 1782 | 1783 | zod@3.24.3: {} 1784 | --------------------------------------------------------------------------------