diff --git a/.cspell/tech-terms.txt b/.cspell/tech-terms.txt
index 8b1653f6f8..2b0f5bbd92 100644
--- a/.cspell/tech-terms.txt
+++ b/.cspell/tech-terms.txt
@@ -39,4 +39,6 @@ gitea
MMDD
ABCDEFGHJKLMNPQRSTUVWXYZ23456789
setex
-kxeyPrefix
\ No newline at end of file
+kxeyPrefix
+dyld
+nsis
diff --git a/.cspell/third-party.txt b/.cspell/third-party.txt
index 7b0973f5ac..617634cd74 100644
--- a/.cspell/third-party.txt
+++ b/.cspell/third-party.txt
@@ -36,3 +36,5 @@ nuxtzzle
Deel
WorkOS
authjs
+vite
+electronjs
diff --git a/biome.json b/biome.json
index 015f02171a..020c18cd64 100644
--- a/biome.json
+++ b/biome.json
@@ -132,6 +132,7 @@
"!**/dist",
"!**/coverage",
"!**/build",
+ "!**/demo/electron/out",
"!**/.next",
"!**/.svelte-kit",
"!**/.contentlayer",
diff --git a/demo/electron/.gitignore b/demo/electron/.gitignore
new file mode 100644
index 0000000000..75ef73cdb5
--- /dev/null
+++ b/demo/electron/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+dist
+out
+.DS_Store
+.eslintcache
+*.log*
diff --git a/demo/electron/.npmrc b/demo/electron/.npmrc
new file mode 100644
index 0000000000..2ced95274c
--- /dev/null
+++ b/demo/electron/.npmrc
@@ -0,0 +1,3 @@
+electron_mirror=https://npmmirror.com/mirrors/electron/
+electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
+shamefully-hoist=true
diff --git a/demo/electron/README.md b/demo/electron/README.md
new file mode 100644
index 0000000000..eee088b8ec
--- /dev/null
+++ b/demo/electron/README.md
@@ -0,0 +1,19 @@
+# Better Auth Electron Example
+
+This is an example of how to use Better Auth with Electron.
+
+## Prerequirements
+
+Make sure you've set-up the [Better Auth Demo App](../nextjs/README.md).
+
+## How to run
+
+1. Clone the repo and open it in your code editor
+2. Run the following commands
+
+ ```bash
+ pnpm install
+ pnpm dev
+ ```
+
+Checkout the [electron guide](https://www.better-auth.com/docs/integrations/electron) to learn more.
diff --git a/demo/electron/build/entitlements.mac.plist b/demo/electron/build/entitlements.mac.plist
new file mode 100644
index 0000000000..38c887b211
--- /dev/null
+++ b/demo/electron/build/entitlements.mac.plist
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
+
+
diff --git a/demo/electron/build/icon.icns b/demo/electron/build/icon.icns
new file mode 100644
index 0000000000..c4bf4a397c
Binary files /dev/null and b/demo/electron/build/icon.icns differ
diff --git a/demo/electron/build/icon.ico b/demo/electron/build/icon.ico
new file mode 100644
index 0000000000..f7ffefc813
Binary files /dev/null and b/demo/electron/build/icon.ico differ
diff --git a/demo/electron/build/icon.png b/demo/electron/build/icon.png
new file mode 100644
index 0000000000..eefc8c85fe
Binary files /dev/null and b/demo/electron/build/icon.png differ
diff --git a/demo/electron/electron-builder.yml b/demo/electron/electron-builder.yml
new file mode 100644
index 0000000000..6812874578
--- /dev/null
+++ b/demo/electron/electron-builder.yml
@@ -0,0 +1,44 @@
+appId: com.electron.app
+productName: electron
+directories:
+ buildResources: build
+files:
+ - "!**/.vscode/*"
+ - "!src/*"
+ - "!electron.vite.config.{js,ts,mjs,cjs}"
+ - "!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}"
+ - "!{.env,.env.*,.npmrc,pnpm-lock.yaml}"
+ - "!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}"
+asarUnpack:
+ - resources/**
+win:
+ executableName: electron
+nsis:
+ artifactName: ${name}-${version}-setup.${ext}
+ shortcutName: ${productName}
+ uninstallDisplayName: ${productName}
+ createDesktopShortcut: always
+ installerIcon: build/icon.ico
+ installerHeaderIcon: build/icon.ico
+mac:
+ entitlementsInherit: build/entitlements.mac.plist
+ extendInfo:
+ - NSCameraUsageDescription: Application requests access to the device's camera.
+ - NSMicrophoneUsageDescription: Application requests access to the device's microphone.
+ - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder.
+ - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder.
+ notarize: false
+dmg:
+ artifactName: ${name}-${version}.${ext}
+linux:
+ target:
+ - AppImage
+ - snap
+ - deb
+ maintainer: electronjs.org
+ category: Utility
+appImage:
+ artifactName: ${name}-${version}.${ext}
+npmRebuild: false
+electronDownload:
+ mirror: https://npmmirror.com/mirrors/electron/
diff --git a/demo/electron/electron.vite.config.ts b/demo/electron/electron.vite.config.ts
new file mode 100644
index 0000000000..26d71ddc79
--- /dev/null
+++ b/demo/electron/electron.vite.config.ts
@@ -0,0 +1,17 @@
+import { resolve } from "node:path";
+import tailwindcss from "@tailwindcss/vite";
+import react from "@vitejs/plugin-react";
+import { defineConfig } from "electron-vite";
+
+export default defineConfig({
+ main: {},
+ preload: {},
+ renderer: {
+ resolve: {
+ alias: {
+ "@renderer": resolve("src/renderer/src"),
+ },
+ },
+ plugins: [tailwindcss(), react()],
+ },
+});
diff --git a/demo/electron/package.json b/demo/electron/package.json
new file mode 100644
index 0000000000..c46946e34d
--- /dev/null
+++ b/demo/electron/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "@better-auth/electron-demo",
+ "productName": "Better Auth + Electron",
+ "private": true,
+ "version": "1.0.0",
+ "description": "An Electron application with React and TypeScript",
+ "main": "./out/main/index.js",
+ "scripts": {
+ "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
+ "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
+ "typecheck": "npm run typecheck:node && npm run typecheck:web",
+ "start": "electron-vite preview",
+ "dev": "electron-vite dev",
+ "build": "npm run typecheck && electron-vite build",
+ "postinstall": "electron-builder install-app-deps",
+ "build:unpack": "npm run build && electron-builder --dir",
+ "build:win": "npm run build && electron-builder --win",
+ "build:mac": "electron-vite build && electron-builder --mac",
+ "build:linux": "electron-vite build && electron-builder --linux"
+ },
+ "dependencies": {
+ "@better-auth/electron": "workspace:*",
+ "@electron-toolkit/utils": "^4.0.0",
+ "@radix-ui/react-avatar": "^1.1.11",
+ "@radix-ui/react-slot": "^1.2.3",
+ "better-auth": "workspace:*",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "conf": "^15.0.2",
+ "electron-store": "^11.0.2",
+ "tailwind-merge": "^3.3.1",
+ "tailwindcss-animate": "catalog:tailwind"
+ },
+ "devDependencies": {
+ "@electron-toolkit/tsconfig": "^2.0.0",
+ "@tailwindcss/vite": "catalog:tailwind",
+ "@types/node": "^22.19.1",
+ "@types/react": "catalog:react19",
+ "@types/react-dom": "catalog:react19",
+ "@vitejs/plugin-react": "^5.1.1",
+ "electron": "^39.2.6",
+ "electron-builder": "^26.0.12",
+ "electron-vite": "^5.0.0",
+ "react": "catalog:react19",
+ "react-dom": "catalog:react19",
+ "tailwindcss": "catalog:tailwind",
+ "typescript": "catalog:",
+ "vite": "^7.2.6"
+ }
+}
diff --git a/demo/electron/resources/icon.png b/demo/electron/resources/icon.png
new file mode 100644
index 0000000000..eefc8c85fe
Binary files /dev/null and b/demo/electron/resources/icon.png differ
diff --git a/demo/electron/src/lib/auth-client.ts b/demo/electron/src/lib/auth-client.ts
new file mode 100644
index 0000000000..95bcbb4340
--- /dev/null
+++ b/demo/electron/src/lib/auth-client.ts
@@ -0,0 +1,16 @@
+import { electronClient } from "@better-auth/electron/client";
+import { storage } from "@better-auth/electron/storage";
+import { createAuthClient } from "better-auth/client";
+
+export const authClient = createAuthClient({
+ baseURL: "http://localhost:3000/api/auth",
+ plugins: [
+ electronClient({
+ protocol: {
+ scheme: "com.better-auth.demo",
+ },
+ signInURL: "http://localhost:3000/sign-in",
+ storage: storage(),
+ }),
+ ],
+});
diff --git a/demo/electron/src/main/index.ts b/demo/electron/src/main/index.ts
new file mode 100644
index 0000000000..acf285cd95
--- /dev/null
+++ b/demo/electron/src/main/index.ts
@@ -0,0 +1,68 @@
+import { join } from "node:path";
+import { electronApp, optimizer } from "@electron-toolkit/utils";
+import { app, BrowserWindow, shell } from "electron";
+import icon from "../../resources/icon.png?asset";
+import { authClient } from "../lib/auth-client";
+
+function createWindow(): void {
+ // Create the browser window.
+ const mainWindow = new BrowserWindow({
+ width: 900,
+ height: 670,
+ show: false,
+ autoHideMenuBar: true,
+ title: "Better Auth + Electron",
+ icon,
+ webPreferences: {
+ preload: join(__dirname, "../preload/index.js"),
+ sandbox: false,
+ contextIsolation: true,
+ nodeIntegration: false,
+ },
+ });
+
+ mainWindow.on("ready-to-show", () => {
+ mainWindow.show();
+ });
+
+ mainWindow.webContents.setWindowOpenHandler((details) => {
+ shell.openExternal(details.url);
+ return { action: "deny" };
+ });
+
+ mainWindow.loadFile(join(__dirname, "../renderer/index.html"));
+}
+
+// This method will be called when Electron has finished
+// initialization and is ready to create browser windows.
+// Some APIs can only be used after this event occurs.
+app.whenReady().then(() => {
+ // Set app user model id for windows
+ electronApp.setAppUserModelId("com.better-auth.demo");
+
+ // Default open or close DevTools by F12 in development
+ // and ignore CommandOrControl + R in production.
+ // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
+ app.on("browser-window-created", (_, window) => {
+ optimizer.watchWindowShortcuts(window);
+ });
+
+ createWindow();
+
+ app.on("activate", function () {
+ // On macOS it's common to re-create a window in the app when the
+ // dock icon is clicked and there are no other windows open.
+ if (BrowserWindow.getAllWindows().length === 0) createWindow();
+ });
+});
+
+// Quit when all windows are closed, except on macOS. There, it's common
+// for applications and their menu bar to stay active until the user quits
+// explicitly with Cmd + Q.
+app.on("window-all-closed", () => {
+ if (process.platform !== "darwin") {
+ app.quit();
+ }
+});
+
+authClient.setupMain();
diff --git a/demo/electron/src/preload/index.d.ts b/demo/electron/src/preload/index.d.ts
new file mode 100644
index 0000000000..a471678d4f
--- /dev/null
+++ b/demo/electron/src/preload/index.d.ts
@@ -0,0 +1,6 @@
+import type { authClient } from "../lib/auth-client";
+
+declare global {
+ type Bridges = typeof authClient.$Infer.Bridges;
+ interface Window extends Bridges {}
+}
diff --git a/demo/electron/src/preload/index.ts b/demo/electron/src/preload/index.ts
new file mode 100644
index 0000000000..db3c070b7c
--- /dev/null
+++ b/demo/electron/src/preload/index.ts
@@ -0,0 +1,3 @@
+import { authClient } from "../lib/auth-client";
+
+authClient.setupRenderer();
diff --git a/demo/electron/src/renderer/index.html b/demo/electron/src/renderer/index.html
new file mode 100644
index 0000000000..c2c8eb14ae
--- /dev/null
+++ b/demo/electron/src/renderer/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/electron/src/renderer/src/App.tsx b/demo/electron/src/renderer/src/App.tsx
new file mode 100644
index 0000000000..e1c2220b5b
--- /dev/null
+++ b/demo/electron/src/renderer/src/App.tsx
@@ -0,0 +1,56 @@
+import { BackgroundRippleEffect } from "./components/background-ripple-effect";
+import { Profile } from "./components/profile";
+import { RequestAuth } from "./components/request-auth";
+import { useUser } from "./components/user-provider";
+
+function App(): React.JSX.Element {
+ const { user, loading } = useUser();
+
+ return (
+
+ {/* Background Ripple Effect */}
+
+
+
+
+
+
+ BETTER-AUTH.
+
+
+
+ Official demo to showcase{" "}
+
+ better-auth.
+ {" "}
+ with Electron.
+
+
+ {loading && (
+
+ )}
+ {!loading && !user ?
:
}
+
+
+ );
+}
+
+export default App;
diff --git a/demo/electron/src/renderer/src/components/background-ripple-effect.tsx b/demo/electron/src/renderer/src/components/background-ripple-effect.tsx
new file mode 100644
index 0000000000..ae42da1231
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/background-ripple-effect.tsx
@@ -0,0 +1,134 @@
+"use client";
+import type React from "react";
+import { useMemo, useRef, useState } from "react";
+import { cn } from "../lib/utils";
+
+export const BackgroundRippleEffect = ({
+ rows = 8,
+ cols = 27,
+ cellSize = 56,
+}: {
+ rows?: number;
+ cols?: number;
+ cellSize?: number;
+}) => {
+ const [clickedCell, setClickedCell] = useState<{
+ row: number;
+ col: number;
+ } | null>(null);
+ const [rippleKey, setRippleKey] = useState(0);
+ const ref = useRef(null);
+
+ return (
+
+
+
+
{
+ setClickedCell({ row, col });
+ setRippleKey((k) => k + 1);
+ }}
+ interactive
+ />
+
+
+ );
+};
+
+type DivGridProps = {
+ className?: string;
+ rows: number;
+ cols: number;
+ cellSize: number; // in pixels
+ borderColor: string;
+ fillColor: string;
+ clickedCell: { row: number; col: number } | null;
+ onCellClick?: (row: number, col: number) => void;
+ interactive?: boolean;
+};
+
+type CellStyle = React.CSSProperties & {
+ ["--delay"]?: string;
+ ["--duration"]?: string;
+};
+
+const DivGrid = ({
+ className,
+ rows = 7,
+ cols = 30,
+ cellSize = 56,
+ borderColor = "#3f3f46",
+ fillColor = "rgba(14,165,233,0.3)",
+ clickedCell = null,
+ onCellClick = () => {},
+ interactive = true,
+}: DivGridProps) => {
+ const cells = useMemo(
+ () => Array.from({ length: rows * cols }, (_, idx) => idx),
+ [rows, cols],
+ );
+
+ const gridStyle: React.CSSProperties = {
+ display: "grid",
+ gridTemplateColumns: `repeat(${cols}, ${cellSize}px)`,
+ gridTemplateRows: `repeat(${rows}, ${cellSize}px)`,
+ width: cols * cellSize,
+ height: rows * cellSize,
+ marginInline: "auto",
+ };
+
+ return (
+
+ {cells.map((idx) => {
+ const rowIdx = Math.floor(idx / cols);
+ const colIdx = idx % cols;
+ const distance = clickedCell
+ ? Math.hypot(clickedCell.row - rowIdx, clickedCell.col - colIdx)
+ : 0;
+ const delay = clickedCell ? Math.max(0, distance * 55) : 0; // ms
+ const duration = 200 + distance * 80; // ms
+
+ const style: CellStyle = clickedCell
+ ? {
+ "--delay": `${delay}ms`,
+ "--duration": `${duration}ms`,
+ }
+ : {};
+
+ return (
+
onCellClick?.(rowIdx, colIdx) : undefined
+ }
+ />
+ );
+ })}
+
+ );
+};
diff --git a/demo/electron/src/renderer/src/components/profile.tsx b/demo/electron/src/renderer/src/components/profile.tsx
new file mode 100644
index 0000000000..7886914c8b
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/profile.tsx
@@ -0,0 +1,52 @@
+import { Avatar, AvatarFallback, AvatarImage } from "./ui/avatar";
+import { Button } from "./ui/button";
+import { useUser } from "./user-provider";
+
+export function Profile() {
+ const { user } = useUser();
+
+ if (!user) {
+ return null;
+ }
+
+ return (
+
+
+
+
+ {(user.name || user.email)?.charAt(0).toUpperCase()}
+
+
+
+ {user.name}
+
+ {user.email}
+
+
+
+
+ );
+}
diff --git a/demo/electron/src/renderer/src/components/request-auth.tsx b/demo/electron/src/renderer/src/components/request-auth.tsx
new file mode 100644
index 0000000000..65f4a5ef3d
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/request-auth.tsx
@@ -0,0 +1,150 @@
+import type { ElectronRequestAuthOptions } from "@better-auth/electron/client";
+import { cn } from "@renderer/lib/utils";
+import { useState } from "react";
+import { Button } from "./ui/button";
+
+export function RequestAuth() {
+ const [openedBrowser, setOpenedBrowser] = useState(false);
+
+ const handleRequestAuth =
+ (opts?: ElectronRequestAuthOptions | undefined) => () => {
+ void window.requestAuth(opts);
+ setTimeout(() => {
+ setOpenedBrowser(true);
+ }, 500);
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ A browser window has been opened for authentication.
+
+ Please complete the process there.
+
+
+ >
+ );
+}
diff --git a/demo/electron/src/renderer/src/components/theme-provider.tsx b/demo/electron/src/renderer/src/components/theme-provider.tsx
new file mode 100644
index 0000000000..b321bb11b0
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/theme-provider.tsx
@@ -0,0 +1,73 @@
+import { createContext, useContext, useEffect, useState } from "react";
+
+type Theme = "dark" | "light" | "system";
+
+type ThemeProviderProps = {
+ children: React.ReactNode;
+ defaultTheme?: Theme;
+ storageKey?: string;
+};
+
+type ThemeProviderState = {
+ theme: Theme;
+ setTheme: (theme: Theme) => void;
+};
+
+const initialState: ThemeProviderState = {
+ theme: "system",
+ setTheme: () => null,
+};
+
+const ThemeProviderContext = createContext
(initialState);
+
+export function ThemeProvider({
+ children,
+ defaultTheme = "system",
+ storageKey = "vite-ui-theme",
+ ...props
+}: ThemeProviderProps) {
+ const [theme, setTheme] = useState(
+ () => (localStorage.getItem(storageKey) as Theme) || defaultTheme,
+ );
+
+ useEffect(() => {
+ const root = window.document.documentElement;
+
+ root.classList.remove("light", "dark");
+
+ if (theme === "system") {
+ const systemTheme = window.matchMedia("(prefers-color-scheme: dark)")
+ .matches
+ ? "dark"
+ : "light";
+
+ root.classList.add(systemTheme);
+ return;
+ }
+
+ root.classList.add(theme);
+ }, [theme]);
+
+ const value = {
+ theme,
+ setTheme: (theme: Theme) => {
+ localStorage.setItem(storageKey, theme);
+ setTheme(theme);
+ },
+ };
+
+ return (
+
+ {children}
+
+ );
+}
+
+export const useTheme = () => {
+ const context = useContext(ThemeProviderContext);
+
+ if (context === undefined)
+ throw new Error("useTheme must be used within ");
+
+ return context;
+};
diff --git a/demo/electron/src/renderer/src/components/ui/avatar.tsx b/demo/electron/src/renderer/src/components/ui/avatar.tsx
new file mode 100644
index 0000000000..99b42bac93
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/ui/avatar.tsx
@@ -0,0 +1,51 @@
+import * as AvatarPrimitive from "@radix-ui/react-avatar";
+import type * as React from "react";
+
+import { cn } from "../../lib/utils";
+
+function Avatar({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function AvatarImage({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function AvatarFallback({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ );
+}
+
+export { Avatar, AvatarImage, AvatarFallback };
diff --git a/demo/electron/src/renderer/src/components/ui/button.tsx b/demo/electron/src/renderer/src/components/ui/button.tsx
new file mode 100644
index 0000000000..ba79971dd9
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/ui/button.tsx
@@ -0,0 +1,59 @@
+import { Slot } from "@radix-ui/react-slot";
+import type { VariantProps } from "class-variance-authority";
+import { cva } from "class-variance-authority";
+import type * as React from "react";
+
+import { cn } from "../../lib/utils";
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+ {
+ variants: {
+ variant: {
+ default:
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
+ outline:
+ "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
+ secondary:
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "text-primary underline-offset-4 hover:underline",
+ },
+ size: {
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+ icon: "size-9",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+);
+
+function Button({
+ className,
+ variant,
+ size,
+ asChild = false,
+ ...props
+}: React.ComponentProps<"button"> &
+ VariantProps & {
+ asChild?: boolean;
+ }) {
+ const Comp = asChild ? Slot : "button";
+
+ return (
+
+ );
+}
+
+export { Button, buttonVariants };
diff --git a/demo/electron/src/renderer/src/components/user-provider.tsx b/demo/electron/src/renderer/src/components/user-provider.tsx
new file mode 100644
index 0000000000..33b3083c7f
--- /dev/null
+++ b/demo/electron/src/renderer/src/components/user-provider.tsx
@@ -0,0 +1,62 @@
+import {
+ createContext,
+ useContext,
+ useEffect,
+ useState,
+ useTransition,
+} from "react";
+import type { authClient } from "../../../lib/auth-client";
+
+const UserContext = createContext<{
+ loading: boolean;
+ user: (typeof authClient.$Infer.Session)["user"] | null;
+} | null>(null);
+
+export function UserProvider({
+ children,
+}: {
+ children?: React.ReactNode | undefined;
+}) {
+ const [loading, startTransition] = useTransition();
+ const [user, setUser] = useState<
+ (typeof authClient.$Infer.Session)["user"] | null
+ >(null);
+
+ useEffect(() => {
+ startTransition(async () => {
+ setUser(await window.getUser());
+ });
+ const unsubscribe = window.onAuthenticated((u) => {
+ setUser(u);
+ });
+ const unsubscribeUserUpdated = window.onUserUpdated((u) => {
+ setUser(u);
+ });
+ return () => {
+ unsubscribe();
+ unsubscribeUserUpdated();
+ setUser(null);
+ };
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export function useUser() {
+ const state = useContext(UserContext);
+
+ if (state === null) {
+ throw new Error("useUser must be used within ");
+ }
+
+ return state;
+}
diff --git a/demo/electron/src/renderer/src/env.d.ts b/demo/electron/src/renderer/src/env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/demo/electron/src/renderer/src/env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/demo/electron/src/renderer/src/global.css b/demo/electron/src/renderer/src/global.css
new file mode 100644
index 0000000000..bb5835f352
--- /dev/null
+++ b/demo/electron/src/renderer/src/global.css
@@ -0,0 +1,131 @@
+@import "tailwindcss";
+
+@custom-variant dark (&:is(.dark *));
+
+:root {
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.147 0.004 49.25);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.147 0.004 49.25);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.147 0.004 49.25);
+ --primary: oklch(0.216 0.006 56.043);
+ --primary-foreground: oklch(0.985 0.001 106.423);
+ --secondary: oklch(0.97 0.001 106.424);
+ --secondary-foreground: oklch(0.216 0.006 56.043);
+ --muted: oklch(0.97 0.001 106.424);
+ --muted-foreground: oklch(0.553 0.013 58.071);
+ --accent: oklch(0.97 0.001 106.424);
+ --accent-foreground: oklch(0.216 0.006 56.043);
+ --destructive: oklch(0.577 0.245 27.325);
+ --destructive-foreground: oklch(0.577 0.245 27.325);
+ --border: oklch(0.923 0.003 48.717);
+ --input: oklch(0.923 0.003 48.717);
+ --ring: oklch(0.709 0.01 56.259);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --sidebar: oklch(0.985 0.001 106.423);
+ --sidebar-foreground: oklch(0.147 0.004 49.25);
+ --sidebar-primary: oklch(0.216 0.006 56.043);
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-accent: oklch(0.97 0.001 106.424);
+ --sidebar-accent-foreground: oklch(0.216 0.006 56.043);
+ --sidebar-border: oklch(0.923 0.003 48.717);
+ --sidebar-ring: oklch(0.709 0.01 56.259);
+ --scrollbar-thumb: var(--border);
+ --scrollbar-thumb-hover: var(--ring);
+ --scrollbar-track: transparent;
+ --radius: 0.2rem;
+ --fd-nav-height: 56px;
+ --fd-banner-height: 0px;
+ --fd-tocnav-height: 0px;
+}
+
+.dark {
+ --background: hsl(0 0% 0%);
+ --foreground: oklch(0.985 0.001 106.423);
+ --card: oklch(0.147 0.004 49.25);
+ --card-foreground: oklch(0.985 0.001 106.423);
+ --popover: oklch(0.147 0.004 49.25);
+ --popover-foreground: oklch(0.985 0.001 106.423);
+ --primary: oklch(0.985 0.001 106.423);
+ --primary-foreground: oklch(0.216 0.006 56.043);
+ --secondary: oklch(0.268 0.007 34.298);
+ --secondary-foreground: oklch(0.985 0.001 106.423);
+ --muted: oklch(0.268 0.007 34.298);
+ --muted-foreground: oklch(0.709 0.01 56.259);
+ --accent: oklch(0.268 0.007 34.298);
+ --accent-foreground: oklch(0.985 0.001 106.423);
+ --destructive: oklch(0.396 0.141 25.723);
+ --destructive-foreground: oklch(0.637 0.237 25.331);
+ --border: oklch(0.268 0.007 34.298);
+ --input: oklch(0.268 0.007 34.298);
+ --ring: oklch(0.553 0.013 58.071);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.216 0.006 56.043);
+ --sidebar-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-accent: oklch(0.268 0.007 34.298);
+ --sidebar-accent-foreground: oklch(0.985 0.001 106.423);
+ --sidebar-border: oklch(0.268 0.007 34.298);
+ --sidebar-ring: oklch(0.553 0.013 58.071);
+ --scrollbar-thumb: var(--border);
+ --scrollbar-thumb-hover: var(--ring);
+ --scrollbar-track: transparent;
+}
+
+@theme inline {
+ --breakpoint-navbar: 64rem;
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-destructive-foreground: var(--destructive-foreground);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+}
+
+html {
+ @apply bg-background text-foreground;
+}
+
+#root {
+ @apply min-h-dvh flex flex-col;
+}
diff --git a/demo/electron/src/renderer/src/lib/utils.ts b/demo/electron/src/renderer/src/lib/utils.ts
new file mode 100644
index 0000000000..d39aff9e9a
--- /dev/null
+++ b/demo/electron/src/renderer/src/lib/utils.ts
@@ -0,0 +1,7 @@
+import type { ClassValue } from "clsx";
+import { clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/demo/electron/src/renderer/src/main.tsx b/demo/electron/src/renderer/src/main.tsx
new file mode 100644
index 0000000000..e3d29e2d0a
--- /dev/null
+++ b/demo/electron/src/renderer/src/main.tsx
@@ -0,0 +1,19 @@
+import "./global.css";
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import App from "./App";
+import { ThemeProvider } from "./components/theme-provider";
+import { UserProvider } from "./components/user-provider";
+
+createRoot(document.getElementById("root")!).render(
+
+
+
+
+
+
+ ,
+);
diff --git a/demo/electron/tsconfig.json b/demo/electron/tsconfig.json
new file mode 100644
index 0000000000..155ebaa675
--- /dev/null
+++ b/demo/electron/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.node.json" },
+ { "path": "./tsconfig.web.json" }
+ ]
+}
diff --git a/demo/electron/tsconfig.node.json b/demo/electron/tsconfig.node.json
new file mode 100644
index 0000000000..076386a2c1
--- /dev/null
+++ b/demo/electron/tsconfig.node.json
@@ -0,0 +1,13 @@
+{
+ "extends": "@electron-toolkit/tsconfig/tsconfig.node.json",
+ "include": [
+ "electron.vite.config.*",
+ "src/main/**/*",
+ "src/preload/**/*",
+ "src/lib/auth-client.ts"
+ ],
+ "compilerOptions": {
+ "composite": true,
+ "types": ["electron-vite/node"]
+ }
+}
diff --git a/demo/electron/tsconfig.web.json b/demo/electron/tsconfig.web.json
new file mode 100644
index 0000000000..4143a2fb8b
--- /dev/null
+++ b/demo/electron/tsconfig.web.json
@@ -0,0 +1,18 @@
+{
+ "extends": "@electron-toolkit/tsconfig/tsconfig.web.json",
+ "include": [
+ "src/renderer/src/env.d.ts",
+ "src/renderer/src/**/*",
+ "src/renderer/src/**/*.tsx",
+ "src/preload/*.d.ts",
+ "src/lib/auth-client.ts"
+ ],
+ "compilerOptions": {
+ "composite": true,
+ "jsx": "react-jsx",
+ "baseUrl": ".",
+ "paths": {
+ "@renderer/*": ["src/renderer/src/*"]
+ }
+ }
+}
diff --git a/demo/nextjs/app/(auth)/sign-in/_components/sign-in.tsx b/demo/nextjs/app/(auth)/sign-in/_components/sign-in.tsx
index bef427e3ca..c5074224f3 100644
--- a/demo/nextjs/app/(auth)/sign-in/_components/sign-in.tsx
+++ b/demo/nextjs/app/(auth)/sign-in/_components/sign-in.tsx
@@ -40,6 +40,7 @@ export default function SignIn() {
router.push(getCallbackURL(params))}
callbackURL="/dashboard"
/>
@@ -53,6 +54,9 @@ export default function SignIn() {
await authClient.signIn.social({
provider: "google",
callbackURL: "/dashboard",
+ fetchOptions: {
+ query: params,
+ },
});
}}
aria-label="Sign in with Google"
@@ -92,6 +96,9 @@ export default function SignIn() {
await authClient.signIn.social({
provider: "github",
callbackURL: "/dashboard",
+ fetchOptions: {
+ query: params,
+ },
});
}}
aria-label="Sign in with GitHub"
@@ -119,6 +126,9 @@ export default function SignIn() {
await authClient.signIn.social({
provider: "microsoft",
callbackURL: "/dashboard",
+ fetchOptions: {
+ query: params,
+ },
});
}}
aria-label="Sign in with Microsoft"
@@ -146,6 +156,9 @@ export default function SignIn() {
await authClient.signIn.social({
provider: "vercel",
callbackURL: "/dashboard",
+ fetchOptions: {
+ query: params,
+ },
});
}}
aria-label="Sign in with Vercel"
@@ -185,6 +198,7 @@ export default function SignIn() {
onClick={async () => {
await authClient.signIn.passkey({
fetchOptions: {
+ query: params,
onSuccess() {
toast.success("Successfully signed in");
router.push(getCallbackURL(params));
diff --git a/demo/nextjs/app/(auth)/sign-in/_components/sign-up.tsx b/demo/nextjs/app/(auth)/sign-in/_components/sign-up.tsx
index 4c5b59108c..d72d1ac677 100644
--- a/demo/nextjs/app/(auth)/sign-in/_components/sign-up.tsx
+++ b/demo/nextjs/app/(auth)/sign-in/_components/sign-up.tsx
@@ -27,6 +27,7 @@ export function SignUp() {
router.push(getCallbackURL(params))}
callbackURL={getCallbackURL(params)}
/>
diff --git a/demo/nextjs/app/(auth)/sign-in/page.tsx b/demo/nextjs/app/(auth)/sign-in/page.tsx
index 3efc0b6028..6e710eecfd 100644
--- a/demo/nextjs/app/(auth)/sign-in/page.tsx
+++ b/demo/nextjs/app/(auth)/sign-in/page.tsx
@@ -16,6 +16,7 @@ export default function Page() {
useEffect(() => {
authClient.oneTap({
fetchOptions: {
+ query: params,
onError: ({ error }) => {
toast.error(error.message || "An error occurred");
},
diff --git a/demo/nextjs/components/forms/sign-in-form.tsx b/demo/nextjs/components/forms/sign-in-form.tsx
index 999ad58fd3..e23b52e1d1 100644
--- a/demo/nextjs/components/forms/sign-in-form.tsx
+++ b/demo/nextjs/components/forms/sign-in-form.tsx
@@ -32,12 +32,14 @@ interface SignInFormProps {
onSuccess?: () => void;
callbackURL?: string;
showPasswordToggle?: boolean;
+ params?: URLSearchParams;
}
export function SignInForm({
onSuccess,
callbackURL = "/dashboard",
showPasswordToggle = false,
+ params,
}: SignInFormProps) {
const [loading, startTransition] = useTransition();
const [isMounted, setIsMounted] = useState(false);
@@ -65,6 +67,7 @@ export function SignInForm({
callbackURL,
},
{
+ query: params ? Object.fromEntries(params.entries()) : undefined,
onSuccess() {
toast.success("Successfully signed in");
onSuccess?.();
diff --git a/demo/nextjs/components/forms/sign-up-form.tsx b/demo/nextjs/components/forms/sign-up-form.tsx
index 732e869b2a..297c163dff 100644
--- a/demo/nextjs/components/forms/sign-up-form.tsx
+++ b/demo/nextjs/components/forms/sign-up-form.tsx
@@ -36,11 +36,13 @@ type SignUpFormValues = z.infer;
interface SignUpFormProps {
onSuccess?: () => void;
callbackURL?: string;
+ params?: URLSearchParams;
}
export function SignUpForm({
onSuccess,
callbackURL = "/dashboard",
+ params,
}: SignUpFormProps) {
const [loading, startTransition] = useTransition();
const { image, imagePreview, handleImageChange, clearImage } =
@@ -66,6 +68,7 @@ export function SignUpForm({
image: image ? await convertImageToBase64(image) : "",
callbackURL,
fetchOptions: {
+ query: params ? Object.fromEntries(params.entries()) : undefined,
onError: (ctx) => {
toast.error(ctx.error.message);
},
diff --git a/demo/nextjs/components/providers.tsx b/demo/nextjs/components/providers.tsx
index a0b89158fa..773b055a2d 100644
--- a/demo/nextjs/components/providers.tsx
+++ b/demo/nextjs/components/providers.tsx
@@ -2,7 +2,9 @@
import { QueryClientProvider } from "@tanstack/react-query";
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
+import { useEffect } from "react";
import { getQueryClient } from "@/data/query-client";
+import { authClient } from "@/lib/auth-client";
import { ThemeProvider } from "./theme-provider";
import { Toaster } from "./ui/sonner";
@@ -13,6 +15,11 @@ type Props = {
const Providers = ({ children }: Props) => {
const queryClient = getQueryClient();
+ useEffect(() => {
+ const id = authClient.ensureElectronRedirect();
+ return () => clearInterval(id);
+ }, []);
+
return (
diff --git a/demo/nextjs/lib/auth-client.ts b/demo/nextjs/lib/auth-client.ts
index f6983cd99a..831baa7226 100644
--- a/demo/nextjs/lib/auth-client.ts
+++ b/demo/nextjs/lib/auth-client.ts
@@ -1,4 +1,5 @@
import { dashClient } from "@better-auth/dash/client";
+import { electronProxyClient } from "@better-auth/electron/proxy";
import { oauthProviderClient } from "@better-auth/oauth-provider/client";
import { passkeyClient } from "@better-auth/passkey/client";
import { stripeClient } from "@better-auth/stripe/client";
@@ -41,6 +42,11 @@ export const authClient = createAuthClient({
customSessionClient(),
deviceAuthorizationClient(),
lastLoginMethodClient(),
+ electronProxyClient({
+ protocol: {
+ scheme: "com.better-auth.demo",
+ },
+ }),
],
fetchOptions: {
onError(e) {
diff --git a/demo/nextjs/lib/auth.ts b/demo/nextjs/lib/auth.ts
index 90acd1a696..4f6ebadff0 100644
--- a/demo/nextjs/lib/auth.ts
+++ b/demo/nextjs/lib/auth.ts
@@ -1,4 +1,5 @@
import { dash, sendEmail } from "@better-auth/dash";
+import { electron } from "@better-auth/electron";
import { oauthProvider } from "@better-auth/oauth-provider";
import { passkey } from "@better-auth/passkey";
import { scim } from "@better-auth/scim";
@@ -435,11 +436,13 @@ const authOptions = {
oauthAuthServerConfig: true,
},
}),
+ electron(),
],
trustedOrigins: [
"https://*.better-auth.com",
"https://better-auth-demo-*-better-auth.vercel.app",
"exp://",
+ "com.better-auth.demo:/",
"https://appleid.apple.com",
],
} satisfies BetterAuthOptions;
diff --git a/demo/nextjs/package.json b/demo/nextjs/package.json
index fd9f53d953..9e60ec5b41 100644
--- a/demo/nextjs/package.json
+++ b/demo/nextjs/package.json
@@ -18,6 +18,7 @@
"@better-auth/scim": "workspace:*",
"@better-auth/sso": "workspace:*",
"@better-auth/stripe": "workspace:*",
+ "@better-auth/electron": "workspace:*",
"@hookform/resolvers": "^5.2.2",
"@libsql/kysely-libsql": "^0.4.1",
"@modelcontextprotocol/sdk": "^1.25.3",
diff --git a/docs/components/icons.tsx b/docs/components/icons.tsx
index 2ab8af1369..d11c0bd47a 100644
--- a/docs/components/icons.tsx
+++ b/docs/components/icons.tsx
@@ -584,4 +584,19 @@ export const Icons = {
>
),
+ electron: (props?: SVGProps) => (
+
+ ),
};
diff --git a/docs/components/sidebar-content.tsx b/docs/components/sidebar-content.tsx
index 2d36e7675e..5f03b17089 100644
--- a/docs/components/sidebar-content.tsx
+++ b/docs/components/sidebar-content.tsx
@@ -1506,6 +1506,12 @@ C0.7,239.6,62.1,0.5,62.2,0.4c0,0,54,13.8,119.9,30.8S302.1,62,302.2,62c0.2,0,0.2,
href: "",
icon: LucideAArrowDown,
},
+ {
+ title: "Electron",
+ icon: Icons.electron,
+ href: "/docs/integrations/electron",
+ isNew: true,
+ },
{
title: "Expo",
icon: Icons.expo,
diff --git a/docs/content/docs/integrations/electron.mdx b/docs/content/docs/integrations/electron.mdx
new file mode 100644
index 0000000000..bbffd4794c
--- /dev/null
+++ b/docs/content/docs/integrations/electron.mdx
@@ -0,0 +1,683 @@
+---
+title: Electron Integration
+description: Integrate Better Auth with Electron.
+---
+
+Electron is a popular framework for building cross-platform desktop applications using web technologies.
+
+Better Auth can be integrated into Electron apps to provide secure authentication flows, leveraging the system browser.
+
+## Installation
+
+
+
+ ### Configure a Better Auth front- & back-end
+
+ Before integrating with Electron, ensure you have a Better Auth server and client set up.
+
+ To get started, check out our [installation](/docs/installation) guide for setting up Better Auth.
+
+
+
+ ### Install the required packages
+
+ Install the Better Auth server package and the Electron integration package in your server, Electron app, and web client projects.
+
+ **In each project, run:**
+
+ ```package-install
+ better-auth @better-auth/electron
+ ```
+
+
+
+
+ ### Add the Electron plugin to your Better Auth server
+
+ Add the Electron plugin to your Better Auth server.
+
+ ```ts title="web/lib/auth.ts"
+ import { betterAuth } from "better-auth";
+ import { electron } from "@better-auth/electron";
+
+ export const auth = betterAuth({
+ plugins: [electron()],
+ emailAndPassword: {
+ enabled: true,
+ },
+ social: {
+ google: {
+ clientId: process.env.GOOGLE_CLIENT_ID!,
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
+ },
+ },
+ });
+ ```
+
+
+
+ ### Add the proxy plugin to your web client
+
+ On your frontend, add the proxy plugin to handle redirects back into the Electron app.
+
+ ```ts title="web/lib/auth-client.ts"
+ import { createAuthClient } from "better-auth/client";
+ import { electronProxyClient } from "@better-auth/electron/proxy";
+
+ export const authClient = createAuthClient({
+ baseURL: "http://localhost:8081",
+ plugins: [
+ electronProxyClient({
+ protocol: {
+ scheme: "com.example.app"
+ },
+ }),
+ ],
+ });
+ ```
+
+
+
+
+ ### Initialize the Electron client
+
+ ```ts title="electron/lib/auth-client.ts"
+ import { createAuthClient } from "better-auth/client";
+ import { electronClient } from "@better-auth/electron/client";
+
+ export const authClient = createAuthClient({
+ baseURL: "http://localhost:8081", // Base URL of your Better Auth frontend
+ plugins: [
+ electronClient({
+ signInURL: "https://app.example.com/sign-in", // The URL to redirect to for authentication
+ protocol: {
+ scheme: "com.example.app" // The custom protocol scheme registered by your Electron app
+ },
+ storage: {
+ getItem: async (key) => {
+ // retrieve entry from storage
+ },
+ setItem: async (key, value) => {
+ // set entry in storage
+ },
+ },
+ }),
+ ],
+ });
+ ```
+
+ If you'd rather not implement your own storage solution, we offer a default option:
+
+ 1. Make sure to install the `conf` package:
+ ```package-install
+ conf
+ ```
+ 2. Then, you can use it as follows:
+
+ ```ts title="electron/lib/auth-client.ts"
+ import { storage } from "@better-auth/electron/storage";
+
+ electronClient({
+ storage: storage(),
+ });
+ ```
+
+
+ You should never expose the authClient directly
+ to the renderer process. Instead, [create an IPC bridge](#creating-ipc-bridges) to securely communicate between the main and renderer processes.
+
+
+
+
+
+ ### Scheme and Trusted Origins
+
+ The Electron plugin uses deep links to redirect users back to your app after authentication.
+ To enable this, you need to add your app's protocol scheme to the `trustedOrigins` on your **Better Auth server**.
+
+ First, make sure you have a custom protocol scheme registered in your build configuration.
+
+
+
+ ```ts title="forge.config.js"
+ module.exports = {
+ packagerConfig: {
+ protocols: [{
+ name: "MyApp Protocol",
+ schemes: ["com.example.app"],
+ }],
+ },
+ // ...other config options
+ };
+ ```
+
+
+
+ ```ts title="electron-builder.json5"
+ {
+ "protocols": [
+ {
+ "name": "MyApp Protocol",
+ "schemes": ["com.example.app"]
+ }
+ ],
+ // ...other config options
+ }
+ ```
+
+
+
+ Then, update your Better Auth config to include the scheme in `trustedOrigins`:
+
+ ```ts title="web/lib/auth.ts"
+ export const auth = betterAuth({
+ trustedOrigins: ["com.example.app:/"],
+ });
+ ```
+
+
+
+ ### Configure the BrowserWindow
+
+ Ensure that your `BrowserWindow` is configured with `nodeIntegration` set to `false` and `contextIsolation` set to `true`, to ensure NodeJS APIs aren't exposed to any JavaScript process running in the browser.
+
+ ```ts title="electron/main.ts"
+ import { BrowserWindow } from "electron";
+ import { join } from "node:path";
+
+ const win = new BrowserWindow({
+ webPreferences: {
+ preload: join(__dirname, "preload.mjs"),
+ nodeIntegration: false,
+ contextIsolation: true,
+ },
+ });
+ ```
+
+
+
+
+ ### Setup the Main Process
+
+ In your Electron main process, use the `setupMain()` method from the Electron auth client to handle necessary configurations.
+
+ This will:
+ - Register the protocol handler for deep links.
+ - Set up content security policies.
+ - Set up IPC bridges for communication between main and renderer processes.
+
+ ```ts title="electron/main.ts"
+ import { authClient } from "./lib/auth-client";
+
+ authClient.setupMain();
+ ```
+
+ Note that this must be called before the app is ready.
+
+
+
+ ### Setup the Renderer Process
+
+ In your preload script, use the `setupRenderer()` method from the Electron auth client to expose safe IPC bridges to the renderer process.
+
+ ```ts title="electron/preload.ts"
+ import { authClient } from "./lib/auth-client";
+
+ authClient.setupRenderer();
+ ```
+
+ Note that this must also be called before the app is ready.
+
+
+ To infer the types of the exposed bridges, you can use `authClient.$Infer.Bridges` to extend the `Window` interface.
+
+ ```ts title="electron/preload.d.ts"
+ import type { authClient } from "./lib/auth-client";
+
+ declare global {
+ type Bridges = typeof authClient.$Infer.Bridges;
+ interface Window extends Bridges {}
+ }
+ ```
+
+
+
+
+
+## Usage
+
+### Handling Authorization in the Browser
+
+In order to redirect users back to your Electron application, you need to call the `ensureElectronRedirect()` method on your web sign-in callback page. Also make sure to preserve any PKCE and state parameters during the sign-in initiation, by passing them via `fetchOptions.query`.
+
+The following example uses React, but the same logic applies to any framework:
+
+```tsx title="web/pages/sign-in.tsx"
+import { useEffect, use } from "react";
+import { authClient } from "../auth-client";
+
+function SignIn({
+ searchParams,
+}: {
+ searchParams: Promise<{
+ client_id?: string | undefined;
+ state?: string | undefined;
+ code_challenge?: string | undefined;
+ code_challenge_method?: string | undefined;
+ }>;
+}) {
+ const query = use(searchParams);
+
+ useEffect(() => {
+ const id = authClient.ensureElectronRedirect();
+ return () => {
+ clearTimeout(id);
+ }
+ }, []);
+
+ return (
+
+ );
+}
+```
+
+### Handling Authentication in Electron
+
+In your Electron renderer process, you can use the IPC bridges exposed by the preload script.
+
+```tsx title="electron/App.tsx"
+function Auth() {
+ useEffect(() => {
+ const unsubscribeAuthenticated =
+ window.onAuthenticated((user) => {
+ console.log("Authenticated user:", user);
+ });
+ const unsubscribeAuthError =
+ window.onAuthError((ctx) => {
+ toast.error(`Authentication error: ${ctx.message}`);
+ });
+
+ return () => {
+ unsubscribeAuthenticated();
+ unsubscribeAuthError();
+ };
+ }, []);
+
+ return (
+ <>
+
+
+ >
+ );
+}
+```
+
+In the main process, you can call from the auth client directly:
+
+```ts title="electron/main.ts"
+import { authClient } from "./lib/auth-client";
+
+authClient.requestAuth();
+```
+
+### Sign Out
+
+To sign out the user inside the renderer process, you can use the `signOut` bridge in the renderer process:
+
+```ts title="electron/App.tsx"
+
+```
+
+### Subscribing to User Updates
+
+You can listen for user changes via the `onUserUpdated` bridge in the renderer process:
+
+```ts title="electron/App.tsx"
+useEffect(() => {
+ const unsubscribe = window.onUserUpdated((user) => {
+ console.log("User updated:", user);
+ });
+ return () => unsubscribe();
+}, []);
+```
+
+### Handling Errors
+
+Listen for authentication errors via the `onAuthError` bridge in the renderer process. The bridge will receive error context forwarded from fetch hooks.
+
+```ts title="electron/error-listener.tsx"
+useEffect(() => {
+ const unsubscribe = window.onAuthError((ctx) => {
+ console.error("Authentication error:", ctx);
+ });
+ return () => unsubscribe();
+}, []);
+```
+
+### Creating IPC bridges
+
+You should create IPC bridges to extend the functionality exposed to your renderer process. This ensures a minimal, safe API surface.
+
+First, create an IPC handler in the main process that uses the `authClient` to perform the desired action:
+
+```ts title="electron/main.ts"
+import { authClient } from "./lib/auth-client";
+import { ipcMain } from "electron";
+
+ipcMain.handle("myBridge", async (_event, data) => {
+ const cookie = authClient.getCookie();
+ return await authClient.someEndpoint({
+ data,
+ fetchOptions: {
+ headers: { cookie },
+ },
+ });
+});
+```
+
+Next, expose the bridge in your preload script using `contextBridge`:
+
+```ts title="electron/preload.ts"
+import { contextBridge, ipcRenderer } from "electron";
+
+contextBridge.exposeInMainWorld("myBridge", (data: Record) => {
+ return ipcRenderer.invoke("myBridge", data);
+});
+```
+
+
+ To infer the types of your bridge, extend the `Window` interface:
+
+ ```ts title="electron/preload.d.ts"
+ import type { authClient } from "./lib/auth-client";
+
+ declare global {
+ type Bridges = typeof authClient.$Infer.Bridges;
+ interface Window extends Bridges {
+ myBridge: (data: Record) => Promise;
+ }
+ }
+ ```
+
+
+
+Now you can call your custom bridge from anywhere in the renderer process:
+
+```ts title="electron/App.tsx"
+useEffect(() => {
+ window
+ .myBridge({
+ foo: "bar",
+ })
+ .then((res) => {
+ console.log("Bridge response:", res);
+ });
+}, []);
+```
+
+For more details, check out Electron's [Inter-Process Communication](https://www.electronjs.org/docs/latest/tutorial/ipc) tutorial.
+
+## Options
+
+### Server plugin
+
+#### `codeExpiresIn?`
+
+The duration, in seconds, for which the authorization code is valid. (defaults to `300`)
+
+Note that the authorization code will be refreshed during active endpoint usage.
+
+```ts title="web/auth.ts"
+electron({
+ codeExpiresIn: 300, // 5 minutes
+});
+```
+
+#### `redirectCookieExpiresIn?`
+
+The duration, in seconds, for which the redirect cookie remains valid. (defaults to `120`)
+
+```ts title="web/auth.ts"
+electron({
+ redirectCookieExpiresIn: 120, // 2 minutes
+});
+```
+
+The redirect cookie name is derived by the `clientID`.
+
+#### `cookiePrefix?`
+
+The prefix to use for cookies set by the plugin. (defaults to `better-auth`)
+
+```ts title="web/auth.ts"
+electron({
+ cookiePrefix: "better-auth",
+});
+```
+
+#### `clientID?`
+
+The client id to use for identifying the Electron client during authorization. (defaults to `electron`)
+
+Make sure this matches the clientID provided to both the proxy and electron client plugin.
+
+```ts title="web/auth.ts"
+electron({
+ clientID: "electron",
+});
+```
+
+#### `disableOriginOverride?`
+
+Override the origin for Electron API routes. (defaults to `false`)
+
+Enable this if you're facing cors origin issues with Electron API routes.
+
+```ts title="web/auth.ts"
+electron({
+ disableOriginOverride: true,
+});
+```
+
+### Proxy client
+
+#### `protocol`
+
+The protocol scheme to use for deep linking in Electron.
+
+Should follow the [reverse domain name notation](https://datatracker.ietf.org/doc/html/rfc8252#section-7.1) to ensure uniqueness.
+
+Make sure this matches the protocol scheme provided to the Electron client and `trustedOrigins`.
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ protocol: "com.example.app",
+});
+```
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ protocol: {
+ scheme: "com.example.app",
+ },
+});
+```
+
+#### `callbackPath?`
+
+The callback path to use for authentication redirects. (defaults to `/auth/callback`)
+
+Make sure this matches the path provided to the electron client plugin.
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ callbackPath: "/auth/callback",
+});
+```
+
+#### `clientID?`
+
+The client id to use for identifying the Electron client during authorization. (defaults to `electron`)
+
+Make sure this matches the clientID provided to both the server and electron client plugin.
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ clientID: "electron",
+});
+```
+
+#### `cookiePrefix?`
+
+The prefix to use for cookies set by the plugin. (defaults to `better-auth`)
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ cookiePrefix: "better-auth",
+});
+```
+
+### Client plugin
+
+#### `signInURL`
+
+The URL to redirect to for authentication.
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ signInURL: "http://localhost:3000/sign-in",
+});
+```
+
+#### `protocol`
+
+The protocol scheme to use for deep linking in Electron.
+
+Should follow the [reverse domain name notation](https://datatracker.ietf.org/doc/html/rfc8252#section-7.1) to ensure uniqueness.
+
+Make sure this matches the protocol scheme provided to the proxy client and `trustedOrigins`.
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ protocol: "com.example.app",
+});
+```
+
+```ts title="web/auth-client.ts"
+electronProxyClient({
+ protocol: {
+ scheme: "com.example.app",
+ },
+});
+```
+
+#### `callbackPath?`
+
+The callback path to use for authentication redirects. (defaults to `/auth/callback`)
+
+Make sure this matches the path provided to the proxy client plugin.
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ callbackPath: "/auth/callback",
+});
+```
+
+#### `storage`
+
+Storage solution to use to store session and cookie data.
+
+By default a storage file is generated in the `userData` directory. The name is derived by the project name.
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ storage: {
+ getItem: (key) => {
+ // get entry from storage
+ },
+ setItem: (key, value) => {
+ // set entry in storage
+ },
+ },
+});
+```
+
+#### `storagePrefix?`
+
+Prefix for local storage keys. (defaults to `better-auth`)
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ storagePrefix: "better-auth",
+});
+```
+
+#### `cookiePrefix?`
+
+Prefix(es) for server cookie names to filter. (defaults to `better-auth`)
+
+This is used to identify which cookies belong to better-auth to
+prevent infinite refetching when third-party cookies are set.
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ cookiePrefix: "better-auth",
+});
+```
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ cookiePrefix: ["better-auth", "my-app"],
+});
+```
+
+#### `channelPrefix?`
+
+Channel prefix for IPC bridges. (defaults to `better-auth`)
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ channelPrefix: "myapp",
+});
+```
+
+#### `clientID?`
+
+The client id to use for identifying the Electron client during authorization. (defaults to `electron`)
+
+Make sure this matches the clientID provided to both the server and proxy client plugin.
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ clientID: "electron",
+});
+```
+
+#### `disableCache?`
+
+Whether to disable caching the session data locally. (defaults to `false`)
+
+```ts title="electron/auth-client.ts"
+electronClient({
+ disableCache: true,
+});
+```
diff --git a/knip.jsonc b/knip.jsonc
index 9e47a6f94e..5bccffd9ff 100644
--- a/knip.jsonc
+++ b/knip.jsonc
@@ -81,6 +81,16 @@
"react-native"
]
},
+ "packages/electron": {
+ "ignoreDependencies": [
+ // loading of optional peers
+ "conf",
+
+ // implicit dependencies
+ "electron"
+ ],
+ "project": ["src/**/*.ts", "test/**/*.ts"]
+ },
"packages/stripe": {
"ignoreDependencies": [
// implicit dependencies
diff --git a/packages/better-auth/src/cookies/cookie-utils.ts b/packages/better-auth/src/cookies/cookie-utils.ts
index 96ada13fda..47bf7fe18a 100644
--- a/packages/better-auth/src/cookies/cookie-utils.ts
+++ b/packages/better-auth/src/cookies/cookie-utils.ts
@@ -1,4 +1,4 @@
-interface CookieAttributes {
+export interface CookieAttributes {
value: string;
"max-age"?: number | undefined;
expires?: Date | undefined;
diff --git a/packages/better-auth/src/utils/index.ts b/packages/better-auth/src/utils/index.ts
index ac4f86af76..52b639f0d8 100644
--- a/packages/better-auth/src/utils/index.ts
+++ b/packages/better-auth/src/utils/index.ts
@@ -2,3 +2,4 @@ export * from "../oauth2/state";
export type { StateData } from "../state";
export { generateGenericState, parseGenericState } from "../state";
export * from "./hide-metadata";
+export * from "./url";
diff --git a/packages/electron/README.md b/packages/electron/README.md
new file mode 100644
index 0000000000..b4d5991f98
--- /dev/null
+++ b/packages/electron/README.md
@@ -0,0 +1,14 @@
+# Better Auth Electron Plugin
+
+This plugin integrates Better Auth with Electron, allowing you to easily add
+authentication to your Electron applications.
+
+- **Main Better Auth Installation:** [Installation Guide][]
+- **Electron Integration Guide:** [Electron Integration Guide][]
+
+## License
+
+MIT
+
+[electron integration guide]: https://www.better-auth.com/docs/integrations/electron
+[installation guide]: https://www.better-auth.com/docs/installation
diff --git a/packages/electron/package.json b/packages/electron/package.json
new file mode 100644
index 0000000000..39c5c6b43f
--- /dev/null
+++ b/packages/electron/package.json
@@ -0,0 +1,104 @@
+{
+ "name": "@better-auth/electron",
+ "version": "1.5.0-beta.1",
+ "type": "module",
+ "description": "Better Auth integration for Electron applications.",
+ "main": "dist/index.mjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.mts",
+ "publishConfig": {
+ "access": "public"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/better-auth/better-auth",
+ "directory": "packages/electron"
+ },
+ "homepage": "https://www.better-auth.com/docs/integrations/electron",
+ "keywords": [
+ "electron",
+ "auth",
+ "better-auth",
+ "typescript"
+ ],
+ "scripts": {
+ "test": "vitest",
+ "coverage": "vitest run --coverage --coverage.provider=istanbul",
+ "lint:package": "publint run --strict",
+ "lint:types": "attw --profile esm-only --pack .",
+ "build": "tsdown",
+ "dev": "tsdown --watch",
+ "typecheck": "tsc --project tsconfig.json"
+ },
+ "exports": {
+ ".": {
+ "dev-source": "./src/index.ts",
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "./client": {
+ "dev-source": "./src/client.ts",
+ "types": "./dist/client.d.mts",
+ "default": "./dist/client.mjs"
+ },
+ "./proxy": {
+ "dev-source": "./src/proxy.ts",
+ "types": "./dist/proxy.d.mts",
+ "default": "./dist/proxy.mjs"
+ },
+ "./storage": {
+ "dev-source": "./src/storage.ts",
+ "types": "./dist/storage.d.mts",
+ "default": "./dist/storage.mjs"
+ }
+ },
+ "typesVersions": {
+ "*": {
+ "*": [
+ "./dist/index.d.mts"
+ ],
+ "client": [
+ "./dist/client.d.mts"
+ ],
+ "proxy": [
+ "./dist/proxy.d.mts"
+ ],
+ "storage": [
+ "./dist/storage.d.mts"
+ ]
+ }
+ },
+ "peerDependenciesMeta": {
+ "electron": {
+ "optional": true
+ },
+ "conf": {
+ "optional": true
+ }
+ },
+ "peerDependencies": {
+ "@better-auth/core": "workspace:*",
+ "@better-auth/utils": "catalog:",
+ "@better-fetch/fetch": "catalog:",
+ "better-auth": "workspace:*",
+ "better-call": "catalog:",
+ "conf": "^15.0.2"
+ },
+ "dependencies": {
+ "zod": "^4.3.5"
+ },
+ "devDependencies": {
+ "@better-auth/core": "workspace:*",
+ "@types/better-sqlite3": "^7.6.13",
+ "better-auth": "workspace:*",
+ "better-sqlite3": "^12.6.2",
+ "tsdown": "catalog:"
+ },
+ "engines": {
+ "node": ">=22.0.0"
+ },
+ "files": [
+ "dist"
+ ]
+}
diff --git a/packages/electron/src/authenticate.ts b/packages/electron/src/authenticate.ts
new file mode 100644
index 0000000000..338d631355
--- /dev/null
+++ b/packages/electron/src/authenticate.ts
@@ -0,0 +1,133 @@
+import type { BetterAuthClientOptions } from "@better-auth/core";
+import { BetterAuthError } from "@better-auth/core/error";
+import { base64Url } from "@better-auth/utils/base64";
+import { createHash } from "@better-auth/utils/hash";
+import type { BetterFetch } from "@better-fetch/fetch";
+import { APIError, getBaseURL } from "better-auth";
+import { signInSocial } from "better-auth/api";
+import { generateRandomString } from "better-auth/crypto";
+import { shell } from "electron";
+import * as z from "zod";
+import type { ElectronClientOptions } from "./types/client";
+import { isProcessType } from "./utils";
+
+export const kCodeVerifier = Symbol.for("better-auth:code_verifier");
+export const kState = Symbol.for("better-auth:state");
+
+const requestAuthOptionsSchema = (() => {
+ const { provider, idToken, loginHint, ...signInSocialBody } =
+ signInSocial().options.body.shape;
+
+ return z.object({
+ ...signInSocialBody,
+ provider: z.string().nonempty().optional(),
+ });
+})();
+export type ElectronRequestAuthOptions = z.infer<
+ typeof requestAuthOptionsSchema
+>;
+
+/**
+ * Opens the system browser to request user authentication.
+ */
+export async function requestAuth(
+ clientOptions: BetterAuthClientOptions | undefined,
+ options: ElectronClientOptions,
+ cfg?: ElectronRequestAuthOptions | undefined,
+) {
+ if (!isProcessType("browser")) {
+ throw new BetterAuthError(
+ "`requestAuth` can only be called in the main process",
+ );
+ }
+ const { randomBytes } = await import("node:crypto");
+
+ const state = generateRandomString(16, "A-Z", "a-z", "0-9");
+
+ const codeVerifier = base64Url.encode(randomBytes(32));
+ const codeChallenge = base64Url.encode(
+ await createHash("SHA-256").digest(codeVerifier),
+ );
+
+ (globalThis as any)[kCodeVerifier] = codeVerifier;
+ (globalThis as any)[kState] = state;
+
+ let url: URL | null = null;
+ if (cfg?.provider) {
+ const baseURL = getBaseURL(
+ clientOptions?.baseURL,
+ clientOptions?.basePath,
+ undefined,
+ true,
+ );
+
+ if (!baseURL) {
+ console.log("No base URL found in client options");
+ throw APIError.from("INTERNAL_SERVER_ERROR", {
+ code: "NO_BASE_URL",
+ message: "Base URL is required to use provider-based sign-in.",
+ });
+ }
+ url = new URL(`${baseURL}/electron/init-oauth-proxy`);
+ for (const [key, value] of Object.entries(cfg)) {
+ url.searchParams.set(
+ key,
+ typeof value === "string" ? value : JSON.stringify(value),
+ );
+ }
+ } else {
+ url = new URL(options.signInURL);
+ }
+ url.searchParams.set("client_id", options.clientID || "electron");
+ url.searchParams.set("code_challenge", codeChallenge);
+ url.searchParams.set("code_challenge_method", "S256");
+ url.searchParams.set("state", state);
+
+ if (url === null) {
+ throw new Error("Failed to construct sign-in URL.");
+ }
+
+ await shell.openExternal(url.toString(), {
+ activate: true,
+ });
+}
+
+/**
+ * Exchanges the authorization code for a session.
+ */
+export async function authenticate(
+ $fetch: BetterFetch,
+ options: ElectronClientOptions,
+ body: {
+ token: string;
+ },
+ getWindow: () => Electron.BrowserWindow | null | undefined,
+) {
+ const codeVerifier = (globalThis as any)[kCodeVerifier];
+ const state = (globalThis as any)[kState];
+ (globalThis as any)[kCodeVerifier] = undefined;
+ (globalThis as any)[kState] = undefined;
+
+ if (!codeVerifier) {
+ throw new Error("Code verifier not found.");
+ }
+ if (!state) {
+ throw new Error("State not found.");
+ }
+
+ await $fetch("/electron/token", {
+ method: "POST",
+ body: {
+ ...body,
+ state,
+ code_verifier: codeVerifier,
+ },
+ onSuccess: (ctx) => {
+ getWindow()?.webContents.send(
+ `${options.channelPrefix || "better-auth"}:authenticated`,
+ ctx.data.user,
+ );
+ },
+ throw: true,
+ });
+}
diff --git a/packages/electron/src/bridges.ts b/packages/electron/src/bridges.ts
new file mode 100644
index 0000000000..91489fbc2e
--- /dev/null
+++ b/packages/electron/src/bridges.ts
@@ -0,0 +1,137 @@
+import type { BetterAuthClientOptions, ClientStore } from "@better-auth/core";
+import { BetterAuthError } from "@better-auth/core/error";
+import type { BetterFetch, BetterFetchError } from "@better-fetch/fetch";
+import type { User } from "better-auth";
+import electron from "electron";
+import type { ElectronRequestAuthOptions } from "./authenticate";
+import { requestAuth } from "./authenticate";
+import type { ElectronClientOptions } from "./client";
+
+const { ipcRenderer, ipcMain, contextBridge, webContents } = electron;
+
+export function getChannelPrefixWithDelimiter(ns: string = "better-auth") {
+ return ns.length > 0 ? ns + ":" : ns;
+}
+
+function listenerFactory(
+ channel: string,
+ listener: (
+ event: Electron.IpcRendererEvent,
+ ...args: any[]
+ ) => void | Promise,
+) {
+ ipcRenderer.on(channel, listener);
+ return () => {
+ ipcRenderer.off(channel, listener);
+ };
+}
+
+/**
+ * Exposes IPC bridges to the renderer process.
+ */
+export function exposeBridges(opts: ElectronClientOptions) {
+ if (!process.contextIsolated) {
+ throw new BetterAuthError(
+ "Context isolation must be enabled to use IPC bridges securely.",
+ );
+ }
+
+ const prefix = getChannelPrefixWithDelimiter(opts.channelPrefix);
+ const bridges = {
+ getUser: async () => {
+ return (await ipcRenderer.invoke(`${prefix}getUser`)) as User &
+ Record;
+ },
+ requestAuth: async (options?: ElectronRequestAuthOptions) => {
+ await ipcRenderer.invoke(`${prefix}requestAuth`, options);
+ },
+ signOut: async () => {
+ await ipcRenderer.invoke(`${prefix}signOut`);
+ },
+ onAuthenticated: (
+ callback: (user: User & Record) => unknown,
+ ) => {
+ const channel = `${prefix}authenticated`;
+ return listenerFactory(channel, async (_evt, user) => {
+ await callback(user);
+ });
+ },
+ onUserUpdated: (
+ callback: (user: (User & Record) | null) => unknown,
+ ) => {
+ const channel = `${prefix}user-updated`;
+ return listenerFactory(channel, async (_evt, user) => {
+ await callback(user);
+ });
+ },
+ onAuthError: (
+ callback: (context: BetterFetchError & { path: string }) => unknown,
+ ) => {
+ const channel = `${prefix}error`;
+ return listenerFactory(channel, async (_evt, context) => {
+ await callback(context);
+ });
+ },
+ };
+
+ for (const [key, value] of Object.entries(bridges)) {
+ contextBridge.exposeInMainWorld(key, value);
+ }
+
+ return {} as {
+ $InferBridges: typeof bridges;
+ };
+}
+
+/**
+ * Sets up IPC bridges in the main process.
+ */
+export function setupBridges(
+ ctx: {
+ $fetch: BetterFetch;
+ $store: ClientStore | null;
+ getCookie: () => string;
+ },
+ opts: ElectronClientOptions,
+ clientOptions: BetterAuthClientOptions | undefined,
+) {
+ const prefix = getChannelPrefixWithDelimiter(opts.channelPrefix);
+
+ ctx.$store?.atoms.session?.subscribe((state) => {
+ if (state.isPending === true) return;
+
+ webContents
+ .getFocusedWebContents()
+ ?.send(`${prefix}user-updated`, state?.data?.user ?? null);
+ });
+
+ ipcMain.handle(`${prefix}getUser`, async () => {
+ const result = await ctx.$fetch<{ user: User & Record }>(
+ "/get-session",
+ {
+ method: "GET",
+ headers: {
+ cookie: ctx.getCookie(),
+ "content-type": "application/json",
+ },
+ },
+ );
+
+ return result.data?.user ?? null;
+ });
+ ipcMain.handle(
+ `${prefix}requestAuth`,
+ (_evt, options?: ElectronRequestAuthOptions | undefined) =>
+ requestAuth(clientOptions, opts, options),
+ );
+ ipcMain.handle(`${prefix}signOut`, async () => {
+ await ctx.$fetch("/sign-out", {
+ method: "POST",
+ body: "{}",
+ headers: {
+ cookie: ctx.getCookie(),
+ "content-type": "application/json",
+ },
+ });
+ });
+}
diff --git a/packages/electron/src/client.ts b/packages/electron/src/client.ts
new file mode 100644
index 0000000000..8b1573219c
--- /dev/null
+++ b/packages/electron/src/client.ts
@@ -0,0 +1,208 @@
+import { Buffer } from "node:buffer";
+import { base64 } from "@better-auth/utils/base64";
+import type { BetterAuthClientPlugin, ClientStore } from "better-auth";
+import { isDevelopment, isTest } from "better-auth";
+import electron from "electron";
+import type { ElectronRequestAuthOptions } from "./authenticate";
+import { requestAuth } from "./authenticate";
+import type { exposeBridges } from "./bridges";
+import { getChannelPrefixWithDelimiter } from "./bridges";
+import {
+ getCookie,
+ getSetCookie,
+ hasBetterAuthCookies,
+ hasSessionCookieChanged,
+} from "./cookies";
+import { setupMain, setupRenderer } from "./setup";
+import type { ElectronClientOptions, Storage } from "./types/client";
+import { isProcessType, parseProtocolScheme } from "./utils";
+
+const { app, safeStorage, webContents } = electron;
+
+const storageAdapter = (storage: Storage) => {
+ return {
+ ...storage,
+ getDecrypted: (name: string) => {
+ const item = storage.getItem(name);
+ if (!item || typeof item !== "string") return null;
+ return safeStorage.decryptString(Buffer.from(base64.decode(item)));
+ },
+ setEncrypted: (name: string, value: string) => {
+ return storage.setItem(
+ name,
+ base64.encode(safeStorage.encryptString(value)),
+ );
+ },
+ };
+};
+
+export const electronClient = (options: ElectronClientOptions) => {
+ const opts = {
+ storagePrefix: "better-auth",
+ cookiePrefix: "better-auth",
+ channelPrefix: "better-auth",
+ callbackPath: "/auth/callback",
+ ...options,
+ };
+
+ const { scheme } = parseProtocolScheme(opts.protocol);
+
+ let store: ClientStore | null = null;
+ const cookieName = `${opts.storagePrefix}.cookie`;
+ const localCacheName = `${opts.storagePrefix}.local_cache`;
+ const { getDecrypted, setEncrypted } = storageAdapter(opts.storage);
+
+ if (
+ (isDevelopment() || isTest()) &&
+ // At least 1 dot, no leading or trailing dot, no consecutive dots
+ /^(?!\.)(?!.*\.\.)(?!.*\.$)[^.]+\.[^.]+$/.test(scheme)
+ ) {
+ console.warn(
+ "The provided scheme does not follow the reverse domain name notation. For example: `app.example.com` -> `com.example.app`.",
+ );
+ }
+
+ return {
+ id: "electron",
+ fetchPlugins: [
+ {
+ id: "electron",
+ name: "Electron",
+ async init(url, options) {
+ if (!isProcessType("browser")) {
+ throw new Error(
+ "Requests must be made from the Electron main process",
+ );
+ }
+ const storedCookie = getDecrypted(cookieName);
+ const cookie = getCookie(storedCookie || "{}");
+ options ||= {};
+ options.credentials = "omit";
+ options.headers = {
+ ...options.headers,
+ cookie,
+ "user-agent": app.userAgentFallback,
+ "electron-origin": `${scheme}:/`,
+ "x-skip-oauth-proxy": "true",
+ };
+
+ if (url.endsWith("/sign-out")) {
+ setEncrypted(cookieName, "{}");
+ store?.atoms.session?.set({
+ ...store.atoms.session.get(),
+ data: null,
+ error: null,
+ isPending: false,
+ });
+ setEncrypted(localCacheName, "{}");
+ }
+
+ return {
+ url,
+ options,
+ };
+ },
+ hooks: {
+ onSuccess: async (context) => {
+ const setCookie = context.response.headers.get("set-cookie");
+
+ if (setCookie) {
+ if (hasBetterAuthCookies(setCookie, opts.cookiePrefix)) {
+ const prevCookie = getDecrypted(cookieName);
+ const toSetCookie = getSetCookie(
+ setCookie || "{}",
+ prevCookie ?? undefined,
+ );
+
+ if (hasSessionCookieChanged(prevCookie, toSetCookie)) {
+ setEncrypted(cookieName, toSetCookie);
+ store?.notify("$sessionSignal");
+ } else {
+ setEncrypted(cookieName, toSetCookie);
+ }
+ }
+ }
+
+ if (
+ context.request.url.toString().includes("/get-session") &&
+ !opts.disableCache
+ ) {
+ const data = context.data;
+ setEncrypted(localCacheName, JSON.stringify(data));
+ }
+ },
+ onError: async (context) => {
+ webContents
+ .getFocusedWebContents()
+ ?.send(
+ `${getChannelPrefixWithDelimiter(opts.channelPrefix)}error`,
+ {
+ ...context.error,
+ path: context.request.url,
+ },
+ );
+ },
+ },
+ },
+ ],
+ getActions: ($fetch, $store, clientOptions) => {
+ store = $store;
+
+ const getCookieFn = () => {
+ const cookie = getDecrypted(cookieName);
+ return getCookie(cookie || "{}");
+ };
+
+ return {
+ /**
+ * Gets the stored cookie.
+ *
+ * You can use this to get the cookie stored in
+ * the device and use it in your fetch requests.
+ *
+ * @example
+ * ```ts
+ * const cookie = client.getCookie();
+ * await fetch("https://api.example.com", {
+ * headers: {
+ * cookie,
+ * },
+ * });
+ * ```
+ */
+ getCookie: getCookieFn,
+ /**
+ * Initiates the authentication process.
+ * Opens the system's default browser for user authentication.
+ */
+ requestAuth: (options?: ElectronRequestAuthOptions | undefined) =>
+ requestAuth(clientOptions, opts, options),
+ /**
+ * Sets up the renderer process.
+ *
+ * - Exposes IPC bridges to the renderer process.
+ */
+ setupRenderer: () => setupRenderer(opts),
+ /**
+ * Sets up the main process.
+ *
+ * - Registers custom protocol scheme.
+ * - Registers IPC bridge handlers.
+ * - Handles content security policy if needed.
+ */
+ setupMain: (cfg?: {
+ csp?: boolean | undefined;
+ bridges?: boolean | undefined;
+ scheme?: boolean | undefined;
+ getWindow?: () => electron.BrowserWindow | null | undefined;
+ }) => setupMain($fetch, store, getCookieFn, opts, clientOptions, cfg),
+ $Infer: {} as {
+ Bridges: ReturnType["$InferBridges"];
+ },
+ };
+ },
+ } satisfies BetterAuthClientPlugin;
+};
+
+export { handleDeepLink } from "./setup";
+export * from "./types/client";
diff --git a/packages/electron/src/cookies.ts b/packages/electron/src/cookies.ts
new file mode 100644
index 0000000000..3a53c4df7e
--- /dev/null
+++ b/packages/electron/src/cookies.ts
@@ -0,0 +1,148 @@
+import { parseSetCookieHeader } from "better-auth/cookies";
+
+interface StoredCookie {
+ value: string;
+ expires: string | null;
+}
+
+export function getSetCookie(header: string, prevCookie?: string | undefined) {
+ const parsed = parseSetCookieHeader(header);
+ let toSetCookie: Record = {};
+ parsed.forEach((cookie, key) => {
+ const expiresAt = cookie["expires"];
+ const maxAge = cookie["max-age"];
+ const expires = maxAge
+ ? new Date(Date.now() + Number(maxAge) * 1000)
+ : expiresAt
+ ? new Date(String(expiresAt))
+ : null;
+ toSetCookie[key] = {
+ value: cookie["value"],
+ expires: expires ? expires.toISOString() : null,
+ };
+ });
+ if (prevCookie) {
+ try {
+ const prevCookieParsed = JSON.parse(prevCookie);
+ toSetCookie = {
+ ...prevCookieParsed,
+ ...toSetCookie,
+ };
+ } catch {
+ //
+ }
+ }
+ return JSON.stringify(toSetCookie);
+}
+
+export function getCookie(cookie: string) {
+ let parsed = {} as Record;
+ try {
+ parsed = JSON.parse(cookie) as Record;
+ } catch (_e) {}
+ const toSend = Object.entries(parsed).reduce((acc, [key, value]) => {
+ if (value.expires && new Date(value.expires) < new Date()) {
+ return acc;
+ }
+ return `${acc}; ${key}=${value.value}`;
+ }, "");
+ return toSend;
+}
+
+/**
+ * Compare if session cookies have actually changed by comparing their values.
+ * Ignores expiry timestamps that naturally change on each request.
+ *
+ * @param prevCookie - Previous cookie JSON string
+ * @param newCookie - New cookie JSON string
+ * @returns true if session cookies have changed, false otherwise
+ */
+export function hasSessionCookieChanged(
+ prevCookie: string | null,
+ newCookie: string,
+): boolean {
+ if (!prevCookie) return true;
+
+ try {
+ const prev = JSON.parse(prevCookie) as Record;
+ const next = JSON.parse(newCookie) as Record;
+
+ // Get all session-related cookie keys (session_token, session_data)
+ const sessionKeys = new Set();
+ Object.keys(prev).forEach((key) => {
+ if (key.includes("session_token") || key.includes("session_data")) {
+ sessionKeys.add(key);
+ }
+ });
+ Object.keys(next).forEach((key) => {
+ if (key.includes("session_token") || key.includes("session_data")) {
+ sessionKeys.add(key);
+ }
+ });
+
+ // Compare the values of session cookies (ignore expires timestamps)
+ for (const key of sessionKeys) {
+ const prevValue = prev[key]?.value;
+ const nextValue = next[key]?.value;
+ if (prevValue !== nextValue) {
+ return true;
+ }
+ }
+
+ return false;
+ } catch {
+ // If parsing fails, assume cookie changed
+ return true;
+ }
+}
+
+/**
+ * Check if the Set-Cookie header contains better-auth cookies.
+ * This prevents infinite refetching when non-better-auth cookies (like third-party cookies) change.
+ *
+ * Supports multiple cookie naming patterns:
+ * - Default: "better-auth.session_token", "better-auth-passkey", "__Secure-better-auth.session_token"
+ * - Custom prefix: "myapp.session_token", "myapp-passkey", "__Secure-myapp.session_token"
+ * - Custom full names: "my_custom_session_token", "custom_session_data"
+ * - No prefix (cookiePrefix=""): matches any cookie with known suffixes
+ * - Multiple prefixes: ["better-auth", "my-app"] matches cookies starting with any of the prefixes
+ *
+ * @param setCookieHeader - The Set-Cookie header value
+ * @param cookiePrefix - The cookie prefix(es) to check for. Can be a string, array of strings, or empty string.
+ * @returns true if the header contains better-auth cookies, false otherwise
+ */
+export function hasBetterAuthCookies(
+ setCookieHeader: string,
+ cookiePrefix: string | string[],
+): boolean {
+ const cookies = parseSetCookieHeader(setCookieHeader);
+ const cookieSuffixes = ["session_token", "session_data"];
+ const prefixes = Array.isArray(cookiePrefix) ? cookiePrefix : [cookiePrefix];
+
+ // Check if any cookie is a better-auth cookie
+ for (const name of cookies.keys()) {
+ // Remove __Secure- prefix if present for comparison
+ const nameWithoutSecure = name.startsWith("__Secure-")
+ ? name.slice(9)
+ : name;
+
+ // Check against all provided prefixes
+ for (const prefix of prefixes) {
+ if (prefix) {
+ // When prefix is provided, check if cookie starts with the prefix
+ // This matches all better-auth cookies including session cookies, passkey cookies, etc.
+ if (nameWithoutSecure.startsWith(prefix)) {
+ return true;
+ }
+ } else {
+ // When prefix is empty, check for common better-auth cookie patterns
+ for (const suffix of cookieSuffixes) {
+ if (nameWithoutSecure.endsWith(suffix)) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
diff --git a/packages/electron/src/error-codes.ts b/packages/electron/src/error-codes.ts
new file mode 100644
index 0000000000..2ff3950789
--- /dev/null
+++ b/packages/electron/src/error-codes.ts
@@ -0,0 +1,10 @@
+import { defineErrorCodes } from "better-auth";
+
+export const ELECTRON_ERROR_CODES = defineErrorCodes({
+ INVALID_TOKEN: "Invalid or expired token.",
+ STATE_MISMATCH: "state mismatch",
+ MISSING_CODE_CHALLENGE: "missing code challenge",
+ INVALID_CODE_VERIFIER: "Invalid code verifier",
+ MISSING_STATE: "state is required",
+ MISSING_PKCE: "pkce is required",
+});
diff --git a/packages/electron/src/index.ts b/packages/electron/src/index.ts
new file mode 100644
index 0000000000..36e35a938f
--- /dev/null
+++ b/packages/electron/src/index.ts
@@ -0,0 +1,198 @@
+///
+
+import type { HookEndpointContext } from "@better-auth/core";
+import { createAuthMiddleware } from "@better-auth/core/api";
+import { APIError } from "@better-auth/core/error";
+import type { BetterAuthPlugin } from "better-auth";
+import { safeJSONParse } from "better-auth";
+import { generateRandomString } from "better-auth/crypto";
+import * as z from "zod";
+import { ELECTRON_ERROR_CODES } from "./error-codes";
+import { electronInitOAuthProxy, electronToken } from "./routes";
+import type { ElectronOptions } from "./types";
+
+declare module "@better-auth/core" {
+ interface BetterAuthPluginRegistry {
+ electron: {
+ creator: typeof electron;
+ };
+ }
+}
+
+export const electron = (options?: ElectronOptions | undefined) => {
+ const opts = {
+ codeExpiresIn: 300, // 5 minutes
+ redirectCookieExpiresIn: 120, // 2 minutes
+ cookiePrefix: "better-auth",
+ clientID: "electron",
+ ...(options || {}),
+ };
+
+ const hookMatcher = (ctx: HookEndpointContext) => {
+ return !!(
+ ctx.path?.startsWith("/sign-in") ||
+ ctx.path?.startsWith("/sign-up") ||
+ ctx.path?.startsWith("/callback") ||
+ ctx.path?.startsWith("/oauth2/callback") ||
+ ctx.path?.startsWith("/magic-link/verify") ||
+ ctx.path?.startsWith("/email-otp/verify-email") ||
+ ctx.path?.startsWith("/verify-email") ||
+ ctx.path?.startsWith("/one-tap/callback") ||
+ ctx.path?.startsWith("/passkey/verify-authentication") ||
+ ctx.path?.startsWith("/phone-number/verify")
+ );
+ };
+
+ return {
+ id: "electron",
+ async onRequest(request, _ctx) {
+ if (opts.disableOriginOverride || request.headers.get("origin")) {
+ return;
+ }
+
+ const electronOrigin = request.headers.get("electron-origin");
+ if (!electronOrigin) {
+ return;
+ }
+
+ const req = request.clone();
+ req.headers.set("origin", electronOrigin);
+ return {
+ request: req,
+ };
+ },
+ hooks: {
+ after: [
+ {
+ matcher: (ctx) => !hookMatcher(ctx),
+ handler: createAuthMiddleware(async (ctx) => {
+ const transferCookie = await ctx.getSignedCookie(
+ `${opts.cookiePrefix}.transfer_token`,
+ ctx.context.secret,
+ );
+ if (!ctx.context.newSession?.session || !transferCookie) {
+ return;
+ }
+
+ const cookie = ctx.context.createAuthCookie("transfer_token", {
+ maxAge: opts.codeExpiresIn,
+ });
+ // Refresh the transfer cookie to extend its validity
+ // Avoids expiration during multi-step auth flows on active usage
+ // Can still expire when no endpoint is hit within the valid period
+ await ctx.setSignedCookie(
+ cookie.name,
+ transferCookie,
+ ctx.context.secret,
+ cookie.attributes,
+ );
+ }),
+ },
+ {
+ matcher: hookMatcher,
+ handler: createAuthMiddleware(async (ctx) => {
+ const querySchema = z.object({
+ client_id: z.string(),
+ code_challenge: z.string().nonempty(),
+ code_challenge_method: z.string().optional().default("plain"),
+ state: z.string().nonempty(),
+ });
+ const cookie = ctx.context.createAuthCookie("transfer_token", {
+ maxAge: opts.codeExpiresIn,
+ });
+ if (
+ ctx.query?.client_id === opts.clientID &&
+ (ctx.path.startsWith("/sign-in") ||
+ ctx.path.startsWith("/sign-up"))
+ ) {
+ const query = querySchema.safeParse(ctx.query);
+ if (query.success) {
+ await ctx.setSignedCookie(
+ cookie.name,
+ JSON.stringify(query.data),
+ ctx.context.secret,
+ cookie.attributes,
+ );
+ }
+ }
+
+ if (!ctx.context.newSession?.session) {
+ return;
+ }
+
+ const transferCookie = await ctx.getSignedCookie(
+ cookie.name,
+ ctx.context.secret,
+ );
+ ctx.setCookie(cookie.name, "", {
+ ...cookie.attributes,
+ maxAge: 0,
+ });
+ let transferPayload: z.infer | null = null;
+ if (!!transferCookie) {
+ transferPayload = safeJSONParse(transferCookie);
+ } else {
+ const query = querySchema.safeParse(ctx.query);
+ if (query.success) {
+ transferPayload = query.data;
+ }
+ }
+ if (!transferPayload) {
+ return;
+ }
+
+ const { client_id, code_challenge, code_challenge_method, state } =
+ transferPayload;
+ if (client_id !== opts.clientID) {
+ return;
+ }
+ if (!state) {
+ throw APIError.from(
+ "BAD_REQUEST",
+ ELECTRON_ERROR_CODES.MISSING_STATE,
+ );
+ }
+ if (!code_challenge) {
+ throw APIError.from(
+ "BAD_REQUEST",
+ ELECTRON_ERROR_CODES.MISSING_PKCE,
+ );
+ }
+
+ const redirectCookieName = `${opts.cookiePrefix}.${opts.clientID}`;
+
+ const identifier = generateRandomString(32, "a-z", "A-Z", "0-9");
+ const codeExpiresInMs = opts.codeExpiresIn * 1000;
+ const expiresAt = new Date(Date.now() + codeExpiresInMs);
+ await ctx.context.internalAdapter.createVerificationValue({
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: ctx.context.newSession.user.id,
+ codeChallenge: code_challenge,
+ codeChallengeMethod: code_challenge_method.toLowerCase(),
+ state,
+ }),
+ expiresAt,
+ });
+
+ ctx.setCookie(redirectCookieName, identifier, {
+ ...ctx.context.authCookies.sessionToken.attributes,
+ maxAge: opts.redirectCookieExpiresIn,
+ httpOnly: false,
+ });
+
+ return ctx;
+ }),
+ },
+ ],
+ },
+ endpoints: {
+ electronToken: electronToken(opts),
+ electronInitOAuthProxy: electronInitOAuthProxy(opts),
+ },
+ options: opts,
+ $ERROR_CODES: ELECTRON_ERROR_CODES,
+ } satisfies BetterAuthPlugin;
+};
+
+export type * from "./types";
diff --git a/packages/electron/src/proxy.ts b/packages/electron/src/proxy.ts
new file mode 100644
index 0000000000..5b4586cba2
--- /dev/null
+++ b/packages/electron/src/proxy.ts
@@ -0,0 +1,75 @@
+import type { BetterAuthClientPlugin } from "@better-auth/core";
+import { parseCookies } from "better-auth/cookies";
+import type { ElectronProxyClientOptions } from "./types/client";
+import { parseProtocolScheme } from "./utils";
+
+export const electronProxyClient = (options: ElectronProxyClientOptions) => {
+ const opts = {
+ clientID: "electron",
+ cookiePrefix: "better-auth",
+ callbackPath: "/auth/callback",
+ ...options,
+ };
+ const redirectCookieName = `${opts.cookiePrefix}.${opts.clientID}`;
+ const { scheme } = parseProtocolScheme(opts.protocol);
+
+ return {
+ id: "electron-proxy",
+ getActions: () => {
+ return {
+ /**
+ * Ensures redirecting to the Electron app.
+ *
+ * Polls for a cookie set by the server to indicate that an authorization code is available.
+ *
+ * @returns The interval ID which can be used to clear the polling.
+ */
+ ensureElectronRedirect: (
+ cfg?:
+ | {
+ /**
+ * @default 10_000
+ */
+ timeout?: number | undefined;
+ /**
+ * @default 100
+ */
+ interval?: number | undefined;
+ }
+ | undefined,
+ ) => {
+ const timeout = cfg?.timeout || 10_000;
+ const interval = cfg?.interval || 100;
+
+ const handleRedirect = () => {
+ if (typeof document === "undefined") {
+ return false;
+ }
+ const authorizationCode = parseCookies(document.cookie).get(
+ redirectCookieName,
+ );
+ if (!authorizationCode) {
+ return false;
+ }
+ document.cookie = `${redirectCookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;
+
+ window.location.replace(
+ `${scheme}:/${opts.callbackPath}#token=${authorizationCode}`,
+ );
+ return true;
+ };
+
+ const start = Date.now();
+ const id = setInterval(() => {
+ const success = handleRedirect();
+ if (success || Date.now() - start > timeout) {
+ clearInterval(id);
+ }
+ }, interval);
+
+ return id;
+ },
+ };
+ },
+ } satisfies BetterAuthClientPlugin;
+};
diff --git a/packages/electron/src/routes.ts b/packages/electron/src/routes.ts
new file mode 100644
index 0000000000..2dffbc8a2d
--- /dev/null
+++ b/packages/electron/src/routes.ts
@@ -0,0 +1,191 @@
+import { Buffer } from "node:buffer";
+import { timingSafeEqual } from "node:crypto";
+import { APIError, BASE_ERROR_CODES } from "@better-auth/core/error";
+import { SocialProviderListEnum } from "@better-auth/core/social-providers";
+import { safeJSONParse } from "@better-auth/core/utils/json";
+import { base64Url } from "@better-auth/utils/base64";
+import { createHash } from "@better-auth/utils/hash";
+import { betterFetch } from "@better-fetch/fetch";
+import { createAuthEndpoint } from "better-auth/api";
+import { setSessionCookie } from "better-auth/cookies";
+import type { User } from "better-auth/db";
+import { parseUserOutput } from "better-auth/db";
+import * as z from "zod";
+import { ELECTRON_ERROR_CODES } from "./error-codes";
+import type { ElectronOptions } from "./types";
+
+const electronTokenBodySchema = z.object({
+ token: z.string().nonempty(),
+ state: z.string().nonempty(),
+ code_verifier: z.string().nonempty(),
+});
+
+export const electronToken = (opts: ElectronOptions) =>
+ createAuthEndpoint(
+ "/electron/token",
+ {
+ method: "POST",
+ body: electronTokenBodySchema,
+ metadata: {
+ scope: "http",
+ },
+ },
+ async (ctx) => {
+ const token = await ctx.context.internalAdapter.findVerificationValue(
+ `electron:${ctx.body.token}`,
+ );
+ if (!token || token.expiresAt < new Date()) {
+ throw APIError.from("NOT_FOUND", ELECTRON_ERROR_CODES.INVALID_TOKEN);
+ }
+
+ const tokenRecord = safeJSONParse>(token.value);
+ if (!tokenRecord) {
+ throw APIError.from(
+ "INTERNAL_SERVER_ERROR",
+ ELECTRON_ERROR_CODES.INVALID_TOKEN,
+ );
+ }
+
+ if (tokenRecord.state !== ctx.body.state) {
+ throw APIError.from("BAD_REQUEST", ELECTRON_ERROR_CODES.STATE_MISMATCH);
+ }
+
+ if (!tokenRecord.codeChallenge) {
+ throw APIError.from(
+ "BAD_REQUEST",
+ ELECTRON_ERROR_CODES.MISSING_CODE_CHALLENGE,
+ );
+ }
+ if (tokenRecord.codeChallengeMethod === "s256") {
+ const codeChallenge = Buffer.from(
+ base64Url.decode(tokenRecord.codeChallenge),
+ );
+ const codeVerifier = Buffer.from(
+ await createHash("SHA-256").digest(ctx.body.code_verifier),
+ );
+
+ if (
+ codeChallenge.length !== codeVerifier.length ||
+ !timingSafeEqual(codeChallenge, codeVerifier)
+ ) {
+ throw APIError.from(
+ "BAD_REQUEST",
+ ELECTRON_ERROR_CODES.INVALID_CODE_VERIFIER,
+ );
+ }
+ } else {
+ if (tokenRecord.codeChallenge !== ctx.body.code_verifier) {
+ throw APIError.from(
+ "BAD_REQUEST",
+ ELECTRON_ERROR_CODES.INVALID_CODE_VERIFIER,
+ );
+ }
+ }
+ await ctx.context.internalAdapter.deleteVerificationValue(token.id);
+
+ const user = await ctx.context.internalAdapter.findUserById(
+ tokenRecord.userId,
+ );
+ if (!user) {
+ throw APIError.from(
+ "INTERNAL_SERVER_ERROR",
+ BASE_ERROR_CODES.USER_NOT_FOUND,
+ );
+ }
+
+ const session = await ctx.context.internalAdapter.createSession(user.id);
+ if (!session) {
+ throw APIError.from(
+ "INTERNAL_SERVER_ERROR",
+ BASE_ERROR_CODES.FAILED_TO_CREATE_SESSION,
+ );
+ }
+
+ await setSessionCookie(ctx, {
+ session,
+ user,
+ });
+
+ return ctx.json({
+ token: session.token,
+ user: parseUserOutput(ctx.context.options, user) as User &
+ Record,
+ });
+ },
+ );
+
+const electronInitOAuthProxyQuerySchema = z.object({
+ provider: z.string().nonempty(),
+ state: z.string(),
+ code_challenge: z.string(),
+ code_challenge_method: z.string().optional(),
+});
+
+export const electronInitOAuthProxy = (opts: ElectronOptions) =>
+ createAuthEndpoint(
+ "/electron/init-oauth-proxy",
+ {
+ method: "GET",
+ query: electronInitOAuthProxyQuerySchema,
+ metadata: {
+ scope: "http",
+ },
+ },
+ async (ctx) => {
+ const isSocialProvider = SocialProviderListEnum.safeParse(
+ ctx.query.provider,
+ );
+ if (!isSocialProvider && !ctx.context.getPlugin("generic-oauth")) {
+ throw APIError.from("BAD_REQUEST", BASE_ERROR_CODES.PROVIDER_NOT_FOUND);
+ }
+
+ const headers = new Headers(ctx.request?.headers);
+ headers.set("origin", new URL(ctx.context.baseURL).origin);
+ let setCookie: string | null = null;
+ const searchParams = new URLSearchParams();
+ searchParams.set("client_id", opts.clientID || "electron");
+ searchParams.set("code_challenge", ctx.query.code_challenge);
+ searchParams.set(
+ "code_challenge_method",
+ ctx.query.code_challenge_method || "plain",
+ );
+ searchParams.set("state", ctx.query.state);
+ const res = await betterFetch<{
+ url: string | undefined;
+ redirect: boolean;
+ user?: User & Record;
+ token?: string;
+ }>(
+ `${isSocialProvider ? "/sign-in/social" : "/sign-in/oauth2"}?${searchParams.toString()}`,
+ {
+ baseURL: ctx.context.baseURL,
+ method: "POST",
+ body: {
+ provider: ctx.query.provider,
+ disableRedirect: true,
+ },
+ onResponse: (ctx) => {
+ const headers = ctx.response.headers;
+ setCookie = headers.get("set-cookie") ?? null;
+ },
+ headers,
+ },
+ );
+
+ if (res.error) {
+ throw new APIError("INTERNAL_SERVER_ERROR", {
+ message: res.error.message || "An unknown error occurred.",
+ });
+ }
+
+ if (setCookie) {
+ ctx.setHeader("set-cookie", setCookie);
+ }
+ if (res.data.url) {
+ ctx.setHeader("Location", res.data.url);
+ ctx.setStatus(302);
+ return;
+ }
+ return ctx.json(res.data);
+ },
+ );
diff --git a/packages/electron/src/setup.ts b/packages/electron/src/setup.ts
new file mode 100644
index 0000000000..b339e1e90e
--- /dev/null
+++ b/packages/electron/src/setup.ts
@@ -0,0 +1,289 @@
+import { resolve } from "node:path";
+import type { BetterAuthClientOptions, ClientStore } from "@better-auth/core";
+import { BetterAuthError } from "@better-auth/core/error";
+import type { BetterFetch } from "@better-fetch/fetch";
+import electron from "electron";
+import { authenticate } from "./authenticate";
+import { exposeBridges, setupBridges } from "./bridges";
+import type { ElectronClientOptions } from "./client";
+import { isProcessType, parseProtocolScheme } from "./utils";
+
+const { app, session, protocol, BrowserWindow } = electron;
+
+export function withGetWindowFallback(
+ win?: (() => Electron.BrowserWindow | null | undefined) | undefined,
+) {
+ return (
+ win ??
+ (() => {
+ const allWindows = BrowserWindow.getAllWindows();
+ return allWindows.length > 0 ? allWindows[0] : null;
+ })
+ );
+}
+
+export function setupRenderer(opts: ElectronClientOptions) {
+ if (!isProcessType("renderer")) {
+ throw new BetterAuthError(
+ "setupRenderer can only be called in the renderer process.",
+ );
+ }
+ void exposeBridges(opts);
+}
+
+export type SetupMainConfig = {
+ getWindow?: () => electron.BrowserWindow | null | undefined;
+ csp?: boolean | undefined;
+ bridges?: boolean | undefined;
+ scheme?: boolean | undefined;
+};
+export function setupMain(
+ $fetch: BetterFetch,
+ $store: ClientStore | null,
+ getCookie: () => string,
+ opts: ElectronClientOptions,
+ clientOptions: BetterAuthClientOptions | undefined,
+ cfg?: SetupMainConfig | undefined,
+) {
+ if (!isProcessType("browser")) {
+ throw new BetterAuthError(
+ "setupMain can only be called in the main process.",
+ );
+ }
+
+ if (!cfg || cfg.csp === true) {
+ setupCSP(clientOptions);
+ }
+ if (!cfg || cfg.scheme === true) {
+ registerProtocolScheme($fetch, opts, withGetWindowFallback(cfg?.getWindow));
+ }
+ if (!cfg || cfg.bridges === true) {
+ setupBridges(
+ {
+ $fetch,
+ $store,
+ getCookie,
+ },
+ opts,
+ clientOptions,
+ );
+ }
+}
+
+/**
+ * Handles the deep link URL for authentication.
+ */
+export async function handleDeepLink({
+ $fetch,
+ options,
+ url,
+ getWindow,
+}: {
+ $fetch: BetterFetch;
+ options: ElectronClientOptions;
+ url: string;
+ getWindow?: SetupMainConfig["getWindow"] | undefined;
+}) {
+ if (!isProcessType("browser")) {
+ throw new BetterAuthError(
+ "`handleDeepLink` can only be called in the main process.",
+ );
+ }
+
+ let parsedURL: URL | null = null;
+ try {
+ parsedURL = new URL(url);
+ } catch {}
+ if (!parsedURL) {
+ return;
+ }
+
+ const { scheme } = parseProtocolScheme(options.protocol);
+
+ if (!url.startsWith(`${scheme}:/`)) {
+ return;
+ }
+ const { protocol, pathname, hostname, hash } = parsedURL;
+ if (protocol !== `${scheme}:`) {
+ return;
+ }
+
+ const path = "/" + hostname + pathname;
+
+ if (path !== (options.callbackPath || "/auth/callback")) {
+ return;
+ }
+
+ if (!hash.startsWith("#token=")) {
+ return;
+ }
+
+ const token = hash.substring("#token=".length);
+
+ await authenticate(
+ $fetch,
+ options,
+ {
+ token,
+ },
+ withGetWindowFallback(getWindow),
+ );
+}
+
+function registerProtocolScheme(
+ $fetch: BetterFetch,
+ options: ElectronClientOptions,
+ getWindow: () => electron.BrowserWindow | null | undefined,
+) {
+ const { scheme, privileges = {} } =
+ typeof options.protocol === "string"
+ ? {
+ scheme: options.protocol,
+ }
+ : options.protocol;
+
+ protocol.registerSchemesAsPrivileged([
+ {
+ scheme,
+ privileges: {
+ standard: false,
+ secure: true,
+ ...privileges,
+ },
+ },
+ ]);
+
+ let hasSetupProtocolClient = false;
+ if (process?.defaultApp) {
+ if (process.argv.length >= 2 && typeof process.argv[1] === "string") {
+ hasSetupProtocolClient = app.setAsDefaultProtocolClient(
+ scheme,
+ process.execPath,
+ [resolve(process.argv[1])],
+ );
+ }
+ } else {
+ hasSetupProtocolClient = app.setAsDefaultProtocolClient(scheme);
+ }
+
+ if (!hasSetupProtocolClient) {
+ console.error(
+ `Failed to register protocol ${scheme} as default protocol client.`,
+ );
+ }
+
+ const gotTheLock = app.requestSingleInstanceLock();
+
+ if (!gotTheLock) {
+ app.quit();
+ } else {
+ app.on("second-instance", async (_event, commandLine, _workingDir, url) => {
+ // Someone tried to run a second instance, we should focus our window.
+ const win = getWindow();
+ if (win) {
+ if (win.isMinimized()) win.restore();
+ win.focus();
+ }
+
+ if (!url) {
+ const maybeURL = commandLine.pop();
+ if (typeof maybeURL === "string" && maybeURL.trim() !== "") {
+ try {
+ url = new URL(maybeURL).toString();
+ } catch {
+ //
+ }
+ }
+ }
+
+ if (process?.platform !== "darwin" && typeof url === "string") {
+ await handleDeepLink({
+ $fetch,
+ options,
+ url,
+ getWindow,
+ });
+ }
+ });
+
+ app.on("open-url", async (_event, url) => {
+ if (process?.platform === "darwin") {
+ await handleDeepLink({
+ $fetch,
+ options,
+ url,
+ getWindow,
+ });
+ }
+ });
+
+ app.whenReady().then(async () => {
+ if (
+ process?.platform !== "darwin" &&
+ typeof process.argv[1] === "string"
+ ) {
+ await handleDeepLink({
+ $fetch,
+ options,
+ url: process.argv[1],
+ getWindow,
+ });
+ }
+ });
+ }
+}
+
+function setupCSP(clientOptions: BetterAuthClientOptions | undefined) {
+ app.whenReady().then(() => {
+ session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
+ const origin = new URL(clientOptions?.baseURL || "", "http://localhost")
+ .origin;
+ const cspKey = Object.keys(details.responseHeaders || {}).find(
+ (k) => k.toLowerCase() === "content-security-policy",
+ );
+ if (!cspKey) {
+ return callback({
+ responseHeaders: {
+ ...(details.responseHeaders || {}),
+ "content-security-policy": `connect-src 'self' ${origin}`,
+ },
+ });
+ }
+ const policy = details.responseHeaders?.[cspKey]?.toString() || "";
+ const csp = new Map();
+
+ for (let token of policy.split(";")) {
+ token = token.trim();
+
+ if (!token || !/^[\x00-\x7f]*$/.test(token)) continue;
+
+ const [rawDirectiveName, ...directiveValue] = token.split(/\s+/);
+ const directiveName = rawDirectiveName?.toLowerCase();
+ if (!directiveName) continue;
+
+ if (csp.has(directiveName)) continue;
+
+ csp.set(directiveName, directiveValue);
+ }
+
+ if (csp.has("connect-src")) {
+ const values = csp.get("connect-src") || [];
+ if (!values.includes(origin)) {
+ values.push(origin);
+ }
+ csp.set("connect-src", values);
+ } else {
+ csp.set("connect-src", ["'self'", origin]);
+ }
+
+ callback({
+ responseHeaders: {
+ ...details.responseHeaders,
+ "content-security-policy": Array.from(csp.entries())
+ .map(([k, v]) => `${k} ${v.join(" ")}`)
+ .join("; "),
+ },
+ });
+ });
+ });
+}
diff --git a/packages/electron/src/storage.ts b/packages/electron/src/storage.ts
new file mode 100644
index 0000000000..dcf9d28fa6
--- /dev/null
+++ b/packages/electron/src/storage.ts
@@ -0,0 +1,33 @@
+import type { Options as ConfOptions } from "conf";
+import Conf from "conf";
+import electron from "electron";
+import type { Storage } from "./client";
+
+const { app } = electron;
+
+export const storage = (
+ opts?: ConfOptions> | undefined,
+): Storage => {
+ if (!app) {
+ return {
+ getItem: () => null,
+ setItem: () => {},
+ };
+ }
+
+ const config = new Conf({
+ cwd: app.getPath("userData"),
+ projectName: app.getName(),
+ projectVersion: app.getVersion(),
+ ...opts,
+ });
+
+ return {
+ getItem: (key) => {
+ return config.get(key, null);
+ },
+ setItem: (key, value) => {
+ config.set(key, value);
+ },
+ };
+};
diff --git a/packages/electron/src/types/client.ts b/packages/electron/src/types/client.ts
new file mode 100644
index 0000000000..cb42f06caf
--- /dev/null
+++ b/packages/electron/src/types/client.ts
@@ -0,0 +1,118 @@
+export interface Storage {
+ getItem: (name: string) => unknown | null;
+ setItem: (name: string, value: unknown) => void;
+}
+
+export interface ElectronClientOptions {
+ /**
+ * The URL to redirect to for authentication.
+ *
+ * @example "http://localhost:3000/sign-in"
+ */
+ signInURL: string | URL;
+ /**
+ * The protocol scheme to use for deep linking in Electron.
+ *
+ * Should follow the reverse domain name notation to ensure uniqueness.
+ *
+ * @see {@link https://datatracker.ietf.org/doc/html/rfc8252#section-7.1}
+ * @example "com.example.app"
+ */
+ protocol:
+ | string
+ | {
+ scheme: string;
+ privileges?: Electron.Privileges | undefined;
+ };
+ /**
+ * The callback path to use for authentication redirects.
+ *
+ * @default "/auth/callback"
+ */
+ callbackPath?: string;
+ /**
+ * An instance of a storage solution (e.g., `electron-store`)
+ * to store session and cookie data.
+ *
+ * @example
+ * ```ts
+ * electronClient({
+ * storage: window.localStorage,
+ * });
+ * ```
+ */
+ storage: Storage;
+ /**
+ * Prefix for local storage keys (e.g., "my-app_cookie", "my-app_session_data")
+ * @default "better-auth"
+ */
+ storagePrefix?: string | undefined;
+ /**
+ * Prefix(es) for server cookie names to filter (e.g., "better-auth.session_token")
+ * This is used to identify which cookies belong to better-auth to prevent
+ * infinite refetching when third-party cookies are set.
+ *
+ * Can be a single string or an array of strings to match multiple prefixes.
+ *
+ * @default "better-auth"
+ * @example "better-auth"
+ * @example ["better-auth", "my-app"]
+ */
+ cookiePrefix?: string | string[] | undefined;
+ /**
+ * Channel prefix for IPC bridges (e.g., "better-auth:request-auth")
+ *
+ * @default "better-auth"
+ */
+ channelPrefix?: string | undefined;
+ /**
+ * Client ID to use for identifying the Electron client during authorization.
+ *
+ * @default "electron"
+ */
+ clientID?: string | undefined;
+ /**
+ * Whether to disable caching the session data locally.
+ *
+ * @default false
+ */
+ disableCache?: boolean | undefined;
+}
+
+export interface ElectronProxyClientOptions {
+ /**
+ * The protocol scheme to use for deep linking in Electron.
+ *
+ * Should follow the reverse domain name notation to ensure uniqueness.
+ *
+ * Note that this must match the protocol scheme registered in the server plugin.
+ *
+ * @see {@link https://datatracker.ietf.org/doc/html/rfc8252#section-7.1}
+ * @example "com.example.app"
+ */
+ protocol:
+ | string
+ | {
+ scheme: string;
+ };
+ /**
+ * The callback path to use for authentication redirects.
+ *
+ * @default "/auth/callback"
+ */
+ callbackPath?: string;
+ /**
+ * Client ID to use for identifying the Electron client during authorization.
+ *
+ * @default "electron"
+ */
+ clientID?: string | undefined;
+ /**
+ * The prefix to use for cookies set by the plugin.
+ *
+ * @default "better-auth"
+ */
+ cookiePrefix?: string | undefined;
+}
+
+export type { ElectronRequestAuthOptions } from "../authenticate";
diff --git a/packages/electron/src/types/index.ts b/packages/electron/src/types/index.ts
new file mode 100644
index 0000000000..9c15534fd3
--- /dev/null
+++ b/packages/electron/src/types/index.ts
@@ -0,0 +1 @@
+export * from "./options";
diff --git a/packages/electron/src/types/options.ts b/packages/electron/src/types/options.ts
new file mode 100644
index 0000000000..eab5573968
--- /dev/null
+++ b/packages/electron/src/types/options.ts
@@ -0,0 +1,33 @@
+export interface ElectronOptions {
+ /**
+ * The duration (in seconds) for which the authorization code remains valid.
+ *
+ * @default 300 (5 minutes)
+ */
+ codeExpiresIn?: number | undefined;
+ /**
+ * The duration (in seconds) for which the redirect cookie remains valid.
+ *
+ * @default 120 (2 minutes)
+ */
+ redirectCookieExpiresIn?: number | undefined;
+ /**
+ * The prefix to use for cookies set by the plugin.
+ *
+ * @default "better-auth"
+ */
+ cookiePrefix?: string | undefined;
+ /**
+ * Client ID to use for identifying the Electron client during authorization.
+ *
+ * @default "electron"
+ */
+ clientID?: string | undefined;
+ /**
+ * Override the origin for Electron API routes.
+ * Enable this if you're facing cors origin issues with Electron API routes.
+ *
+ * @default false
+ */
+ disableOriginOverride?: boolean | undefined;
+}
diff --git a/packages/electron/src/utils.ts b/packages/electron/src/utils.ts
new file mode 100644
index 0000000000..836b637d04
--- /dev/null
+++ b/packages/electron/src/utils.ts
@@ -0,0 +1,21 @@
+import type { ElectronClientOptions } from "./types/client";
+
+export function isProcessType(type: typeof process.type) {
+ return typeof process !== "undefined" && process.type === type;
+}
+
+export function parseProtocolScheme(
+ protocolOption: ElectronClientOptions["protocol"],
+) {
+ if (typeof protocolOption === "string") {
+ return {
+ scheme: protocolOption,
+ privileges: {},
+ };
+ }
+
+ return {
+ scheme: protocolOption.scheme,
+ privileges: protocolOption.privileges || {},
+ };
+}
diff --git a/packages/electron/test/electron.test.ts b/packages/electron/test/electron.test.ts
new file mode 100644
index 0000000000..8583cc4d66
--- /dev/null
+++ b/packages/electron/test/electron.test.ts
@@ -0,0 +1,1212 @@
+import { randomBytes } from "node:crypto";
+import { createAuthMiddleware } from "@better-auth/core/api";
+import { base64Url } from "@better-auth/utils/base64";
+import { createHash } from "@better-auth/utils/hash";
+import { parseSetCookieHeader } from "better-auth/cookies";
+import { generateRandomString } from "better-auth/crypto";
+import { getMigrations } from "better-auth/db/migration";
+import { describe, expect, vi } from "vitest";
+import { authenticate, kCodeVerifier, kState } from "../src/authenticate";
+import { electron } from "../src/index";
+import { it, testUtils } from "./utils";
+
+const mockElectron = vi.hoisted(() => {
+ const BrowserWindow = {
+ constructor: vi.fn(),
+ send: vi.fn(),
+ webContents: {
+ send: vi.fn(),
+ },
+ };
+
+ const electron = {
+ ipcMain: {
+ handle: vi.fn(),
+ },
+ app: {
+ userAgentFallback: "test-user-agent",
+ whenReady: vi.fn(() => Promise.resolve()),
+ setAsDefaultProtocolClient: vi.fn(() => true),
+ requestSingleInstanceLock: vi.fn(() => true),
+ on: vi.fn(),
+ quit: vi.fn(),
+ },
+ shell: {
+ openExternal: vi.fn(),
+ },
+ safeStorage: {
+ encryptString: vi.fn((str: string) =>
+ Buffer.from(str).toString("base64"),
+ ),
+ decryptString: vi.fn((buf: Buffer) =>
+ Buffer.from(buf.toString(), "base64").toString(),
+ ),
+ },
+ webContents: {
+ getFocusedWebContents: vi.fn(() => BrowserWindow),
+ },
+ session: {
+ defaultSession: {
+ webRequest: {
+ onBeforeSendHeaders: vi.fn(),
+ onHeadersReceived: vi.fn(),
+ },
+ },
+ },
+ protocol: {
+ registerSchemesAsPrivileged: vi.fn(),
+ },
+ BrowserWindow,
+ };
+
+ return {
+ ...electron,
+ default: electron,
+ };
+});
+
+vi.mock("electron", () => mockElectron);
+
+describe("Electron", () => {
+ const { auth, client, proxyClient, options } = testUtils();
+
+ it("should throw error when making requests outside the main process", async ({
+ setProcessType,
+ }) => {
+ setProcessType("renderer");
+
+ await expect(client.getSession()).rejects.toThrowError(
+ "Requests must be made from the Electron main process",
+ );
+ });
+
+ it("should open external url in default browser", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ await client.requestAuth();
+
+ (globalThis as any)[kCodeVerifier] = undefined;
+ (globalThis as any)[kState] = undefined;
+
+ expect(mockElectron.shell.openExternal).toHaveBeenCalledWith(
+ expect.stringContaining(options.signInURL),
+ {
+ activate: true,
+ },
+ );
+ });
+
+ it("should set redirect cookie after signing in", async () => {
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+ (globalThis as any)[kState] = "abc";
+
+ const { error } = await proxyClient.signUp.email(
+ {
+ email: "test@test.com",
+ password: "password",
+ name: "Test User",
+ },
+ {
+ query: {
+ client_id: "electron",
+ code_challenge: "test-challenge",
+ code_challenge_method: "plain",
+ state: "abc",
+ },
+ onResponse: async (ctx) => {
+ const cookies = parseSetCookieHeader(
+ ctx.response.headers.get("set-cookie") || "",
+ );
+
+ const redirectCookie = cookies.get(`better-auth.electron`);
+ expect(redirectCookie).toBeDefined();
+ expect(redirectCookie?.httponly).not.toBe(true);
+ expect(redirectCookie?.["max-age"]).toStrictEqual(120);
+ },
+ customFetchImpl: (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ },
+ },
+ );
+ expect(error).toBeNull();
+ });
+
+ it("should exchange token", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ const codeVerifier = base64Url.encode(randomBytes(32));
+ const codeChallenge = base64Url.encode(
+ await createHash("SHA-256").digest(codeVerifier),
+ );
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge,
+ codeChallengeMethod: "s256",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ const { data } = await client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: codeVerifier,
+ state: "abc",
+ },
+ onResponse: async (ctx) => {
+ const cookies = parseSetCookieHeader(
+ ctx.response.headers.get("set-cookie") || "",
+ );
+
+ expect(cookies.has("better-auth.session_token")).toBe(true);
+ },
+ });
+
+ expect(data?.token).toBeDefined();
+ expect(data?.user.id).toBe(user.id);
+
+ expect(mockElectron.safeStorage.encryptString).toHaveBeenCalled();
+ });
+
+ it("should emit authenticated event on success", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+ (globalThis as any)[kState] = "abc";
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: "test-challenge",
+ codeChallengeMethod: "plain",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: identifier,
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ),
+ ).resolves.toBeUndefined();
+
+ expect(mockElectron.BrowserWindow.webContents.send).toHaveBeenCalledWith(
+ "better-auth:authenticated",
+ expect.objectContaining({
+ id: user.id,
+ }),
+ );
+ });
+
+ it("should emit user-updated event when session atom updates", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ client.setupMain();
+
+ const mockUser = {
+ id: "test-user",
+ };
+
+ client.$store.atoms.session!.set({
+ data: {
+ user: mockUser,
+ },
+ });
+
+ expect(mockElectron.BrowserWindow.send).toHaveBeenCalledWith(
+ "better-auth:user-updated",
+ mockUser,
+ );
+ });
+
+ it("should reject expired tokens", async ({ setProcessType }) => {
+ setProcessType("browser");
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+ (globalThis as any)[kState] = "abc";
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: "test-challenge",
+ codeChallengeMethod: "plain",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 999),
+ },
+ });
+
+ vi.advanceTimersByTime(1000);
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: identifier,
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ).catch((err: any) => {
+ expect(err.error.message).toBe("Invalid or expired token.");
+ throw err;
+ }),
+ ).rejects.toThrowError("NOT_FOUND");
+ });
+
+ it("should reject invalid/non-existent tokens", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+ (globalThis as any)[kState] = "abc";
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: "non-existent",
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ).catch((err: any) => {
+ expect(err.error.message).toBe("Invalid or expired token.");
+ throw err;
+ }),
+ ).rejects.toThrowError("NOT_FOUND");
+ });
+
+ it("should emit error event on failure", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ await client.changeEmail({
+ // @ts-expect-error
+ newEmail: null,
+ });
+
+ expect(mockElectron.BrowserWindow.send).toHaveBeenCalledWith(
+ "better-auth:error",
+ expect.objectContaining({
+ status: 400,
+ }),
+ );
+ });
+
+ it("should error when user referenced by token does not exist", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ // Create verification referencing a non-existent user id
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: "non-existent-user",
+ codeChallenge: "x",
+ codeChallengeMethod: "plain",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300_000),
+ },
+ });
+
+ await expect(
+ client
+ .$fetch("/electron/token", {
+ method: "POST",
+ body: { token: identifier, code_verifier: "x", state: "abc" },
+ throw: true,
+ customFetchImpl: (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ },
+ })
+ .catch((err) => {
+ throw err.cause;
+ }),
+ ).rejects.toThrow(
+ expect.objectContaining({
+ code: auth.$ERROR_CODES.USER_NOT_FOUND.code,
+ }),
+ );
+ });
+
+ it("should throw when createSession returns null", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signUpEmail({
+ body: {
+ name: "Test User",
+ email: "test-create-session-null@test.com",
+ password: "password",
+ },
+ });
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: "x",
+ codeChallengeMethod: "plain",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300_000),
+ },
+ });
+
+ const ctx = await auth.$context;
+ const original = ctx.internalAdapter.createSession;
+ try {
+ ctx.internalAdapter.createSession = vi.fn().mockResolvedValue(null);
+ await expect(
+ client.$fetch("/electron/token", {
+ method: "POST",
+ body: { token: identifier, code_verifier: "x", state: "abc" },
+ throw: true,
+ customFetchImpl: (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ },
+ }),
+ ).rejects.toThrow(/FAILED_TO_CREATE_SESSION|INTERNAL_SERVER_ERROR/);
+ } finally {
+ ctx.internalAdapter.createSession = original;
+ }
+ });
+
+ it("requestAuth should throw if called outside browser process", async ({
+ setProcessType,
+ }) => {
+ setProcessType("renderer");
+ await expect(client.requestAuth()).rejects.toThrowError(
+ "`requestAuth` can only be called in the main process",
+ );
+ });
+
+ it("should delete verification entry after successful token exchange", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signUpEmail({
+ body: {
+ name: "Test User",
+ email: "test-delete-verification@test.com",
+ password: "password",
+ },
+ });
+
+ const codeVerifier = base64Url.encode(randomBytes(32));
+ const codeChallenge = base64Url.encode(
+ await createHash("SHA-256").digest(codeVerifier),
+ );
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge,
+ codeChallengeMethod: "s256",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ const ctx = await auth.$context;
+ const spy = vi.spyOn(ctx.internalAdapter, "deleteVerificationValue");
+
+ const { data } = await client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: codeVerifier,
+ state: "abc",
+ },
+ });
+
+ expect(data?.token).toBeDefined();
+ expect(data?.user.id).toBe(user.id);
+ expect(spy).toHaveBeenCalled();
+ spy.mockRestore();
+ });
+
+ it("should register protocol", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ client.setupMain({
+ scheme: true,
+ });
+
+ expect(
+ mockElectron.protocol.registerSchemesAsPrivileged,
+ ).toHaveBeenCalledWith(
+ expect.arrayContaining([
+ expect.objectContaining({
+ scheme: options.protocol.scheme,
+ }),
+ ]),
+ );
+ expect(mockElectron.app.setAsDefaultProtocolClient).toHaveBeenCalledWith(
+ options.protocol.scheme,
+ );
+ });
+
+ it("should add client origin to CSP if missing", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ client.setupMain({
+ csp: true,
+ });
+
+ // wait a tick for whenReady then-callback to run
+ await Promise.resolve();
+
+ const onHeadersReceived =
+ mockElectron.session.defaultSession.webRequest.onHeadersReceived;
+ expect(onHeadersReceived).toHaveBeenCalled();
+
+ const handler = onHeadersReceived.mock.calls[0][0];
+
+ const details = {
+ responseHeaders: {},
+ };
+
+ let callbackResult: any = null;
+ const callback = (res: any) => {
+ callbackResult = res;
+ };
+
+ await handler(details, callback);
+
+ expect(callbackResult).not.toBeNull();
+ const respHeaders = callbackResult.responseHeaders;
+ expect(respHeaders).toBeDefined();
+ const csp = String(respHeaders["content-security-policy"]);
+ expect(csp).toContain("connect-src");
+ expect(csp).toContain("http://localhost:3000");
+ });
+
+ describe("pkce", () => {
+ it("should require pkce", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: identifier,
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ),
+ ).rejects.toThrowError("Code verifier not found.");
+ });
+
+ it("should require a state parameter", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: "test-challenge",
+ codeChallengeMethod: "plain",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: identifier,
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ),
+ ).rejects.toThrowError("State not found.");
+ });
+
+ it("should verify that state parameter matches", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: {
+ email: "test@test.com",
+ password: "password",
+ },
+ });
+
+ (globalThis as any)[kCodeVerifier] = "test-challenge";
+ (globalThis as any)[kState] = "abc";
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: "test-challenge",
+ codeChallengeMethod: "plain",
+ state: "def",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ await expect(
+ authenticate(
+ client.$fetch,
+ options,
+ {
+ token: identifier,
+ },
+ // @ts-expect-error
+ () => mockElectron.BrowserWindow,
+ ).catch((err: any) => {
+ expect(err.error.message).toBe("state mismatch");
+ throw err;
+ }),
+ ).rejects.toThrowError("BAD_REQUEST");
+ });
+
+ it("should return error when token record is missing code challenge", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: { email: "test@test.com", password: "password" },
+ });
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300_000),
+ },
+ });
+
+ await expect(
+ client.$fetch("/electron/token", {
+ method: "POST",
+ body: { token: identifier, code_verifier: "anything", state: "abc" },
+ throw: true,
+ customFetchImpl: (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ },
+ }),
+ ).rejects.toThrowError("BAD_REQUEST");
+ });
+
+ it("should reject when code_verifier does not match", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { user } = await auth.api.signInEmail({
+ body: { email: "test@test.com", password: "password" },
+ });
+
+ const actualVerifier = base64Url.encode(randomBytes(32));
+ const actualChallenge = base64Url.encode(
+ await createHash("SHA-256").digest(actualVerifier),
+ );
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge: actualChallenge,
+ codeChallengeMethod: "s256",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300_000),
+ },
+ });
+
+ const invalidVerifier = base64Url.encode(randomBytes(32));
+ await expect(
+ client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: invalidVerifier,
+ state: "abc",
+ },
+ throw: true,
+ customFetchImpl: (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ },
+ }),
+ ).rejects.toThrowError("BAD_REQUEST");
+ });
+ });
+
+ describe("cookies", () => {
+ it("should send cookie and get session", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ const { data } = await client.getSession();
+ expect(data).toMatchObject({
+ session: expect.any(Object),
+ user: expect.any(Object),
+ });
+
+ expect(mockElectron.safeStorage.decryptString).toHaveBeenCalled();
+ });
+
+ it("should get cookies", async () => {
+ const c = client.getCookie();
+ expect(c).includes("better-auth.session_token");
+ });
+
+ it("should not trigger infinite refetch with non-./src/cookies", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const { hasBetterAuthCookies } = await import("../src/cookies");
+
+ const betterAuthOnlyHeader = "better-auth.session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(betterAuthOnlyHeader, "better-auth")).toBe(
+ true,
+ );
+
+ const sessionDataHeader = "better-auth.session_data=xyz; Path=/";
+ expect(hasBetterAuthCookies(sessionDataHeader, "better-auth")).toBe(true);
+
+ const secureBetterAuthHeader =
+ "__Secure-better-auth.session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(secureBetterAuthHeader, "better-auth")).toBe(
+ true,
+ );
+
+ const secureSessionDataHeader =
+ "__Secure-better-auth.session_data=xyz; Path=/";
+ expect(hasBetterAuthCookies(secureSessionDataHeader, "better-auth")).toBe(
+ true,
+ );
+
+ const nonBetterAuthHeader = "__cf_bm=abc123; Path=/; HttpOnly; Secure";
+ expect(hasBetterAuthCookies(nonBetterAuthHeader, "better-auth")).toBe(
+ false,
+ );
+
+ const mixedHeader =
+ "__cf_bm=abc123; Path=/; HttpOnly; Secure, better-auth.session_token=xyz; Path=/";
+ expect(hasBetterAuthCookies(mixedHeader, "better-auth")).toBe(true);
+
+ const customPrefixHeader = "my-app.session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(customPrefixHeader, "my-app")).toBe(true);
+ expect(hasBetterAuthCookies(customPrefixHeader, "better-auth")).toBe(
+ false,
+ );
+
+ const customPrefixDataHeader = "my-app.session_data=abc; Path=/";
+ expect(hasBetterAuthCookies(customPrefixDataHeader, "my-app")).toBe(true);
+
+ const emptyPrefixHeader = "session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(emptyPrefixHeader, "")).toBe(true);
+
+ const customFullNameHeader = "my_custom_session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(customFullNameHeader, "")).toBe(true);
+
+ const customFullDataHeader = "my_custom_session_data=xyz; Path=/";
+ expect(hasBetterAuthCookies(customFullDataHeader, "")).toBe(true);
+
+ const multipleNonBetterAuthHeader =
+ "__cf_bm=abc123; Path=/, _ga=GA1.2.123456789.1234567890; Path=/";
+ expect(
+ hasBetterAuthCookies(multipleNonBetterAuthHeader, "better-auth"),
+ ).toBe(false);
+
+ // Non-session better-auth cookies should still be detected (e.g., passkey cookies)
+ const nonSessionBetterAuthHeader = "better-auth.other_cookie=abc; Path=/";
+ expect(
+ hasBetterAuthCookies(nonSessionBetterAuthHeader, "better-auth"),
+ ).toBe(true);
+
+ // Passkey cookie should be detected
+ const passkeyHeader = "better-auth-passkey=xyz; Path=/";
+ expect(hasBetterAuthCookies(passkeyHeader, "better-auth")).toBe(true);
+
+ // Secure passkey cookie should be detected
+ const securePasskeyHeader = "__Secure-better-auth-passkey=xyz; Path=/";
+ expect(hasBetterAuthCookies(securePasskeyHeader, "better-auth")).toBe(
+ true,
+ );
+
+ // Custom passkey cookie name should be detected
+ const customPasskeyHeader = "better-auth-custom-challenge=xyz; Path=/";
+ expect(hasBetterAuthCookies(customPasskeyHeader, "better-auth")).toBe(
+ true,
+ );
+ });
+
+ it("should allow independent cookiePrefix configuration", async () => {
+ const { hasBetterAuthCookies } = await import("../src/cookies");
+
+ const customCookieHeader = "my-app.session_token=abc; Path=/";
+
+ expect(hasBetterAuthCookies(customCookieHeader, "my-app")).toBe(true);
+
+ expect(hasBetterAuthCookies(customCookieHeader, "better-auth")).toBe(
+ false,
+ );
+ });
+
+ it("should support array of cookie prefixes", async () => {
+ const { hasBetterAuthCookies } = await import("../src/cookies");
+
+ // Test with multiple prefixes - should match any of them
+ const betterAuthHeader = "better-auth.session_token=abc; Path=/";
+ expect(
+ hasBetterAuthCookies(betterAuthHeader, ["better-auth", "my-app"]),
+ ).toBe(true);
+
+ const myAppHeader = "my-app.session_data=xyz; Path=/";
+ expect(hasBetterAuthCookies(myAppHeader, ["better-auth", "my-app"])).toBe(
+ true,
+ );
+
+ const otherAppHeader = "other-app.session_token=def; Path=/";
+ expect(
+ hasBetterAuthCookies(otherAppHeader, ["better-auth", "my-app"]),
+ ).toBe(false);
+
+ // Test with passkey cookies
+ const passkeyHeader1 = "better-auth-passkey=xyz; Path=/";
+ expect(
+ hasBetterAuthCookies(passkeyHeader1, ["better-auth", "my-app"]),
+ ).toBe(true);
+
+ const passkeyHeader2 = "my-app-passkey=xyz; Path=/";
+ expect(
+ hasBetterAuthCookies(passkeyHeader2, ["better-auth", "my-app"]),
+ ).toBe(true);
+
+ // Test with __Secure- prefix
+ const secureHeader = "__Secure-my-app.session_token=abc; Path=/";
+ expect(
+ hasBetterAuthCookies(secureHeader, ["better-auth", "my-app"]),
+ ).toBe(true);
+
+ // Test with empty array (should check for suffixes)
+ const sessionTokenHeader = "session_token=abc; Path=/";
+ expect(hasBetterAuthCookies(sessionTokenHeader, [])).toBe(false);
+ expect(hasBetterAuthCookies(sessionTokenHeader, [""])).toBe(true);
+ });
+ });
+
+ it("should preserve unchanged client store session properties on signout", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ await client.signUp.email({
+ name: "Test User",
+ email: "test-2@test.com",
+ password: "password",
+ });
+
+ const before = client.$store.atoms.session!.get();
+ await client.signOut();
+ const after = client.$store.atoms.session!.get();
+
+ expect(after).toMatchObject({
+ ...before,
+ data: null,
+ error: null,
+ isPending: false,
+ });
+ });
+
+ it("should modify origin header to electron origin if origin is not set", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ let originalOrigin: string | null = null;
+ let origin: string | null = null;
+ const { auth, client } = testUtils({
+ hooks: {
+ before: createAuthMiddleware(async (ctx) => {
+ origin = ctx.request?.headers.get("origin") ?? null;
+ }),
+ },
+ plugins: [
+ {
+ id: "test",
+ async onRequest(request, ctx) {
+ const origin = request.headers.get("origin");
+ originalOrigin = origin;
+ },
+ },
+ electron(),
+ ],
+ });
+ const { runMigrations } = await getMigrations(auth.options);
+ await runMigrations();
+ await client.signUp.email({
+ name: "Test User",
+ email: "test@test.com",
+ password: "password",
+ callbackURL: "http://localhost:3000/callback",
+ });
+ expect(origin).toBe("myapp:/");
+ expect(originalOrigin).toBeNull();
+ });
+
+ it("should not modify origin header if origin is set", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const originalOrigin = "test.com";
+ let origin: string | null = null;
+ const { auth, client } = testUtils({
+ hooks: {
+ before: createAuthMiddleware(async (ctx) => {
+ origin = ctx.request?.headers.get("origin") ?? null;
+ }),
+ },
+ plugins: [electron()],
+ });
+ const { runMigrations } = await getMigrations(auth.options);
+ await runMigrations();
+ await client.signUp.email(
+ {
+ name: "Test User",
+ email: "test@test.com",
+ password: "password",
+ callbackURL: "http://localhost:3000/callback",
+ },
+ {
+ headers: {
+ origin: originalOrigin,
+ },
+ },
+ );
+ expect(origin).toBe(originalOrigin);
+ });
+
+ it("should not modify origin header if disableOriginOverride is set", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ let origin: string | null = null;
+ const { auth, client } = testUtils({
+ plugins: [electron({ disableOriginOverride: true })],
+ hooks: {
+ before: createAuthMiddleware(async (ctx) => {
+ origin = ctx.request?.headers.get("origin") ?? null;
+ }),
+ },
+ });
+ const { runMigrations } = await getMigrations(auth.options);
+ await runMigrations();
+ await client.signUp.email({
+ name: "Test User",
+ email: "test@test.com",
+ password: "password",
+ callbackURL: "http://localhost:3000/callback",
+ });
+ expect(origin).toBe(null);
+ });
+
+ it("should register ipc handlers", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ client.setupMain({
+ bridges: true,
+ });
+
+ const prefix = `${(options as any).channelPrefix ?? "better-auth"}:`;
+
+ expect(mockElectron.ipcMain.handle).toHaveBeenCalledWith(
+ `${prefix}getUser`,
+ expect.any(Function),
+ );
+ expect(mockElectron.ipcMain.handle).toHaveBeenCalledWith(
+ `${prefix}requestAuth`,
+ expect.any(Function),
+ );
+ expect(mockElectron.ipcMain.handle).toHaveBeenCalledWith(
+ `${prefix}signOut`,
+ expect.any(Function),
+ );
+ });
+
+ it("should surface safeStorage errors during encryption", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ // Create a user and verification entry that would normally trigger
+ // cookie/session encryption during the token exchange.
+ const { user } = await auth.api.signUpEmail({
+ body: {
+ name: "Sage Storage Test",
+ email: "safe-storage@test.com",
+ password: "password",
+ },
+ });
+
+ const codeVerifier = base64Url.encode(randomBytes(32));
+ const codeChallenge = base64Url.encode(
+ await createHash("SHA-256").digest(codeVerifier),
+ );
+
+ const identifier = generateRandomString(16, "A-Z", "a-z", "0-9");
+ await (await auth.$context).adapter.create({
+ model: "verification",
+ data: {
+ identifier: `electron:${identifier}`,
+ value: JSON.stringify({
+ userId: user.id,
+ codeChallenge,
+ codeChallengeMethod: "s256",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+
+ // Make encryptString throw
+ mockElectron.safeStorage.encryptString.mockImplementationOnce(() => {
+ throw new Error("encryption failed");
+ });
+
+ // Expect the token exchange to surface the error (encryption failure)
+ await expect(
+ client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: codeVerifier,
+ state: "abc",
+ },
+ }),
+ ).rejects.toThrow("encryption failed");
+ });
+
+ it("should quit when single instance lock not acquired", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ mockElectron.app.requestSingleInstanceLock.mockReturnValueOnce(false);
+
+ client.setupMain({
+ scheme: true,
+ });
+
+ expect(mockElectron.app.quit).toHaveBeenCalled();
+ });
+
+ it("should log error when setAsDefaultProtocolClient fails", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ const original = mockElectron.app.setAsDefaultProtocolClient;
+ mockElectron.app.setAsDefaultProtocolClient.mockReturnValueOnce(false);
+
+ const spy = vi.spyOn(console, "error").mockImplementation(() => {});
+
+ client.setupMain({
+ scheme: true,
+ });
+
+ expect(mockElectron.app.setAsDefaultProtocolClient).toHaveBeenCalled();
+ expect(spy).toHaveBeenCalled();
+
+ spy.mockRestore();
+ mockElectron.app.setAsDefaultProtocolClient = original;
+ });
+
+ it("should not duplicate CSP origin entry when already present", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ client.setupMain({
+ csp: true,
+ });
+
+ // wait a tick for whenReady then-callback to run
+ await Promise.resolve();
+
+ const onHeadersReceived =
+ mockElectron.session.defaultSession.webRequest.onHeadersReceived;
+ expect(onHeadersReceived).toHaveBeenCalled();
+
+ const handler = onHeadersReceived.mock.calls[0][0];
+
+ const origin = "http://localhost:3000";
+ const details = {
+ responseHeaders: {
+ "content-security-policy": [`connect-src 'self' ${origin}`],
+ },
+ };
+
+ let callbackResult: any = null;
+ const callback = (res: any) => {
+ callbackResult = res;
+ };
+
+ // First invocation - policy already contains origin once
+ await handler(details, callback);
+ const firstPolicy = String(
+ callbackResult.responseHeaders["content-security-policy"],
+ );
+ const firstCount = (
+ firstPolicy.match(
+ new RegExp(origin.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ ) || []
+ ).length;
+
+ // Invoke handler again with the policy that already contains the origin
+ callbackResult = null;
+ await handler(details, callback);
+ const secondPolicy = String(
+ callbackResult.responseHeaders["content-security-policy"],
+ );
+ const secondCount = (
+ secondPolicy.match(
+ new RegExp(origin.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ ) || []
+ ).length;
+
+ // Origin should not be duplicated
+ expect(firstCount).toBeGreaterThanOrEqual(1);
+ expect(secondCount).toBe(firstCount);
+ });
+
+ it("should reject requestAuth when shell.openExternal fails", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+
+ mockElectron.shell.openExternal.mockRejectedValueOnce(
+ new Error("failed to open"),
+ );
+
+ await expect(client.requestAuth()).rejects.toThrow();
+ });
+});
diff --git a/packages/electron/test/utils.ts b/packages/electron/test/utils.ts
new file mode 100644
index 0000000000..cb33c6d286
--- /dev/null
+++ b/packages/electron/test/utils.ts
@@ -0,0 +1,127 @@
+///
+
+import type { BetterAuthOptions } from "better-auth";
+import { betterAuth } from "better-auth";
+import type { FetchEsque } from "better-auth/client";
+import { createAuthClient } from "better-auth/client";
+import { getMigrations } from "better-auth/db/migration";
+import { oAuthProxy } from "better-auth/plugins";
+import Database from "better-sqlite3";
+import { afterAll, beforeAll, test, vi } from "vitest";
+import { electronClient } from "../src/client";
+import { electron } from "../src/index";
+import { electronProxyClient } from "../src/proxy";
+import type { ElectronClientOptions } from "../src/types/client";
+
+export const it = test.extend<{
+ setProcessType: (type: typeof process.type) => void;
+}>({
+ setProcessType: async ({}, use) => {
+ const originalType = process.type;
+ const originalVersions = process.versions;
+
+ const assignProcessType = (type: typeof process.type) => {
+ Object.defineProperties(process, {
+ type: {
+ configurable: true,
+ get: () => type,
+ },
+ versions: {
+ configurable: true,
+ get: () => ({
+ ...originalVersions,
+ electron: "some-version",
+ }),
+ },
+ });
+ };
+
+ try {
+ await use(assignProcessType);
+ } finally {
+ Object.defineProperties(process, {
+ type: { configurable: true, value: originalType },
+ versions: { configurable: true, value: originalVersions },
+ });
+ }
+ },
+});
+
+function getTestInstance(overrideOpts?: BetterAuthOptions) {
+ const storage = new Map();
+ const options = {
+ signInURL: "http://localhost:3000/sign-in",
+ protocol: {
+ scheme: "myapp",
+ },
+ storage: {
+ getItem: (name) => {
+ return storage.get(name) || null;
+ },
+ setItem: (name, value) => {
+ storage.set(name, value);
+ },
+ },
+ } satisfies ElectronClientOptions;
+
+ const auth = betterAuth({
+ baseURL: "http://localhost:3000",
+ database: new Database(":memory:"),
+ emailAndPassword: {
+ enabled: true,
+ },
+ socialProviders: {
+ google: {
+ clientId: "test",
+ clientSecret: "test",
+ },
+ },
+ plugins: [electron(), oAuthProxy()],
+ trustedOrigins: ["myapp:/"],
+ ...(overrideOpts || {}),
+ });
+
+ const customFetchImpl: FetchEsque = (url, init) => {
+ const req = new Request(url.toString(), init);
+ return auth.handler(req);
+ };
+
+ const proxyClient = createAuthClient({
+ baseURL: "http://localhost:3000",
+ fetchOptions: {
+ customFetchImpl,
+ },
+ plugins: [electronProxyClient(options)],
+ });
+
+ const client = createAuthClient({
+ baseURL: "http://localhost:3000",
+ fetchOptions: {
+ customFetchImpl,
+ },
+ plugins: [electronClient(options)],
+ });
+
+ return {
+ auth,
+ proxyClient,
+ client,
+ options,
+ customFetchImpl,
+ };
+}
+
+export function testUtils(overrideOpts?: BetterAuthOptions) {
+ const testInstance = getTestInstance(overrideOpts);
+
+ beforeAll(async () => {
+ const { runMigrations } = await getMigrations(testInstance.auth.options);
+ await runMigrations();
+ vi.useFakeTimers();
+ });
+ afterAll(() => {
+ vi.useRealTimers();
+ });
+
+ return testInstance;
+}
diff --git a/packages/electron/tsconfig.json b/packages/electron/tsconfig.json
new file mode 100644
index 0000000000..7ff846acaf
--- /dev/null
+++ b/packages/electron/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "lib": ["esnext", "dom", "dom.iterable"]
+ },
+ "include": ["./src"],
+ "references": [
+ {
+ "path": "../core/tsconfig.json"
+ }
+ ]
+}
diff --git a/packages/electron/tsdown.config.ts b/packages/electron/tsdown.config.ts
new file mode 100644
index 0000000000..98ac9d6397
--- /dev/null
+++ b/packages/electron/tsdown.config.ts
@@ -0,0 +1,14 @@
+import { defineConfig } from "tsdown";
+
+export default defineConfig({
+ dts: { build: true, incremental: true },
+ format: ["esm"],
+ entry: [
+ "./src/index.ts",
+ "./src/client.ts",
+ "./src/proxy.ts",
+ "./src/storage.ts",
+ ],
+ external: ["better-auth", "better-call", "@better-fetch/fetch", "electron"],
+ treeshake: true,
+});
diff --git a/packages/electron/vitest.config.ts b/packages/electron/vitest.config.ts
new file mode 100644
index 0000000000..c261d2b759
--- /dev/null
+++ b/packages/electron/vitest.config.ts
@@ -0,0 +1,11 @@
+import { defineProject } from "vitest/config";
+
+export default defineProject({
+ test: {
+ server: {
+ deps: {
+ external: ["electron"],
+ },
+ },
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 767dd3a8ef..125729a430 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -117,6 +117,85 @@ importers:
specifier: catalog:vitest
version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.2.0)(@vitest/ui@4.0.18)(happy-dom@20.4.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.2.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
+ demo/electron:
+ dependencies:
+ '@better-auth/electron':
+ specifier: workspace:*
+ version: link:../../packages/electron
+ '@electron-toolkit/utils':
+ specifier: ^4.0.0
+ version: 4.0.0(electron@39.5.1)
+ '@radix-ui/react-avatar':
+ specifier: ^1.1.11
+ version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot':
+ specifier: ^1.2.3
+ version: 1.2.4(@types/react@19.2.10)(react@19.2.4)
+ better-auth:
+ specifier: workspace:*
+ version: link:../../packages/better-auth
+ class-variance-authority:
+ specifier: ^0.7.1
+ version: 0.7.1
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
+ conf:
+ specifier: ^15.0.2
+ version: 15.1.0
+ electron-store:
+ specifier: ^11.0.2
+ version: 11.0.2
+ tailwind-merge:
+ specifier: ^3.3.1
+ version: 3.4.0
+ tailwindcss-animate:
+ specifier: catalog:tailwind
+ version: 1.0.7(tailwindcss@4.1.18)
+ devDependencies:
+ '@electron-toolkit/tsconfig':
+ specifier: ^2.0.0
+ version: 2.0.0(@types/node@22.19.8)
+ '@tailwindcss/vite':
+ specifier: catalog:tailwind
+ version: 4.1.18(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
+ '@types/node':
+ specifier: ^22.19.1
+ version: 22.19.8
+ '@types/react':
+ specifier: catalog:react19
+ version: 19.2.10
+ '@types/react-dom':
+ specifier: catalog:react19
+ version: 19.2.3(@types/react@19.2.10)
+ '@vitejs/plugin-react':
+ specifier: ^5.1.1
+ version: 5.1.3(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
+ electron:
+ specifier: ^39.2.6
+ version: 39.5.1
+ electron-builder:
+ specifier: ^26.0.12
+ version: 26.7.0(electron-builder-squirrel-windows@26.7.0)
+ electron-vite:
+ specifier: ^5.0.0
+ version: 5.0.0(@swc/core@1.15.3)(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
+ react:
+ specifier: catalog:react19
+ version: 19.2.4
+ react-dom:
+ specifier: catalog:react19
+ version: 19.2.4(react@19.2.4)
+ tailwindcss:
+ specifier: catalog:tailwind
+ version: 4.1.18
+ typescript:
+ specifier: 'catalog:'
+ version: 5.9.3
+ vite:
+ specifier: ^7.2.6
+ version: 7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
+
demo/expo:
dependencies:
'@better-auth/expo':
@@ -139,16 +218,16 @@ importers:
version: 7.1.26(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@rn-primitives/avatar':
specifier: ^1.1.0
- version: 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ version: 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@rn-primitives/separator':
specifier: ^1.1.0
- version: 1.2.0(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ version: 1.2.0(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@rn-primitives/slot':
specifier: ^1.1.0
- version: 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ version: 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@rn-primitives/types':
specifier: ^1.1.0
- version: 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ version: 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@types/better-sqlite3':
specifier: ^7.6.12
version: 7.6.13
@@ -184,7 +263,7 @@ importers:
version: 8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-router:
specifier: ~6.0.22
- version: 6.0.22(193f004e4d1f794f3c17de7b0c4302be)
+ version: 6.0.22(71728b829b512756b00beaf554dc1af1)
expo-secure-store:
specifier: ~15.0.8
version: 15.0.8(expo@54.0.32)
@@ -196,7 +275,7 @@ importers:
version: 3.0.9(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-system-ui:
specifier: ~6.0.9
- version: 6.0.9(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))
+ version: 6.0.9(expo@54.0.32)(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))
expo-web-browser:
specifier: ~15.0.10
version: 15.0.10(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))
@@ -238,7 +317,7 @@ importers:
version: 15.12.1(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-web:
specifier: ~0.21.2
- version: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react-native-worklets:
specifier: ^0.5.1
version: 0.5.1(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
@@ -270,6 +349,9 @@ importers:
'@better-auth/dash':
specifier: ^0.1.6
version: 0.1.6(better-auth@packages+better-auth)(zod@4.3.6)
+ '@better-auth/electron':
+ specifier: workspace:*
+ version: link:../../packages/electron
'@better-auth/oauth-provider':
specifier: workspace:*
version: link:../../packages/oauth-provider
@@ -434,7 +516,7 @@ importers:
version: 3.16.2
next:
specifier: 16.1.6
- version: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ version: 16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -583,7 +665,7 @@ importers:
version: link:../../packages/better-auth
next:
specifier: 16.1.6
- version: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ version: 16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react:
specifier: catalog:react19
version: 19.2.4
@@ -716,13 +798,13 @@ importers:
version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@scalar/nextjs-api-reference':
specifier: ^0.9.14
- version: 0.9.15(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)
+ version: 0.9.15(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)
'@tanstack/react-table':
specifier: ^8.21.3
version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@vercel/analytics':
specifier: ^1.6.1
- version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.50.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
+ version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.50.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
'@vercel/og':
specifier: ^0.8.6
version: 0.8.6
@@ -758,19 +840,19 @@ importers:
version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
fumadocs-core:
specifier: 16.4.9
- version: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ version: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
fumadocs-mdx:
specifier: 14.2.6
- version: 14.2.6(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
+ version: 14.2.6(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
fumadocs-typescript:
specifier: ^5.0.1
- version: 5.0.1(a7f9956228988da580bf3f255eb9d12e)
+ version: 5.0.1(b82f4d749b5fdd7dc1595c4a740ccc94)
fumadocs-ui:
specifier: 16.4.9
- version: 16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
+ version: 16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
geist:
specifier: ^1.5.1
- version: 1.5.1(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
+ version: 1.5.1(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
gray-matter:
specifier: ^4.0.3
version: 4.0.3
@@ -785,7 +867,7 @@ importers:
version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
jotai:
specifier: ^2.16.2
- version: 2.16.2(@babel/core@7.28.6)(@babel/template@7.28.6)(@types/react@19.2.10)(react@19.2.4)
+ version: 2.16.2(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.10)(react@19.2.4)
js-beautify:
specifier: ^1.15.4
version: 1.15.4
@@ -803,7 +885,7 @@ importers:
version: 12.29.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
next:
specifier: 16.1.6
- version: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -937,10 +1019,10 @@ importers:
version: 0.30.6
drizzle-orm:
specifier: ^0.45.1
- version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
mongodb:
specifier: ^7.0.0
- version: 7.0.0
+ version: 7.0.0(socks@2.8.7)
mysql2:
specifier: ^3.16.2
version: 3.16.2
@@ -1064,7 +1146,7 @@ importers:
version: 0.15.4(solid-js@1.9.11)
'@solidjs/start':
specifier: ^1.2.1
- version: 1.2.1(solid-js@1.9.11)(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
+ version: 1.2.1(solid-js@1.9.11)(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
better-auth:
specifier: workspace:*
version: link:../../../packages/better-auth
@@ -1073,7 +1155,7 @@ importers:
version: 1.9.11
vinxi:
specifier: ^0.5.11
- version: 0.5.11(af991c32974e6dfef2e6764239993deb)
+ version: 0.5.11(a59819f55c4935ff24bbe5864b6de9f1)
devDependencies:
'@better-auth-test/test-utils':
specifier: workspace:*
@@ -1135,7 +1217,7 @@ importers:
version: link:../../../../../packages/better-auth
drizzle-orm:
specifier: ^0.45.1
- version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
hono:
specifier: ^4.11.6
version: 4.11.7
@@ -1282,7 +1364,7 @@ importers:
version: 0.31.4
drizzle-orm:
specifier: '>=0.41.0'
- version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@5.22.0)
+ version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@5.22.0)
jose:
specifier: ^6.1.0
version: 6.1.3
@@ -1291,7 +1373,7 @@ importers:
version: 0.28.10
mongodb:
specifier: ^6.0.0 || ^7.0.0
- version: 7.0.0
+ version: 7.0.0(socks@2.8.7)
mysql2:
specifier: ^3.0.0
version: 3.16.2
@@ -1439,7 +1521,7 @@ importers:
version: 17.2.3
drizzle-orm:
specifier: ^0.41.0
- version: 0.41.0(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.41.0(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
open:
specifier: ^10.2.0
version: 10.2.0
@@ -1534,7 +1616,7 @@ importers:
version: 0.3.1
drizzle-orm:
specifier: '>=0.41.0'
- version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
tsdown:
specifier: 'catalog:'
version: 0.20.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.17.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
@@ -1542,6 +1624,40 @@ importers:
specifier: 'catalog:'
version: 5.9.3
+ packages/electron:
+ dependencies:
+ '@better-auth/utils':
+ specifier: 'catalog:'
+ version: 0.3.1
+ '@better-fetch/fetch':
+ specifier: 'catalog:'
+ version: 1.1.21
+ better-call:
+ specifier: 'catalog:'
+ version: 1.2.1(zod@4.3.6)
+ conf:
+ specifier: ^15.0.2
+ version: 15.1.0
+ zod:
+ specifier: ^4.3.5
+ version: 4.3.6
+ devDependencies:
+ '@better-auth/core':
+ specifier: workspace:*
+ version: link:../core
+ '@types/better-sqlite3':
+ specifier: ^7.6.13
+ version: 7.6.13
+ better-auth:
+ specifier: workspace:*
+ version: link:../better-auth
+ better-sqlite3:
+ specifier: ^12.6.2
+ version: 12.6.2
+ tsdown:
+ specifier: 'catalog:'
+ version: 0.20.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.17.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
+
packages/expo:
dependencies:
'@better-fetch/fetch':
@@ -1562,19 +1678,19 @@ importers:
version: link:../better-auth
expo-constants:
specifier: ~18.0.13
- version: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
+ version: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
expo-linking:
specifier: ~8.0.11
- version: 8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ version: 8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
expo-network:
specifier: ^8.0.8
version: 8.0.8(expo@54.0.32)(react@19.2.4)
expo-web-browser:
specifier: ~15.0.10
- version: 15.0.10(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
+ version: 15.0.10(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
react-native:
specifier: ~0.83.1
- version: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ version: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
tsdown:
specifier: 'catalog:'
version: 0.20.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.17.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
@@ -1634,7 +1750,7 @@ importers:
version: 0.3.1
mongodb:
specifier: ^7.0.0
- version: 7.0.0
+ version: 7.0.0(socks@2.8.7)
tsdown:
specifier: 'catalog:'
version: 0.20.1(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.17.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
@@ -1912,6 +2028,9 @@ importers:
packages:
+ 7zip-bin@5.2.0:
+ resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==}
+
'@0no-co/graphql.web@1.2.0':
resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==}
peerDependencies:
@@ -2115,6 +2234,10 @@ packages:
resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==}
engines: {node: '>=6.9.0'}
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
'@babel/generator@7.28.6':
resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
engines: {node: '>=6.9.0'}
@@ -3274,6 +3397,10 @@ packages:
resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==}
engines: {node: '>=18'}
+ '@develar/schema-utils@2.6.5':
+ resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==}
+ engines: {node: '>= 8.9.0'}
+
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
@@ -3298,6 +3425,56 @@ packages:
'@electric-sql/pglite@0.3.2':
resolution: {integrity: sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==}
+ '@electron-toolkit/tsconfig@2.0.0':
+ resolution: {integrity: sha512-AdPsP770WhW7b260h13SHMdmjEEHJL6xFtgi3jwgdsSQbJOkJLeNnnpZW9qxTPCvmRI6vmdzWz5K3gibFS6SNg==}
+ peerDependencies:
+ '@types/node': '*'
+
+ '@electron-toolkit/utils@4.0.0':
+ resolution: {integrity: sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g==}
+ peerDependencies:
+ electron: '>=13.0.0'
+
+ '@electron/asar@3.4.1':
+ resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==}
+ engines: {node: '>=10.12.0'}
+ hasBin: true
+
+ '@electron/fuses@1.8.0':
+ resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==}
+ hasBin: true
+
+ '@electron/get@2.0.3':
+ resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==}
+ engines: {node: '>=12'}
+
+ '@electron/get@3.1.0':
+ resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==}
+ engines: {node: '>=14'}
+
+ '@electron/notarize@2.5.0':
+ resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==}
+ engines: {node: '>= 10.0.0'}
+
+ '@electron/osx-sign@1.3.3':
+ resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ '@electron/rebuild@4.0.3':
+ resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==}
+ engines: {node: '>=22.12.0'}
+ hasBin: true
+
+ '@electron/universal@2.0.3':
+ resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==}
+ engines: {node: '>=16.4'}
+
+ '@electron/windows-sign@1.2.2':
+ resolution: {integrity: sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==}
+ engines: {node: '>=14.14'}
+ hasBin: true
+
'@emnapi/core@1.8.1':
resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
@@ -4786,6 +4963,14 @@ packages:
'@lynx-js/types':
optional: true
+ '@malept/cross-spawn-promise@2.0.0':
+ resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==}
+ engines: {node: '>= 12.13.0'}
+
+ '@malept/flatpak-bundler@0.4.0':
+ resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==}
+ engines: {node: '>= 10.0.0'}
+
'@mapbox/node-pre-gyp@2.0.0':
resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==}
engines: {node: '>=18'}
@@ -4966,10 +5151,18 @@ packages:
'@nothing-but/utils@0.17.0':
resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==}
+ '@npmcli/agent@3.0.0':
+ resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
'@npmcli/config@8.3.4':
resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==}
engines: {node: ^16.14.0 || >=18.0.0}
+ '@npmcli/fs@4.0.0':
+ resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
'@npmcli/git@5.0.8':
resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -6728,6 +6921,9 @@ packages:
'@rolldown/pluginutils@1.0.0-rc.1':
resolution: {integrity: sha512-UTBjtTxVOhodhzFVp/ayITaTETRHPUPYZPXQe0WU0wOgxghMojXxYjOiPOauKIYNWJAWS2fd7gJgGQK8GU8vDA==}
+ '@rolldown/pluginutils@1.0.0-rc.2':
+ resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
+
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
engines: {node: '>=14.0.0'}
@@ -7262,6 +7458,10 @@ packages:
'@swc/types@0.1.25':
resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
+ '@szmarczak/http-timer@4.0.6':
+ resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
+ engines: {node: '>=10'}
+
'@tailwindcss/node@4.1.18':
resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
@@ -7564,6 +7764,9 @@ packages:
'@types/bun@1.3.8':
resolution: {integrity: sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA==}
+ '@types/cacheable-request@6.0.3':
+ resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
+
'@types/canvas-confetti@1.9.0':
resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==}
@@ -7624,6 +7827,9 @@ packages:
'@types/express@5.0.6':
resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==}
+ '@types/fs-extra@9.0.13':
+ resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
+
'@types/google.accounts@0.0.18':
resolution: {integrity: sha512-yHaPznll97ZnMJlPABHyeiIlLn3u6gQaUjA5k/O9lrrpgFB9VT10CKPLuKM0qTHMl50uXpW5sIcG+utm8jMOHw==}
@@ -7639,6 +7845,9 @@ packages:
'@types/hosted-git-info@3.0.5':
resolution: {integrity: sha512-Dmngh7U003cOHPhKGyA7LWqrnvcTyILNgNPmNCxlx7j8MIi54iBliiT8XqVLIQ3GchoOjVAyBzNJVyuaJjqokg==}
+ '@types/http-cache-semantics@4.2.0':
+ resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==}
+
'@types/http-errors@2.0.5':
resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
@@ -7663,6 +7872,9 @@ packages:
'@types/jsrsasign@10.5.15':
resolution: {integrity: sha512-3stUTaSRtN09PPzVWR6aySD9gNnuymz+WviNHoTb85dKu+BjaV4uBbWWGykBBJkfwPtcNZVfTn2lbX00U+yhpQ==}
+ '@types/keyv@3.1.4':
+ resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
+
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
@@ -7693,6 +7905,9 @@ packages:
'@types/pg@8.16.0':
resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==}
+ '@types/plist@3.0.5':
+ resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
+
'@types/pluralize@0.0.30':
resolution: {integrity: sha512-kVww6xZrW/db5BR9OqiT71J9huRdQ+z/r+LbDuT7/EK50mCmj5FoaIARnVv0rvjUS/YpDox0cDU9lpQT011VBA==}
@@ -7725,6 +7940,9 @@ packages:
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+ '@types/responselike@1.0.3':
+ resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
+
'@types/semver@7.7.1':
resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
@@ -7764,6 +7982,9 @@ packages:
'@types/use-sync-external-store@0.0.6':
resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==}
+ '@types/verror@1.10.11':
+ resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==}
+
'@types/webidl-conversions@7.0.3':
resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
@@ -7885,6 +8106,12 @@ packages:
peerDependencies:
vite: ^4 || ^5 || ^6 || ^7
+ '@vitejs/plugin-react@5.1.3':
+ resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
'@vitest/coverage-istanbul@4.0.18':
resolution: {integrity: sha512-0OhjP30owEDihYTZGWuq20rNtV1RjjJs1Mv4MaZIKcFBmiLUXX7HJLX4fU7wE+Mrc3lQxI2HKq6WrSXi5FGuCQ==}
peerDependencies:
@@ -8063,6 +8290,14 @@ packages:
ajv:
optional: true
+ ajv-keywords@3.5.2:
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
@@ -8126,6 +8361,16 @@ packages:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
+ app-builder-bin@5.0.0-alpha.12:
+ resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==}
+
+ app-builder-lib@26.7.0:
+ resolution: {integrity: sha512-/UgCD8VrO79Wv8aBNpjMfsS1pIUfIPURoRn0Ik6tMe5avdZF+vQgl/juJgipcMmH3YS0BD573lCdCHyoi84USg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ dmg-builder: 26.7.0
+ electron-builder-squirrel-windows: 26.7.0
+
appdirsjs@1.2.7:
resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==}
@@ -8180,6 +8425,10 @@ packages:
resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==}
engines: {node: '>=12.0.0'}
+ assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
@@ -8200,10 +8449,18 @@ packages:
resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==}
engines: {node: '>=4'}
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
+ async-exit-hook@2.0.1:
+ resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==}
+ engines: {node: '>=0.12.0'}
+
async-limiter@1.0.1:
resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
@@ -8213,6 +8470,16 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+
+ atomically@2.1.0:
+ resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==}
+
aws-ssl-profiles@1.1.2:
resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==}
engines: {node: '>= 6.0.0'}
@@ -8400,6 +8667,10 @@ packages:
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ boolean@3.2.0:
+ resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
boxen@8.0.1:
resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
engines: {node: '>=18'}
@@ -8456,6 +8727,13 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ builder-util-runtime@9.5.1:
+ resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==}
+ engines: {node: '>=12.0.0'}
+
+ builder-util@26.4.1:
+ resolution: {integrity: sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw==}
+
builtin-modules@3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
@@ -8499,6 +8777,18 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
+ cacache@19.0.1:
+ resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ cacheable-lookup@5.0.4:
+ resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
+ engines: {node: '>=10.6.0'}
+
+ cacheable-request@7.0.4:
+ resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==}
+ engines: {node: '>=8'}
+
caching-transform@4.0.0:
resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==}
engines: {node: '>=8'}
@@ -8619,6 +8909,9 @@ packages:
chromium-edge-launcher@0.2.0:
resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==}
+ chromium-pickle-js@0.2.0:
+ resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==}
+
ci-info@2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
@@ -8672,6 +8965,10 @@ packages:
resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
+ cli-truncate@2.1.0:
+ resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
+ engines: {node: '>=8'}
+
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
@@ -8693,6 +8990,9 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clone-response@1.0.3:
+ resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
+
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
@@ -8746,6 +9046,10 @@ packages:
colorspace@1.1.4:
resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
@@ -8775,6 +9079,10 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ commander@5.1.0:
+ resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+ engines: {node: '>= 6'}
+
commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
@@ -8793,6 +9101,10 @@ packages:
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+ compare-version@0.1.2:
+ resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==}
+ engines: {node: '>=0.10.0'}
+
compatx@0.2.0:
resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==}
@@ -8818,6 +9130,10 @@ packages:
resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
engines: {'0': node >= 6.0}
+ conf@15.1.0:
+ resolution: {integrity: sha512-Uy5YN9KEu0WWDaZAVJ5FAmZoaJt9rdK6kH+utItPyGsCqCgaTKkrmZx3zoE0/3q6S3bcp3Ihkk+ZqPxWxFK5og==}
+ engines: {node: '>=20'}
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -8881,6 +9197,9 @@ packages:
core-js-compat@3.48.0:
resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -8906,6 +9225,9 @@ packages:
resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
engines: {node: '>= 14'}
+ crc@3.8.0:
+ resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
+
cron-parser@4.9.0:
resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines: {node: '>=12.0.0'}
@@ -8914,6 +9236,9 @@ packages:
resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==}
engines: {node: '>=18.0'}
+ cross-dirname@0.1.0:
+ resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==}
+
cross-fetch@3.2.0:
resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
@@ -9095,6 +9420,10 @@ packages:
sqlite3:
optional: true
+ debounce-fn@6.0.0:
+ resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==}
+ engines: {node: '>=18'}
+
debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -9168,6 +9497,14 @@ packages:
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+ defer-to-connect@2.0.1:
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
+ engines: {node: '>=10'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
define-lazy-prop@2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
@@ -9176,9 +9513,17 @@ packages:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
denque@2.1.0:
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines: {node: '>=0.10'}
@@ -9217,6 +9562,9 @@ packages:
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
detective-amd@6.0.1:
resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==}
engines: {node: '>=18'}
@@ -9276,9 +9624,21 @@ packages:
resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
engines: {node: '>=0.3.1'}
+ dir-compare@4.2.0:
+ resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==}
+
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+ dmg-builder@26.7.0:
+ resolution: {integrity: sha512-uOOBA3f+kW3o4KpSoMQ6SNpdXU7WtxlJRb9vCZgOvqhTz4b3GjcoWKstdisizNZLsylhTMv8TLHFPFW0Uxsj/g==}
+
+ dmg-license@1.0.11:
+ resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==}
+ engines: {node: '>=8'}
+ os: [darwin]
+ hasBin: true
+
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -9292,6 +9652,10 @@ packages:
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+ dot-prop@10.1.0:
+ resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==}
+ engines: {node: '>=20'}
+
dot-prop@9.0.0:
resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==}
engines: {node: '>=18'}
@@ -9538,9 +9902,49 @@ packages:
effect@3.18.4:
resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==}
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ electron-builder-squirrel-windows@26.7.0:
+ resolution: {integrity: sha512-3EqkQK+q0kGshdPSKEPb2p5F75TENMKu6Fe5aTdeaPfdzFK4Yjp5L0d6S7K8iyvqIsGQ/ei4bnpyX9wt+kVCKQ==}
+
+ electron-builder@26.7.0:
+ resolution: {integrity: sha512-LoXbCvSFxLesPneQ/fM7FB4OheIDA2tjqCdUkKlObV5ZKGhYgi5VHPHO/6UUOUodAlg7SrkPx7BZJPby+Vrtbg==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ electron-publish@26.6.0:
+ resolution: {integrity: sha512-LsyHMMqbvJ2vsOvuWJ19OezgF2ANdCiHpIucDHNiLhuI+/F3eW98ouzWSRmXXi82ZOPZXC07jnIravY4YYwCLQ==}
+
+ electron-store@11.0.2:
+ resolution: {integrity: sha512-4VkNRdN+BImL2KcCi41WvAYbh6zLX5AUTi4so68yPqiItjbgTjqpEnGAqasgnG+lB6GuAyUltKwVopp6Uv+gwQ==}
+ engines: {node: '>=20'}
+
electron-to-chromium@1.5.267:
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+ electron-vite@5.0.0:
+ resolution: {integrity: sha512-OHp/vjdlubNlhNkPkL/+3JD34ii5ov7M0GpuXEVdQeqdQ3ulvVR7Dg/rNBLfS5XPIFwgoBLDf9sjjrL+CuDyRQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': ^1.0.0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+
+ electron-winstaller@5.4.0:
+ resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
+ engines: {node: '>=8.0.0'}
+
+ electron@39.5.1:
+ resolution: {integrity: sha512-6s/sBQar+bbW59XSqohZj04MPic+kdVUAWjLbfQB/uLOeNw9jWX5FHaTxpHK29Xp3mKOHef7wErsjwMyCuWltg==}
+ engines: {node: '>= 12.20.55'}
+ hasBin: true
+
embla-carousel-react@8.6.0:
resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==}
peerDependencies:
@@ -9595,6 +9999,9 @@ packages:
encoding-sniffer@0.2.1:
resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
+ encoding@0.1.13:
+ resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
@@ -9674,6 +10081,10 @@ packages:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
es-toolkit@1.39.10:
resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==}
@@ -10021,6 +10432,10 @@ packages:
engines: {node: '>= 10.17.0'}
hasBin: true
+ extsprintf@1.4.1:
+ resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
+ engines: {'0': node >=0.6.0}
+
fast-check@3.23.2:
resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==}
engines: {node: '>=8.0.0'}
@@ -10108,6 +10523,9 @@ packages:
file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+ filelist@1.0.4:
+ resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -10177,6 +10595,10 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
formatly@0.3.0:
resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==}
engines: {node: '>=18.3.0'}
@@ -10236,10 +10658,30 @@ packages:
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
+ fs-extra@11.3.3:
+ resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
+
fs-extra@8.1.0:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
+ fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+
+ fs-minipass@3.0.3:
+ resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -10458,6 +10900,10 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
+ global-agent@3.0.0:
+ resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
+ engines: {node: '>=10.0'}
+
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
engines: {node: '>=18'}
@@ -10466,6 +10912,10 @@ packages:
resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
engines: {node: '>=4'}
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
globby@14.1.0:
resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
engines: {node: '>=18'}
@@ -10479,6 +10929,10 @@ packages:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
+ got@11.8.6:
+ resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
+ engines: {node: '>=10.19.0'}
+
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -10524,10 +10978,17 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
hasha@5.2.2:
resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==}
engines: {node: '>=8'}
@@ -10607,6 +11068,10 @@ packages:
hookable@6.0.1:
resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==}
+ hosted-git-info@4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+
hosted-git-info@7.0.2:
resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -10636,6 +11101,9 @@ packages:
htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ http-cache-semantics@4.2.0:
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+
http-errors@2.0.1:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
@@ -10655,6 +11123,10 @@ packages:
http-status-codes@2.3.0:
resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==}
+ http2-wrapper@1.0.3:
+ resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
+ engines: {node: '>=10.19.0'}
+
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
@@ -10673,6 +11145,11 @@ packages:
hyphenate-style-name@1.1.0:
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
+ iconv-corefoundation@1.1.7:
+ resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==}
+ engines: {node: ^8.11.2 || >=10}
+ os: [darwin]
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -10792,6 +11269,10 @@ packages:
resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==}
engines: {node: '>=12.22.0'}
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -10968,6 +11449,14 @@ packages:
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ isbinaryfile@4.0.10:
+ resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
+ engines: {node: '>= 8.0.0'}
+
+ isbinaryfile@5.0.7:
+ resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==}
+ engines: {node: '>= 18.0.0'}
+
isbot@5.1.34:
resolution: {integrity: sha512-aCMIBSKd/XPRYdiCQTLC8QHH4YT8B3JUADu+7COgYIZPvkeoMcUHMRjZLM9/7V8fCj+l7FSREc1lOPNjzogo/A==}
engines: {node: '>=18'}
@@ -11014,6 +11503,11 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+ jake@10.9.4:
+ resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
jest-environment-node@29.7.0:
resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -11133,6 +11627,9 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
@@ -11140,6 +11637,9 @@ packages:
resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
@@ -11149,6 +11649,9 @@ packages:
json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
@@ -11160,6 +11663,9 @@ packages:
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
jsonwebtoken@9.0.3:
resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==}
engines: {node: '>=12', npm: '>=6'}
@@ -11181,6 +11687,9 @@ packages:
resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
engines: {node: '>=18'}
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
@@ -11237,6 +11746,9 @@ packages:
launch-editor@2.12.0:
resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==}
+ lazy-val@1.0.5:
+ resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
+
lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
engines: {node: '>= 0.6.3'}
@@ -11548,6 +12060,10 @@ packages:
lottie-web@5.13.0:
resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==}
+ lowercase-keys@2.0.0:
+ resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
+ engines: {node: '>=8'}
+
lowlight@3.3.0:
resolution: {integrity: sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==}
@@ -11561,6 +12077,10 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
lru.min@1.1.3:
resolution: {integrity: sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==}
engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'}
@@ -11609,6 +12129,10 @@ packages:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
+ make-fetch-happen@14.0.3:
+ resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
@@ -11644,6 +12168,10 @@ packages:
match-casing@2.0.1:
resolution: {integrity: sha512-LeCq9FI5u4nppJnt4hklxcchkH9qH9+uFjX17f74a99lLkRXfVE49iL0hCtM5DZolps483viAy5zjvlTz/JNoA==}
+ matcher@3.0.0:
+ resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
+ engines: {node: '>=10'}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
@@ -11981,6 +12509,14 @@ packages:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ mimic-response@1.0.1:
+ resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
+ engines: {node: '>=4'}
+
mimic-response@3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
@@ -12016,6 +12552,30 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ minipass-collect@2.0.1:
+ resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass-fetch@4.0.1:
+ resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ minipass-flush@1.0.5:
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
+
+ minipass-pipeline@1.2.4:
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
+
+ minipass-sized@1.0.3:
+ resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+ engines: {node: '>=8'}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -12030,6 +12590,10 @@ packages:
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
mkdirp@1.0.4:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
@@ -12247,9 +12811,19 @@ packages:
resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==}
engines: {node: '>=10'}
+ node-abi@4.26.0:
+ resolution: {integrity: sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==}
+ engines: {node: '>=22.12.0'}
+
+ node-addon-api@1.7.2:
+ resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
+
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ node-api-version@0.2.1:
+ resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==}
+
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
@@ -12283,6 +12857,11 @@ packages:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
+ node-gyp@11.5.0:
+ resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -12333,6 +12912,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ normalize-url@6.1.0:
+ resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
+ engines: {node: '>=10'}
+
npm-install-checks@6.3.0:
resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -12410,6 +12993,10 @@ packages:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
@@ -12491,6 +13078,10 @@ packages:
oxc-resolver@11.17.0:
resolution: {integrity: sha512-R5P2Tw6th+nQJdNcZGfuppBS/sM0x1EukqYffmlfX2xXLgLGCCPwu4ruEr9Sx29mrpkHgITc130Qps2JR90NdQ==}
+ p-cancelable@2.1.1:
+ resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
+ engines: {node: '>=8'}
+
p-event@6.0.1:
resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==}
engines: {node: '>=16.17'}
@@ -12677,6 +13268,10 @@ packages:
pause-stream@0.0.11:
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
+ pe-library@0.4.1:
+ resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==}
+ engines: {node: '>=12', npm: '>=6'}
+
peberminta@0.9.0:
resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
@@ -12869,6 +13464,11 @@ packages:
resolution: {integrity: sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==}
engines: {node: '>=12'}
+ postject@1.0.0-alpha.6:
+ resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'}
@@ -12927,6 +13527,10 @@ packages:
resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ proc-log@5.0.0:
+ resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -13047,6 +13651,10 @@ packages:
queue@6.0.2:
resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
+ quick-lru@5.1.1:
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
+ engines: {node: '>=10'}
+
quotation@2.0.3:
resolution: {integrity: sha512-yEc24TEgCFLXx7D4JHJJkK4JFVtatO8fziwUxY4nB/Jbea9o9CVS3gt22mA0W7rPYAGW2fWzYDSOtD94PwOyqA==}
@@ -13262,6 +13870,10 @@ packages:
resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
engines: {node: '>=0.10.0'}
+ react-refresh@0.18.0:
+ resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==}
+ engines: {node: '>=0.10.0'}
+
react-remove-scroll-bar@2.3.8:
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
engines: {node: '>=10'}
@@ -13328,6 +13940,10 @@ packages:
resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines: {node: '>=0.10.0'}
+ read-binary-file-arch@1.0.6:
+ resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==}
+ hasBin: true
+
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
@@ -13762,6 +14378,10 @@ packages:
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
+ resedit@1.7.2:
+ resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==}
+ engines: {node: '>=12', npm: '>=6'}
+
reselect@5.1.1:
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
@@ -13774,6 +14394,9 @@ packages:
'@react-email/render':
optional: true
+ resolve-alpn@1.2.1:
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -13808,6 +14431,9 @@ packages:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
+ responselike@2.0.1:
+ resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
+
restore-cursor@2.0.0:
resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
engines: {node: '>=4'}
@@ -13854,11 +14480,20 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rimraf@2.6.3:
+ resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ roarr@2.15.4:
+ resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
+ engines: {node: '>=8.0'}
+
rolldown-plugin-dts@0.21.7:
resolution: {integrity: sha512-u6mHPTxLzC/eU3hbFqu1Hd47if1zXITvNtbro5PRVqMe3tLzUkdeur87wRg8Y/bX5PYUUtPuGO815uHp8zi9uQ==}
engines: {node: '>=20.19.0'}
@@ -13935,6 +14570,9 @@ packages:
samlify@2.10.2:
resolution: {integrity: sha512-y5s1cHwclqwP8h7K2Wj9SfP1q+1S9+jrs5OAegYTLAiuFi7nDvuKqbiXLmUTvYPMpzHcX94wTY2+D604jgTKvA==}
+ sanitize-filename@1.6.3:
+ resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
+
sass@1.97.1:
resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==}
engines: {node: '>=14.0.0'}
@@ -13967,6 +14605,9 @@ packages:
selderee@0.11.0:
resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
+ semver-compare@1.0.0:
+ resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
+
semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@@ -14005,6 +14646,10 @@ packages:
resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==}
engines: {node: '>=0.10.0'}
+ serialize-error@7.0.1:
+ resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
+ engines: {node: '>=10'}
+
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
@@ -14111,6 +14756,10 @@ packages:
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ simple-update-notifier@2.0.0:
+ resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
+ engines: {node: '>=10'}
+
sirv@3.0.2:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
engines: {node: '>=18'}
@@ -14134,10 +14783,18 @@ packages:
resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==}
engines: {node: '>=6'}
+ slice-ansi@3.0.0:
+ resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
+ engines: {node: '>=8'}
+
slugify@1.6.6:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
smob@1.5.0:
resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
@@ -14145,6 +14802,14 @@ packages:
resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
engines: {node: '>= 18'}
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
solid-js@1.9.11:
resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==}
@@ -14232,6 +14897,10 @@ packages:
engines: {node: '>=20.16.0'}
hasBin: true
+ ssri@12.0.0:
+ resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
stack-trace@0.0.10:
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
@@ -14255,6 +14924,10 @@ packages:
standardwebhooks@1.0.0:
resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==}
+ stat-mode@1.0.0:
+ resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==}
+ engines: {node: '>= 6'}
+
statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
@@ -14371,6 +15044,12 @@ packages:
structured-headers@0.4.1:
resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==}
+ stubborn-fs@2.0.0:
+ resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==}
+
+ stubborn-utils@1.0.2:
+ resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==}
+
style-to-js@1.1.21:
resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
@@ -14398,6 +15077,10 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
+ sumchecker@3.0.1:
+ resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
+ engines: {node: '>= 8.0'}
+
supports-color@10.2.2:
resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
engines: {node: '>=18'}
@@ -14489,6 +15172,10 @@ packages:
engines: {node: '>=18'}
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
+ tar@7.5.7:
+ resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==}
+ engines: {node: '>=18'}
+
tarn@3.0.2:
resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==}
engines: {node: '>=8.0.0'}
@@ -14501,6 +15188,13 @@ packages:
resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
engines: {node: '>=8'}
+ temp-file@3.4.0:
+ resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==}
+
+ temp@0.9.4:
+ resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==}
+ engines: {node: '>=6.0.0'}
+
terminal-link@2.1.1:
resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
engines: {node: '>=8'}
@@ -14550,6 +15244,9 @@ packages:
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ tiny-async-pool@1.3.0:
+ resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==}
+
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -14638,6 +15335,9 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+ truncate-utf8-bytes@1.0.2:
+ resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
+
ts-api-utils@2.1.0:
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
engines: {node: '>=18.12'}
@@ -14737,6 +15437,10 @@ packages:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
+ type-fest@0.13.1:
+ resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
+ engines: {node: '>=10'}
+
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@@ -14802,6 +15506,10 @@ packages:
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+
ultrahtml@1.6.0:
resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==}
@@ -14891,6 +15599,14 @@ packages:
resolution: {integrity: sha512-bTuAMMOOqIAyjV4i4UH7P07pO+EsVxmhOzQ2YJ290J6mkLUdozNhb5I/YoOEheeNADC03ent3Qj07X0fWfUpmw==}
engines: {node: '>=18.12.0'}
+ unique-filename@4.0.0:
+ resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ unique-slug@5.0.0:
+ resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
unique-string@2.0.0:
resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
engines: {node: '>=8'}
@@ -14932,6 +15648,10 @@ packages:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
unixify@1.0.0:
resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==}
engines: {node: '>=0.10.0'}
@@ -15040,6 +15760,9 @@ packages:
uqr@0.1.2:
resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==}
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
urlpattern-polyfill@10.1.0:
resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
@@ -15076,6 +15799,9 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ utf8-byte-length@1.0.5:
+ resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -15135,6 +15861,10 @@ packages:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
+ verror@1.10.1:
+ resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
+ engines: {node: '>=0.6.0'}
+
vfile-location@5.0.3:
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
@@ -15375,6 +16105,9 @@ packages:
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ when-exit@2.1.5:
+ resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==}
+
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
@@ -15388,6 +16121,11 @@ packages:
engines: {node: ^16.13.0 || >=18.0.0}
hasBin: true
+ which@5.0.0:
+ resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
@@ -15671,6 +16409,8 @@ packages:
snapshots:
+ 7zip-bin@5.2.0: {}
+
'@0no-co/graphql.web@1.2.0(graphql@16.12.0)':
optionalDependencies:
graphql: 16.12.0
@@ -16022,6 +16762,26 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/generator@7.28.6':
dependencies:
'@babel/parser': 7.28.6
@@ -16049,7 +16809,7 @@ snapshots:
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@babel/helper-compilation-targets@7.28.6':
dependencies:
@@ -16072,6 +16832,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.28.6
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16079,6 +16852,13 @@ snapshots:
regexpu-core: 6.3.1
semver: 6.3.1
+ '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ regexpu-core: 6.3.1
+ semver: 6.3.1
+
'@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16086,6 +16866,13 @@ snapshots:
regexpu-core: 6.4.0
semver: 6.3.1
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ regexpu-core: 6.4.0
+ semver: 6.3.1
+
'@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16097,18 +16884,29 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ debug: 4.4.3
+ lodash.debounce: 4.0.8
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-globals@7.28.0': {}
'@babel/helper-member-expression-to-functions@7.28.5':
dependencies:
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.18.6':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@babel/helper-module-imports@7.28.6':
dependencies:
@@ -16126,9 +16924,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@babel/helper-plugin-utils@7.28.6': {}
@@ -16141,6 +16948,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-wrap-function': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16150,10 +16966,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
@@ -16171,7 +16996,7 @@ snapshots:
dependencies:
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
@@ -16243,11 +17068,25 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16257,41 +17096,81 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-flow@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16302,66 +17181,131 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16373,6 +17317,11 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16382,6 +17331,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16392,6 +17350,16 @@ snapshots:
- supports-color
optional: true
+ '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16401,6 +17369,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16411,6 +17388,11 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16419,6 +17401,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16427,6 +17417,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16447,12 +17445,30 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
'@babel/template': 7.28.6
+ '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/template': 7.28.6
+
'@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16461,6 +17477,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16501,12 +17525,23 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
'@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.0)
+
'@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16515,6 +17550,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16524,6 +17567,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16534,11 +17586,21 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16560,6 +17622,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16584,6 +17654,12 @@ snapshots:
'@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6)
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16591,6 +17667,13 @@ snapshots:
'@babel/helper-plugin-utils': 7.28.6
optional: true
+ '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ optional: true
+
'@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16601,11 +17684,21 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16617,6 +17710,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16630,6 +17734,11 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16638,11 +17747,24 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16651,6 +17773,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16660,6 +17790,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16670,6 +17809,11 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16677,16 +17821,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16694,7 +17855,18 @@ snapshots:
'@babel/helper-module-imports': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
@@ -16704,17 +17876,34 @@ snapshots:
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
optional: true
+ '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ optional: true
+
'@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16738,6 +17927,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-runtime@7.29.0(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16751,11 +17952,29 @@ snapshots:
- supports-color
optional: true
+ '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16764,16 +17983,35 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ optional: true
+
'@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16790,6 +18028,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16807,6 +18056,12 @@ snapshots:
'@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.6)
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16908,6 +18163,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/preset-react@7.28.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/preset-typescript@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -16919,6 +18186,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/runtime@7.28.6': {}
'@babel/template@7.28.6':
@@ -17340,6 +18618,11 @@ snapshots:
gonzales-pe: 4.3.0
node-source-walk: 7.0.1
+ '@develar/schema-utils@2.6.5':
+ dependencies:
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
'@drizzle-team/brocli@0.10.2': {}
'@egjs/hammerjs@2.0.17':
@@ -17362,6 +18645,114 @@ snapshots:
'@electric-sql/pglite@0.3.2':
optional: true
+ '@electron-toolkit/tsconfig@2.0.0(@types/node@22.19.8)':
+ dependencies:
+ '@types/node': 22.19.8
+
+ '@electron-toolkit/utils@4.0.0(electron@39.5.1)':
+ dependencies:
+ electron: 39.5.1
+
+ '@electron/asar@3.4.1':
+ dependencies:
+ commander: 5.1.0
+ glob: 7.2.3
+ minimatch: 3.1.2
+
+ '@electron/fuses@1.8.0':
+ dependencies:
+ chalk: 4.1.2
+ fs-extra: 9.1.0
+ minimist: 1.2.8
+
+ '@electron/get@2.0.3':
+ dependencies:
+ debug: 4.4.3
+ env-paths: 2.2.1
+ fs-extra: 8.1.0
+ got: 11.8.6
+ progress: 2.0.3
+ semver: 6.3.1
+ sumchecker: 3.0.1
+ optionalDependencies:
+ global-agent: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/get@3.1.0':
+ dependencies:
+ debug: 4.4.3
+ env-paths: 2.2.1
+ fs-extra: 8.1.0
+ got: 11.8.6
+ progress: 2.0.3
+ semver: 6.3.1
+ sumchecker: 3.0.1
+ optionalDependencies:
+ global-agent: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/notarize@2.5.0':
+ dependencies:
+ debug: 4.4.3
+ fs-extra: 9.1.0
+ promise-retry: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/osx-sign@1.3.3':
+ dependencies:
+ compare-version: 0.1.2
+ debug: 4.4.3
+ fs-extra: 10.1.0
+ isbinaryfile: 4.0.10
+ minimist: 1.2.8
+ plist: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/rebuild@4.0.3':
+ dependencies:
+ '@malept/cross-spawn-promise': 2.0.0
+ debug: 4.4.3
+ detect-libc: 2.1.2
+ got: 11.8.6
+ graceful-fs: 4.2.11
+ node-abi: 4.26.0
+ node-api-version: 0.2.1
+ node-gyp: 11.5.0
+ ora: 5.4.1
+ read-binary-file-arch: 1.0.6
+ semver: 7.7.3
+ tar: 7.5.7
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/universal@2.0.3':
+ dependencies:
+ '@electron/asar': 3.4.1
+ '@malept/cross-spawn-promise': 2.0.0
+ debug: 4.4.3
+ dir-compare: 4.2.0
+ fs-extra: 11.3.3
+ minimatch: 9.0.5
+ plist: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/windows-sign@1.2.2':
+ dependencies:
+ cross-dirname: 0.1.0
+ debug: 4.4.3
+ fs-extra: 11.3.3
+ minimist: 1.2.8
+ postject: 1.0.0-alpha.6
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@emnapi/core@1.8.1':
dependencies:
'@emnapi/wasi-threads': 1.1.0
@@ -17905,7 +19296,7 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.19.0
optionalDependencies:
- expo-router: 6.0.22(193f004e4d1f794f3c17de7b0c4302be)
+ expo-router: 6.0.22(71728b829b512756b00beaf554dc1af1)
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
transitivePeerDependencies:
- bufferutil
@@ -17913,7 +19304,7 @@ snapshots:
- supports-color
- utf-8-validate
- '@expo/cli@54.0.22(expo-router@6.0.22)(expo@54.0.32)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))':
+ '@expo/cli@54.0.22(expo-router@6.0.22)(expo@54.0.32)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))':
dependencies:
'@0no-co/graphql.web': 1.2.0(graphql@16.12.0)
'@expo/code-signing-certificates': 0.0.6
@@ -17947,7 +19338,7 @@ snapshots:
connect: 3.7.0
debug: 4.4.3
env-editor: 0.4.2
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
expo-server: 1.0.5
freeport-async: 2.0.0
getenv: 2.0.0
@@ -17980,8 +19371,8 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.19.0
optionalDependencies:
- expo-router: 6.0.22(5991a69924777df32846cf001cdadd07)
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ expo-router: 6.0.22(e89d5bee30cbc357dd12201c8dd32438)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
transitivePeerDependencies:
- bufferutil
- graphql
@@ -18045,12 +19436,12 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- '@expo/devtools@0.1.8(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@expo/devtools@0.1.8(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
chalk: 4.1.2
optionalDependencies:
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
'@expo/env@2.0.8':
dependencies:
@@ -18120,7 +19511,7 @@ snapshots:
postcss: 8.4.49
resolve-from: 5.0.0
optionalDependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -18138,13 +19529,13 @@ snapshots:
optionalDependencies:
react-dom: 19.1.0(react@19.1.0)
- '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
anser: 1.4.10
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
pretty-format: 29.7.0
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
stacktrace-parser: 0.1.11
whatwg-fetch: 3.6.20
optionalDependencies:
@@ -18201,7 +19592,7 @@ snapshots:
'@expo/json-file': 10.0.8
'@react-native/normalize-colors': 0.81.5
debug: 4.4.3
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
resolve-from: 5.0.0
semver: 7.7.3
xml2js: 0.6.0
@@ -18224,11 +19615,11 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
- expo-font: 14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo-font: 14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
'@expo/ws-tunnel@1.0.6': {}
@@ -18267,9 +19658,9 @@ snapshots:
'@formatjs/fast-memoize': 3.1.0
tslib: 2.8.1
- '@fumadocs/ui@16.4.9(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)':
+ '@fumadocs/ui@16.4.9(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)':
dependencies:
- fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
postcss-selector-parser: 7.1.1
react: 19.2.4
@@ -18277,7 +19668,7 @@ snapshots:
tailwind-merge: 3.4.0
optionalDependencies:
'@types/react': 19.2.10
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
tailwindcss: 4.1.18
'@hapi/hoek@9.3.0':
@@ -18576,10 +19967,10 @@ snapshots:
'@levischuck/tiny-cbor@0.2.11': {}
- '@libsql/client@0.17.0':
+ '@libsql/client@0.17.0(encoding@0.1.13)':
dependencies:
'@libsql/core': 0.17.0
- '@libsql/hrana-client': 0.9.0
+ '@libsql/hrana-client': 0.9.0(encoding@0.1.13)
js-base64: 3.7.8
libsql: 0.5.22
promise-limit: 2.7.0
@@ -18631,10 +20022,10 @@ snapshots:
- bufferutil
- utf-8-validate
- '@libsql/hrana-client@0.9.0':
+ '@libsql/hrana-client@0.9.0(encoding@0.1.13)':
dependencies:
'@libsql/isomorphic-ws': 0.1.5
- cross-fetch: 4.1.0
+ cross-fetch: 4.1.0(encoding@0.1.13)
js-base64: 3.7.8
node-fetch: 3.3.2
transitivePeerDependencies:
@@ -18706,12 +20097,25 @@ snapshots:
'@types/react': 19.2.10
preact: '@hongzhiyuan/preact@10.28.0-fc4af453'
- '@mapbox/node-pre-gyp@2.0.0':
+ '@malept/cross-spawn-promise@2.0.0':
+ dependencies:
+ cross-spawn: 7.0.6
+
+ '@malept/flatpak-bundler@0.4.0':
+ dependencies:
+ debug: 4.4.3
+ fs-extra: 9.1.0
+ lodash: 4.17.21
+ tmp-promise: 3.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)':
dependencies:
consola: 3.4.2
detect-libc: 2.1.2
https-proxy-agent: 7.0.6
- node-fetch: 2.7.0
+ node-fetch: 2.7.0(encoding@0.1.13)
nopt: 8.1.0
semver: 7.7.3
tar: 7.5.2
@@ -18858,12 +20262,12 @@ snapshots:
write-file-atomic: 5.0.1
optional: true
- '@netlify/functions@3.1.10(rollup@4.55.1)':
+ '@netlify/functions@3.1.10(encoding@0.1.13)(rollup@4.55.1)':
dependencies:
'@netlify/blobs': 9.1.2
'@netlify/dev-utils': 2.2.0
'@netlify/serverless-functions-api': 1.41.2
- '@netlify/zip-it-and-ship-it': 12.2.1(rollup@4.55.1)
+ '@netlify/zip-it-and-ship-it': 12.2.1(encoding@0.1.13)(rollup@4.55.1)
cron-parser: 4.9.0
decache: 4.6.2
extract-zip: 2.0.1
@@ -18899,13 +20303,13 @@ snapshots:
'@netlify/serverless-functions-api@2.2.1': {}
- '@netlify/zip-it-and-ship-it@12.2.1(rollup@4.55.1)':
+ '@netlify/zip-it-and-ship-it@12.2.1(encoding@0.1.13)(rollup@4.55.1)':
dependencies:
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
'@babel/types': 7.28.0
'@netlify/binary-info': 1.0.0
'@netlify/serverless-functions-api': 2.2.1
- '@vercel/nft': 0.29.4(rollup@4.55.1)
+ '@vercel/nft': 0.29.4(encoding@0.1.13)(rollup@4.55.1)
archiver: 7.0.1
common-path-prefix: 3.0.0
copy-file: 11.1.0
@@ -18985,6 +20389,16 @@ snapshots:
'@nothing-but/utils@0.17.0': {}
+ '@npmcli/agent@3.0.0':
+ dependencies:
+ agent-base: 7.1.3
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 10.4.3
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
'@npmcli/config@8.3.4':
dependencies:
'@npmcli/map-workspaces': 3.0.6
@@ -18998,6 +20412,10 @@ snapshots:
transitivePeerDependencies:
- bluebird
+ '@npmcli/fs@4.0.0':
+ dependencies:
+ semver: 7.7.3
+
'@npmcli/git@5.0.8':
dependencies:
'@npmcli/promise-spawn': 7.0.2
@@ -20759,6 +22177,14 @@ snapshots:
- '@babel/core'
- supports-color
+ '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@react-native/codegen': 0.81.5(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
'@react-native/babel-plugin-codegen@0.83.1(@babel/core@7.28.6)':
dependencies:
'@babel/traverse': 7.29.0
@@ -20768,6 +22194,15 @@ snapshots:
- supports-color
optional: true
+ '@react-native/babel-plugin-codegen@0.83.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@react-native/codegen': 0.83.1(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+ optional: true
+
'@react-native/babel-preset@0.81.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -20818,6 +22253,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@react-native/babel-preset@0.81.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/template': 7.28.6
+ '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.29.0)
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0)
+ react-refresh: 0.14.2
+ transitivePeerDependencies:
+ - supports-color
+
'@react-native/babel-preset@0.83.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -20869,6 +22354,57 @@ snapshots:
- supports-color
optional: true
+ '@react-native/babel-preset@0.83.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/template': 7.28.6
+ '@react-native/babel-plugin-codegen': 0.83.1(@babel/core@7.29.0)
+ babel-plugin-syntax-hermes-parser: 0.32.0
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0)
+ react-refresh: 0.14.2
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@react-native/codegen@0.81.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
@@ -20879,10 +22415,31 @@ snapshots:
nullthrows: 1.1.1
yargs: 17.7.2
+ '@react-native/codegen@0.81.5(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.28.6
+ glob: 7.2.3
+ hermes-parser: 0.29.1
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+
'@react-native/codegen@0.83.1(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
+ glob: 7.2.3
+ hermes-parser: 0.32.0
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+ optional: true
+
+ '@react-native/codegen@0.83.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/parser': 7.29.0
glob: 7.2.3
hermes-parser: 0.32.0
invariant: 2.2.4
@@ -20906,7 +22463,7 @@ snapshots:
- supports-color
- utf-8-validate
- '@react-native/community-cli-plugin@0.83.1(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))':
+ '@react-native/community-cli-plugin@0.83.1(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))':
dependencies:
'@react-native/dev-middleware': 0.83.1
debug: 4.4.3
@@ -20917,7 +22474,7 @@ snapshots:
semver: 7.7.3
optionalDependencies:
'@react-native-community/cli': 20.0.2(typescript@5.9.3)
- '@react-native/metro-config': 0.83.1(@babel/core@7.28.6)
+ '@react-native/metro-config': 0.83.1(@babel/core@7.29.0)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -20987,6 +22544,16 @@ snapshots:
- supports-color
optional: true
+ '@react-native/metro-babel-transformer@0.83.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@react-native/babel-preset': 0.83.1(@babel/core@7.29.0)
+ hermes-parser: 0.32.0
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
'@react-native/metro-config@0.83.1(@babel/core@7.28.6)':
dependencies:
'@react-native/js-polyfills': 0.83.1
@@ -20998,6 +22565,17 @@ snapshots:
- supports-color
optional: true
+ '@react-native/metro-config@0.83.1(@babel/core@7.29.0)':
+ dependencies:
+ '@react-native/js-polyfills': 0.83.1
+ '@react-native/metro-babel-transformer': 0.83.1(@babel/core@7.29.0)
+ metro-config: 0.83.3
+ metro-runtime: 0.83.3
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+ optional: true
+
'@react-native/normalize-colors@0.74.89': {}
'@react-native/normalize-colors@0.81.5': {}
@@ -21013,12 +22591,12 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@react-native/virtualized-lists@0.83.1(@types/react@19.2.10)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@react-native/virtualized-lists@0.83.1(@types/react@19.2.10)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
invariant: 2.2.4
nullthrows: 1.1.1
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
optionalDependencies:
'@types/react': 19.2.10
@@ -21035,15 +22613,15 @@ snapshots:
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
- '@react-navigation/bottom-tabs@7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/bottom-tabs@7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
- '@react-navigation/elements': 2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/elements': 2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
+ react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
sf-symbols-typescript: 2.2.0
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
@@ -21084,13 +22662,13 @@ snapshots:
use-latest-callback: 0.2.6(react@19.1.0)
use-sync-external-store: 1.6.0(react@19.1.0)
- '@react-navigation/elements@2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/elements@2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
- '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
+ react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
use-latest-callback: 0.2.6(react@19.2.4)
use-sync-external-store: 1.6.0(react@19.2.4)
optional: true
@@ -21109,15 +22687,15 @@ snapshots:
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
- '@react-navigation/native-stack@7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/native-stack@7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
- '@react-navigation/elements': 2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/elements': 2.9.3(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
+ react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
sf-symbols-typescript: 2.2.0
warn-once: 0.1.1
transitivePeerDependencies:
@@ -21134,14 +22712,14 @@ snapshots:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
use-latest-callback: 0.2.6(react@19.1.0)
- '@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)':
dependencies:
'@react-navigation/core': 7.13.7(react@19.2.4)
escape-string-regexp: 4.0.0
fast-deep-equal: 3.1.3
nanoid: 3.3.11
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
use-latest-callback: 0.2.6(react@19.2.4)
optional: true
@@ -21218,51 +22796,51 @@ snapshots:
'@resvg/resvg-wasm@2.4.0': {}
- '@rn-primitives/avatar@1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@rn-primitives/avatar@1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
- '@rn-primitives/hooks': 1.3.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- '@rn-primitives/slot': 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/hooks': 1.3.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/slot': 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
optionalDependencies:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@rn-primitives/hooks@1.3.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@rn-primitives/hooks@1.3.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
- '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
optionalDependencies:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@rn-primitives/separator@1.2.0(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@rn-primitives/separator@1.2.0(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/react-separator': 1.1.8(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@rn-primitives/slot': 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/slot': 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-primitives/types': 1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
optionalDependencies:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
- react-dom
- '@rn-primitives/slot@1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@rn-primitives/slot@1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
react: 19.1.0
optionalDependencies:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@rn-primitives/types@1.2.0(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@rn-primitives/types@1.2.0(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
react: 19.1.0
optionalDependencies:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@rolldown/binding-android-arm64@1.0.0-rc.1':
optional: true
@@ -21311,6 +22889,8 @@ snapshots:
'@rolldown/pluginutils@1.0.0-rc.1': {}
+ '@rolldown/pluginutils@1.0.0-rc.2': {}
+
'@rollup/plugin-alias@5.1.1(rollup@4.55.1)':
optionalDependencies:
rollup: 4.55.1
@@ -21455,10 +23035,10 @@ snapshots:
'@scalar/helpers@0.2.9': {}
- '@scalar/nextjs-api-reference@0.9.15(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)':
+ '@scalar/nextjs-api-reference@0.9.15(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)':
dependencies:
'@scalar/core': 0.3.34
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
'@scalar/types@0.5.10':
@@ -21705,11 +23285,11 @@ snapshots:
dependencies:
solid-js: 1.9.11
- '@solidjs/start@1.2.1(solid-js@1.9.11)(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
+ '@solidjs/start@1.2.1(solid-js@1.9.11)(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))
- '@vinxi/server-components': 0.5.1(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))
+ '@vinxi/server-components': 0.5.1(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))
cookie-es: 2.0.0
defu: 6.1.4
error-stack-parser: 2.1.4
@@ -21721,7 +23301,7 @@ snapshots:
source-map-js: 1.2.1
terracotta: 1.0.6(solid-js@1.9.11)
tinyglobby: 0.2.15
- vinxi: 0.5.11(af991c32974e6dfef2e6764239993deb)
+ vinxi: 0.5.11(a59819f55c4935ff24bbe5864b6de9f1)
vite-plugin-solid: 2.11.8(solid-js@1.9.11)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@testing-library/jest-dom'
@@ -21838,6 +23418,10 @@ snapshots:
dependencies:
'@swc/counter': 0.1.3
+ '@szmarczak/http-timer@4.0.6':
+ dependencies:
+ defer-to-connect: 2.0.1
+
'@tailwindcss/node@4.1.18':
dependencies:
'@jridgewell/remapping': 2.3.5
@@ -21907,6 +23491,13 @@ snapshots:
postcss: 8.5.6
tailwindcss: 4.1.18
+ '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
+ dependencies:
+ '@tailwindcss/node': 4.1.18
+ '@tailwindcss/oxide': 4.1.18
+ tailwindcss: 4.1.18
+ vite: 7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
+
'@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@tailwindcss/node': 4.1.18
@@ -21919,7 +23510,7 @@ snapshots:
'@babel/code-frame': 7.26.2
'@babel/core': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@tanstack/router-utils': 1.154.7
babel-dead-code-elimination: 1.0.12
tiny-invariant: 1.3.3
@@ -22040,7 +23631,7 @@ snapshots:
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6)
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@tanstack/router-core': 1.157.16
'@tanstack/router-generator': 1.157.16
'@tanstack/router-utils': 1.154.7
@@ -22058,8 +23649,8 @@ snapshots:
'@tanstack/router-utils@1.154.7':
dependencies:
'@babel/core': 7.28.6
- '@babel/generator': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/generator': 7.29.0
+ '@babel/parser': 7.29.0
ansis: 4.2.0
diff: 8.0.3
pathe: 2.0.3
@@ -22075,7 +23666,7 @@ snapshots:
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6)
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
babel-dead-code-elimination: 1.0.12
tiny-invariant: 1.3.3
@@ -22156,7 +23747,7 @@ snapshots:
dependencies:
'@babel/code-frame': 7.27.1
'@babel/core': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@rolldown/pluginutils': 1.0.0-beta.40
'@tanstack/router-core': 1.157.16
'@tanstack/router-generator': 1.157.16
@@ -22239,7 +23830,7 @@ snapshots:
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@types/better-sqlite3@7.6.13':
dependencies:
@@ -22260,6 +23851,13 @@ snapshots:
dependencies:
bun-types: 1.3.8
+ '@types/cacheable-request@6.0.3':
+ dependencies:
+ '@types/http-cache-semantics': 4.2.0
+ '@types/keyv': 3.1.4
+ '@types/node': 25.2.0
+ '@types/responselike': 1.0.3
+
'@types/canvas-confetti@1.9.0': {}
'@types/chai@5.2.3':
@@ -22326,6 +23924,10 @@ snapshots:
'@types/express-serve-static-core': 5.1.1
'@types/serve-static': 2.2.0
+ '@types/fs-extra@9.0.13':
+ dependencies:
+ '@types/node': 25.2.0
+
'@types/google.accounts@0.0.18': {}
'@types/graceful-fs@4.1.9':
@@ -22340,6 +23942,8 @@ snapshots:
'@types/hosted-git-info@3.0.5': {}
+ '@types/http-cache-semantics@4.2.0': {}
+
'@types/http-errors@2.0.5': {}
'@types/is-empty@1.2.3': {}
@@ -22360,6 +23964,10 @@ snapshots:
'@types/jsrsasign@10.5.15': {}
+ '@types/keyv@3.1.4':
+ dependencies:
+ '@types/node': 25.2.0
+
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
@@ -22396,6 +24004,12 @@ snapshots:
pg-protocol: 1.10.3
pg-types: 2.2.0
+ '@types/plist@3.0.5':
+ dependencies:
+ '@types/node': 25.2.0
+ xmlbuilder: 15.1.1
+ optional: true
+
'@types/pluralize@0.0.30': {}
'@types/prismjs@1.26.5': {}
@@ -22432,6 +24046,10 @@ snapshots:
'@types/resolve@1.20.2': {}
+ '@types/responselike@1.0.3':
+ dependencies:
+ '@types/node': 25.2.0
+
'@types/semver@7.7.1': {}
'@types/send@1.2.1':
@@ -22463,6 +24081,9 @@ snapshots:
'@types/use-sync-external-store@0.0.6': {}
+ '@types/verror@1.10.11':
+ optional: true
+
'@types/webidl-conversions@7.0.3': {}
'@types/whatwg-mimetype@3.0.2': {}
@@ -22544,19 +24165,19 @@ snapshots:
'@urql/core': 5.2.0(graphql@16.12.0)
wonka: 6.3.5
- '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.50.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))':
+ '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.50.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.46.1)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))':
optionalDependencies:
'@remix-run/react': 2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
'@sveltejs/kit': 2.50.1(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
svelte: 5.46.1
vue: 3.5.27(typescript@5.9.3)
vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
- '@vercel/nft@0.29.4(rollup@4.55.1)':
+ '@vercel/nft@0.29.4(encoding@0.1.13)(rollup@4.55.1)':
dependencies:
- '@mapbox/node-pre-gyp': 2.0.0
+ '@mapbox/node-pre-gyp': 2.0.0(encoding@0.1.13)
'@rollup/pluginutils': 5.2.0(rollup@4.55.1)
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
@@ -22600,9 +24221,9 @@ snapshots:
untun: 0.1.3
uqr: 0.1.2
- '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))':
+ '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))':
dependencies:
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
acorn-loose: 8.5.2
@@ -22611,18 +24232,18 @@ snapshots:
magicast: 0.2.11
recast: 0.23.11
tslib: 2.8.1
- vinxi: 0.5.11(af991c32974e6dfef2e6764239993deb)
+ vinxi: 0.5.11(a59819f55c4935ff24bbe5864b6de9f1)
- '@vinxi/server-components@0.5.1(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))':
+ '@vinxi/server-components@0.5.1(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))':
dependencies:
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(af991c32974e6dfef2e6764239993deb))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1))
acorn: 8.15.0
acorn-loose: 8.5.2
acorn-typescript: 1.4.13(acorn@8.15.0)
astring: 1.9.0
magicast: 0.2.11
recast: 0.23.11
- vinxi: 0.5.11(af991c32974e6dfef2e6764239993deb)
+ vinxi: 0.5.11(a59819f55c4935ff24bbe5864b6de9f1)
'@vitejs/plugin-react-swc@4.2.2(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
@@ -22632,6 +24253,18 @@ snapshots:
transitivePeerDependencies:
- '@swc/helpers'
+ '@vitejs/plugin-react@5.1.3(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-rc.2
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.18.0
+ vite: 7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - supports-color
+
'@vitest/coverage-istanbul@4.0.18(vitest@4.0.18)':
dependencies:
'@istanbuljs/schema': 0.1.3
@@ -22713,7 +24346,7 @@ snapshots:
'@vue/compiler-core@3.5.27':
dependencies:
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
'@vue/shared': 3.5.27
entities: 7.0.1
estree-walker: 2.0.2
@@ -22726,7 +24359,7 @@ snapshots:
'@vue/compiler-sfc@3.5.27':
dependencies:
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
'@vue/compiler-core': 3.5.27
'@vue/compiler-dom': 3.5.27
'@vue/compiler-ssr': 3.5.27
@@ -22873,6 +24506,17 @@ snapshots:
optionalDependencies:
ajv: 8.17.1
+ ajv-keywords@3.5.2(ajv@6.12.6):
+ dependencies:
+ ajv: 6.12.6
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
ajv@8.17.1:
dependencies:
fast-deep-equal: 3.1.3
@@ -22946,6 +24590,51 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
+ app-builder-bin@5.0.0-alpha.12: {}
+
+ app-builder-lib@26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0):
+ dependencies:
+ '@develar/schema-utils': 2.6.5
+ '@electron/asar': 3.4.1
+ '@electron/fuses': 1.8.0
+ '@electron/get': 3.1.0
+ '@electron/notarize': 2.5.0
+ '@electron/osx-sign': 1.3.3
+ '@electron/rebuild': 4.0.3
+ '@electron/universal': 2.0.3
+ '@malept/flatpak-bundler': 0.4.0
+ '@types/fs-extra': 9.0.13
+ async-exit-hook: 2.0.1
+ builder-util: 26.4.1
+ builder-util-runtime: 9.5.1
+ chromium-pickle-js: 0.2.0
+ ci-info: 4.3.1
+ debug: 4.4.3
+ dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0)
+ dotenv: 16.6.1
+ dotenv-expand: 11.0.7
+ ejs: 3.1.10
+ electron-builder-squirrel-windows: 26.7.0(dmg-builder@26.7.0)
+ electron-publish: 26.6.0
+ fs-extra: 10.1.0
+ hosted-git-info: 4.1.0
+ isbinaryfile: 5.0.7
+ jiti: 2.6.1
+ js-yaml: 4.1.1
+ json5: 2.2.3
+ lazy-val: 1.0.5
+ minimatch: 10.1.1
+ plist: 3.1.0
+ proper-lockfile: 4.1.2
+ resedit: 1.7.2
+ semver: 7.7.3
+ tar: 7.5.7
+ temp-file: 3.4.0
+ tiny-async-pool: 1.3.0
+ which: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
appdirsjs@1.2.7:
optional: true
@@ -23007,6 +24696,9 @@ snapshots:
pvutils: 1.1.3
tslib: 2.8.1
+ assert-plus@1.0.0:
+ optional: true
+
assertion-error@2.0.1: {}
ast-kit@3.0.0-beta.1:
@@ -23024,14 +24716,28 @@ snapshots:
astral-regex@1.0.0:
optional: true
+ astral-regex@2.0.0:
+ optional: true
+
astring@1.9.0: {}
+ async-exit-hook@2.0.1: {}
+
async-limiter@1.0.1: {}
async-sema@3.1.1: {}
async@3.2.6: {}
+ asynckit@0.4.0: {}
+
+ at-least-node@1.0.0: {}
+
+ atomically@2.1.0:
+ dependencies:
+ stubborn-fs: 2.0.0
+ when-exit: 2.1.5
+
aws-ssl-profiles@1.1.2: {}
axobject-query@4.1.0: {}
@@ -23041,9 +24747,9 @@ snapshots:
babel-dead-code-elimination@1.0.12:
dependencies:
'@babel/core': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
transitivePeerDependencies:
- supports-color
@@ -23060,6 +24766,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-jest@29.7.0(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.29.0)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-istanbul@6.1.1:
dependencies:
'@babel/helper-plugin-utils': 7.28.6
@@ -23073,7 +24792,7 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.28.0
@@ -23082,7 +24801,7 @@ snapshots:
'@babel/core': 7.28.6
'@babel/helper-module-imports': 7.18.6
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
html-entities: 2.3.3
parse5: 7.3.0
validate-html-nesting: 1.2.3
@@ -23096,6 +24815,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0):
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6):
dependencies:
'@babel/core': 7.28.6
@@ -23104,6 +24832,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ core-js-compat: 3.48.0
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.6):
dependencies:
'@babel/core': 7.28.6
@@ -23111,9 +24847,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
babel-plugin-react-compiler@1.0.0:
dependencies:
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
babel-plugin-react-native-web@0.21.2: {}
@@ -23131,6 +24874,12 @@ snapshots:
transitivePeerDependencies:
- '@babel/core'
+ babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.0):
+ dependencies:
+ '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+
babel-plugin-transform-import-meta@2.3.3(@babel/core@7.28.6):
dependencies:
'@babel/core': 7.28.6
@@ -23156,6 +24905,25 @@ snapshots:
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.6)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.6)
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0)
+
babel-preset-expo@54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32)(react-refresh@0.14.2):
dependencies:
'@babel/helper-module-imports': 7.28.6
@@ -23183,7 +24951,39 @@ snapshots:
resolve-from: 5.0.0
optionalDependencies:
'@babel/runtime': 7.28.6
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ babel-preset-expo@54.0.10(@babel/core@7.29.0)(@babel/runtime@7.28.6)(expo@54.0.32)(react-refresh@0.14.2):
+ dependencies:
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0)
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.29.0)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.0)
+ '@babel/preset-react': 7.28.5(@babel/core@7.29.0)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0)
+ '@react-native/babel-preset': 0.81.5(@babel/core@7.29.0)
+ babel-plugin-react-compiler: 1.0.0
+ babel-plugin-react-native-web: 0.21.2
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0)
+ debug: 4.4.3
+ react-refresh: 0.14.2
+ resolve-from: 5.0.0
+ optionalDependencies:
+ '@babel/runtime': 7.28.6
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
transitivePeerDependencies:
- '@babel/core'
- supports-color
@@ -23194,6 +24994,12 @@ snapshots:
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6)
+ babel-preset-jest@29.6.3(@babel/core@7.29.0):
+ dependencies:
+ '@babel/core': 7.29.0
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0)
+
babel-preset-solid@1.9.9(@babel/core@7.28.6)(solid-js@1.9.11):
dependencies:
'@babel/core': 7.28.6
@@ -23311,6 +25117,9 @@ snapshots:
boolbase@1.0.0: {}
+ boolean@3.2.0:
+ optional: true
+
boxen@8.0.1:
dependencies:
ansi-align: 3.0.1
@@ -23379,6 +25188,34 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
+ builder-util-runtime@9.5.1:
+ dependencies:
+ debug: 4.4.3
+ sax: 1.4.4
+ transitivePeerDependencies:
+ - supports-color
+
+ builder-util@26.4.1:
+ dependencies:
+ 7zip-bin: 5.2.0
+ '@types/debug': 4.1.12
+ app-builder-bin: 5.0.0-alpha.12
+ builder-util-runtime: 9.5.1
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ fs-extra: 10.1.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ js-yaml: 4.1.1
+ sanitize-filename: 1.6.3
+ source-map-support: 0.5.21
+ stat-mode: 1.0.0
+ temp-file: 3.4.0
+ tiny-async-pool: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
builtin-modules@3.3.0: {}
bumpp@10.4.0(magicast@0.5.1):
@@ -23483,6 +25320,33 @@ snapshots:
cac@6.7.14: {}
+ cacache@19.0.1:
+ dependencies:
+ '@npmcli/fs': 4.0.0
+ fs-minipass: 3.0.3
+ glob: 10.4.5
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+ minipass-collect: 2.0.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 7.0.3
+ ssri: 12.0.0
+ tar: 7.5.7
+ unique-filename: 4.0.0
+
+ cacheable-lookup@5.0.4: {}
+
+ cacheable-request@7.0.4:
+ dependencies:
+ clone-response: 1.0.3
+ get-stream: 5.2.0
+ http-cache-semantics: 4.2.0
+ keyv: 4.5.4
+ lowercase-keys: 2.0.0
+ normalize-url: 6.1.0
+ responselike: 2.0.1
+
caching-transform@4.0.0:
dependencies:
hasha: 5.2.2
@@ -23625,6 +25489,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ chromium-pickle-js@0.2.0: {}
+
ci-info@2.0.0: {}
ci-info@3.9.0: {}
@@ -23657,7 +25523,6 @@ snapshots:
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
- optional: true
cli-highlight@2.1.11:
dependencies:
@@ -23676,6 +25541,12 @@ snapshots:
optionalDependencies:
'@colors/colors': 1.5.0
+ cli-truncate@2.1.0:
+ dependencies:
+ slice-ansi: 3.0.0
+ string-width: 4.2.3
+ optional: true
+
cli-width@4.1.0: {}
client-only@0.0.1: {}
@@ -23704,6 +25575,10 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clone-response@1.0.3:
+ dependencies:
+ mimic-response: 1.0.1
+
clone@1.0.4: {}
clsx@2.1.1: {}
@@ -23761,6 +25636,10 @@ snapshots:
color: 3.2.1
text-hex: 1.0.0
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
comma-separated-tokens@2.0.3: {}
command-exists@1.2.9:
@@ -23778,6 +25657,8 @@ snapshots:
commander@4.1.1: {}
+ commander@5.1.0: {}
+
commander@7.2.0: {}
commander@9.5.0:
@@ -23793,6 +25674,8 @@ snapshots:
commondir@1.0.1: {}
+ compare-version@0.1.2: {}
+
compatx@0.2.0: {}
compress-commons@6.0.2:
@@ -23830,6 +25713,18 @@ snapshots:
readable-stream: 3.6.2
typedarray: 0.0.6
+ conf@15.1.0:
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ atomically: 2.1.0
+ debounce-fn: 6.0.0
+ dot-prop: 10.1.0
+ env-paths: 3.0.0
+ json-schema-typed: 8.0.2
+ semver: 7.7.3
+ uint8array-extras: 1.5.0
+
confbox@0.1.8: {}
confbox@0.2.2: {}
@@ -23884,6 +25779,9 @@ snapshots:
dependencies:
browserslist: 4.28.1
+ core-util-is@1.0.2:
+ optional: true
+
core-util-is@1.0.3: {}
cors@2.8.6:
@@ -23908,21 +25806,29 @@ snapshots:
crc-32: 1.2.2
readable-stream: 4.7.0
+ crc@3.8.0:
+ dependencies:
+ buffer: 5.7.1
+ optional: true
+
cron-parser@4.9.0:
dependencies:
luxon: 3.7.1
croner@9.1.0: {}
- cross-fetch@3.2.0:
+ cross-dirname@0.1.0:
+ optional: true
+
+ cross-fetch@3.2.0(encoding@0.1.13):
dependencies:
- node-fetch: 2.7.0
+ node-fetch: 2.7.0(encoding@0.1.13)
transitivePeerDependencies:
- encoding
- cross-fetch@4.1.0:
+ cross-fetch@4.1.0(encoding@0.1.13):
dependencies:
- node-fetch: 2.7.0
+ node-fetch: 2.7.0(encoding@0.1.13)
transitivePeerDependencies:
- encoding
optional: true
@@ -24119,14 +26025,18 @@ snapshots:
dayjs@1.11.19:
optional: true
- db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2):
+ db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2):
optionalDependencies:
'@electric-sql/pglite': 0.3.14
- '@libsql/client': 0.17.0
+ '@libsql/client': 0.17.0(encoding@0.1.13)
better-sqlite3: 12.6.2
- drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
mysql2: 3.16.2
+ debounce-fn@6.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
debug@2.6.9:
dependencies:
ms: 2.0.0
@@ -24179,12 +26089,30 @@ snapshots:
dependencies:
clone: 1.0.4
+ defer-to-connect@2.0.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+ optional: true
+
define-lazy-prop@2.0.0: {}
define-lazy-prop@3.0.0: {}
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+ optional: true
+
defu@6.1.4: {}
+ delayed-stream@1.0.0: {}
+
denque@2.1.0: {}
depd@2.0.0: {}
@@ -24205,6 +26133,9 @@ snapshots:
detect-node-es@1.1.0: {}
+ detect-node@2.1.0:
+ optional: true
+
detective-amd@6.0.1:
dependencies:
ast-module-types: 6.0.1
@@ -24274,8 +26205,38 @@ snapshots:
diff@8.0.3: {}
+ dir-compare@4.2.0:
+ dependencies:
+ minimatch: 3.1.2
+ p-limit: 3.1.0
+
dlv@1.1.3: {}
+ dmg-builder@26.7.0(electron-builder-squirrel-windows@26.7.0):
+ dependencies:
+ app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0)
+ builder-util: 26.4.1
+ fs-extra: 10.1.0
+ iconv-lite: 0.6.3
+ js-yaml: 4.1.1
+ optionalDependencies:
+ dmg-license: 1.0.11
+ transitivePeerDependencies:
+ - electron-builder-squirrel-windows
+ - supports-color
+
+ dmg-license@1.0.11:
+ dependencies:
+ '@types/plist': 3.0.5
+ '@types/verror': 1.10.11
+ ajv: 6.12.6
+ crc: 3.8.0
+ iconv-corefoundation: 1.1.7
+ plist: 3.1.0
+ smart-buffer: 4.2.0
+ verror: 1.10.1
+ optional: true
+
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -24294,6 +26255,10 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
+ dot-prop@10.1.0:
+ dependencies:
+ type-fest: 5.4.2
+
dot-prop@9.0.0:
dependencies:
type-fest: 4.41.0
@@ -24336,11 +26301,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
+ drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
optionalDependencies:
'@cloudflare/workers-types': 4.20260127.0
'@electric-sql/pglite': 0.3.14
- '@libsql/client': 0.17.0
+ '@libsql/client': 0.17.0(encoding@0.1.13)
'@opentelemetry/api': 1.9.0
'@prisma/client': 5.22.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
'@types/better-sqlite3': 7.6.13
@@ -24354,11 +26319,11 @@ snapshots:
postgres: 3.4.8
prisma: 7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.5.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@5.22.0):
+ drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@5.22.0):
optionalDependencies:
'@cloudflare/workers-types': 4.20260127.0
'@electric-sql/pglite': 0.3.14
- '@libsql/client': 0.17.0
+ '@libsql/client': 0.17.0(encoding@0.1.13)
'@opentelemetry/api': 1.9.0
'@prisma/client': 5.22.0(prisma@5.22.0)
'@types/better-sqlite3': 7.6.13
@@ -24372,11 +26337,11 @@ snapshots:
postgres: 3.4.8
prisma: 5.22.0
- drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
+ drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
optionalDependencies:
'@cloudflare/workers-types': 4.20260127.0
'@electric-sql/pglite': 0.3.14
- '@libsql/client': 0.17.0
+ '@libsql/client': 0.17.0(encoding@0.1.13)
'@opentelemetry/api': 1.9.0
'@prisma/client': 7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
'@types/better-sqlite3': 7.6.13
@@ -24423,8 +26388,89 @@ snapshots:
fast-check: 3.23.2
optional: true
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.9.4
+
+ electron-builder-squirrel-windows@26.7.0(dmg-builder@26.7.0):
+ dependencies:
+ app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0)
+ builder-util: 26.4.1
+ electron-winstaller: 5.4.0
+ transitivePeerDependencies:
+ - dmg-builder
+ - supports-color
+
+ electron-builder@26.7.0(electron-builder-squirrel-windows@26.7.0):
+ dependencies:
+ app-builder-lib: 26.7.0(dmg-builder@26.7.0)(electron-builder-squirrel-windows@26.7.0)
+ builder-util: 26.4.1
+ builder-util-runtime: 9.5.1
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ dmg-builder: 26.7.0(electron-builder-squirrel-windows@26.7.0)
+ fs-extra: 10.1.0
+ lazy-val: 1.0.5
+ simple-update-notifier: 2.0.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - electron-builder-squirrel-windows
+ - supports-color
+
+ electron-publish@26.6.0:
+ dependencies:
+ '@types/fs-extra': 9.0.13
+ builder-util: 26.4.1
+ builder-util-runtime: 9.5.1
+ chalk: 4.1.2
+ form-data: 4.0.5
+ fs-extra: 10.1.0
+ lazy-val: 1.0.5
+ mime: 2.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ electron-store@11.0.2:
+ dependencies:
+ conf: 15.1.0
+ type-fest: 5.4.2
+
electron-to-chromium@1.5.267: {}
+ electron-vite@5.0.0(@swc/core@1.15.3)(vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6)
+ cac: 6.7.14
+ esbuild: 0.25.12
+ magic-string: 0.30.21
+ picocolors: 1.1.1
+ vite: 7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
+ optionalDependencies:
+ '@swc/core': 1.15.3
+ transitivePeerDependencies:
+ - supports-color
+
+ electron-winstaller@5.4.0:
+ dependencies:
+ '@electron/asar': 3.4.1
+ debug: 4.4.3
+ fs-extra: 7.0.1
+ lodash: 4.17.21
+ temp: 0.9.4
+ optionalDependencies:
+ '@electron/windows-sign': 1.2.2
+ transitivePeerDependencies:
+ - supports-color
+
+ electron@39.5.1:
+ dependencies:
+ '@electron/get': 2.0.3
+ '@types/node': 22.19.8
+ extract-zip: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
embla-carousel-react@8.6.0(react@19.2.4):
dependencies:
embla-carousel: 8.6.0
@@ -24464,6 +26510,11 @@ snapshots:
iconv-lite: 0.6.3
whatwg-encoding: 3.1.1
+ encoding@0.1.13:
+ dependencies:
+ iconv-lite: 0.6.3
+ optional: true
+
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
@@ -24481,8 +26532,7 @@ snapshots:
env-editor@0.4.2: {}
- env-paths@2.2.1:
- optional: true
+ env-paths@2.2.1: {}
env-paths@3.0.0: {}
@@ -24528,6 +26578,13 @@ snapshots:
dependencies:
es-errors: 1.3.0
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
es-toolkit@1.39.10: {}
es6-error@4.1.1: {}
@@ -24866,13 +26923,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-asset@12.0.12(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ expo-asset@12.0.12(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
'@expo/image-utils': 0.8.8
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
transitivePeerDependencies:
- supports-color
@@ -24885,12 +26942,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- expo-constants@18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)):
+ expo-constants@18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)):
dependencies:
'@expo/config': 12.0.13
'@expo/env': 2.0.8
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
transitivePeerDependencies:
- supports-color
@@ -24904,10 +26961,10 @@ snapshots:
expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- expo-file-system@19.0.21(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)):
+ expo-file-system@19.0.21(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)):
dependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
@@ -24916,12 +26973,12 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
fontfaceobserver: 2.3.0
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
expo-keep-awake@15.0.8(expo@54.0.32)(react@19.1.0):
dependencies:
@@ -24930,7 +26987,7 @@ snapshots:
expo-keep-awake@15.0.8(expo@54.0.32)(react@19.2.4):
dependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
react: 19.2.4
expo-linking@8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
@@ -24943,12 +27000,12 @@ snapshots:
- expo
- supports-color
- expo-linking@8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ expo-linking@8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
- expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
invariant: 2.2.4
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
transitivePeerDependencies:
- expo
- supports-color
@@ -24967,18 +27024,18 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- expo-modules-core@3.0.29(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ expo-modules-core@3.0.29(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
invariant: 2.2.4
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
expo-network@8.0.8(expo@54.0.32)(react@19.2.4):
dependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
react: 19.2.4
- expo-router@6.0.22(193f004e4d1f794f3c17de7b0c4302be):
+ expo-router@6.0.22(71728b829b512756b00beaf554dc1af1):
dependencies:
'@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@expo/schema-utils': 0.1.8
@@ -25014,28 +27071,28 @@ snapshots:
react-dom: 19.1.0(react@19.1.0)
react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native-reanimated: 4.1.6(@babel/core@7.28.6)(react-native-worklets@0.5.1(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
- '@types/react'
- '@types/react-dom'
- supports-color
- expo-router@6.0.22(5991a69924777df32846cf001cdadd07):
+ expo-router@6.0.22(e89d5bee30cbc357dd12201c8dd32438):
dependencies:
- '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
'@expo/schema-utils': 0.1.8
'@radix-ui/react-slot': 1.2.0(@types/react@19.2.10)(react@19.2.4)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@react-navigation/bottom-tabs': 7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- '@react-navigation/native-stack': 7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/bottom-tabs': 7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native': 7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native-stack': 7.9.0(@react-navigation/native@7.1.26(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
client-only: 0.0.1
debug: 4.4.3
escape-string-regexp: 4.0.0
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
- expo-linking: 8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
+ expo-linking: 8.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
expo-server: 1.0.5
fast-deep-equal: 3.1.3
invariant: 2.2.4
@@ -25043,10 +27100,10 @@ snapshots:
query-string: 7.1.3
react: 19.2.4
react-fast-compare: 3.2.2
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
- react-native-is-edge-to-edge: 1.2.1(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-safe-area-context: 5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
semver: 7.6.3
server-only: 0.0.1
sf-symbols-typescript: 2.2.0
@@ -25055,9 +27112,9 @@ snapshots:
vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
optionalDependencies:
react-dom: 19.2.4(react@19.2.4)
- react-native-gesture-handler: 2.30.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-reanimated: 4.2.1(react-native-worklets@0.5.1(@babel/core@7.28.6)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-web: 0.21.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react-native-gesture-handler: 2.30.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-reanimated: 4.2.1(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
- '@types/react'
@@ -25084,14 +27141,14 @@ snapshots:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-system-ui@6.0.9(expo@54.0.32)(react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)):
+ expo-system-ui@6.0.9(expo@54.0.32)(react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)):
dependencies:
'@react-native/normalize-colors': 0.81.5
debug: 4.4.3
expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
optionalDependencies:
- react-native-web: 0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ react-native-web: 0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- supports-color
@@ -25100,10 +27157,10 @@ snapshots:
expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- expo-web-browser@15.0.10(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)):
+ expo-web-browser@15.0.10(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)):
dependencies:
- expo: 54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ expo: 54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
expo@54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
@@ -25140,33 +27197,33 @@ snapshots:
- supports-color
- utf-8-validate
- expo@54.0.32(@babel/core@7.28.6)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ expo@54.0.32(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
'@babel/runtime': 7.28.6
- '@expo/cli': 54.0.22(expo-router@6.0.22)(expo@54.0.32)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
+ '@expo/cli': 54.0.22(expo-router@6.0.22)(expo@54.0.32)(graphql@16.12.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
'@expo/config': 12.0.13
'@expo/config-plugins': 54.0.4
- '@expo/devtools': 0.1.8(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@expo/devtools': 0.1.8(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
'@expo/fingerprint': 0.15.4
'@expo/metro': 54.2.0
'@expo/metro-config': 54.0.14(expo@54.0.32)
- '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
'@ungap/structured-clone': 1.3.0
- babel-preset-expo: 54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32)(react-refresh@0.14.2)
- expo-asset: 12.0.12(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
- expo-file-system: 19.0.21(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))
- expo-font: 14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ babel-preset-expo: 54.0.10(@babel/core@7.29.0)(@babel/runtime@7.28.6)(expo@54.0.32)(react-refresh@0.14.2)
+ expo-asset: 12.0.12(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
+ expo-file-system: 19.0.21(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))
+ expo-font: 14.0.11(expo@54.0.32)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
expo-keep-awake: 15.0.8(expo@54.0.32)(react@19.2.4)
expo-modules-autolinking: 3.0.24
- expo-modules-core: 3.0.29(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ expo-modules-core: 3.0.29(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
pretty-format: 29.7.0
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
react-refresh: 0.14.2
whatwg-url-without-unicode: 8.0.0-3
optionalDependencies:
- '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
transitivePeerDependencies:
- '@babel/core'
- bufferutil
@@ -25232,6 +27289,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ extsprintf@1.4.1:
+ optional: true
+
fast-check@3.23.2:
dependencies:
pure-rand: 6.1.0
@@ -25278,9 +27338,9 @@ snapshots:
fbjs-css-vars@1.0.2: {}
- fbjs@3.0.5:
+ fbjs@3.0.5(encoding@0.1.13):
dependencies:
- cross-fetch: 3.2.0
+ cross-fetch: 3.2.0(encoding@0.1.13)
fbjs-css-vars: 1.0.2
loose-envify: 1.4.0
object-assign: 4.1.1
@@ -25319,6 +27379,10 @@ snapshots:
file-uri-to-path@1.0.0: {}
+ filelist@1.0.4:
+ dependencies:
+ minimatch: 5.1.6
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -25394,6 +27458,14 @@ snapshots:
cross-spawn: 7.0.6
signal-exit: 4.1.0
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
formatly@0.3.0:
dependencies:
fd-package-json: 2.0.0
@@ -25433,12 +27505,40 @@ snapshots:
fs-constants@1.0.0: {}
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@11.3.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@7.0.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
fs-extra@8.1.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 4.0.0
universalify: 0.1.2
- optional: true
+
+ fs-extra@9.1.0:
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-minipass@3.0.3:
+ dependencies:
+ minipass: 7.1.2
fs.realpath@1.0.0: {}
@@ -25448,7 +27548,7 @@ snapshots:
fsevents@2.3.3:
optional: true
- fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
+ fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
dependencies:
'@formatjs/intl-localematcher': 0.8.0
'@orama/orama': 3.1.18
@@ -25475,21 +27575,21 @@ snapshots:
'@types/react': 19.2.10
algoliasearch: 5.46.2
lucide-react: 0.563.0(react@19.2.4)
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
zod: 4.3.6
transitivePeerDependencies:
- supports-color
- fumadocs-mdx@14.2.6(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)):
+ fumadocs-mdx@14.2.6(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@mdx-js/mdx': 3.1.1
'@standard-schema/spec': 1.1.0
chokidar: 5.0.0
esbuild: 0.27.2
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
js-yaml: 4.1.1
mdast-util-to-markdown: 2.1.2
picocolors: 1.1.1
@@ -25504,16 +27604,16 @@ snapshots:
zod: 4.3.6
optionalDependencies:
'@types/react': 19.2.10
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
- fumadocs-typescript@5.0.1(a7f9956228988da580bf3f255eb9d12e):
+ fumadocs-typescript@5.0.1(b82f4d749b5fdd7dc1595c4a740ccc94):
dependencies:
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
react: 19.2.4
@@ -25525,13 +27625,13 @@ snapshots:
unist-util-visit: 5.1.0
optionalDependencies:
'@types/react': 19.2.10
- fumadocs-ui: 16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
+ fumadocs-ui: 16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
transitivePeerDependencies:
- supports-color
- fumadocs-ui@16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18):
+ fumadocs-ui@16.4.9(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18):
dependencies:
- '@fumadocs/ui': 16.4.9(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
+ '@fumadocs/ui': 16.4.9(@types/react@19.2.10)(fumadocs-core@16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -25543,7 +27643,7 @@ snapshots:
'@radix-ui/react-slot': 1.2.4(@types/react@19.2.10)(react@19.2.4)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
class-variance-authority: 0.7.1
- fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.4.9(@oramacloud/client@2.1.4)(@tanstack/react-router@1.157.16(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/react@19.2.10)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
lucide-react: 0.563.0(react@19.2.4)
next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react: 19.2.4
@@ -25552,16 +27652,20 @@ snapshots:
scroll-into-view-if-needed: 3.1.0
optionalDependencies:
'@types/react': 19.2.10
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
tailwindcss: 4.1.18
transitivePeerDependencies:
- '@types/react-dom'
function-bind@1.1.2: {}
+ geist@1.5.1(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)):
+ dependencies:
+ next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+
geist@1.5.1(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)):
dependencies:
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
gel@2.2.0:
dependencies:
@@ -25677,6 +27781,16 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ global-agent@3.0.0:
+ dependencies:
+ boolean: 3.2.0
+ es6-error: 4.1.1
+ matcher: 3.0.0
+ roarr: 2.15.4
+ semver: 7.7.3
+ serialize-error: 7.0.1
+ optional: true
+
global-directory@4.0.1:
dependencies:
ini: 4.1.1
@@ -25685,6 +27799,12 @@ snapshots:
dependencies:
ini: 1.3.8
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+ optional: true
+
globby@14.1.0:
dependencies:
'@sindresorhus/merge-streams': 2.3.0
@@ -25700,6 +27820,20 @@ snapshots:
gopd@1.2.0: {}
+ got@11.8.6:
+ dependencies:
+ '@sindresorhus/is': 4.6.0
+ '@szmarczak/http-timer': 4.0.6
+ '@types/cacheable-request': 6.0.3
+ '@types/responselike': 1.0.3
+ cacheable-lookup: 5.0.4
+ cacheable-request: 7.0.4
+ decompress-response: 6.0.0
+ http2-wrapper: 1.0.3
+ lowercase-keys: 2.0.0
+ p-cancelable: 2.1.1
+ responselike: 2.0.1
+
graceful-fs@4.2.11: {}
grammex@3.1.12:
@@ -25763,8 +27897,17 @@ snapshots:
has-flag@4.0.0: {}
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+ optional: true
+
has-symbols@1.1.0: {}
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
hasha@5.2.2:
dependencies:
is-stream: 2.0.1
@@ -25885,6 +28028,10 @@ snapshots:
hookable@6.0.1: {}
+ hosted-git-info@4.1.0:
+ dependencies:
+ lru-cache: 6.0.0
+
hosted-git-info@7.0.2:
dependencies:
lru-cache: 10.4.3
@@ -25921,6 +28068,8 @@ snapshots:
domutils: 3.2.2
entities: 4.5.0
+ http-cache-semantics@4.2.0: {}
+
http-errors@2.0.1:
dependencies:
depd: 2.0.0
@@ -25949,6 +28098,11 @@ snapshots:
http-status-codes@2.3.0:
optional: true
+ http2-wrapper@1.0.3:
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.3
@@ -25965,6 +28119,12 @@ snapshots:
hyphenate-style-name@1.1.0: {}
+ iconv-corefoundation@1.1.7:
+ dependencies:
+ cli-truncate: 2.1.0
+ node-addon-api: 1.7.2
+ optional: true
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -26071,6 +28231,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ip-address@10.1.0: {}
+
ipaddr.js@1.9.1: {}
iron-webcrypto@1.2.1: {}
@@ -26125,8 +28287,7 @@ snapshots:
dependencies:
is-docker: 3.0.0
- is-interactive@1.0.0:
- optional: true
+ is-interactive@1.0.0: {}
is-module@1.0.0: {}
@@ -26164,8 +28325,7 @@ snapshots:
is-typedarray@1.0.0: {}
- is-unicode-supported@0.1.0:
- optional: true
+ is-unicode-supported@0.1.0: {}
is-url-superb@4.0.0: {}
@@ -26195,6 +28355,10 @@ snapshots:
isarray@1.0.0: {}
+ isbinaryfile@4.0.10: {}
+
+ isbinaryfile@5.0.7: {}
+
isbot@5.1.34: {}
isexe@2.0.0: {}
@@ -26210,7 +28374,7 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
'@babel/core': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -26261,6 +28425,12 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
+ jake@10.9.4:
+ dependencies:
+ async: 3.2.6
+ filelist: 1.0.4
+ picocolors: 1.1.1
+
jest-environment-node@29.7.0:
dependencies:
'@jest/environment': 29.7.0
@@ -26290,7 +28460,7 @@ snapshots:
jest-message-util@29.7.0:
dependencies:
- '@babel/code-frame': 7.28.6
+ '@babel/code-frame': 7.29.0
'@jest/types': 29.6.3
'@types/stack-utils': 2.0.3
chalk: 4.1.2
@@ -26350,9 +28520,9 @@ snapshots:
jose@6.1.3: {}
- jotai@2.16.2(@babel/core@7.28.6)(@babel/template@7.28.6)(@types/react@19.2.10)(react@19.2.4):
+ jotai@2.16.2(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.10)(react@19.2.4):
optionalDependencies:
- '@babel/core': 7.28.6
+ '@babel/core': 7.29.0
'@babel/template': 7.28.6
'@types/react': 19.2.10
react: 19.2.4
@@ -26398,17 +28568,24 @@ snapshots:
jsesc@3.1.0: {}
+ json-buffer@3.0.1: {}
+
json-parse-even-better-errors@2.3.1:
optional: true
json-parse-even-better-errors@3.0.2: {}
+ json-schema-traverse@0.4.1: {}
+
json-schema-traverse@1.0.0: {}
json-schema-typed@8.0.2: {}
json-schema@0.4.0: {}
+ json-stringify-safe@5.0.1:
+ optional: true
+
json5@2.2.3: {}
jsonc-parser@3.3.1: {}
@@ -26416,7 +28593,12 @@ snapshots:
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
- optional: true
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
jsonwebtoken@9.0.3:
dependencies:
@@ -26448,6 +28630,10 @@ snapshots:
jwt-decode@4.0.0: {}
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
kind-of@6.0.3: {}
kleur@3.0.3: {}
@@ -26499,6 +28685,8 @@ snapshots:
shell-quote: 1.8.3
optional: true
+ lazy-val@1.0.5: {}
+
lazystream@1.0.1:
dependencies:
readable-stream: 2.3.8
@@ -26768,7 +28956,6 @@ snapshots:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
- optional: true
logform@2.7.0:
dependencies:
@@ -26802,6 +28989,8 @@ snapshots:
lottie-web@5.13.0: {}
+ lowercase-keys@2.0.0: {}
+
lowlight@3.3.0:
dependencies:
'@types/hast': 3.0.4
@@ -26816,6 +29005,10 @@ snapshots:
dependencies:
yallist: 3.1.1
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
lru.min@1.1.3: {}
lru.min@1.1.4:
@@ -26833,14 +29026,14 @@ snapshots:
magicast@0.2.11:
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
recast: 0.23.11
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
source-map-js: 1.2.1
magicast@0.5.1:
@@ -26878,6 +29071,22 @@ snapshots:
dependencies:
semver: 7.7.3
+ make-fetch-happen@14.0.3:
+ dependencies:
+ '@npmcli/agent': 3.0.0
+ cacache: 19.0.1
+ http-cache-semantics: 4.2.0
+ minipass: 7.1.2
+ minipass-fetch: 4.0.1
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 1.0.0
+ proc-log: 5.0.0
+ promise-retry: 2.0.1
+ ssri: 12.0.0
+ transitivePeerDependencies:
+ - supports-color
+
makeerror@1.0.12:
dependencies:
tmpl: 1.0.5
@@ -26907,6 +29116,11 @@ snapshots:
match-casing@2.0.1: {}
+ matcher@3.0.0:
+ dependencies:
+ escape-string-regexp: 4.0.0
+ optional: true
+
math-intrinsics@1.1.0: {}
mcp-handler@1.0.7(@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@4.3.6))(next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)):
@@ -26916,7 +29130,7 @@ snapshots:
commander: 11.1.0
redis: 4.7.1
optionalDependencies:
- next: 16.1.6(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
mdast-comment-marker@3.0.0:
dependencies:
@@ -27265,7 +29479,7 @@ snapshots:
metro-transform-plugins@0.83.3:
dependencies:
'@babel/core': 7.28.6
- '@babel/generator': 7.28.6
+ '@babel/generator': 7.29.0
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
flow-enums-runtime: 0.0.6
@@ -27276,9 +29490,9 @@ snapshots:
metro-transform-worker@0.83.3:
dependencies:
'@babel/core': 7.28.6
- '@babel/generator': 7.28.6
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/generator': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
flow-enums-runtime: 0.0.6
metro: 0.83.3
metro-babel-transformer: 0.83.3
@@ -27297,11 +29511,11 @@ snapshots:
dependencies:
'@babel/code-frame': 7.28.6
'@babel/core': 7.28.6
- '@babel/generator': 7.28.6
- '@babel/parser': 7.28.6
+ '@babel/generator': 7.29.0
+ '@babel/parser': 7.29.0
'@babel/template': 7.28.6
'@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
accepts: 1.3.8
chalk: 4.1.2
ci-info: 2.0.0
@@ -27625,8 +29839,7 @@ snapshots:
mime@1.6.0: {}
- mime@2.6.0:
- optional: true
+ mime@2.6.0: {}
mime@3.0.0: {}
@@ -27634,11 +29847,14 @@ snapshots:
mimic-fn@1.2.0: {}
- mimic-fn@2.1.0:
- optional: true
+ mimic-fn@2.1.0: {}
mimic-fn@4.0.0: {}
+ mimic-function@5.0.1: {}
+
+ mimic-response@1.0.1: {}
+
mimic-response@3.1.0: {}
mini-svg-data-uri@1.4.4: {}
@@ -27677,6 +29893,34 @@ snapshots:
minimist@1.2.8: {}
+ minipass-collect@2.0.1:
+ dependencies:
+ minipass: 7.1.2
+
+ minipass-fetch@4.0.1:
+ dependencies:
+ minipass: 7.1.2
+ minipass-sized: 1.0.3
+ minizlib: 3.1.0
+ optionalDependencies:
+ encoding: 0.1.13
+
+ minipass-flush@1.0.5:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass-pipeline@1.2.4:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass-sized@1.0.3:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
minipass@7.1.2: {}
minizlib@3.1.0:
@@ -27687,6 +29931,10 @@ snapshots:
mkdirp-classic@0.5.3: {}
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
mkdirp@1.0.4: {}
mlly@1.7.4:
@@ -27709,11 +29957,13 @@ snapshots:
'@types/whatwg-url': 13.0.0
whatwg-url: 14.2.0
- mongodb@7.0.0:
+ mongodb@7.0.0(socks@2.8.7):
dependencies:
'@mongodb-js/saslprep': 1.4.5
bson: 7.1.1
mongodb-connection-string-url: 7.0.0
+ optionalDependencies:
+ socks: 2.8.7
motion-dom@12.29.2:
dependencies:
@@ -27905,10 +30155,66 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- nitropack@2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)(rolldown@1.0.0-rc.1):
+ next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1):
+ dependencies:
+ '@next/env': 16.1.6
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.9.18
+ caniuse-lite: 1.0.30001766
+ postcss: 8.4.31
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.1.6
+ '@next/swc-darwin-x64': 16.1.6
+ '@next/swc-linux-arm64-gnu': 16.1.6
+ '@next/swc-linux-arm64-musl': 16.1.6
+ '@next/swc-linux-x64-gnu': 16.1.6
+ '@next/swc-linux-x64-musl': 16.1.6
+ '@next/swc-win32-arm64-msvc': 16.1.6
+ '@next/swc-win32-x64-msvc': 16.1.6
+ '@opentelemetry/api': 1.9.0
+ '@playwright/test': 1.58.0
+ babel-plugin-react-compiler: 1.0.0
+ sass: 1.97.1
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ next@16.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.58.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1):
+ dependencies:
+ '@next/env': 16.1.6
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.9.18
+ caniuse-lite: 1.0.30001766
+ postcss: 8.4.31
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ styled-jsx: 5.1.6(react@19.2.4)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.1.6
+ '@next/swc-darwin-x64': 16.1.6
+ '@next/swc-linux-arm64-gnu': 16.1.6
+ '@next/swc-linux-arm64-musl': 16.1.6
+ '@next/swc-linux-x64-gnu': 16.1.6
+ '@next/swc-linux-x64-musl': 16.1.6
+ '@next/swc-win32-arm64-msvc': 16.1.6
+ '@next/swc-win32-x64-msvc': 16.1.6
+ '@opentelemetry/api': 1.9.0
+ '@playwright/test': 1.58.0
+ babel-plugin-react-compiler: 1.0.0
+ sass: 1.97.1
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ nitropack@2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.16.2)(rolldown@1.0.0-rc.1):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
- '@netlify/functions': 3.1.10(rollup@4.55.1)
+ '@netlify/functions': 3.1.10(encoding@0.1.13)(rollup@4.55.1)
'@rollup/plugin-alias': 5.1.1(rollup@4.55.1)
'@rollup/plugin-commonjs': 28.0.6(rollup@4.55.1)
'@rollup/plugin-inject': 5.0.5(rollup@4.55.1)
@@ -27916,7 +30222,7 @@ snapshots:
'@rollup/plugin-node-resolve': 16.0.1(rollup@4.55.1)
'@rollup/plugin-replace': 6.0.2(rollup@4.55.1)
'@rollup/plugin-terser': 0.4.4(rollup@4.55.1)
- '@vercel/nft': 0.29.4(rollup@4.55.1)
+ '@vercel/nft': 0.29.4(encoding@0.1.13)(rollup@4.55.1)
archiver: 7.0.1
c12: 3.3.3(magicast@0.3.5)
chokidar: 4.0.3
@@ -27927,7 +30233,7 @@ snapshots:
cookie-es: 2.0.0
croner: 9.1.0
crossws: 0.3.5
- db0: 0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)
+ db0: 0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)
defu: 6.1.4
destr: 2.0.5
dot-prop: 9.0.0
@@ -27973,7 +30279,7 @@ snapshots:
unenv: 2.0.0-rc.24
unimport: 5.2.0
unplugin-utils: 0.2.5
- unstorage: 1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2)
+ unstorage: 1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2)
untyped: 2.0.0
unwasm: 0.3.11
youch: 4.1.0-beta.8
@@ -28034,8 +30340,19 @@ snapshots:
dependencies:
semver: 7.7.3
+ node-abi@4.26.0:
+ dependencies:
+ semver: 7.7.3
+
+ node-addon-api@1.7.2:
+ optional: true
+
node-addon-api@7.1.1: {}
+ node-api-version@0.2.1:
+ dependencies:
+ semver: 7.7.3
+
node-domexception@1.0.0: {}
node-emoji@2.2.0:
@@ -28047,9 +30364,11 @@ snapshots:
node-fetch-native@1.6.7: {}
- node-fetch@2.7.0:
+ node-fetch@2.7.0(encoding@0.1.13):
dependencies:
whatwg-url: 5.0.0
+ optionalDependencies:
+ encoding: 0.1.13
node-fetch@3.3.2:
dependencies:
@@ -28061,6 +30380,21 @@ snapshots:
node-gyp-build@4.8.4: {}
+ node-gyp@11.5.0:
+ dependencies:
+ env-paths: 2.2.1
+ exponential-backoff: 3.1.2
+ graceful-fs: 4.2.11
+ make-fetch-happen: 14.0.3
+ nopt: 8.1.0
+ proc-log: 5.0.0
+ semver: 7.7.3
+ tar: 7.5.7
+ tinyglobby: 0.2.15
+ which: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+
node-int64@0.4.0: {}
node-mock-http@1.0.2: {}
@@ -28077,7 +30411,7 @@ snapshots:
node-source-walk@7.0.1:
dependencies:
- '@babel/parser': 7.28.6
+ '@babel/parser': 7.29.0
node-stream-zip@1.15.0:
optional: true
@@ -28104,6 +30438,8 @@ snapshots:
normalize-path@3.0.0: {}
+ normalize-url@6.1.0: {}
+
npm-install-checks@6.3.0:
dependencies:
semver: 7.7.3
@@ -28211,6 +30547,9 @@ snapshots:
object-inspect@1.13.4: {}
+ object-keys@1.1.1:
+ optional: true
+
obug@2.1.1: {}
ofetch@1.4.1:
@@ -28246,7 +30585,6 @@ snapshots:
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
- optional: true
onetime@6.0.0:
dependencies:
@@ -28314,7 +30652,6 @@ snapshots:
log-symbols: 4.1.0
strip-ansi: 6.0.1
wcwidth: 1.0.1
- optional: true
outvariant@1.4.3: {}
@@ -28341,6 +30678,8 @@ snapshots:
'@oxc-resolver/binding-win32-ia32-msvc': 11.17.0
'@oxc-resolver/binding-win32-x64-msvc': 11.17.0
+ p-cancelable@2.1.1: {}
+
p-event@6.0.1:
dependencies:
p-timeout: 6.1.4
@@ -28441,7 +30780,7 @@ snapshots:
parse-json@7.1.1:
dependencies:
- '@babel/code-frame': 7.28.6
+ '@babel/code-frame': 7.29.0
error-ex: 1.3.4
json-parse-even-better-errors: 3.0.2
lines-and-columns: 2.0.4
@@ -28535,6 +30874,8 @@ snapshots:
dependencies:
through: 2.3.8
+ pe-library@0.4.1: {}
+
peberminta@0.9.0: {}
pend@1.2.0: {}
@@ -28705,6 +31046,11 @@ snapshots:
postgres@3.4.8: {}
+ postject@1.0.0-alpha.6:
+ dependencies:
+ commander: 9.5.0
+ optional: true
+
prebuild-install@7.1.3:
dependencies:
detect-libc: 2.1.2
@@ -28804,6 +31150,8 @@ snapshots:
proc-log@4.2.0: {}
+ proc-log@5.0.0: {}
+
process-nextick-args@2.0.1: {}
process-on-spawn@1.1.0:
@@ -28847,7 +31195,6 @@ snapshots:
graceful-fs: 4.2.11
retry: 0.12.0
signal-exit: 3.0.7
- optional: true
property-information@7.1.0: {}
@@ -28919,6 +31266,8 @@ snapshots:
dependencies:
inherits: 2.0.4
+ quick-lru@5.1.1: {}
+
quotation@2.0.3: {}
quote-unquote@1.0.0: {}
@@ -29053,13 +31402,13 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-gesture-handler@2.30.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-gesture-handler@2.30.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
'@egjs/hammerjs': 2.0.17
hoist-non-react-statics: 3.3.2
invariant: 2.2.4
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
optional: true
react-native-is-edge-to-edge@1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
@@ -29067,10 +31416,10 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-is-edge-to-edge@1.2.1(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-is-edge-to-edge@1.2.1(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
optional: true
react-native-reanimated@4.1.6(@babel/core@7.28.6)(react-native-worklets@0.5.1(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
@@ -29082,12 +31431,12 @@ snapshots:
react-native-worklets: 0.5.1(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
semver: 7.7.2
- react-native-reanimated@4.2.1(react-native-worklets@0.5.1(@babel/core@7.28.6)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-reanimated@4.2.1(react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4))(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
- react-native-is-edge-to-edge: 1.2.1(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
- react-native-worklets: 0.5.1(@babel/core@7.28.6)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ react-native-worklets: 0.5.1(@babel/core@7.29.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
semver: 7.7.3
optional: true
@@ -29096,10 +31445,10 @@ snapshots:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
- react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-safe-area-context@5.6.2(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
optional: true
react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
@@ -29110,11 +31459,11 @@ snapshots:
react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
warn-once: 0.1.1
- react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-screens@4.20.0(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-freeze: 1.0.4(react@19.2.4)
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
warn-once: 0.1.1
optional: true
@@ -29126,11 +31475,11 @@ snapshots:
react-native: 0.81.5(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.1.17)(react@19.1.0)
warn-once: 0.1.1
- react-native-web@0.21.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@babel/runtime': 7.28.6
'@react-native/normalize-colors': 0.74.89
- fbjs: 3.0.5
+ fbjs: 3.0.5(encoding@0.1.13)
inline-style-prefixer: 7.0.1
memoize-one: 6.0.0
nullthrows: 1.1.1
@@ -29141,11 +31490,11 @@ snapshots:
transitivePeerDependencies:
- encoding
- react-native-web@0.21.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ react-native-web@0.21.2(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
'@babel/runtime': 7.28.6
'@react-native/normalize-colors': 0.74.89
- fbjs: 3.0.5
+ fbjs: 3.0.5(encoding@0.1.13)
inline-style-prefixer: 7.0.1
memoize-one: 6.0.0
nullthrows: 1.1.1
@@ -29176,21 +31525,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-native-worklets@0.5.1(@babel/core@7.28.6)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
+ react-native-worklets@0.5.1(@babel/core@7.29.0)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4):
dependencies:
- '@babel/core': 7.28.6
- '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6)
- '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6)
- '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.6)
- '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6)
- '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6)
- '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.6)
- '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6)
- '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6)
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0)
convert-source-map: 2.0.0
react: 19.2.4
- react-native: 0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4)
+ react-native: 0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4)
semver: 7.7.2
transitivePeerDependencies:
- supports-color
@@ -29243,20 +31592,20 @@ snapshots:
- supports-color
- utf-8-validate
- react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4):
+ react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4):
dependencies:
'@jest/create-cache-key-function': 29.7.0
'@react-native/assets-registry': 0.83.1
- '@react-native/codegen': 0.83.1(@babel/core@7.28.6)
- '@react-native/community-cli-plugin': 0.83.1(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))
+ '@react-native/codegen': 0.83.1(@babel/core@7.29.0)
+ '@react-native/community-cli-plugin': 0.83.1(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))
'@react-native/gradle-plugin': 0.83.1
'@react-native/js-polyfills': 0.83.1
'@react-native/normalize-colors': 0.83.1
- '@react-native/virtualized-lists': 0.83.1(@types/react@19.2.10)(react-native@0.83.1(@babel/core@7.28.6)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.28.6))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
+ '@react-native/virtualized-lists': 0.83.1(@types/react@19.2.10)(react-native@0.83.1(@babel/core@7.29.0)(@react-native-community/cli@20.0.2(typescript@5.9.3))(@react-native/metro-config@0.83.1(@babel/core@7.29.0))(@types/react@19.2.10)(react@19.2.4))(react@19.2.4)
abort-controller: 3.0.0
anser: 1.4.10
ansi-regex: 5.0.1
- babel-jest: 29.7.0(@babel/core@7.28.6)
+ babel-jest: 29.7.0(@babel/core@7.29.0)
babel-plugin-syntax-hermes-parser: 0.32.0
base64-js: 1.5.1
commander: 12.1.0
@@ -29308,6 +31657,8 @@ snapshots:
react-refresh@0.14.2: {}
+ react-refresh@0.18.0: {}
+
react-remove-scroll-bar@2.3.8(@types/react@19.1.17)(react@19.1.0):
dependencies:
react: 19.1.0
@@ -29391,6 +31742,12 @@ snapshots:
react@19.2.4: {}
+ read-binary-file-arch@1.0.6:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
read-cache@1.0.0:
dependencies:
pify: 2.3.0
@@ -30460,6 +32817,10 @@ snapshots:
requires-port@1.0.0: {}
+ resedit@1.7.2:
+ dependencies:
+ pe-library: 0.4.1
+
reselect@5.1.1: {}
resend@6.9.1(@react-email/render@2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)):
@@ -30469,6 +32830,8 @@ snapshots:
optionalDependencies:
'@react-email/render': 2.0.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ resolve-alpn@1.2.1: {}
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@@ -30499,6 +32862,10 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ responselike@2.0.1:
+ dependencies:
+ lowercase-keys: 2.0.0
+
restore-cursor@2.0.0:
dependencies:
onetime: 2.0.1
@@ -30508,7 +32875,6 @@ snapshots:
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
- optional: true
retext-contractions@6.0.0:
dependencies:
@@ -30594,10 +32960,24 @@ snapshots:
reusify@1.1.0: {}
+ rimraf@2.6.3:
+ dependencies:
+ glob: 7.2.3
+
rimraf@3.0.2:
dependencies:
glob: 7.2.3
+ roarr@2.15.4:
+ dependencies:
+ boolean: 3.2.0
+ detect-node: 2.1.0
+ globalthis: 1.0.4
+ json-stringify-safe: 5.0.1
+ semver-compare: 1.0.0
+ sprintf-js: 1.1.3
+ optional: true
+
rolldown-plugin-dts@0.21.7(oxc-resolver@11.17.0)(rolldown@1.0.0-rc.1)(typescript@5.9.3):
dependencies:
'@babel/generator': 8.0.0-beta.4
@@ -30718,6 +33098,10 @@ snapshots:
xml-escape: 1.1.0
xpath: 0.0.32
+ sanitize-filename@1.6.3:
+ dependencies:
+ truncate-utf8-bytes: 1.0.2
+
sass@1.97.1:
dependencies:
chokidar: 4.0.3
@@ -30762,9 +33146,11 @@ snapshots:
dependencies:
parseley: 0.12.1
- semver@5.7.2:
+ semver-compare@1.0.0:
optional: true
+ semver@5.7.2: {}
+
semver@6.3.1: {}
semver@7.6.3: {}
@@ -30811,6 +33197,11 @@ snapshots:
serialize-error@2.1.0: {}
+ serialize-error@7.0.1:
+ dependencies:
+ type-fest: 0.13.1
+ optional: true
+
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
@@ -30970,6 +33361,10 @@ snapshots:
dependencies:
is-arrayish: 0.3.2
+ simple-update-notifier@2.0.0:
+ dependencies:
+ semver: 7.7.3
+
sirv@3.0.2:
dependencies:
'@polka/url': 1.0.0-next.29
@@ -30993,12 +33388,34 @@ snapshots:
is-fullwidth-code-point: 2.0.0
optional: true
+ slice-ansi@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ optional: true
+
slugify@1.6.6: {}
+ smart-buffer@4.2.0: {}
+
smob@1.5.0: {}
smol-toml@1.6.0: {}
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.3
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+
solid-js@1.9.11:
dependencies:
csstype: 3.2.3
@@ -31007,9 +33424,9 @@ snapshots:
solid-refresh@0.6.3(solid-js@1.9.11):
dependencies:
- '@babel/generator': 7.28.6
+ '@babel/generator': 7.29.0
'@babel/helper-module-imports': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/types': 7.29.0
solid-js: 1.9.11
transitivePeerDependencies:
- supports-color
@@ -31081,6 +33498,10 @@ snapshots:
srvx@0.10.1: {}
+ ssri@12.0.0:
+ dependencies:
+ minipass: 7.1.2
+
stack-trace@0.0.10: {}
stack-utils@2.0.6:
@@ -31102,6 +33523,8 @@ snapshots:
'@stablelib/base64': 1.0.1
fast-sha256: 1.3.0
+ stat-mode@1.0.0: {}
+
statuses@1.5.0: {}
statuses@2.0.2: {}
@@ -31209,6 +33632,12 @@ snapshots:
structured-headers@0.4.1: {}
+ stubborn-fs@2.0.0:
+ dependencies:
+ stubborn-utils: 1.0.2
+
+ stubborn-utils@1.0.2: {}
+
style-to-js@1.1.21:
dependencies:
style-to-object: 1.0.14
@@ -31224,6 +33653,18 @@ snapshots:
optionalDependencies:
'@babel/core': 7.28.6
+ styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.4
+ optionalDependencies:
+ '@babel/core': 7.29.0
+
+ styled-jsx@5.1.6(react@19.2.4):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.4
+
styleq@0.1.3: {}
sucrase@3.35.1:
@@ -31236,6 +33677,12 @@ snapshots:
tinyglobby: 0.2.15
ts-interface-checker: 0.1.13
+ sumchecker@3.0.1:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
supports-color@10.2.2: {}
supports-color@5.5.0:
@@ -31368,6 +33815,14 @@ snapshots:
minizlib: 3.1.0
yallist: 5.0.0
+ tar@7.5.7:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.2
+ minizlib: 3.1.0
+ yallist: 5.0.0
+
tarn@3.0.2: {}
tedious@18.6.1:
@@ -31387,6 +33842,16 @@ snapshots:
temp-dir@2.0.0: {}
+ temp-file@3.4.0:
+ dependencies:
+ async-exit-hook: 2.0.1
+ fs-extra: 10.1.0
+
+ temp@0.9.4:
+ dependencies:
+ mkdirp: 0.5.6
+ rimraf: 2.6.3
+
terminal-link@2.1.1:
dependencies:
ansi-escapes: 4.3.2
@@ -31436,6 +33901,10 @@ snapshots:
through@2.3.8: {}
+ tiny-async-pool@1.3.0:
+ dependencies:
+ semver: 5.7.2
+
tiny-inflate@1.0.3: {}
tiny-invariant@1.3.3: {}
@@ -31501,6 +33970,10 @@ snapshots:
trough@2.2.0: {}
+ truncate-utf8-bytes@1.0.2:
+ dependencies:
+ utf8-byte-length: 1.0.5
+
ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -31594,6 +34067,9 @@ snapshots:
type-detect@4.0.8: {}
+ type-fest@0.13.1:
+ optional: true
+
type-fest@0.21.3: {}
type-fest@0.7.1: {}
@@ -31644,6 +34120,8 @@ snapshots:
ufo@1.6.3: {}
+ uint8array-extras@1.5.0: {}
+
ultrahtml@1.6.0: {}
unconfig-core@7.4.2:
@@ -31793,6 +34271,14 @@ snapshots:
unplugin: 2.3.11
unplugin-utils: 0.2.5
+ unique-filename@4.0.0:
+ dependencies:
+ unique-slug: 5.0.0
+
+ unique-slug@5.0.0:
+ dependencies:
+ imurmurhash: 0.1.4
+
unique-string@2.0.0:
dependencies:
crypto-random-string: 2.0.0
@@ -31847,8 +34333,9 @@ snapshots:
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
- universalify@0.1.2:
- optional: true
+ universalify@0.1.2: {}
+
+ universalify@2.0.1: {}
unixify@1.0.0:
dependencies:
@@ -31874,7 +34361,7 @@ snapshots:
optionalDependencies:
synckit: 0.11.11
- unstorage@1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2):
+ unstorage@1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2):
dependencies:
anymatch: 3.1.3
chokidar: 4.0.3
@@ -31887,7 +34374,7 @@ snapshots:
optionalDependencies:
'@azure/identity': 4.13.0
'@netlify/blobs': 10.5.0
- db0: 0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)
+ db0: 0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)
ioredis: 5.9.2
until-async@3.0.2: {}
@@ -31923,6 +34410,10 @@ snapshots:
uqr@0.1.2: {}
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
urlpattern-polyfill@10.1.0: {}
urlpattern-polyfill@8.0.2: {}
@@ -31974,6 +34465,8 @@ snapshots:
dependencies:
react: 19.2.4
+ utf8-byte-length@1.0.5: {}
+
util-deprecate@1.0.2: {}
utils-merge@1.0.1: {}
@@ -32025,6 +34518,13 @@ snapshots:
- '@types/react'
- '@types/react-dom'
+ verror@1.10.1:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.4.1
+ optional: true
+
vfile-location@5.0.3:
dependencies:
'@types/unist': 3.0.3
@@ -32078,7 +34578,7 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
- vinxi@0.5.11(af991c32974e6dfef2e6764239993deb):
+ vinxi@0.5.11(a59819f55c4935ff24bbe5864b6de9f1):
dependencies:
'@babel/core': 7.28.6
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
@@ -32099,7 +34599,7 @@ snapshots:
hookable: 5.5.3
http-proxy: 1.18.1
micromatch: 4.0.8
- nitropack: 2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2)(rolldown@1.0.0-rc.1)
+ nitropack: 2.12.4(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.16.2)(rolldown@1.0.0-rc.1)
node-fetch-native: 1.6.7
path-to-regexp: 6.3.0
pathe: 1.1.2
@@ -32111,7 +34611,7 @@ snapshots:
ufo: 1.6.3
unctx: 2.4.1
unenv: 1.10.0
- unstorage: 1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0)(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2)
+ unstorage: 1.16.1(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.2(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260127.0)(@electric-sql/pglite@0.3.14)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.2.0(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.8)(gel@2.2.0)(kysely@0.28.10)(mysql2@3.16.2)(pg@8.16.3)(postgres@3.4.8)(prisma@7.2.0(@types/react@19.2.10)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.16.2))(ioredis@5.9.2)
vite: 6.4.1(@types/node@25.2.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
zod: 4.3.6
transitivePeerDependencies:
@@ -32188,6 +34688,25 @@ snapshots:
tsx: 4.21.0
yaml: 2.8.2
+ vite@7.3.1(@types/node@22.19.8)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2):
+ dependencies:
+ esbuild: 0.27.2
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.55.1
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 22.19.8
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ less: 4.5.1
+ lightningcss: 1.30.2
+ sass: 1.97.1
+ terser: 5.44.1
+ tsx: 4.21.0
+ yaml: 2.8.2
+
vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.2
@@ -32382,6 +34901,8 @@ snapshots:
tr46: 0.0.3
webidl-conversions: 3.0.1
+ when-exit@2.1.5: {}
+
which-module@2.0.1: {}
which@2.0.2:
@@ -32392,6 +34913,10 @@ snapshots:
dependencies:
isexe: 3.1.1
+ which@5.0.0:
+ dependencies:
+ isexe: 3.1.1
+
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 123da784ef..fa9e6ac7da 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -40,6 +40,8 @@ onlyBuiltDependencies:
- '@prisma/engines'
- '@swc/core'
- better-sqlite3
+ - electron
+ - electron-winstaller
- esbuild
- less
- msw