-
+
{branch}{" "}
{branch === "main" ? "" : "pre-release"}
@@ -328,11 +330,13 @@ function SidebarSection({
if (!item.href) return null;
const hasSubpages = !!(item.subpages && item.subpages.length > 0);
const subpageMatch =
- hasSubpages && item.subpages?.some((sp) => pathname === sp.href);
+ hasSubpages &&
+ item.subpages?.some((sp) => sp.href && pathname === sp.href);
const active =
pathname === item.href ||
subpageMatch ||
- (!!item.hasSubpages && pathname.startsWith(`${item.href}/`));
+ (!!(item.subpages && item.subpages.length > 0) &&
+ pathname.startsWith(`${item.href}/`));
return (
- {icon && {icon} }
+ {icon && (
+ svg]:size-[12px] transition-colors duration-150",
+ active ? "text-foreground" : "text-foreground/55",
+ )}
+ >
+ {icon}
+
+ )}
{children}
);
diff --git a/landing/components/docs/icons.tsx b/landing/components/docs/icons.tsx
index 2ab8af13690..cc78fc830ba 100644
--- a/landing/components/docs/icons.tsx
+++ b/landing/components/docs/icons.tsx
@@ -176,6 +176,19 @@ export const Icons = {
),
+ encore: () => (
+
+
+
+ ),
nestJS: (props?: SVGProps) => (
= {
+ text: "string",
+ integer: "number",
+ int: "number",
+ bigint: "number",
+ float: "number",
+ double: "number",
+ decimal: "number",
+ bool: "boolean",
+ object: "json",
+ timestamp: "date",
+ datetime: "date",
+};
+
function TypeIcon({ type }: { type: string }) {
- const t = type.toLowerCase().replace("[]", "");
+ const raw = type.toLowerCase().replace("[]", "");
+ const t = typeAliases[raw] ?? raw;
const className = "size-3 shrink-0";
if (t === "string" || t === "text") {
@@ -202,7 +218,17 @@ type DrizzleProvider = "pg" | "mysql" | "sqlite";
function fieldToDBField(field: Field): DBFieldAttribute {
const t = field.type.toLowerCase();
- const type = (t === "text" ? "string" : t) as DBFieldAttribute["type"];
+ const isArray = t.endsWith("[]");
+ const raw = isArray ? t.slice(0, -2) : t;
+ const aliased = typeAliases[raw] ?? raw;
+ const type = (
+ isArray && (aliased === "string" || aliased === "number")
+ ? `${aliased}[]`
+ : isArray
+ ? t
+ : aliased
+ ) as DBFieldAttribute["type"];
+ const bigint = raw === "bigint";
let references: DBFieldAttribute["references"] | undefined;
if (field.isForeignKey && field.name.endsWith("Id")) {
@@ -218,7 +244,8 @@ function fieldToDBField(field: Field): DBFieldAttribute {
type,
required: field.isPrimaryKey ? true : !field.isOptional,
references,
- unique: false,
+ unique: field.isUnique ?? false,
+ bigint,
};
}
diff --git a/landing/components/icons/index.tsx b/landing/components/icons/index.tsx
index a3dd3e5bb6f..410607e4280 100644
--- a/landing/components/icons/index.tsx
+++ b/landing/components/icons/index.tsx
@@ -609,4 +609,18 @@ export const Icons = {
/>
),
+ encore: (props?: SVGProps) => (
+
+
+
+ ),
};
diff --git a/landing/components/landing/hero-readme.tsx b/landing/components/landing/hero-readme.tsx
index 6cae66a1afd..56cb0d3551a 100644
--- a/landing/components/landing/hero-readme.tsx
+++ b/landing/components/landing/hero-readme.tsx
@@ -1216,10 +1216,18 @@ function SentinelSection() {
const EMPTY_CONTRIBUTORS: ContributorInfo[] = [];
+type CommunityHeroStats = {
+ npmDownloads: number;
+ githubStars: number;
+ contributors: number;
+};
+
function ContributorsSection({
contributors = EMPTY_CONTRIBUTORS,
+ contributorCount,
}: {
contributors: ContributorInfo[];
+ contributorCount: number;
}) {
if (contributors.length === 0) return null;
@@ -1245,7 +1253,7 @@ function ContributorsSection({
Built by a community of{" "}
- 746+
+ {contributorCount}+
{" "}
contributors.
@@ -1335,11 +1343,7 @@ const footerLinks = [
{ label: "Changelog", href: "/changelog" },
];
-function ReadmeFooter({
- stats,
-}: {
- stats: { npmDownloads: number; githubStars: number };
-}) {
+function ReadmeFooter({ stats }: { stats: CommunityHeroStats }) {
return (
{/* Watermark logo */}
@@ -1516,7 +1520,7 @@ export function HeroReadMe({
stats,
}: {
contributors: ContributorInfo[];
- stats: { npmDownloads: number; githubStars: number };
+ stats: CommunityHeroStats;
}) {
const [socialHovered, setSocialHovered] = useState(false);
@@ -1565,7 +1569,7 @@ export function HeroReadMe({
-
+
{[
{
label: "Framework Agnostic",
@@ -1654,7 +1658,7 @@ export function HeroReadMe({
}
}}
className={cn(
- "group/card relative p-4 lg:p-5 border-foreground/[0.15] min-h-[180px] transition-all duration-200 hover:bg-foreground/[0.02] hover:shadow-[inset_0_1px_0_0_rgba(128,128,128,0.1)] hover:z-10",
+ "group/card relative p-4 lg:p-5 border-foreground/[0.08] min-h-[180px] transition-all duration-200 hover:bg-foreground/[0.02] hover:shadow-[inset_0_1px_0_0_rgba(128,128,128,0.1)] hover:z-10",
// Bottom border: all except last; 3-col last row starts at 6
i < 8 && "border-b",
i >= 6 && "md:border-b-0",
@@ -2522,7 +2526,10 @@ export function HeroReadMe({
-
+
diff --git a/landing/components/landing/hero-title.tsx b/landing/components/landing/hero-title.tsx
index 51d6913b1e2..c9b51fd6bbf 100644
--- a/landing/components/landing/hero-title.tsx
+++ b/landing/components/landing/hero-title.tsx
@@ -24,7 +24,12 @@ export function HeroTitle() {
className="relative z-[2] w-full py-16 flex flex-col justify-center h-full pointer-events-none"
>
-
+
+
+
+
The most comprehensive authentication framework for{" "}
diff --git a/landing/components/landing/staggered-nav-files.tsx b/landing/components/landing/staggered-nav-files.tsx
index 664cd4f1dcf..1158f2fe9fe 100644
--- a/landing/components/landing/staggered-nav-files.tsx
+++ b/landing/components/landing/staggered-nav-files.tsx
@@ -198,18 +198,18 @@ export function StaggeredNavFiles() {
initial={{ x: -20, opacity: 0 }}
animate={{ x: 0, opacity: 1 }}
transition={{ duration: 0.28, ease: "easeOut" }}
- className={`${leftPaneWidthClass} hidden ${isKnownPage ? "lg:flex" : "lg:hidden"} items-stretch shrink-0 pointer-events-auto transition-[width] duration-300 ease-out`}
+ className={`${leftPaneWidthClass} hidden ${isKnownPage ? "lg:flex" : "lg:hidden"} h-(--landing-topbar-height) items-stretch shrink-0 pointer-events-auto transition-[width] duration-300 ease-out`}
>
@@ -225,14 +225,14 @@ export function StaggeredNavFiles() {
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.28, ease: "easeOut" }}
- className="lg:hidden flex items-center justify-between w-full h-[52px] pointer-events-auto bg-background border-b border-foreground/[0.06]"
+ className="lg:hidden flex items-center justify-between w-full h-(--landing-topbar-height) pointer-events-auto bg-background border-b border-foreground/[0.06]"
>
-
-
+
+
BETTER-AUTH.
@@ -314,19 +314,19 @@ export function StaggeredNavFiles() {
initial={{ y: -10, opacity: 0 }}
animate={{ y: 0, opacity: 1 }}
transition={{ duration: 0.28, delay: 0.04, ease: "easeOut" }}
- className={`flex-1 hidden lg:flex items-stretch border-b bg-background pointer-events-auto min-w-0 ${navBottomBorderClass}`}
+ className={`flex-1 hidden lg:flex h-(--landing-topbar-height) items-stretch border-b bg-background pointer-events-auto min-w-0 ${navBottomBorderClass}`}
>
{/* Inline logo when left pane is hidden */}
{!isKnownPage && (
-
-
+
+
BETTER-AUTH.
@@ -697,7 +697,7 @@ export function StaggeredNavFiles() {
transition={{ duration: 0.15 }}
className="lg:hidden fixed inset-0 z-[98] w-full bg-background/95 backdrop-blur-sm pointer-events-auto"
>
-
+
{isDocs && mobileView === "docs" ? (
<>
diff --git a/landing/components/sidebar-content.tsx b/landing/components/sidebar-content.tsx
index ec6bab3bdab..a3279b8efe8 100644
--- a/landing/components/sidebar-content.tsx
+++ b/landing/components/sidebar-content.tsx
@@ -4,6 +4,7 @@ import {
AppWindow,
Binoculars,
Book,
+ BotIcon,
CircleHelp,
Database,
FlaskConical,
@@ -22,6 +23,7 @@ import {
UserCircle,
UserSquare2,
Users2,
+ Zap,
} from "lucide-react";
import type { ReactNode, SVGProps } from "react";
import { Icons } from "./icons";
@@ -29,8 +31,8 @@ import { Icons } from "./icons";
export interface SubpageItem {
title: string;
href?: string;
- group?: boolean;
icon?: ((props?: SVGProps
) => ReactNode) | LucideIcon;
+ group?: boolean;
}
export interface ListItem {
@@ -40,7 +42,6 @@ export interface ListItem {
group?: boolean;
separator?: boolean;
isNew?: boolean;
- hasSubpages?: boolean;
subpages?: SubpageItem[];
}
@@ -1135,6 +1136,24 @@ C0.7,239.6,62.1,0.5,62.2,0.4c0,0,54,13.8,119.9,30.8S302.1,62,302.2,62c0.2,0,0.2,
),
},
+ {
+ title: "WeChat",
+ href: "/docs/authentication/wechat",
+ isNew: true,
+ icon: () => (
+
+
+
+ ),
+ },
{
title: "Zoom",
href: "/docs/authentication/zoom",
@@ -1497,6 +1516,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,
icon: Icons.fastify,
href: "/docs/integrations/fastify",
},
+ {
+ title: "Encore",
+ icon: Icons.encore,
+ href: "/docs/integrations/encore",
+ isNew: true,
+ },
{
title: "Express",
icon: Icons.express,
@@ -1766,6 +1791,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,
),
},
+ {
+ title: "Agent Auth",
+ href: "/docs/plugins/agent-auth",
+ icon: () => ,
+ isNew: true,
+ },
{
title: "API Key",
href: "/docs/plugins/api-key",
@@ -1774,30 +1805,29 @@ 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: "/docs/plugins/api-key/advanced",
title: "Advanced Features",
-
- // icon: () => ,
+ icon: () => ,
},
{
href: "/docs/plugins/api-key/reference",
title: "Reference",
- // icon: () => (
- //
- //
- //
- //
- //
- //
- //
- // ),
+ icon: () => (
+
+
+
+
+
+
+
+ ),
},
],
},
@@ -2309,26 +2339,6 @@ 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,
),
},
- {
- title: "Openfort",
- href: "/docs/plugins/openfort",
- icon: () => (
-
-
-
-
-
-
-
- ),
- },
{
title: "Community Plugins",
href: "/docs/plugins/community-plugins",
@@ -2700,7 +2710,6 @@ 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,
title: "Errors",
href: "/docs/reference/errors",
icon: () => ,
- hasSubpages: true,
subpages: [
{
title: "invalid_callback_request",
diff --git a/landing/lib/ai-chat/rate-limit.ts b/landing/lib/ai-chat/rate-limit.ts
new file mode 100644
index 00000000000..6cef95d4440
--- /dev/null
+++ b/landing/lib/ai-chat/rate-limit.ts
@@ -0,0 +1,52 @@
+import { Ratelimit } from "@upstash/ratelimit";
+import { Redis } from "@upstash/redis";
+
+let _ratelimit: Ratelimit | null = null;
+function getRatelimit(): Ratelimit {
+ if (!_ratelimit) {
+ const redis = new Redis({
+ url: process.env.UPSTASH_REDIS_REST_URL!,
+ token: process.env.UPSTASH_REDIS_REST_TOKEN!,
+ });
+ _ratelimit = new Ratelimit({
+ redis,
+ limiter: Ratelimit.slidingWindow(20, "10 m"),
+ prefix: "ai-chat",
+ });
+ }
+ return _ratelimit;
+}
+
+/**
+ * Extract the real client IP from a Vercel-proxied request.
+ * Prefer x-real-ip (set by Vercel, cannot be spoofed by clients),
+ * then fall back to the first x-forwarded-for entry.
+ */
+export function getClientIP(req: Request): string {
+ const realIp = req.headers.get("x-real-ip");
+ if (realIp) return realIp.trim();
+ const forwarded = req.headers.get("x-forwarded-for");
+ if (forwarded) {
+ const ips = forwarded.split(",").map((ip) => ip.trim());
+ return ips[0] || "unknown";
+ }
+ return "unknown";
+}
+
+export async function checkRateLimit(ip: string) {
+ if (process.env.NODE_ENV !== "production") {
+ return {
+ success: true,
+ limit: 100,
+ remaining: 100,
+ reset: Date.now() + 1000 * 60 * 10,
+ };
+ }
+ const result = await getRatelimit().limit(ip);
+ return {
+ success: result.success,
+ limit: result.limit,
+ remaining: result.remaining,
+ reset: result.reset,
+ };
+}
diff --git a/landing/lib/ai-chat/route.ts b/landing/lib/ai-chat/route.ts
new file mode 100644
index 00000000000..31d80a0a55a
--- /dev/null
+++ b/landing/lib/ai-chat/route.ts
@@ -0,0 +1,376 @@
+import { createOpenRouter } from "@openrouter/ai-sdk-provider";
+import { convertToModelMessages, stepCountIs, streamText, tool } from "ai";
+import * as z from "zod";
+import { getLLMText } from "@/lib/llm-text";
+import { source } from "@/lib/source";
+import { checkRateLimit, getClientIP } from "./rate-limit";
+
+const openrouter = createOpenRouter({
+ apiKey: process.env.OPENROUTER_API_KEY,
+});
+const chatModel = openrouter.chat("moonshotai/kimi-k2.5");
+
+function buildDocsIndex(): string {
+ const pages = source.getPages();
+ const lines: string[] = [];
+
+ for (const page of pages) {
+ if (page.slugs[0] === "openapi") continue;
+ const slug = page.slugs.join("/");
+ const desc = page.data.description ? ` - ${page.data.description}` : "";
+ lines.push(`- ${page.data.title} [${slug}]${desc}`);
+ }
+
+ return lines.join("\n");
+}
+
+let cachedDocsIndex: string | null = null;
+function getDocsIndex(): string {
+ if (!cachedDocsIndex) {
+ cachedDocsIndex = buildDocsIndex();
+ }
+ return cachedDocsIndex;
+}
+
+type SearchEntry = {
+ slug: string;
+ title: string;
+ description: string;
+ headings: string[];
+ contents: { heading: string | undefined; content: string }[];
+};
+
+let cachedSearchIndex: SearchEntry[] | null = null;
+async function getSearchIndex(): Promise {
+ if (cachedSearchIndex) return cachedSearchIndex;
+
+ const pages = source.getPages();
+ const entries: SearchEntry[] = [];
+
+ await Promise.all(
+ pages
+ .filter((p) => p.slugs[0] !== "openapi")
+ .map(async (page) => {
+ try {
+ const loaded = await page.data.load();
+ entries.push({
+ slug: page.slugs.join("/"),
+ title: page.data.title,
+ description: page.data.description ?? "",
+ headings: loaded.structuredData.headings.map(
+ (h: { content: string }) => h.content,
+ ),
+ contents: loaded.structuredData.contents,
+ });
+ } catch {
+ // skip pages that fail to load
+ }
+ }),
+ );
+
+ cachedSearchIndex = entries;
+ return entries;
+}
+
+const MAX_SEARCH_RESULTS = 10;
+const MAX_SNIPPET_LENGTH = 200;
+
+function searchIndex(entries: SearchEntry[], query: string) {
+ const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
+ if (terms.length === 0) return [];
+
+ const scored: { entry: SearchEntry; score: number; snippets: string[] }[] =
+ [];
+
+ for (const entry of entries) {
+ let score = 0;
+ const snippets: string[] = [];
+ const titleLower = entry.title.toLowerCase();
+ const descLower = entry.description.toLowerCase();
+
+ for (const term of terms) {
+ if (titleLower.includes(term)) score += 10;
+ if (descLower.includes(term)) score += 5;
+ }
+
+ for (const h of entry.headings) {
+ const lower = h.toLowerCase();
+ for (const term of terms) {
+ if (lower.includes(term)) score += 3;
+ }
+ }
+
+ for (const section of entry.contents) {
+ const lower = section.content.toLowerCase();
+ const matches = terms.filter((t) => lower.includes(t));
+ if (matches.length > 0) {
+ score += matches.length * 2;
+ const firstMatch = lower.indexOf(matches[0]);
+ const start = Math.max(0, firstMatch - 60);
+ const snippet = section.content.slice(
+ start,
+ start + MAX_SNIPPET_LENGTH,
+ );
+ const heading = section.heading ? `[${section.heading}] ` : "";
+ snippets.push(`${heading}...${snippet}...`);
+ }
+ }
+
+ if (score > 0) {
+ scored.push({ entry, score, snippets: snippets.slice(0, 3) });
+ }
+ }
+
+ scored.sort((a, b) => b.score - a.score);
+ return scored.slice(0, MAX_SEARCH_RESULTS);
+}
+
+const GITHUB_REPO = "better-auth/better-auth";
+const GITHUB_API = "https://api.github.com";
+const MAX_CODE_SEARCH_RESULTS = 8;
+const MAX_FILE_CONTENT_LENGTH = 12_000;
+
+type GitHubTextMatch = {
+ fragment: string;
+ matches: { text: string; indices: number[] }[];
+};
+
+type GitHubSearchItem = {
+ name: string;
+ path: string;
+ html_url: string;
+ repository: { full_name: string };
+ text_matches?: GitHubTextMatch[];
+};
+
+function githubHeaders(): Record {
+ const headers: Record = {
+ Accept: "application/vnd.github.text-match+json",
+ "X-GitHub-Api-Version": "2022-11-28",
+ };
+ if (process.env.GITHUB_TOKEN) {
+ headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
+ }
+ return headers;
+}
+
+async function githubSearchCode(query: string, path?: string) {
+ let q = `${query} repo:${GITHUB_REPO}`;
+ if (path) {
+ q += ` path:${path}`;
+ }
+
+ const url = new URL(`${GITHUB_API}/search/code`);
+ url.searchParams.set("q", q);
+ url.searchParams.set("per_page", String(MAX_CODE_SEARCH_RESULTS));
+
+ const res = await fetch(url.toString(), { headers: githubHeaders() });
+ if (!res.ok) {
+ const text = await res.text();
+ return { error: `GitHub API error (${res.status}): ${text}` };
+ }
+
+ const data = (await res.json()) as {
+ total_count: number;
+ items: GitHubSearchItem[];
+ };
+
+ return {
+ total_count: data.total_count,
+ results: data.items.map((item) => ({
+ path: item.path,
+ url: item.html_url,
+ fragments: (item.text_matches ?? []).map((m) => m.fragment),
+ })),
+ };
+}
+
+async function githubGetFileContent(path: string, ref = "canary") {
+ const url = `${GITHUB_API}/repos/${GITHUB_REPO}/contents/${encodeURIComponent(path)}?ref=${ref}`;
+
+ const res = await fetch(url, {
+ headers: {
+ Accept: "application/vnd.github.raw+json",
+ "X-GitHub-Api-Version": "2022-11-28",
+ ...(process.env.GITHUB_TOKEN
+ ? { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` }
+ : {}),
+ },
+ });
+
+ if (!res.ok) {
+ return {
+ error: `GitHub API error (${res.status}): file not found or inaccessible`,
+ };
+ }
+
+ let content = await res.text();
+ if (content.length > MAX_FILE_CONTENT_LENGTH) {
+ content = `${content.slice(0, MAX_FILE_CONTENT_LENGTH)}\n\n... (truncated — file exceeds ${MAX_FILE_CONTENT_LENGTH} chars)`;
+ }
+ return { path, content };
+}
+
+const SYSTEM_PROMPT = `You are a helpful documentation assistant for Better Auth, a comprehensive framework-agnostic authentication and authorization framework for TypeScript.
+
+Your role is to answer questions about Better Auth by referencing the official documentation. You should be accurate, concise, and helpful.
+
+## Rules
+- Always look up relevant documentation before answering. Do NOT guess or make up information.
+- Use searchDocs when you're unsure which page has the answer, then use getDocumentation to read the matching pages.
+- You may call the tools multiple times to gather context from different pages.
+- When referencing configuration options, APIs, or code, be precise and use the exact names from the documentation.
+- If the documentation doesn't cover the user's question, say so honestly rather than guessing.
+- Format your answers with markdown. Use code blocks for code examples.
+- Keep answers focused and concise - ideally under 400 words. Don't dump entire pages of documentation; extract only the relevant parts.
+- Provide short code snippets, not full files. Only show the minimum code needed to illustrate the answer.
+- When users ask about implementation details, internal behavior, or source code, use searchCode and getFileContent to look up the actual source code from the GitHub repository.
+
+## Available Documentation Pages
+The following pages are available. Use the slug (in brackets) with the getDocumentation tool to retrieve the full content of a page.
+
+`;
+
+export async function POST(req: Request) {
+ const ip = getClientIP(req);
+ const rateLimitResult = await checkRateLimit(ip);
+
+ if (!rateLimitResult.success) {
+ const retryAfter = Math.ceil((rateLimitResult.reset - Date.now()) / 1000);
+ return new Response(
+ JSON.stringify({
+ error: "Rate limit exceeded. Please try again later.",
+ }),
+ {
+ status: 429,
+ headers: {
+ "Content-Type": "application/json",
+ "Retry-After": String(Math.max(retryAfter, 1)),
+ "X-RateLimit-Limit": String(rateLimitResult.limit),
+ "X-RateLimit-Remaining": String(rateLimitResult.remaining),
+ "X-RateLimit-Reset": String(rateLimitResult.reset),
+ },
+ },
+ );
+ }
+
+ const body = await req.json();
+ const messages = body?.messages;
+ if (!Array.isArray(messages) || messages.length === 0) {
+ return new Response(
+ JSON.stringify({
+ error: "Invalid request: messages must be a non-empty array.",
+ }),
+ { status: 400, headers: { "Content-Type": "application/json" } },
+ );
+ }
+ if (messages.length > 100) {
+ return new Response(JSON.stringify({ error: "Too many messages." }), {
+ status: 400,
+ headers: { "Content-Type": "application/json" },
+ });
+ }
+ const docsIndex = getDocsIndex();
+
+ const system = SYSTEM_PROMPT + docsIndex;
+
+ const result = streamText({
+ model: chatModel,
+ maxOutputTokens: 2048,
+ system,
+ messages: await convertToModelMessages(messages, {
+ ignoreIncompleteToolCalls: true,
+ }),
+ tools: {
+ searchDocs: tool({
+ description:
+ "Search across all Better Auth documentation for specific terms, keywords, or concepts. Returns matching page slugs and snippets. Use this when you're not sure which page contains the answer.",
+ inputSchema: z.object({
+ query: z
+ .string()
+ .describe(
+ "Search query — keywords or terms to find, e.g. 'session token cookie' or 'organization invite'",
+ ),
+ }),
+ execute: async ({ query }) => {
+ const index = await getSearchIndex();
+ const results = searchIndex(index, query);
+ if (results.length === 0) {
+ return { results: [], message: "No matching documentation found." };
+ }
+ return {
+ results: results.map((r) => ({
+ slug: r.entry.slug,
+ title: r.entry.title,
+ description: r.entry.description,
+ snippets: r.snippets,
+ })),
+ };
+ },
+ }),
+ getDocumentation: tool({
+ description:
+ "Retrieve the full content of a Better Auth documentation page by its slug. Use this to look up detailed information before answering user questions.",
+ inputSchema: z.object({
+ slug: z
+ .string()
+ .describe(
+ "The documentation page slug, e.g. 'plugins/passkey' or 'concepts/session-management'",
+ ),
+ }),
+ execute: async ({ slug }) => {
+ const slugParts = slug.split("/");
+ const page = source.getPage(slugParts);
+ if (!page) {
+ return { error: `Documentation page not found for slug: ${slug}` };
+ }
+ try {
+ const content = await getLLMText(page);
+ return { content };
+ } catch {
+ return {
+ error: `Failed to load documentation for: ${slug}`,
+ };
+ }
+ },
+ }),
+ searchCode: tool({
+ description:
+ "Search the Better Auth source code on GitHub using semantic code search. Returns matching file paths and code fragments. Use this when users ask about implementation details, internal behavior, or want to see actual source code.",
+ inputSchema: z.object({
+ query: z
+ .string()
+ .describe(
+ "Code search query — function names, class names, keywords, or concepts to find in the source, e.g. 'createSession' or 'hashPassword' or 'organization plugin'",
+ ),
+ path: z
+ .string()
+ .optional()
+ .describe(
+ "Optional path filter to narrow search to a directory or file pattern, e.g. 'packages/better-auth/src' or 'packages/cli'",
+ ),
+ }),
+ execute: async ({ query, path }) => {
+ return githubSearchCode(query, path);
+ },
+ }),
+ getFileContent: tool({
+ description:
+ "Fetch the content of a specific file from the Better Auth GitHub repository. Use this after searchCode to read the full source of a matching file.",
+ inputSchema: z.object({
+ path: z
+ .string()
+ .describe(
+ "The file path in the repository, e.g. 'packages/better-auth/src/api/routes/session.ts'",
+ ),
+ }),
+ execute: async ({ path }) => {
+ return githubGetFileContent(path);
+ },
+ }),
+ },
+ stopWhen: stepCountIs(8),
+ });
+
+ return result.toUIMessageStreamResponse();
+}
diff --git a/landing/lib/community-plugins-data.ts b/landing/lib/community-plugins-data.ts
index a659b5fad45..ea9860c92a2 100644
--- a/landing/lib/community-plugins-data.ts
+++ b/landing/lib/community-plugins-data.ts
@@ -215,4 +215,15 @@ export const communityPlugins: CommunityPlugin[] = [
avatar: "https://github.com/iamjasonkendrick.png",
},
},
+ {
+ name: "better-auth-usos",
+ url: "https://github.com/qamarq/better-auth-usos",
+ description:
+ "USOS plugin for Better Auth - allows students to authenticate using their university credentials via the USOS API. Using oauth 1a.",
+ author: {
+ name: "qamarq",
+ github: "qamarq",
+ avatar: "https://github.com/qamarq.png",
+ },
+ },
];
diff --git a/landing/lib/community-stats.ts b/landing/lib/community-stats.ts
index 87005f05ad6..0be45cba580 100644
--- a/landing/lib/community-stats.ts
+++ b/landing/lib/community-stats.ts
@@ -18,6 +18,8 @@ export function getContributors(): ContributorInfo[] {
return staticContributors as ContributorInfo[];
}
+const staticContributorsCount = staticContributors.length;
+
// Fetch NPM download stats for the last year
async function fetchNpmDownloads(): Promise {
try {
@@ -75,7 +77,7 @@ async function fetchGitHubStats(): Promise<{
console.error("Failed to fetch GitHub repo stats:", repoResponse.status);
}
- let contributorsCount = 100;
+ let contributorsCount = staticContributorsCount;
if (contributorsResponse.ok) {
const linkHeader = contributorsResponse.headers.get("Link");
if (linkHeader) {
@@ -94,7 +96,7 @@ async function fetchGitHubStats(): Promise<{
return { stars, contributors: contributorsCount };
} catch (error) {
console.error("Error fetching GitHub stats:", error);
- return { stars: 26000, contributors: 100 };
+ return { stars: 26000, contributors: staticContributorsCount };
}
}
diff --git a/landing/lib/metadata.ts b/landing/lib/metadata.ts
new file mode 100644
index 00000000000..ae0a90fa2f5
--- /dev/null
+++ b/landing/lib/metadata.ts
@@ -0,0 +1,47 @@
+import type { Metadata } from "next";
+
+export function createMetadata(override: Metadata): Metadata {
+ return {
+ ...override,
+ metadataBase: baseUrl,
+ openGraph: {
+ title: override.title ?? undefined,
+ description: override.description ?? undefined,
+ url: "https://better-auth.com",
+ images: "/og.png",
+ siteName: "Better Auth",
+ ...override.openGraph,
+ },
+ twitter: {
+ card: "summary_large_image",
+ title: override.title ?? undefined,
+ description: override.description ?? undefined,
+ images: "/og.png",
+ ...override.twitter,
+ },
+ icons: {
+ icon: [
+ { url: "/favicon/favicon.ico", sizes: "any" },
+ {
+ url: "/favicon/favicon-32x32.png",
+ sizes: "32x32",
+ type: "image/png",
+ },
+ {
+ url: "/favicon/favicon-16x16.png",
+ sizes: "16x16",
+ type: "image/png",
+ },
+ ],
+ apple: "/favicon/apple-touch-icon.png",
+ },
+ };
+}
+
+export const baseUrl =
+ process.env.NODE_ENV === "development" ||
+ (!process.env.VERCEL_PROJECT_PRODUCTION_URL && !process.env.VERCEL_URL)
+ ? new URL("http://localhost:3000")
+ : new URL(
+ `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL || process.env.VERCEL_URL}`,
+ );
diff --git a/landing/lib/rss.ts b/landing/lib/rss.ts
index 32111fd9f11..85ebafd720e 100644
--- a/landing/lib/rss.ts
+++ b/landing/lib/rss.ts
@@ -1,6 +1,6 @@
import { Feed } from "feed";
+import { baseUrl } from "./metadata";
import { blogs } from "./source";
-import { baseUrl } from "./utils";
export function getRSS() {
const feed = new Feed({
@@ -25,10 +25,12 @@ export function getRSS() {
title: page.data.title,
description: page.data.description,
image: page.data.image
- ? `${baseUrl}${page.data.image.startsWith("/") ? page.data.image.slice(1) : page.data.image}`
+ ? page.data.image.startsWith("/")
+ ? `${baseUrl}${page.data.image.slice(1)}`
+ : page.data.image
: undefined,
- link: `${baseUrl}${url.startsWith("/") ? url.slice(1) : url}`,
- date: new Date(page.data.lastModified ?? page.data.date),
+ link: url.startsWith("/") ? `${baseUrl}${url.slice(1)}` : url,
+ date: new Date(page.data.date),
author: page.data.author
? [
{
diff --git a/landing/lib/utils.ts b/landing/lib/utils.ts
index 8a90058be7f..7d63e21d50f 100644
--- a/landing/lib/utils.ts
+++ b/landing/lib/utils.ts
@@ -19,11 +19,3 @@ export function mergeRefs(
});
};
}
-
-export const baseUrl =
- process.env.NODE_ENV === "development" ||
- (!process.env.VERCEL_PROJECT_PRODUCTION_URL && !process.env.VERCEL_URL)
- ? new URL("http://localhost:3000")
- : new URL(
- `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL || process.env.VERCEL_URL}`,
- );
diff --git a/landing/package.json b/landing/package.json
index e859c0807a6..a7b5bd85b78 100644
--- a/landing/package.json
+++ b/landing/package.json
@@ -5,7 +5,7 @@
"private": true,
"scripts": {
"postinstall": "fumadocs-mdx",
- "dev": "next dev --turbopack --port 3000",
+ "dev": "next dev --port 3000",
"build": "next build",
"postbuild": "pnpm sync-typesense",
"start": "next start",
@@ -21,7 +21,7 @@
"@better-fetch/fetch": "^1.1.21",
"@biomejs/biome": "2.4.4",
"@hookform/resolvers": "^5.2.1",
- "@inkeep/ai-sdk-provider": "^0.54.0",
+ "@openrouter/ai-sdk-provider": "^2.2.5",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-label": "^2.1.7",
@@ -38,9 +38,11 @@
"@tsparticles/engine": "^3.9.1",
"@tsparticles/react": "^3.0.0",
"@tsparticles/slim": "^3.9.1",
+ "@upstash/ratelimit": "^2.0.8",
+ "@upstash/redis": "^1.36.4",
"@vercel/analytics": "^1.6.1",
"@vercel/og": "^0.10.1",
- "ai": "^6.0.104",
+ "ai": "^6.0.116",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
@@ -56,7 +58,7 @@
"js-beautify": "^1.15.4",
"lucide-react": "^0.575.0",
"motion": "^12.23.12",
- "next": "16.1.6",
+ "next": "16.2.0",
"next-themes": "^0.4.6",
"radix-ui": "^1.4.3",
"react": "^19.1.0",
diff --git a/packages/api-key/package.json b/packages/api-key/package.json
index 9d38b7f9229..257d2316d05 100644
--- a/packages/api-key/package.json
+++ b/packages/api-key/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/api-key",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "API Key plugin for Better Auth.",
"type": "module",
"license": "MIT",
diff --git a/packages/api-key/src/index.ts b/packages/api-key/src/index.ts
index 5af219c9dd9..70ea7a1aaa3 100644
--- a/packages/api-key/src/index.ts
+++ b/packages/api-key/src/index.ts
@@ -380,8 +380,7 @@ export function apiKey(
deleteAllExpiredApiKeys: routes.deleteAllExpiredApiKeys,
},
schema,
- configurations,
- } satisfies BetterAuthPlugin & { configurations: PredefinedApiKeyOptions[] };
+ } satisfies BetterAuthPlugin;
}
export type * from "./types";
diff --git a/packages/api-key/src/org-authorization.ts b/packages/api-key/src/org-authorization.ts
index 200b57f8991..2b70832e75b 100644
--- a/packages/api-key/src/org-authorization.ts
+++ b/packages/api-key/src/org-authorization.ts
@@ -32,11 +32,12 @@ interface Member {
function getOrgOptions(
ctx: GenericEndpointContext,
): OrganizationOptions | null {
- if (ctx.context.orgOptions) {
- return ctx.context.orgOptions as OrganizationOptions;
+ const context = ctx.context;
+ if ("orgOptions" in context && context.orgOptions) {
+ return context.orgOptions as OrganizationOptions;
}
- const orgPlugin = ctx.context.getPlugin?.("organization");
+ const orgPlugin = context.getPlugin?.("organization");
if (orgPlugin && "options" in orgPlugin) {
return orgPlugin.options as OrganizationOptions;
}
diff --git a/packages/api-key/src/routes/list-api-keys.ts b/packages/api-key/src/routes/list-api-keys.ts
index 47c48031e83..9bd7dbfb2f4 100644
--- a/packages/api-key/src/routes/list-api-keys.ts
+++ b/packages/api-key/src/routes/list-api-keys.ts
@@ -2,7 +2,7 @@ import type { AuthContext } from "@better-auth/core";
import { createAuthEndpoint } from "@better-auth/core/api";
import { safeJSONParse } from "@better-auth/core/utils/json";
import { sessionMiddleware } from "better-auth/api";
-import * as z from "zod/v4";
+import * as z from "zod";
import {
batchMigrateLegacyMetadata,
listApiKeys as listApiKeysFromStorage,
diff --git a/packages/api-key/tsdown.config.ts b/packages/api-key/tsdown.config.ts
index f2df8a0328a..833f634376b 100644
--- a/packages/api-key/tsdown.config.ts
+++ b/packages/api-key/tsdown.config.ts
@@ -4,7 +4,9 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts", "./src/types.ts"],
- external: ["better-auth", "better-call", "@better-fetch/fetch"],
+ deps: {
+ neverBundle: ["better-auth", "better-call", "@better-fetch/fetch"],
+ },
sourcemap: true,
treeshake: true,
});
diff --git a/packages/better-auth/package.json b/packages/better-auth/package.json
index 7d3003b6776..aac3b9deef4 100644
--- a/packages/better-auth/package.json
+++ b/packages/better-auth/package.json
@@ -1,6 +1,6 @@
{
"name": "better-auth",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "The most comprehensive authentication framework for TypeScript.",
"type": "module",
"license": "MIT",
@@ -521,7 +521,7 @@
"happy-dom": "^20.7.0",
"listhen": "^1.9.0",
"msw": "^2.12.10",
- "next": "^16.1.6",
+ "next": "^16.2.0",
"oauth2-mock-server": "^8.2.2",
"react": "catalog:react19",
"react-dom": "catalog:react19",
diff --git a/packages/better-auth/src/adapters/index.ts b/packages/better-auth/src/adapters/index.ts
index cd852588a3c..2d4e8e90d84 100644
--- a/packages/better-auth/src/adapters/index.ts
+++ b/packages/better-auth/src/adapters/index.ts
@@ -35,3 +35,23 @@ export {
initGetFieldAttributes,
initGetIdField,
};
+
+/**
+ * @deprecated Use `createAdapterFactory` instead.
+ */
+export const createAdapter = createAdapterFactory;
+
+/**
+ * @deprecated Use `AdapterFactoryOptions` instead.
+ */
+export type CreateAdapterOptions = AdapterFactoryOptions;
+
+/**
+ * @deprecated Use `AdapterFactoryConfig` instead.
+ */
+export type AdapterConfig = AdapterFactoryConfig;
+
+/**
+ * @deprecated Use `AdapterFactoryCustomizeAdapterCreator` instead.
+ */
+export type CreateCustomAdapter = AdapterFactoryCustomizeAdapterCreator;
diff --git a/packages/better-auth/src/api/middlewares/origin-check.test.ts b/packages/better-auth/src/api/middlewares/origin-check.test.ts
index c037fbc34da..004b5c7651b 100644
--- a/packages/better-auth/src/api/middlewares/origin-check.test.ts
+++ b/packages/better-auth/src/api/middlewares/origin-check.test.ts
@@ -537,6 +537,61 @@ describe("origin check middleware", async () => {
);
expect(sampleInternalEndpointInvalid.error?.status).toBe(403);
});
+
+ it("should skip origin check for matched paths when skipOriginCheck is set to an array", async () => {
+ const { client } = await getTestInstance({
+ trustedOrigins: ["https://trusted-site.com"],
+ advanced: {
+ disableOriginCheck: false,
+ },
+ plugins: [
+ {
+ id: "test",
+ init() {
+ return {
+ context: {
+ skipOriginCheck: ["/public/data"],
+ },
+ };
+ },
+ endpoints: {
+ publicEndpoint: createAuthEndpoint(
+ "/public/data",
+ {
+ method: "GET",
+ query: z.object({
+ callbackURL: z.string(),
+ }),
+ use: [originCheck((c) => c.query.callbackURL)],
+ },
+ async (c) => c.query.callbackURL,
+ ),
+ protectedEndpoint: createAuthEndpoint(
+ "/protected/data",
+ {
+ method: "GET",
+ query: z.object({
+ callbackURL: z.string(),
+ }),
+ use: [originCheck((c) => c.query.callbackURL)],
+ },
+ async (c) => c.query.callbackURL,
+ ),
+ },
+ },
+ ],
+ });
+
+ const skipped = await client.$fetch(
+ "/public/data?callbackURL=https://malicious.com",
+ );
+ expect(skipped.data).toBe("https://malicious.com");
+
+ const blocked = await client.$fetch(
+ "/protected/data?callbackURL=https://malicious.com",
+ );
+ expect(blocked.error?.status).toBe(403);
+ });
});
describe("trusted origins with baseURL inferred from request", async () => {
diff --git a/packages/better-auth/src/api/middlewares/origin-check.ts b/packages/better-auth/src/api/middlewares/origin-check.ts
index 9010cccaa94..921a69e5098 100644
--- a/packages/better-auth/src/api/middlewares/origin-check.ts
+++ b/packages/better-auth/src/api/middlewares/origin-check.ts
@@ -18,6 +18,29 @@ function shouldSkipCSRFForBackwardCompat(ctx: GenericEndpointContext): boolean {
);
}
+/**
+ * Checks if the origin check should be skipped for the current request.
+ * Handles both boolean (skip all) and array (skip specific paths) configurations.
+ */
+function shouldSkipOriginCheck(ctx: GenericEndpointContext): boolean {
+ const skipOriginCheck = ctx.context.skipOriginCheck;
+ if (skipOriginCheck === true) {
+ return true;
+ }
+ if (Array.isArray(skipOriginCheck) && ctx.request) {
+ try {
+ const basePath = new URL(ctx.context.baseURL).pathname;
+ const currentPath = normalizePathname(ctx.request.url, basePath);
+ return skipOriginCheck.some((skipPath) =>
+ currentPath.startsWith(skipPath),
+ );
+ } catch {
+ //
+ }
+ }
+ return false;
+}
+
/**
* Logs deprecation warning for users relying on coupled behavior.
* Only logs if user explicitly set disableOriginCheck (not test environment default).
@@ -45,7 +68,7 @@ export const originCheckMiddleware = createAuthMiddleware(async (ctx) => {
}
await validateOrigin(ctx);
- if (ctx.context.skipOriginCheck) {
+ if (shouldSkipOriginCheck(ctx)) {
return;
}
@@ -117,7 +140,7 @@ export const originCheck = (
if (!ctx.request) {
return;
}
- if (ctx.context.skipOriginCheck) {
+ if (shouldSkipOriginCheck(ctx)) {
return;
}
const callbackURL = getValue(ctx);
@@ -199,20 +222,8 @@ async function validateOrigin(
return;
}
- const skipOriginCheck = ctx.context.skipOriginCheck;
- if (Array.isArray(skipOriginCheck)) {
- try {
- const basePath = new URL(ctx.context.baseURL).pathname;
- const currentPath = normalizePathname(ctx.request.url, basePath);
- const shouldSkipPath = skipOriginCheck.some((skipPath) =>
- currentPath.startsWith(skipPath),
- );
- if (shouldSkipPath) {
- return;
- }
- } catch {
- // If parsing fails, don't skip - continue with validation
- }
+ if (shouldSkipOriginCheck(ctx)) {
+ return;
}
const shouldValidate = forceValidate || useCookies;
diff --git a/packages/better-auth/src/api/routes/password.test.ts b/packages/better-auth/src/api/routes/password.test.ts
index ebb5c30056d..ed3b110dce8 100644
--- a/packages/better-auth/src/api/routes/password.test.ts
+++ b/packages/better-auth/src/api/routes/password.test.ts
@@ -37,6 +37,26 @@ describe("forget password", async () => {
expect(token.length).toBeGreaterThan(10);
});
+ it("should reject untrusted redirectTo", async () => {
+ const { client, testUser } = await getTestInstance({
+ emailAndPassword: {
+ enabled: true,
+ async sendResetPassword() {},
+ },
+ trustedOrigins: ["http://localhost:3000"],
+ advanced: {
+ disableOriginCheck: false,
+ },
+ });
+ const res = await client.requestPasswordReset({
+ email: testUser.email,
+ redirectTo: "http://malicious.com",
+ });
+
+ expect(res.error?.status).toBe(403);
+ expect(res.error?.message).toBe("Invalid redirectURL");
+ });
+
it("should fail on invalid password", async () => {
const res = await client.resetPassword(
{
diff --git a/packages/better-auth/src/api/routes/password.ts b/packages/better-auth/src/api/routes/password.ts
index d6e247a7dfa..5a2b15a3420 100644
--- a/packages/better-auth/src/api/routes/password.ts
+++ b/packages/better-auth/src/api/routes/password.ts
@@ -84,6 +84,7 @@ export const requestPasswordReset = createAuthEndpoint(
},
},
},
+ use: [originCheck((ctx) => ctx.body.redirectTo)],
},
async (ctx) => {
if (!ctx.context.options.emailAndPassword?.sendResetPassword) {
diff --git a/packages/better-auth/src/api/routes/sign-up.test.ts b/packages/better-auth/src/api/routes/sign-up.test.ts
index 09d856bbad8..44f0a545ae8 100644
--- a/packages/better-auth/src/api/routes/sign-up.test.ts
+++ b/packages/better-auth/src/api/routes/sign-up.test.ts
@@ -265,13 +265,14 @@ describe("sign-up user enumeration protection", async () => {
);
});
- it("should call onExistingUserSignUp when autoSignIn is false", async () => {
+ it("should call onExistingUserSignUp when autoSignIn is false and requireEmailVerification is true", async () => {
const onExistingUserSignUp = vi.fn();
const { auth } = await getTestInstance(
{
emailAndPassword: {
enabled: true,
autoSignIn: false,
+ requireEmailVerification: true,
onExistingUserSignUp,
},
},
@@ -292,6 +293,33 @@ describe("sign-up user enumeration protection", async () => {
expect(onExistingUserSignUp).toHaveBeenCalledTimes(1);
});
+ it("should not call onExistingUserSignUp when autoSignIn is false without requireEmailVerification", async () => {
+ const onExistingUserSignUp = vi.fn();
+ const { auth } = await getTestInstance(
+ {
+ emailAndPassword: {
+ enabled: true,
+ autoSignIn: false,
+ onExistingUserSignUp,
+ },
+ },
+ {
+ disableTestUser: true,
+ },
+ );
+
+ const body = {
+ email: "callback-autosignin-no-verify@test.com",
+ password: "password123",
+ name: "Callback AutoSignIn No Verify",
+ };
+
+ await auth.api.signUpEmail({ body });
+ await expect(auth.api.signUpEmail({ body })).rejects.toThrow();
+
+ expect(onExistingUserSignUp).not.toHaveBeenCalled();
+ });
+
it("should not call onExistingUserSignUp when enumeration protection is inactive", async () => {
const onExistingUserSignUp = vi.fn();
const { auth } = await getTestInstance(
@@ -344,7 +372,7 @@ describe("sign-up user enumeration protection", async () => {
expect(onExistingUserSignUp).not.toHaveBeenCalled();
});
- it("should return success for existing email when autoSignIn is disabled", async () => {
+ it("should throw for existing email when autoSignIn is disabled without requireEmailVerification", async () => {
const { auth } = await getTestInstance(
{
emailAndPassword: {
@@ -365,10 +393,32 @@ describe("sign-up user enumeration protection", async () => {
await auth.api.signUpEmail({ body });
- const duplicatedSignUp = await auth.api.signUpEmail({ body });
+ await expect(auth.api.signUpEmail({ body })).rejects.toThrow();
+ });
- expect(duplicatedSignUp.token).toBeNull();
- expect(duplicatedSignUp.user.email).toBe(body.email);
+ it("should return token: null for new sign-up when autoSignIn is disabled", async () => {
+ const { auth } = await getTestInstance(
+ {
+ emailAndPassword: {
+ enabled: true,
+ autoSignIn: false,
+ },
+ },
+ {
+ disableTestUser: true,
+ },
+ );
+
+ const res = await auth.api.signUpEmail({
+ body: {
+ email: "new-auto-signin@test.com",
+ password: "password123",
+ name: "New User",
+ },
+ });
+
+ expect(res.token).toBeNull();
+ expect(res.user.email).toBe("new-auto-signin@test.com");
});
});
diff --git a/packages/better-auth/src/api/routes/sign-up.ts b/packages/better-auth/src/api/routes/sign-up.ts
index 15f340edd95..5bf210714d4 100644
--- a/packages/better-auth/src/api/routes/sign-up.ts
+++ b/packages/better-auth/src/api/routes/sign-up.ts
@@ -232,8 +232,10 @@ export const signUpEmail = () =>
);
}
const shouldReturnGenericDuplicateResponse =
- ctx.context.options.emailAndPassword.autoSignIn === false ||
ctx.context.options.emailAndPassword.requireEmailVerification;
+ const shouldSkipAutoSignIn =
+ ctx.context.options.emailAndPassword.autoSignIn === false ||
+ shouldReturnGenericDuplicateResponse;
const additionalUserFields = parseUserInput(
ctx.context.options,
rest,
@@ -391,7 +393,7 @@ export const signUpEmail = () =>
}
}
- if (shouldReturnGenericDuplicateResponse) {
+ if (shouldSkipAutoSignIn) {
return ctx.json({
token: null,
user: parseUserOutput(ctx.context.options, createdUser) as User<
diff --git a/packages/better-auth/src/api/to-auth-endpoints.test.ts b/packages/better-auth/src/api/to-auth-endpoints.test.ts
index 0ab05cd1eea..48541935183 100644
--- a/packages/better-auth/src/api/to-auth-endpoints.test.ts
+++ b/packages/better-auth/src/api/to-auth-endpoints.test.ts
@@ -433,6 +433,19 @@ describe("after hook", async () => {
expect(result2.headers.get("set-cookie")).toContain("session=value");
expect(result2.headers.get("set-cookie")).toContain("data=2");
});
+
+ it("should return a Response when invoked with a request context", async () => {
+ const response = await authEndpoints.cookies({
+ request: new Request("http://localhost:3000/cookies", {
+ method: "POST",
+ }),
+ } as any);
+ expect(response).toBeInstanceOf(Response);
+ const body = await response.json();
+ expect(body).toMatchObject({ hello: "world" });
+ expect(response.headers.get("set-cookie")).toContain("session=value");
+ expect(response.headers.get("set-cookie")).toContain("data=2");
+ });
});
});
diff --git a/packages/better-auth/src/api/to-auth-endpoints.ts b/packages/better-auth/src/api/to-auth-endpoints.ts
index 347195fc4cb..5f67049878a 100644
--- a/packages/better-auth/src/api/to-auth-endpoints.ts
+++ b/packages/better-auth/src/api/to-auth-endpoints.ts
@@ -1,5 +1,5 @@
import type { AuthContext, HookEndpointContext } from "@better-auth/core";
-import type { AuthEndpoint, AuthMiddleware } from "@better-auth/core/api";
+import type { AuthMiddleware } from "@better-auth/core/api";
import {
hasRequestState,
runWithEndpointContext,
@@ -7,9 +7,17 @@ import {
} from "@better-auth/core/context";
import { shouldPublishLog } from "@better-auth/core/env";
import { APIError } from "@better-auth/core/error";
+import {
+ ATTR_CONTEXT,
+ ATTR_HOOK_TYPE,
+ ATTR_HTTP_ROUTE,
+ ATTR_OPERATION_ID,
+ withSpan,
+} from "@better-auth/core/instrumentation";
import type {
+ Endpoint,
EndpointContext,
- EndpointOptions,
+ EndpointRuntimeOptions,
InputContext,
} from "better-call";
import { kAPIErrorHeaderSymbol, toResponse } from "better-call";
@@ -17,7 +25,20 @@ import { createDefu } from "defu";
import { isAPIError } from "../utils/is-api-error";
type InternalContext = Partial<
- InputContext & EndpointContext
+ InputContext &
+ EndpointContext<
+ string,
+ any,
+ any,
+ any,
+ any,
+ any,
+ any,
+ AuthContext & {
+ returned?: unknown | undefined;
+ responseHeaders?: Headers | undefined;
+ }
+ >
> & {
path: string;
asResponse?: boolean | undefined;
@@ -35,35 +56,59 @@ const defuReplaceArrays = createDefu((obj, key, value) => {
}
});
+type Hook = {
+ matcher: (context: HookEndpointContext) => boolean;
+ handler: AuthMiddleware;
+};
+
const hooksSourceWeakMap = new WeakMap<
AuthMiddleware,
`user` | `plugin:${string}`
>();
+function getOperationId(endpoint: Endpoint | undefined, key: string): string {
+ if (!endpoint?.options) return key;
+ const opts = endpoint.options as {
+ operationId?: string;
+ metadata?: { openapi?: { operationId?: string } };
+ };
+ return opts.operationId ?? opts.metadata?.openapi?.operationId ?? key;
+}
+
type UserInputContext = Partial<
- InputContext & EndpointContext
+ InputContext &
+ EndpointContext
>;
-export function toAuthEndpoints<
- const E extends Record<
- string,
- Omit, "wrap">
- >,
->(endpoints: E, ctx: AuthContext | Promise): E {
+export function toAuthEndpoints>(
+ endpoints: E,
+ ctx: AuthContext | Promise,
+): E {
const api: Record<
string,
((
- context: EndpointContext & InputContext,
+ context: EndpointContext &
+ InputContext,
) => Promise) & {
path?: string | undefined;
- options?: EndpointOptions | undefined;
+ options?: EndpointRuntimeOptions | undefined;
}
> = {};
for (const [key, endpoint] of Object.entries(endpoints)) {
api[key] = async (context?: UserInputContext) => {
+ const operationId = getOperationId(endpoint, key);
+ const endpointMethod = endpoint?.options?.method;
+ const defaultMethod = Array.isArray(endpointMethod)
+ ? endpointMethod[0]
+ : endpointMethod;
+
const run = async () => {
const authContext = await ctx;
+ const methodName =
+ context?.method ?? context?.request?.method ?? defaultMethod ?? "?";
+ const pathName = context?.path ?? endpoint.path ?? "/:virtual";
+
let internalContext: InternalContext = {
...context,
context: {
@@ -75,117 +120,146 @@ export function toAuthEndpoints<
path: endpoint.path,
headers: context?.headers ? new Headers(context?.headers) : undefined,
};
- return runWithEndpointContext(internalContext, async () => {
- const { beforeHooks, afterHooks } = getHooks(authContext);
- const before = await runBeforeHooks(internalContext, beforeHooks);
- /**
- * If `before.context` is returned, it should
- * get merged with the original context
- */
- if (
- "context" in before &&
- before.context &&
- typeof before.context === "object"
- ) {
- const { headers, ...rest } = before.context as {
- headers: Headers;
- };
- /**
- * Headers should be merged differently
- * so the hook doesn't override the whole
- * header
- */
- if (headers) {
- headers.forEach((value, key) => {
- (internalContext.headers as Headers).set(key, value);
- });
- }
- internalContext = defuReplaceArrays(rest, internalContext);
- } else if (before) {
- /* Return before hook response if it's anything other than a context return */
- return context?.asResponse
- ? toResponse(before, {
- headers: context?.headers,
- })
- : context?.returnHeaders
- ? {
- headers: context?.headers,
- response: before,
- }
- : before;
- }
-
- internalContext.asResponse = false;
- internalContext.returnHeaders = true;
- internalContext.returnStatus = true;
- const result = (await runWithEndpointContext(internalContext, () =>
- (endpoint as any)(internalContext as any),
- ).catch((e: any) => {
- if (isAPIError(e)) {
+ const hasRequest = context?.request instanceof Request;
+ const shouldReturnResponse = context?.asResponse ?? hasRequest;
+ return withSpan(
+ `${methodName} ${pathName}`,
+ {
+ [ATTR_HTTP_ROUTE]: pathName,
+ [ATTR_OPERATION_ID]: operationId,
+ },
+ async () =>
+ runWithEndpointContext(internalContext, async () => {
+ const { beforeHooks, afterHooks } = getHooks(authContext);
+ const before = await runBeforeHooks(
+ internalContext,
+ beforeHooks,
+ endpoint,
+ operationId,
+ );
/**
- * API Errors from response are caught
- * and returned to hooks
+ * If `before.context` is returned, it should
+ * get merged with the original context
*/
- return {
- response: e,
- status: e.statusCode,
- headers: e.headers ? new Headers(e.headers) : null,
+ if (
+ "context" in before &&
+ before.context &&
+ typeof before.context === "object"
+ ) {
+ const { headers, ...rest } = before.context as {
+ headers: Headers;
+ };
+ /**
+ * Headers should be merged differently
+ * so the hook doesn't override the whole
+ * header
+ */
+ if (headers) {
+ headers.forEach((value, key) => {
+ (internalContext.headers as Headers).set(key, value);
+ });
+ }
+ internalContext = defuReplaceArrays(rest, internalContext);
+ } else if (before) {
+ /* Return before hook response if it's anything other than a context return */
+ return shouldReturnResponse
+ ? toResponse(before, {
+ headers: context?.headers,
+ })
+ : context?.returnHeaders
+ ? {
+ headers: context?.headers,
+ response: before,
+ }
+ : before;
+ }
+
+ internalContext.asResponse = false;
+ internalContext.returnHeaders = true;
+ internalContext.returnStatus = true;
+ const result = (await runWithEndpointContext(
+ internalContext,
+ () =>
+ withSpan(
+ `handler ${pathName}`,
+ {
+ [ATTR_HTTP_ROUTE]: pathName,
+ [ATTR_OPERATION_ID]: operationId,
+ },
+ () => (endpoint as any)(internalContext as any),
+ ),
+ ).catch((e: any) => {
+ if (isAPIError(e)) {
+ /**
+ * API Errors from response are caught
+ * and returned to hooks
+ */
+ return {
+ response: e,
+ status: e.statusCode,
+ headers: e.headers ? new Headers(e.headers) : null,
+ };
+ }
+ throw e;
+ })) as {
+ headers: Headers;
+ response: any;
+ status: number;
};
- }
- throw e;
- })) as {
- headers: Headers;
- response: any;
- status: number;
- };
- //if response object is returned we skip after hooks and post processing
- if (result && result instanceof Response) {
- return result;
- }
+ //if response object is returned we skip after hooks and post processing
+ if (result && result instanceof Response) {
+ return result;
+ }
- internalContext.context.returned = result.response;
- internalContext.context.responseHeaders = result.headers;
+ internalContext.context.returned = result.response;
+ internalContext.context.responseHeaders = result.headers;
- const after = await runAfterHooks(internalContext, afterHooks);
+ const after = await runAfterHooks(
+ internalContext,
+ afterHooks,
+ endpoint,
+ operationId,
+ );
- if (after.response) {
- result.response = after.response;
- }
+ if (after.response) {
+ result.response = after.response;
+ }
- if (
- isAPIError(result.response) &&
- shouldPublishLog(authContext.logger.level, "debug")
- ) {
- // inherit stack from errorStack if debug mode is enabled
- result.response.stack = result.response.errorStack;
- }
+ if (
+ isAPIError(result.response) &&
+ shouldPublishLog(authContext.logger.level, "debug")
+ ) {
+ // inherit stack from errorStack if debug mode is enabled
+ result.response.stack = result.response.errorStack;
+ }
- if (isAPIError(result.response) && !context?.asResponse) {
- throw result.response;
- }
+ if (isAPIError(result.response) && !shouldReturnResponse) {
+ throw result.response;
+ }
- const response = context?.asResponse
- ? toResponse(result.response, {
- headers: result.headers,
- status: result.status,
- })
- : context?.returnHeaders
- ? context?.returnStatus
- ? {
+ const response = shouldReturnResponse
+ ? toResponse(result.response, {
headers: result.headers,
- response: result.response,
status: result.status,
- }
- : {
- headers: result.headers,
- response: result.response,
- }
- : context?.returnStatus
- ? { response: result.response, status: result.status }
- : result.response;
- return response;
- });
+ })
+ : context?.returnHeaders
+ ? context?.returnStatus
+ ? {
+ headers: result.headers,
+ response: result.response,
+ status: result.status,
+ }
+ : {
+ headers: result.headers,
+ response: result.response,
+ }
+ : context?.returnStatus
+ ? { response: result.response, status: result.status }
+ : result.response;
+ return response;
+ }),
+ );
};
if (await hasRequestState()) {
return run();
@@ -202,10 +276,9 @@ export function toAuthEndpoints<
async function runBeforeHooks(
context: InternalContext,
- hooks: {
- matcher: (context: HookEndpointContext) => boolean;
- handler: AuthMiddleware;
- }[],
+ hooks: Hook[],
+ endpoint: Endpoint,
+ operationId: string,
) {
let modifiedContext: Partial = {};
@@ -226,21 +299,31 @@ async function runBeforeHooks(
});
}
if (matched) {
- const result = await hook
- .handler({
- ...context,
- returnHeaders: false,
- })
- .catch((e: unknown) => {
- if (
- isAPIError(e) &&
- shouldPublishLog(context.context.logger.level, "debug")
- ) {
- // inherit stack from errorStack if debug mode is enabled
- e.stack = e.errorStack;
- }
- throw e;
- });
+ const hookSource = hooksSourceWeakMap.get(hook.handler) ?? "unknown";
+ const path = context.path ?? endpoint?.path ?? "/:virtual";
+ const result = await withSpan(
+ `hook before ${path} ${hookSource}`,
+ {
+ [ATTR_HOOK_TYPE]: "before",
+ [ATTR_HTTP_ROUTE]: path,
+ [ATTR_CONTEXT]: hookSource,
+ [ATTR_OPERATION_ID]: operationId,
+ },
+ () =>
+ hook.handler({
+ ...context,
+ returnHeaders: false,
+ }),
+ ).catch((e: unknown) => {
+ if (
+ isAPIError(e) &&
+ shouldPublishLog(context.context.logger.level, "debug")
+ ) {
+ // inherit stack from errorStack if debug mode is enabled
+ e.stack = e.errorStack;
+ }
+ throw e;
+ });
if (result && typeof result === "object") {
if ("context" in result && typeof result.context === "object") {
const { headers, ...rest } =
@@ -267,14 +350,24 @@ async function runBeforeHooks(
async function runAfterHooks(
context: InternalContext,
- hooks: {
- matcher: (context: HookEndpointContext) => boolean;
- handler: AuthMiddleware;
- }[],
+ hooks: Hook[],
+ endpoint: Endpoint,
+ operationId: string,
) {
for (const hook of hooks) {
if (hook.matcher(context)) {
- const result = (await hook.handler(context).catch((e) => {
+ const hookSource = hooksSourceWeakMap.get(hook.handler) ?? "unknown";
+ const path = context.path ?? endpoint?.path ?? "/:virtual";
+ const result = (await withSpan(
+ `hook after ${path} ${hookSource}`,
+ {
+ [ATTR_HOOK_TYPE]: "after",
+ [ATTR_HTTP_ROUTE]: path,
+ [ATTR_CONTEXT]: hookSource,
+ [ATTR_OPERATION_ID]: operationId,
+ },
+ () => hook.handler(context),
+ ).catch((e) => {
if (isAPIError(e)) {
const headers = (e as any)[kAPIErrorHeaderSymbol] as
| Headers
@@ -325,14 +418,8 @@ async function runAfterHooks(
function getHooks(authContext: AuthContext) {
const plugins = authContext.options.plugins || [];
- const beforeHooks: {
- matcher: (context: HookEndpointContext) => boolean;
- handler: AuthMiddleware;
- }[] = [];
- const afterHooks: {
- matcher: (context: HookEndpointContext) => boolean;
- handler: AuthMiddleware;
- }[] = [];
+ const beforeHooks: Hook[] = [];
+ const afterHooks: Hook[] = [];
const beforeHookHandler = authContext.options.hooks?.before;
if (beforeHookHandler) {
hooksSourceWeakMap.set(beforeHookHandler, "user");
@@ -349,14 +436,18 @@ function getHooks(authContext: AuthContext) {
handler: afterHookHandler,
});
}
- const pluginBeforeHooks = plugins
- .filter((plugin) => plugin.hooks?.before)
- .map((plugin) => plugin.hooks?.before!)
- .flat();
- const pluginAfterHooks = plugins
- .filter((plugin) => plugin.hooks?.after)
- .map((plugin) => plugin.hooks?.after!)
- .flat();
+ const pluginBeforeHooks = plugins.flatMap((plugin) =>
+ (plugin.hooks?.before ?? []).map((h) => {
+ hooksSourceWeakMap.set(h.handler, `plugin:${plugin.id}`);
+ return h;
+ }),
+ );
+ const pluginAfterHooks = plugins.flatMap((plugin) =>
+ (plugin.hooks?.after ?? []).map((h) => {
+ hooksSourceWeakMap.set(h.handler, `plugin:${plugin.id}`);
+ return h;
+ }),
+ );
/**
* Add plugin added hooks at last
diff --git a/packages/better-auth/src/client/client.test.ts b/packages/better-auth/src/client/client.test.ts
index e18ebe6b5bf..2c42a8aec7d 100644
--- a/packages/better-auth/src/client/client.test.ts
+++ b/packages/better-auth/src/client/client.test.ts
@@ -12,6 +12,7 @@ import {
deviceAuthorizationClient,
emailOTPClient,
genericOAuthClient,
+ magicLinkClient,
multiSessionClient,
oidcClient,
organizationClient,
@@ -270,6 +271,36 @@ describe("type", () => {
expectTypeOf(client.test.signOut).toEqualTypeOf<() => Promise>();
});
+ it("should infer magic link metadata in sign-in request", () => {
+ const client = createReactClient({
+ plugins: [magicLinkClient()],
+ });
+
+ type SignInMagicLinkInput = NonNullable<
+ Parameters[0]
+ >;
+
+ expectTypeOf().toMatchTypeOf<{
+ email: string;
+ name?: string | undefined;
+ callbackURL?: string | undefined;
+ newUserCallbackURL?: string | undefined;
+ errorCallbackURL?: string | undefined;
+ metadata?: Record | undefined;
+ }>();
+
+ const request: SignInMagicLinkInput = {
+ email: "test@email.com",
+ metadata: {
+ inviteId: "123",
+ },
+ };
+
+ expectTypeOf(request.metadata).toEqualTypeOf<
+ Record | undefined
+ >();
+ });
+
it("should infer session", () => {
const client = createSolidClient({
plugins: [testClientPlugin(), testClientPlugin2(), twoFactorClient()],
diff --git a/packages/better-auth/src/client/index.ts b/packages/better-auth/src/client/index.ts
index c5c72f7aed3..13b34c31a82 100644
--- a/packages/better-auth/src/client/index.ts
+++ b/packages/better-auth/src/client/index.ts
@@ -41,4 +41,5 @@ export type * from "../plugins/access";
export type * from "../plugins/organization";
export type * from "../types/helper";
export type { UnionToIntersection } from "../types/helper";
+export type * from "./path-to-object";
//#endregion
diff --git a/packages/better-auth/src/client/path-to-object.ts b/packages/better-auth/src/client/path-to-object.ts
index 59365ae7a47..0bdf9e09cad 100644
--- a/packages/better-auth/src/client/path-to-object.ts
+++ b/packages/better-auth/src/client/path-to-object.ts
@@ -41,6 +41,28 @@ type ReplaceAuthUserAndSession<
InferSessionFromClient
>;
+type MergeCustomSessionField<
+ R extends object,
+ Field extends "user" | "session",
+ InferType,
+> = Field extends keyof R
+ ? {
+ [K in Field]: KeepNullishFromOriginal<
+ R[K],
+ NonNullable & InferType
+ >;
+ }
+ : {};
+
+type MergeCustomSessionWithInferred<
+ R,
+ ClientOpts extends BetterAuthClientOptions,
+> = R extends object
+ ? Omit &
+ MergeCustomSessionField> &
+ MergeCustomSessionField>
+ : never;
+
type RefineAuthResponse<
Data,
ClientOpts extends BetterAuthClientOptions,
@@ -162,7 +184,10 @@ export type InferRoute =
T["options"]["metadata"] extends {
CUSTOM_SESSION: boolean;
}
- ? NonNullable>
+ ? MergeCustomSessionWithInferred<
+ NonNullable>,
+ COpts
+ >
: T["path"] extends "/get-session"
? {
user: InferUserFromClient;
diff --git a/packages/better-auth/src/client/session-refresh.test.ts b/packages/better-auth/src/client/session-refresh.test.ts
index 8a4a44f56ef..8c78d0d880a 100644
--- a/packages/better-auth/src/client/session-refresh.test.ts
+++ b/packages/better-auth/src/client/session-refresh.test.ts
@@ -622,6 +622,109 @@ describe("session-refresh", () => {
vi.useRealTimers();
});
+ /**
+ * https://github.com/better-auth/better-auth/issues/8325
+ */
+ it("should preserve custom session fields on poll refresh", async () => {
+ vi.useFakeTimers();
+
+ const sessionAtom: SessionAtom = atom({
+ data: {
+ user: { id: "1", email: "test@test.com" },
+ session: { id: "session-1" },
+ },
+ error: null,
+ isPending: false,
+ });
+ const sessionSignal = atom(false);
+
+ const customSessionData = {
+ user: { id: "1", email: "test@test.com" },
+ session: { id: "session-1" },
+ activationInfo: { isActivated: true, activatedAt: "2024-01-01" },
+ role: "admin",
+ };
+
+ const mockFetch = vi.fn(async () => ({
+ data: customSessionData,
+ error: null,
+ }));
+
+ const manager = createSessionRefreshManager({
+ sessionAtom,
+ sessionSignal,
+ $fetch: mockFetch as any,
+ options: {
+ sessionOptions: {
+ refetchInterval: 5,
+ },
+ },
+ });
+
+ manager.init();
+
+ await vi.advanceTimersByTimeAsync(5000);
+
+ const updatedSession = sessionAtom.get();
+ expect(updatedSession.data).toEqual(customSessionData);
+ expect((updatedSession.data as any)?.activationInfo).toEqual({
+ isActivated: true,
+ activatedAt: "2024-01-01",
+ });
+ expect((updatedSession.data as any)?.role).toBe("admin");
+
+ manager.cleanup();
+ vi.useRealTimers();
+ });
+
+ it("should preserve custom session fields on visibilitychange refresh", async () => {
+ vi.useFakeTimers();
+
+ const sessionAtom: SessionAtom = atom({
+ data: {
+ user: { id: "1", email: "test@test.com" },
+ session: { id: "session-1" },
+ },
+ error: null,
+ isPending: false,
+ });
+ const sessionSignal = atom(false);
+
+ const customSessionData = {
+ user: { id: "1", email: "test@test.com" },
+ session: { id: "session-1" },
+ customField: "custom value",
+ };
+
+ const mockFetch = vi.fn(async () => ({
+ data: customSessionData,
+ error: null,
+ }));
+
+ const manager = createSessionRefreshManager({
+ sessionAtom,
+ sessionSignal,
+ $fetch: mockFetch as any,
+ options: {
+ sessionOptions: {
+ refetchOnWindowFocus: true,
+ },
+ },
+ });
+
+ manager.init();
+
+ manager.triggerRefetch({ event: "visibilitychange" });
+ await vi.runAllTimersAsync();
+
+ const updatedSession = sessionAtom.get();
+ expect(updatedSession.data).toEqual(customSessionData);
+ expect((updatedSession.data as any)?.customField).toBe("custom value");
+
+ manager.cleanup();
+ vi.useRealTimers();
+ });
+
it("should broadcast session update when broadcastSessionUpdate is called with signout", () => {
const channel = getGlobalBroadcastChannel();
const postSpy = vi.spyOn(channel, "post");
diff --git a/packages/better-auth/src/client/session-refresh.ts b/packages/better-auth/src/client/session-refresh.ts
index 8383d8220e4..a4c117c6ff4 100644
--- a/packages/better-auth/src/client/session-refresh.ts
+++ b/packages/better-auth/src/client/session-refresh.ts
@@ -15,10 +15,12 @@ const now = () => Math.floor(Date.now() / 1000);
const FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;
export interface SessionRefreshOptions {
- sessionAtom: AuthQueryAtom<{
- user: User;
- session: Session;
- }>;
+ sessionAtom: AuthQueryAtom<
+ {
+ user: User;
+ session: Session;
+ } & Record
+ >;
sessionSignal: WritableAtom;
$fetch: BetterFetch;
options?: BetterAuthClientOptions | undefined;
@@ -34,11 +36,19 @@ interface SessionRefreshState {
unsubscribeOnline?: (() => void) | undefined;
}
-interface SessionResponse {
- session: Session | null;
- user: User | null;
- needsRefresh?: boolean;
-}
+export type SessionResponse = (
+ | {
+ session: null;
+ user: null;
+ needsRefresh?: boolean;
+ }
+ | {
+ session: Session;
+ user: User;
+ needsRefresh?: boolean;
+ }
+) &
+ Record;
export function createSessionRefreshManager(opts: SessionRefreshOptions) {
const { sessionAtom, sessionSignal, $fetch, options = {} } = opts;
@@ -93,10 +103,7 @@ export function createSessionRefreshManager(opts: SessionRefreshOptions) {
} catch {}
}
- const sessionData =
- data?.session && data?.user
- ? { session: data.session, user: data.user }
- : null;
+ const sessionData = data?.session && data?.user ? data : null;
sessionAtom.set({
...currentSession,
diff --git a/packages/better-auth/src/db/get-migration-schema.test.ts b/packages/better-auth/src/db/get-migration-schema.test.ts
index 7a6eae6d513..fc60bd26d07 100644
--- a/packages/better-auth/src/db/get-migration-schema.test.ts
+++ b/packages/better-auth/src/db/get-migration-schema.test.ts
@@ -1,3 +1,4 @@
+import { DatabaseSync } from "node:sqlite";
import type { BetterAuthOptions } from "@better-auth/core";
import { CamelCasePlugin, Kysely, PostgresDialect } from "kysely";
import { Pool } from "pg";
@@ -402,7 +403,6 @@ describe.runIf(isPostgresAvailable)("PostgreSQL Column Additions", () => {
},
];
const { toBeAdded, toBeCreated } = await getMigrations(config);
- console.log(toBeAdded);
expect(toBeCreated.length).toBe(0);
expect(toBeAdded.length).toBe(2);
expect(toBeAdded).toEqual(
@@ -422,4 +422,82 @@ describe.runIf(isPostgresAvailable)("PostgreSQL Column Additions", () => {
]),
);
});
+
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/8536
+ */
+ it("should generate valid PostgreSQL CREATE INDEX syntax for indexed columns added to existing tables", async () => {
+ const config: BetterAuthOptions = {
+ database: schemaPool,
+ emailAndPassword: {
+ enabled: true,
+ },
+ };
+
+ const initial = await getMigrations(config);
+ await initial.runMigrations();
+
+ config.plugins = [
+ {
+ id: "test-index",
+ schema: {
+ user: {
+ fields: {
+ externalId: {
+ type: "string",
+ index: true,
+ required: false,
+ },
+ },
+ },
+ },
+ },
+ ];
+
+ const { compileMigrations } = await getMigrations(config);
+ const sql = (await compileMigrations()).toLowerCase();
+
+ expect(sql).toContain("create index");
+ expect(sql).not.toContain("add index");
+ });
+});
+
+/**
+ * @see https://github.com/better-auth/better-auth/issues/8536
+ */
+describe("index generation for columns added to existing tables", () => {
+ it("should use CREATE INDEX when adding indexed columns to existing SQLite tables", async () => {
+ const config: BetterAuthOptions = {
+ database: new DatabaseSync(":memory:"),
+ emailAndPassword: {
+ enabled: true,
+ },
+ };
+
+ const initial = await getMigrations(config);
+ await initial.runMigrations();
+
+ config.plugins = [
+ {
+ id: "test-index",
+ schema: {
+ user: {
+ fields: {
+ externalId: {
+ type: "string",
+ index: true,
+ required: false,
+ },
+ },
+ },
+ },
+ },
+ ];
+
+ const { compileMigrations } = await getMigrations(config);
+ const sql = (await compileMigrations()).toLowerCase();
+
+ expect(sql).toContain("create index");
+ expect(sql).not.toContain("add index");
+ });
});
diff --git a/packages/better-auth/src/db/get-migration.ts b/packages/better-auth/src/db/get-migration.ts
index de416da459f..bc4edd3874f 100644
--- a/packages/better-auth/src/db/get-migration.ts
+++ b/packages/better-auth/src/db/get-migration.ts
@@ -9,7 +9,6 @@ import { createLogger } from "@better-auth/core/env";
import type { KyselyDatabaseType } from "@better-auth/kysely-adapter";
import { createKyselyAdapter } from "@better-auth/kysely-adapter";
import type {
- AlterTableBuilder,
AlterTableColumnAlteringBuilder,
ColumnDataType,
CreateIndexBuilder,
@@ -279,7 +278,6 @@ export async function getMigrations(config: BetterAuthOptions) {
const migrations: (
| AlterTableColumnAlteringBuilder
- | ReturnType
| CreateTableBuilder
| CreateIndexBuilder
)[] = [];
@@ -431,10 +429,12 @@ export async function getMigrations(config: BetterAuthOptions) {
const builder = db.schema.alterTable(table.table);
if (field.index) {
- const index = db.schema
- .alterTable(table.table)
- .addIndex(`${table.table}_${fieldName}_idx`);
- migrations.push(index);
+ const indexName = `${table.table}_${fieldName}_${field.unique ? "uidx" : "idx"}`;
+ const indexBuilder = db.schema
+ .createIndex(indexName)
+ .on(table.table)
+ .columns([fieldName]);
+ migrations.push(field.unique ? indexBuilder.unique() : indexBuilder);
}
const built = builder.addColumn(fieldName, type, (col) => {
diff --git a/packages/better-auth/src/plugins/custom-session/custom-session.test.ts b/packages/better-auth/src/plugins/custom-session/custom-session.test.ts
index dd8fc6fcf88..d6a87efb5b1 100644
--- a/packages/better-auth/src/plugins/custom-session/custom-session.test.ts
+++ b/packages/better-auth/src/plugins/custom-session/custom-session.test.ts
@@ -3,6 +3,7 @@ import { createAuthClient } from "../../client";
import { parseSetCookieHeader } from "../../cookies";
import { getTestInstance } from "../../test-utils/test-instance";
import type { BetterAuthOptions } from "../../types";
+import { inferAdditionalFields } from "../additional-fields/client";
import { admin } from "../admin";
import { adminClient } from "../admin/client";
import { multiSession } from "../multi-session";
@@ -300,4 +301,81 @@ describe("Custom Session Plugin Tests", async () => {
};
}>();
});
+
+ it("should not add user/session to client getSession type when custom session omits them", async () => {
+ const { auth } = await getTestInstance({
+ plugins: [
+ customSession(async () => {
+ return {
+ custom: {
+ field: "field",
+ },
+ };
+ }),
+ ],
+ });
+
+ const client = createAuthClient({
+ plugins: [customSessionClient()],
+ });
+
+ type SessionData = typeof client.$Infer.Session;
+
+ // When custom session omits user/session, the client type must not claim they exist
+ expectTypeOf().toEqualTypeOf<{
+ custom: {
+ field: string;
+ };
+ }>();
+
+ // Verify user and session are not in the type
+ expectTypeOf().toEqualTypeOf<"custom">();
+ });
+
+ it("should infer both customSessionClient and inferAdditionalFields when combined", async () => {
+ const { auth } = await getTestInstance({
+ user: {
+ additionalFields: {
+ role: {
+ type: "string",
+ required: false,
+ },
+ },
+ },
+ plugins: [
+ customSession(async ({ user, session }) => {
+ return {
+ user: {
+ firstName: user.name.split(" ")[0],
+ lastName: user.name.split(" ")[1],
+ },
+ session,
+ customData: { message: "hello" },
+ };
+ }),
+ ],
+ });
+
+ const client = createAuthClient({
+ plugins: [
+ customSessionClient(),
+ inferAdditionalFields(),
+ ],
+ });
+
+ type SessionData = typeof client.$Infer.Session;
+ type User = SessionData["user"];
+
+ expectTypeOf().toMatchObjectType<{
+ id: string;
+ firstName: string | undefined;
+ lastName: string | undefined;
+ role?: string | undefined | null;
+ }>();
+
+ type CustomData = SessionData["customData"];
+ expectTypeOf().toMatchObjectType<{
+ message: string;
+ }>();
+ });
});
diff --git a/packages/better-auth/src/plugins/email-otp/email-otp.test.ts b/packages/better-auth/src/plugins/email-otp/email-otp.test.ts
index 658e67f5747..77876ed670b 100644
--- a/packages/better-auth/src/plugins/email-otp/email-otp.test.ts
+++ b/packages/better-auth/src/plugins/email-otp/email-otp.test.ts
@@ -1978,3 +1978,227 @@ describe("race condition protection", async () => {
expect(res2.error?.code).toBe("INVALID_OTP");
});
});
+
+describe("email-otp-resendStrategy", async () => {
+ afterEach(() => {
+ vi.useRealTimers();
+ });
+
+ const otps: string[] = [];
+ const { client, testUser } = await getTestInstance(
+ {
+ plugins: [
+ emailOTP({
+ async sendVerificationOTP({ otp }) {
+ otps.push(otp);
+ },
+ resendStrategy: "reuse",
+ }),
+ ],
+ },
+ {
+ clientOptions: {
+ plugins: [emailOTPClient()],
+ },
+ },
+ );
+
+ it("should reuse existing OTP when resendStrategy is reuse", async () => {
+ otps.length = 0;
+ await client.emailOtp.sendVerificationOtp({
+ email: testUser.email,
+ type: "email-verification",
+ });
+ const firstOtp = otps[0];
+ expect(firstOtp).toBeDefined();
+
+ await client.emailOtp.sendVerificationOtp({
+ email: testUser.email,
+ type: "email-verification",
+ });
+ const secondOtp = otps[1];
+ expect(secondOtp).toBeDefined();
+ expect(secondOtp).toBe(firstOtp);
+ });
+
+ it("should generate new OTP after previous one expires", async () => {
+ otps.length = 0;
+ vi.useFakeTimers();
+
+ await client.emailOtp.sendVerificationOtp({
+ email: testUser.email,
+ type: "sign-in",
+ });
+ const firstOtp = otps[0];
+ expect(firstOtp).toBeDefined();
+
+ // Advance past expiry (default 5 minutes)
+ await vi.advanceTimersByTimeAsync(6 * 60 * 1000);
+
+ await client.emailOtp.sendVerificationOtp({
+ email: testUser.email,
+ type: "sign-in",
+ });
+ const secondOtp = otps[1];
+ expect(secondOtp).toBeDefined();
+ expect(secondOtp).not.toBe(firstOtp);
+ });
+
+ it("should generate new OTP when resendStrategy is reuse but storeOTP is hashed", async () => {
+ const hashedOtps: string[] = [];
+ const { client: hashedClient, testUser: hashedUser } =
+ await getTestInstance(
+ {
+ plugins: [
+ emailOTP({
+ async sendVerificationOTP({ otp }) {
+ hashedOtps.push(otp);
+ },
+ resendStrategy: "reuse",
+ storeOTP: "hashed",
+ }),
+ ],
+ },
+ {
+ clientOptions: {
+ plugins: [emailOTPClient()],
+ },
+ },
+ );
+
+ await hashedClient.emailOtp.sendVerificationOtp({
+ email: hashedUser.email,
+ type: "email-verification",
+ });
+ const firstOtp = hashedOtps[0];
+ expect(firstOtp).toBeDefined();
+
+ // Second request - should get NEW OTP since hashed OTP cannot be retrieved
+ await hashedClient.emailOtp.sendVerificationOtp({
+ email: hashedUser.email,
+ type: "email-verification",
+ });
+ const secondOtp = hashedOtps[1];
+ expect(secondOtp).toBeDefined();
+ expect(secondOtp).not.toBe(firstOtp);
+ });
+
+ it("should generate new OTP when resendStrategy is reuse but storeOTP is custom hash", async () => {
+ const customHashOtps: string[] = [];
+ const { client: hashClient, testUser: hashUser } = await getTestInstance(
+ {
+ plugins: [
+ emailOTP({
+ async sendVerificationOTP({ otp }) {
+ customHashOtps.push(otp);
+ },
+ resendStrategy: "reuse",
+ storeOTP: {
+ hash: async (otp) => `hashed-${otp}`,
+ },
+ }),
+ ],
+ },
+ {
+ clientOptions: {
+ plugins: [emailOTPClient()],
+ },
+ },
+ );
+
+ await hashClient.emailOtp.sendVerificationOtp({
+ email: hashUser.email,
+ type: "email-verification",
+ });
+ const firstOtp = customHashOtps[0];
+ expect(firstOtp).toBeDefined();
+
+ await hashClient.emailOtp.sendVerificationOtp({
+ email: hashUser.email,
+ type: "email-verification",
+ });
+ const secondOtp = customHashOtps[1];
+ expect(secondOtp).toBeDefined();
+ expect(secondOtp).not.toBe(firstOtp);
+ });
+
+ it("should not send OTP for non-existent user on email-verification type", async () => {
+ otps.length = 0;
+ const { client: noSignUpClient } = await getTestInstance(
+ {
+ plugins: [
+ emailOTP({
+ async sendVerificationOTP({ otp }) {
+ otps.push(otp);
+ },
+ resendStrategy: "reuse",
+ disableSignUp: true,
+ }),
+ ],
+ },
+ {
+ clientOptions: {
+ plugins: [emailOTPClient()],
+ },
+ },
+ );
+
+ const res = await noSignUpClient.emailOtp.sendVerificationOtp({
+ email: "nonexistent@test.com",
+ type: "email-verification",
+ });
+ expect(res.data?.success).toBe(true);
+ // OTP should not be sent since user doesn't exist
+ expect(otps.length).toBe(0);
+ });
+
+ it("should generate fresh OTP when attempts are exhausted", async () => {
+ otps.length = 0;
+ const { client: attemptClient, testUser: attemptUser } =
+ await getTestInstance(
+ {
+ plugins: [
+ emailOTP({
+ async sendVerificationOTP({ otp }) {
+ otps.push(otp);
+ },
+ resendStrategy: "reuse",
+ allowedAttempts: 2,
+ }),
+ ],
+ },
+ {
+ clientOptions: {
+ plugins: [emailOTPClient()],
+ },
+ },
+ );
+
+ // Send first OTP
+ await attemptClient.emailOtp.sendVerificationOtp({
+ email: attemptUser.email,
+ type: "email-verification",
+ });
+ const firstOtp = otps[0];
+ expect(firstOtp).toBeDefined();
+
+ // Exhaust attempts by verifying with wrong OTP
+ await attemptClient.emailOtp.verifyEmail({
+ email: attemptUser.email,
+ otp: "wrong1",
+ });
+ await attemptClient.emailOtp.verifyEmail({
+ email: attemptUser.email,
+ otp: "wrong2",
+ });
+
+ // Request new OTP — should generate fresh one since attempts exhausted
+ await attemptClient.emailOtp.sendVerificationOtp({
+ email: attemptUser.email,
+ type: "email-verification",
+ });
+ const secondOtp = otps[1];
+ expect(secondOtp).toBeDefined();
+ expect(secondOtp).not.toBe(firstOtp);
+ });
+});
diff --git a/packages/better-auth/src/plugins/email-otp/index.ts b/packages/better-auth/src/plugins/email-otp/index.ts
index 028666cef1b..0a29bf06917 100644
--- a/packages/better-auth/src/plugins/email-otp/index.ts
+++ b/packages/better-auth/src/plugins/email-otp/index.ts
@@ -19,6 +19,7 @@ import {
verifyEmailOTP,
} from "./routes";
import type { EmailOTPOptions } from "./types";
+import { toOTPIdentifier } from "./utils";
declare module "@better-auth/core" {
interface BetterAuthPluginRegistry {
@@ -105,7 +106,7 @@ export const emailOTP = (options: EmailOTPOptions) => {
const storedOTP = await storeOTP(ctx, opts, otp);
await ctx.context.internalAdapter.createVerificationValue({
value: `${storedOTP}:0`,
- identifier: `email-verification-otp-${email}`,
+ identifier: toOTPIdentifier("email-verification", email),
expiresAt: getDate(opts.expiresIn, "sec"),
});
await ctx.context.runInBackgroundOrAwait(
diff --git a/packages/better-auth/src/plugins/email-otp/otp-token.ts b/packages/better-auth/src/plugins/email-otp/otp-token.ts
index b7e496e09e2..5f1a4192a44 100644
--- a/packages/better-auth/src/plugins/email-otp/otp-token.ts
+++ b/packages/better-auth/src/plugins/email-otp/otp-token.ts
@@ -4,8 +4,9 @@ import {
symmetricDecrypt,
symmetricEncrypt,
} from "../../crypto";
-import type { EmailOTPOptions } from "./types";
-import { defaultKeyHasher } from "./utils";
+import { getDate } from "../../utils/date";
+import type { EmailOTPOptions, RequiredEmailOTPOptions } from "./types";
+import { defaultKeyHasher, splitAtLastColon } from "./utils";
export async function storeOTP(
ctx: GenericEndpointContext,
@@ -59,3 +60,55 @@ export async function verifyStoredOTP(
return constantTimeEqual(otp, storedOtp);
}
+
+/**
+ * Retrieves the plain-text OTP from a stored value.
+ * Returns `null` if the OTP is hashed and cannot be recovered.
+ */
+async function retrieveOTP(
+ ctx: GenericEndpointContext,
+ opts: EmailOTPOptions,
+ storedOtp: string,
+): Promise {
+ if (opts.storeOTP === "plain" || opts.storeOTP === undefined) {
+ return storedOtp;
+ }
+ if (opts.storeOTP === "encrypted") {
+ return await symmetricDecrypt({
+ key: ctx.context.secretConfig,
+ data: storedOtp,
+ });
+ }
+ if (typeof opts.storeOTP === "object" && "decrypt" in opts.storeOTP) {
+ return await opts.storeOTP.decrypt(storedOtp);
+ }
+ // hashed or custom hash -> cannot recover
+ return null;
+}
+
+/**
+ * Tries to reuse an existing unexpired OTP.
+ * Returns the plain-text OTP if reusable, `null` otherwise.
+ */
+export async function tryReuseOTP(
+ ctx: GenericEndpointContext,
+ opts: RequiredEmailOTPOptions,
+ identifier: string,
+): Promise {
+ const existing =
+ await ctx.context.internalAdapter.findVerificationValue(identifier);
+ if (!existing || existing.expiresAt < new Date()) return null;
+
+ const [storedOtpValue, attempts] = splitAtLastColon(existing.value);
+ const allowedAttempts = opts.allowedAttempts || 3;
+ if (attempts && parseInt(attempts) >= allowedAttempts) return null;
+
+ const plainOtp = await retrieveOTP(ctx, opts, storedOtpValue);
+ if (!plainOtp) return null;
+
+ await ctx.context.internalAdapter.updateVerificationByIdentifier(identifier, {
+ expiresAt: getDate(opts.expiresIn, "sec"),
+ });
+
+ return plainOtp;
+}
diff --git a/packages/better-auth/src/plugins/email-otp/routes.ts b/packages/better-auth/src/plugins/email-otp/routes.ts
index 1d6a72992a9..1a870ea6778 100644
--- a/packages/better-auth/src/plugins/email-otp/routes.ts
+++ b/packages/better-auth/src/plugins/email-otp/routes.ts
@@ -12,9 +12,10 @@ import { setCookieCache, setSessionCookie } from "../../cookies";
import { generateRandomString, symmetricDecrypt } from "../../crypto";
import { parseUserInput, parseUserOutput } from "../../db/schema";
import { getDate } from "../../utils/date";
-import { storeOTP, verifyStoredOTP } from "./otp-token";
-import type { EmailOTPOptions } from "./types";
-import { splitAtLastColon } from "./utils";
+import { EMAIL_OTP_ERROR_CODES as ERROR_CODES } from "./error-codes";
+import { storeOTP, tryReuseOTP, verifyStoredOTP } from "./otp-token";
+import type { EmailOTPOptions, RequiredEmailOTPOptions } from "./types";
+import { splitAtLastColon, toOTPIdentifier } from "./utils";
const types = [
"email-verification",
@@ -23,14 +24,48 @@ const types = [
"change-email",
] as const;
-type WithRequired = T & { [P in K]-?: T[P] };
+/**
+ * Resolves the OTP to send: reuses an existing one if possible,
+ * otherwise generates and stores a new one.
+ *
+ * @internal
+ */
+async function resolveOTP(
+ ctx: GenericEndpointContext,
+ opts: RequiredEmailOTPOptions,
+ email: string,
+ type: (typeof types)[number],
+): Promise {
+ const identifier = toOTPIdentifier(type, email);
+
+ if (opts.resendStrategy === "reuse") {
+ const reused = await tryReuseOTP(ctx, opts, identifier);
+ if (reused) return reused;
+ }
-type RequiredEmailOTPOptions = WithRequired<
- EmailOTPOptions,
- "expiresIn" | "generateOTP" | "storeOTP"
->;
+ const otp =
+ opts.generateOTP({ email, type }, ctx) || defaultOTPGenerator(opts);
+ const storedOTP = await storeOTP(ctx, opts, otp);
-import { EMAIL_OTP_ERROR_CODES as ERROR_CODES } from "./error-codes";
+ await ctx.context.internalAdapter
+ .createVerificationValue({
+ value: `${storedOTP}:0`,
+ identifier,
+ expiresAt: getDate(opts.expiresIn, "sec"),
+ })
+ .catch(async () => {
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(
+ identifier,
+ );
+ await ctx.context.internalAdapter.createVerificationValue({
+ value: `${storedOTP}:0`,
+ identifier,
+ expiresAt: getDate(opts.expiresIn, "sec"),
+ });
+ });
+
+ return otp;
+}
const sendVerificationOTPBodySchema = z.object({
email: z.string({}).meta({
@@ -108,57 +143,22 @@ export const sendVerificationOTP = (opts: RequiredEmailOTPOptions) =>
message: "Invalid OTP type",
});
}
- const otp =
- opts.generateOTP({ email, type: ctx.body.type }, ctx) ||
- defaultOTPGenerator(opts);
-
- const storedOTP = await storeOTP(ctx, opts, otp);
+ const identifier = toOTPIdentifier(ctx.body.type, email);
+ const otp = await resolveOTP(ctx, opts, email, ctx.body.type);
- await ctx.context.internalAdapter
- .createVerificationValue({
- value: `${storedOTP}:0`,
- identifier: `${ctx.body.type}-otp-${email}`,
- expiresAt: getDate(opts.expiresIn, "sec"),
- })
- .catch(async (error) => {
- // might be duplicate key error
- await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- `${ctx.body.type}-otp-${email}`,
- );
- //try again
- await ctx.context.internalAdapter.createVerificationValue({
- value: `${storedOTP}:0`,
- identifier: `${ctx.body.type}-otp-${email}`,
- expiresAt: getDate(opts.expiresIn, "sec"),
- });
- });
+ const shouldSendOTP = ctx.body.type === "sign-in" && !opts.disableSignUp;
const user = await ctx.context.internalAdapter.findUserByEmail(email);
- if (!user) {
- if (ctx.body.type === "sign-in" && !opts.disableSignUp) {
- // allow
- } else {
- await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- `${ctx.body.type}-otp-${email}`,
- );
- return ctx.json({
- success: true,
- });
- }
+ if (!user && !shouldSendOTP) {
+ await ctx.context.internalAdapter.deleteVerificationByIdentifier(
+ identifier,
+ );
+ return ctx.json({ success: true });
}
await ctx.context.runInBackgroundOrAwait(
- opts.sendVerificationOTP(
- {
- email,
- otp,
- type: ctx.body.type,
- },
- ctx,
- ),
+ opts.sendVerificationOTP({ email, otp, type: ctx.body.type }, ctx),
);
- return ctx.json({
- success: true,
- });
+ return ctx.json({ success: true });
},
);
@@ -204,7 +204,7 @@ export const createVerificationOTP = (opts: RequiredEmailOTPOptions) =>
const storedOTP = await storeOTP(ctx, opts, otp);
await ctx.context.internalAdapter.createVerificationValue({
value: `${storedOTP}:0`,
- identifier: `${ctx.body.type}-otp-${email}`,
+ identifier: toOTPIdentifier(ctx.body.type, email),
expiresAt: getDate(opts.expiresIn, "sec"),
});
return otp;
@@ -270,7 +270,7 @@ export const getVerificationOTP = (opts: RequiredEmailOTPOptions) =>
const email = ctx.query.email.toLowerCase();
const verificationValue =
await ctx.context.internalAdapter.findVerificationValue(
- `${ctx.query.type}-otp-${email}`,
+ toOTPIdentifier(ctx.query.type, email),
);
if (!verificationValue || verificationValue.expiresAt < new Date()) {
return ctx.json({
@@ -371,17 +371,15 @@ export const checkVerificationOTP = (opts: RequiredEmailOTPOptions) =>
if (!user) {
throw APIError.from("BAD_REQUEST", BASE_ERROR_CODES.USER_NOT_FOUND);
}
+ const identifier = toOTPIdentifier(ctx.body.type, email);
const verificationValue =
- await ctx.context.internalAdapter.findVerificationValue(
- `${ctx.body.type}-otp-${email}`,
- );
+ await ctx.context.internalAdapter.findVerificationValue(identifier);
if (!verificationValue) {
throw APIError.from("BAD_REQUEST", ERROR_CODES.INVALID_OTP);
}
- const otpIdentifier = `${ctx.body.type}-otp-${email}`;
if (verificationValue.expiresAt < new Date()) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- otpIdentifier,
+ identifier,
);
throw APIError.from("BAD_REQUEST", ERROR_CODES.OTP_EXPIRED);
}
@@ -390,14 +388,14 @@ export const checkVerificationOTP = (opts: RequiredEmailOTPOptions) =>
const allowedAttempts = opts?.allowedAttempts || 3;
if (attempts && parseInt(attempts) >= allowedAttempts) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- otpIdentifier,
+ identifier,
);
throw APIError.from("FORBIDDEN", ERROR_CODES.TOO_MANY_ATTEMPTS);
}
const verified = await verifyStoredOTP(ctx, opts, otpValue, ctx.body.otp);
if (!verified) {
await ctx.context.internalAdapter.updateVerificationByIdentifier(
- otpIdentifier,
+ identifier,
{
value: `${otpValue}:${parseInt(attempts || "0") + 1}`,
},
@@ -488,7 +486,7 @@ export const verifyEmailOTP = (opts: RequiredEmailOTPOptions) =>
await atomicVerifyOTP(
ctx,
opts,
- `email-verification-otp-${email}`,
+ toOTPIdentifier("email-verification", email),
ctx.body.otp,
);
@@ -641,7 +639,7 @@ export const signInEmailOTP = (opts: RequiredEmailOTPOptions) =>
const email = rawEmail.toLowerCase();
// Use atomic verification to prevent race conditions
- await atomicVerifyOTP(ctx, opts, `sign-in-otp-${email}`, otp);
+ await atomicVerifyOTP(ctx, opts, toOTPIdentifier("sign-in", email), otp);
const user = await ctx.context.internalAdapter.findUserByEmail(email);
if (!user) {
@@ -748,19 +746,12 @@ export const requestPasswordResetEmailOTP = (opts: RequiredEmailOTPOptions) =>
},
async (ctx) => {
const email = ctx.body.email;
- const otp =
- opts.generateOTP({ email, type: "forget-password" }, ctx) ||
- defaultOTPGenerator(opts);
- const storedOTP = await storeOTP(ctx, opts, otp);
- await ctx.context.internalAdapter.createVerificationValue({
- value: `${storedOTP}:0`,
- identifier: `forget-password-otp-${email}`,
- expiresAt: getDate(opts.expiresIn, "sec"),
- });
+ const identifier = toOTPIdentifier("forget-password", email);
+ const otp = await resolveOTP(ctx, opts, email, "forget-password");
const user = await ctx.context.internalAdapter.findUserByEmail(email);
if (!user) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- `forget-password-otp-${email}`,
+ identifier,
);
return ctx.json({
success: true,
@@ -847,19 +838,12 @@ export const forgetPasswordEmailOTP = (opts: RequiredEmailOTPOptions) => {
async (ctx) => {
warnDeprecation();
const email = ctx.body.email;
- const otp =
- opts.generateOTP({ email, type: "forget-password" }, ctx) ||
- defaultOTPGenerator(opts);
- const storedOTP = await storeOTP(ctx, opts, otp);
- await ctx.context.internalAdapter.createVerificationValue({
- value: `${storedOTP}:0`,
- identifier: `forget-password-otp-${email}`,
- expiresAt: getDate(opts.expiresIn, "sec"),
- });
+ const identifier = toOTPIdentifier("forget-password", email);
+ const otp = await resolveOTP(ctx, opts, email, "forget-password");
const user = await ctx.context.internalAdapter.findUserByEmail(email);
if (!user) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- `forget-password-otp-${email}`,
+ identifier,
);
return ctx.json({
success: true,
@@ -946,7 +930,7 @@ export const resetPasswordEmailOTP = (opts: RequiredEmailOTPOptions) =>
await atomicVerifyOTP(
ctx,
opts,
- `forget-password-otp-${email}`,
+ toOTPIdentifier("forget-password", email),
ctx.body.otp,
);
@@ -1093,12 +1077,15 @@ export const requestEmailChangeEmailOTP = (opts: RequiredEmailOTPOptions) =>
const currentEmailVerificationValue =
await ctx.context.internalAdapter.findVerificationValue(
- `email-verification-otp-${email}`,
+ toOTPIdentifier("email-verification", email),
);
if (!currentEmailVerificationValue) {
throw APIError.from("BAD_REQUEST", ERROR_CODES.INVALID_OTP);
}
- const currentEmailIdentifier = `email-verification-otp-${email}`;
+ const currentEmailIdentifier = toOTPIdentifier(
+ "email-verification",
+ email,
+ );
if (currentEmailVerificationValue.expiresAt < new Date()) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
currentEmailIdentifier,
@@ -1151,14 +1138,14 @@ export const requestEmailChangeEmailOTP = (opts: RequiredEmailOTPOptions) =>
const storedOTP = await storeOTP(ctx, opts, otp);
await ctx.context.internalAdapter.createVerificationValue({
value: `${storedOTP}:0`,
- identifier: `change-email-otp-${email}-${newEmail}`,
+ identifier: toOTPIdentifier("change-email", `${email}-${newEmail}`),
expiresAt: getDate(opts.expiresIn, "sec"),
});
const user = await ctx.context.internalAdapter.findUserByEmail(newEmail);
if (user) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
- `change-email-otp-${email}-${newEmail}`,
+ toOTPIdentifier("change-email", `${email}-${newEmail}`),
);
return ctx.json({
success: true,
@@ -1262,12 +1249,15 @@ export const changeEmailEmailOTP = (opts: RequiredEmailOTPOptions) =>
const verificationValue =
await ctx.context.internalAdapter.findVerificationValue(
- `change-email-otp-${email}-${newEmail}`,
+ toOTPIdentifier("change-email", `${email}-${newEmail}`),
);
if (!verificationValue) {
throw APIError.from("BAD_REQUEST", ERROR_CODES.INVALID_OTP);
}
- const changeEmailIdentifier = `change-email-otp-${email}-${newEmail}`;
+ const changeEmailIdentifier = toOTPIdentifier(
+ "change-email",
+ `${email}-${newEmail}`,
+ );
if (verificationValue.expiresAt < new Date()) {
await ctx.context.internalAdapter.deleteVerificationByIdentifier(
changeEmailIdentifier,
diff --git a/packages/better-auth/src/plugins/email-otp/types.ts b/packages/better-auth/src/plugins/email-otp/types.ts
index 1591b8337f5..a3718c73fb4 100644
--- a/packages/better-auth/src/plugins/email-otp/types.ts
+++ b/packages/better-auth/src/plugins/email-otp/types.ts
@@ -1,5 +1,12 @@
import type { GenericEndpointContext } from "@better-auth/core";
+type WithRequired = T & { [P in K]-?: T[P] };
+
+export type RequiredEmailOTPOptions = WithRequired<
+ EmailOTPOptions,
+ "expiresIn" | "generateOTP" | "storeOTP"
+>;
+
export interface EmailOTPOptions {
/**
* Function to send email verification.
@@ -81,6 +88,18 @@ export interface EmailOTPOptions {
}
)
| undefined;
+ /**
+ * Strategy for handling OTP when the user requests a new OTP
+ * while an existing one is still valid.
+ *
+ * - `"rotate"`: Always generates a new OTP (default behavior).
+ * - `"reuse"`: Resends the same OTP and extends its expiry.
+ * Only works when the OTP is recoverable (plain, encrypted, or custom encrypt/decrypt).
+ * Falls back to `"rotate"` when OTP is hashed.
+ *
+ * @default "rotate"
+ */
+ resendStrategy?: "rotate" | "reuse" | undefined;
/**
* Change email configuration for the change email with OTP flow
*
diff --git a/packages/better-auth/src/plugins/email-otp/utils.ts b/packages/better-auth/src/plugins/email-otp/utils.ts
index 42f794d26f2..a55f339ff7a 100644
--- a/packages/better-auth/src/plugins/email-otp/utils.ts
+++ b/packages/better-auth/src/plugins/email-otp/utils.ts
@@ -1,5 +1,13 @@
import { base64Url } from "@better-auth/utils/base64";
import { createHash } from "@better-auth/utils/hash";
+
+export function toOTPIdentifier(
+ type: "email-verification" | "sign-in" | "forget-password" | "change-email",
+ email: string,
+) {
+ return `${type}-otp-${email}`;
+}
+
export const defaultKeyHasher = async (otp: string) => {
const hash = await createHash("SHA-256").digest(
new TextEncoder().encode(otp),
diff --git a/packages/better-auth/src/plugins/magic-link/index.ts b/packages/better-auth/src/plugins/magic-link/index.ts
index 891f01463b5..38e5ae64d5d 100644
--- a/packages/better-auth/src/plugins/magic-link/index.ts
+++ b/packages/better-auth/src/plugins/magic-link/index.ts
@@ -39,6 +39,7 @@ export interface MagicLinkOptions {
email: string;
url: string;
token: string;
+ metadata?: Record;
},
ctx?: GenericEndpointContext | undefined,
) => Awaitable;
@@ -112,6 +113,12 @@ const signInMagicLinkBodySchema = z.object({
description: "URL to redirect after error.",
})
.optional(),
+ metadata: z
+ .record(z.string(), z.any())
+ .meta({
+ description: "Additional metadata to pass to sendMagicLink.",
+ })
+ .optional(),
});
const magicLinkVerifyQuerySchema = z.object({
token: z.string().meta({
@@ -208,7 +215,7 @@ export const magicLink = (options: MagicLinkOptions) => {
},
},
async (ctx) => {
- const { email } = ctx.body;
+ const { email, metadata } = ctx.body;
const verificationToken = opts?.generateToken
? await opts.generateToken(email)
@@ -243,6 +250,7 @@ export const magicLink = (options: MagicLinkOptions) => {
email,
url: url.toString(),
token: verificationToken,
+ metadata,
},
ctx,
);
diff --git a/packages/better-auth/src/plugins/magic-link/magic-link.test.ts b/packages/better-auth/src/plugins/magic-link/magic-link.test.ts
index b8dfe221047..5d6e3cbb5a8 100644
--- a/packages/better-auth/src/plugins/magic-link/magic-link.test.ts
+++ b/packages/better-auth/src/plugins/magic-link/magic-link.test.ts
@@ -9,6 +9,7 @@ type VerificationEmail = {
email: string;
token: string;
url: string;
+ metadata?: Record;
};
describe("magic link", async () => {
@@ -50,6 +51,23 @@ describe("magic link", async () => {
"http://localhost:3000/api/auth/magic-link/verify",
),
});
+ expect(verificationEmail.metadata).toBeUndefined();
+ });
+
+ it("should forward metadata to sendMagicLink", async () => {
+ await client.signIn.magicLink({
+ email: testUser.email,
+ metadata: {
+ inviteId: "123",
+ },
+ });
+
+ expect(verificationEmail).toMatchObject({
+ email: testUser.email,
+ metadata: {
+ inviteId: "123",
+ },
+ });
});
it("should verify magic link", async () => {
const headers = new Headers();
diff --git a/packages/better-auth/src/plugins/oidc-provider/authorize.ts b/packages/better-auth/src/plugins/oidc-provider/authorize.ts
index e3f14af4681..b9c6c8f76d3 100644
--- a/packages/better-auth/src/plugins/oidc-provider/authorize.ts
+++ b/packages/better-auth/src/plugins/oidc-provider/authorize.ts
@@ -1,7 +1,9 @@
import type { GenericEndpointContext } from "@better-auth/core";
import { APIError } from "@better-auth/core/error";
+import { isBrowserFetchRequest } from "@better-auth/core/utils/fetch-metadata";
import { getSessionFromCtx } from "../../api";
import { generateRandomString } from "../../crypto";
+import { InvalidClient, InvalidRequest } from "./error";
import { getClient } from "./index";
import type { AuthorizationQuery, OIDCOptions } from "./types";
import { parsePrompt } from "./utils/prompt";
@@ -28,7 +30,7 @@ export async function authorize(
options: OIDCOptions,
) {
const handleRedirect = (url: string) => {
- const fromFetch = ctx.request?.headers.get("sec-fetch-mode") === "cors";
+ const fromFetch = isBrowserFetchRequest(ctx.request?.headers);
if (fromFetch) {
return ctx.json({
redirect: true,
@@ -57,15 +59,38 @@ export async function authorize(
error: "invalid_request",
});
}
+ const query = ctx.query as AuthorizationQuery;
const session = await getSessionFromCtx(ctx);
if (!session) {
// Handle prompt=none per OIDC spec - must return error instead of redirecting
- const query = ctx.query as AuthorizationQuery;
const promptSet = parsePrompt(query.prompt ?? "");
- if (promptSet.has("none") && query.redirect_uri) {
+ if (promptSet.has("none")) {
+ if (!query.redirect_uri) {
+ throw new InvalidRequest(
+ "redirect_uri is required when prompt=none and must be usable to return errors without displaying UI",
+ );
+ }
+ if (!query.client_id) {
+ throw new InvalidClient("client_id is required");
+ }
+ const client = await getClient(
+ query.client_id,
+ options.trustedClients || [],
+ );
+ if (!client) {
+ throw new InvalidClient("client_id is required");
+ }
+ const validRedirectURI = client.redirectUrls.find(
+ (url) => url === query.redirect_uri,
+ );
+ if (!validRedirectURI) {
+ throw new InvalidRequest(
+ "redirect_uri is invalid or not registered for this client",
+ );
+ }
return handleRedirect(
formatErrorURL(
- query.redirect_uri,
+ validRedirectURI,
"login_required",
"Authentication required but prompt is none",
),
@@ -90,7 +115,6 @@ export async function authorize(
return handleRedirect(`${options.loginPage}?${queryFromURL}`);
}
- const query = ctx.query as AuthorizationQuery;
if (!query.client_id) {
const errorURL = getErrorURL(
ctx,
diff --git a/packages/better-auth/src/plugins/oidc-provider/error.ts b/packages/better-auth/src/plugins/oidc-provider/error.ts
index 696a803d9de..5d122e39c60 100644
--- a/packages/better-auth/src/plugins/oidc-provider/error.ts
+++ b/packages/better-auth/src/plugins/oidc-provider/error.ts
@@ -5,9 +5,20 @@ class OIDCProviderError extends APIError {}
export class InvalidRequest extends OIDCProviderError {
constructor(error_description: string, error_detail?: string) {
super("BAD_REQUEST", {
- message: "invalid_request",
+ message: error_description,
+ error: "invalid_request",
error_description,
error_detail,
});
}
}
+
+export class InvalidClient extends OIDCProviderError {
+ constructor(error_description: string) {
+ super("BAD_REQUEST", {
+ message: error_description,
+ error: "invalid_client",
+ error_description,
+ });
+ }
+}
diff --git a/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts b/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts
index 6ee3e60926a..ffa12693395 100644
--- a/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts
+++ b/packages/better-auth/src/plugins/oidc-provider/oidc.test.ts
@@ -460,24 +460,22 @@ describe("oidc", async () => {
it("should return login_required error when prompt=none and user not authenticated", async ({
expect,
}) => {
- // Create an unauthenticated client
- const unauthClient = createAuthClient({
- plugins: [oidcClient()],
- baseURL: "http://localhost:3000",
- fetchOptions: {
- customFetchImpl,
- },
+ // Create an OAuth client
+ const testClient = await serverClient.oauth2.register({
+ client_name: "test-login-required-prompt-none",
+ redirect_uris: [
+ "http://localhost:3000/api/auth/oauth2/callback/login-required",
+ ],
});
+ const clientId = testClient.data?.client_id ?? "";
+ const redirectUri = testClient.data?.redirect_uris?.[0] ?? "";
// Try to authorize with prompt=none
const authUrl = new URL(
"http://localhost:3000/api/auth/oauth2/authorize",
);
- authUrl.searchParams.set("client_id", application.clientId);
- authUrl.searchParams.set(
- "redirect_uri",
- application.redirectUrls[0] || "",
- );
+ authUrl.searchParams.set("client_id", clientId);
+ authUrl.searchParams.set("redirect_uri", redirectUri);
authUrl.searchParams.set("response_type", "code");
authUrl.searchParams.set("scope", "openid profile email");
authUrl.searchParams.set("state", "test-state");
@@ -485,13 +483,11 @@ describe("oidc", async () => {
authUrl.searchParams.set("code_challenge", "test-challenge");
authUrl.searchParams.set("code_challenge_method", "S256");
- let redirectURI = "";
- await unauthClient.$fetch(authUrl.toString(), {
+ const response = await customFetchImpl(authUrl.toString(), {
method: "GET",
- onError(context) {
- redirectURI = context.response.headers.get("Location") || "";
- },
+ redirect: "manual",
});
+ const redirectURI = response.headers.get("Location") || "";
expect(redirectURI).toContain("error=login_required");
expect(redirectURI).toContain("error_description=Authentication");
@@ -499,6 +495,57 @@ describe("oidc", async () => {
expect(redirectURI).toContain("none");
});
+ it("should not redirect to invalid redirect_uri when prompt=none", async ({
+ expect,
+ }) => {
+ const attackerRedirect = "https://malicious.com/callback";
+ const authUrl = new URL(
+ "http://localhost:3000/api/auth/oauth2/authorize",
+ );
+ authUrl.searchParams.set("client_id", application.clientId);
+ authUrl.searchParams.set("redirect_uri", attackerRedirect);
+ authUrl.searchParams.set("response_type", "code");
+ authUrl.searchParams.set("scope", "openid");
+ authUrl.searchParams.set("state", "x");
+ authUrl.searchParams.set("prompt", "none");
+
+ const response = await customFetchImpl(authUrl.toString(), {
+ method: "GET",
+ redirect: "manual",
+ });
+
+ const location = response.headers.get("Location") || "";
+ expect(location === null || location === "").not.toContain(
+ "malicious.com",
+ );
+ expect([400, 302]).toContain(response.status);
+ });
+
+ it("should return 400 invalid_request when prompt=none without redirect_uri", async ({
+ expect,
+ }) => {
+ const authUrl = new URL(
+ "http://localhost:3000/api/auth/oauth2/authorize",
+ );
+ authUrl.searchParams.set("client_id", application.clientId);
+ authUrl.searchParams.set("response_type", "code");
+ authUrl.searchParams.set("scope", "openid");
+ authUrl.searchParams.set("state", "x");
+ authUrl.searchParams.set("prompt", "none");
+ // No redirect_uri - must not fall through to login page
+
+ const response = await customFetchImpl(authUrl.toString(), {
+ method: "GET",
+ redirect: "manual",
+ });
+
+ expect(response.status).toBe(400);
+ const location = response.headers.get("Location") || "";
+ expect(location).not.toContain("/login");
+ const body = await response.json().catch(() => ({}));
+ expect(body.error ?? body.code).toBe("invalid_request");
+ });
+
it("should return consent_required error when prompt=none and consent needed", async ({
expect,
}) => {
diff --git a/packages/better-auth/src/plugins/organization/adapter.ts b/packages/better-auth/src/plugins/organization/adapter.ts
index bd676c5dd60..8cd65bf4b91 100644
--- a/packages/better-auth/src/plugins/organization/adapter.ts
+++ b/packages/better-auth/src/plugins/organization/adapter.ts
@@ -930,9 +930,9 @@ export const getOrgAdapter = (
organization: true,
},
});
- return invitations.map(({ organization, ...inv }) => ({
+ return invitations.filter(Boolean).map(({ organization, ...inv }) => ({
...inv,
- organizationName: organization.name,
+ organizationName: organization?.name,
}));
},
createInvitation: async ({
diff --git a/packages/better-auth/src/plugins/organization/routes/crud-team.ts b/packages/better-auth/src/plugins/organization/routes/crud-team.ts
index 81e8cf12373..d8aa76e9e6c 100644
--- a/packages/better-auth/src/plugins/organization/routes/crud-team.ts
+++ b/packages/better-auth/src/plugins/organization/routes/crud-team.ts
@@ -912,6 +912,14 @@ const addTeamMemberBodySchema = z.object({
description:
"The user Id which represents the user to be added as a member.",
}),
+
+ organizationId: z
+ .string()
+ .meta({
+ description:
+ "The organization ID which the team falls under. If not provided, it will default to the user's active organization.",
+ })
+ .optional(),
});
export const addTeamMember = (options: O) =>
@@ -967,7 +975,10 @@ export const addTeamMember = (options: O) =>
const session = ctx.context.session;
const adapter = getOrgAdapter(ctx.context, ctx.context.orgOptions);
- if (!session.session.activeOrganizationId) {
+ const organizationId =
+ ctx.body.organizationId || session.session.activeOrganizationId;
+
+ if (!organizationId) {
throw APIError.from(
"BAD_REQUEST",
ORGANIZATION_ERROR_CODES.NO_ACTIVE_ORGANIZATION,
@@ -976,7 +987,7 @@ export const addTeamMember = (options: O) =>
const currentMember = await adapter.findMemberByOrgId({
userId: session.user.id,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!currentMember) {
@@ -993,7 +1004,7 @@ export const addTeamMember = (options: O) =>
permissions: {
member: ["update"],
},
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
},
ctx,
);
@@ -1007,7 +1018,7 @@ export const addTeamMember = (options: O) =>
const toBeAddedMember = await adapter.findMemberByOrgId({
userId: ctx.body.userId,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!toBeAddedMember) {
@@ -1019,7 +1030,7 @@ export const addTeamMember = (options: O) =>
const team = await adapter.findTeamById({
teamId: ctx.body.teamId,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!team) {
@@ -1029,9 +1040,7 @@ export const addTeamMember = (options: O) =>
);
}
- const organization = await adapter.findOrganizationById(
- session.session.activeOrganizationId,
- );
+ const organization = await adapter.findOrganizationById(organizationId);
if (!organization) {
throw APIError.from(
"BAD_REQUEST",
@@ -1091,6 +1100,14 @@ const removeTeamMemberBodySchema = z.object({
userId: z.coerce.string().meta({
description: "The user which should be removed from the team.",
}),
+
+ organizationId: z
+ .string()
+ .meta({
+ description:
+ "The organization ID which the team falls under. If not provided, it will default to the user's active organization.",
+ })
+ .optional(),
});
export const removeTeamMember = (options: O) =>
@@ -1132,7 +1149,10 @@ export const removeTeamMember = (options: O) =>
const session = ctx.context.session;
const adapter = getOrgAdapter(ctx.context, ctx.context.orgOptions);
- if (!session.session.activeOrganizationId) {
+ const organizationId =
+ ctx.body.organizationId || session.session.activeOrganizationId;
+
+ if (!organizationId) {
throw APIError.from(
"BAD_REQUEST",
ORGANIZATION_ERROR_CODES.NO_ACTIVE_ORGANIZATION,
@@ -1141,7 +1161,7 @@ export const removeTeamMember = (options: O) =>
const currentMember = await adapter.findMemberByOrgId({
userId: session.user.id,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!currentMember) {
@@ -1158,7 +1178,7 @@ export const removeTeamMember = (options: O) =>
permissions: {
member: ["delete"],
},
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
},
ctx,
);
@@ -1172,7 +1192,7 @@ export const removeTeamMember = (options: O) =>
const toBeAddedMember = await adapter.findMemberByOrgId({
userId: ctx.body.userId,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!toBeAddedMember) {
@@ -1184,7 +1204,7 @@ export const removeTeamMember = (options: O) =>
const team = await adapter.findTeamById({
teamId: ctx.body.teamId,
- organizationId: session.session.activeOrganizationId,
+ organizationId: organizationId,
});
if (!team) {
@@ -1194,9 +1214,7 @@ export const removeTeamMember = (options: O) =>
);
}
- const organization = await adapter.findOrganizationById(
- session.session.activeOrganizationId,
- );
+ const organization = await adapter.findOrganizationById(organizationId);
if (!organization) {
throw APIError.from(
"BAD_REQUEST",
diff --git a/packages/better-auth/src/plugins/organization/team.test.ts b/packages/better-auth/src/plugins/organization/team.test.ts
index e5b14ffcb74..18c9d8af3ae 100644
--- a/packages/better-auth/src/plugins/organization/team.test.ts
+++ b/packages/better-auth/src/plugins/organization/team.test.ts
@@ -248,6 +248,158 @@ describe("team", async () => {
}
});
+ it("should update a team with explicit organizationId in data", async () => {
+ // Get current session to ensure new org is different from active org
+ const currentSession = await client.getSession({
+ fetchOptions: { headers },
+ });
+ const currentActiveOrgId = (currentSession.data?.session as any)
+ .activeOrganizationId;
+
+ // Create a new organization
+ const newOrg = await client.organization.create({
+ name: "New Test Organization",
+ slug: "new-test-org",
+ fetchOptions: { headers },
+ });
+
+ expect(newOrg.data?.id).toBeDefined();
+ const newOrgId = newOrg.data?.id as string;
+
+ // Ensure the new org is different from the session's active org
+ expect(newOrgId).not.toBe(currentActiveOrgId);
+
+ // Create a team in the new organization
+ const newTeam = await client.organization.createTeam(
+ {
+ name: "Team in New Org",
+ organizationId: newOrgId,
+ },
+ {
+ headers,
+ },
+ );
+
+ expect(newTeam.data?.id).toBeDefined();
+ expect(newTeam.data?.organizationId).toBe(newOrgId);
+ const newTeamId = newTeam.data?.id as string;
+
+ // Update the team with explicit organizationId in data
+ const updatedTeam = await client.organization.updateTeam({
+ teamId: newTeamId,
+ data: {
+ name: "Updated Team Name",
+ organizationId: newOrgId,
+ },
+ fetchOptions: { headers },
+ });
+
+ expect(updatedTeam.data?.name).toBe("Updated Team Name");
+ expect(updatedTeam.data?.id).toBe(newTeamId);
+ expect(updatedTeam.data?.organizationId).toBe(newOrgId);
+ });
+
+ it("should add and remove team member with explicit organizationId", async () => {
+ const testOrgId = organizationId;
+
+ // Create a new team specifically for this test
+ const newTeamRes = await client.organization.createTeam(
+ {
+ name: "Team for Member Test",
+ organizationId: testOrgId,
+ },
+ {
+ headers,
+ },
+ );
+ expect(newTeamRes.data?.id).toBeDefined();
+ const testTeamId = newTeamRes.data?.id as string;
+
+ // Get the current user's ID
+ const currentSession = await client.getSession({
+ fetchOptions: { headers },
+ });
+ const currentUserId = currentSession.data?.user.id as string;
+
+ // Add current user to the team so they can list members
+ await auth.api.addTeamMember({
+ headers,
+ body: {
+ userId: currentUserId,
+ teamId: testTeamId,
+ organizationId: testOrgId,
+ },
+ });
+
+ // Create and add a new user
+ const newUserHeaders = new Headers();
+ const newUserRes = await client.signUp.email(
+ {
+ email: "teamuser@email.com",
+ password: "password",
+ name: "Team User",
+ },
+ {
+ onSuccess: cookieSetter(newUserHeaders),
+ },
+ );
+
+ expect(newUserRes.data?.user.id).toBeDefined();
+ const newUserId = newUserRes.data?.user.id as string;
+
+ // Add user to organization first
+ await auth.api.addMember({
+ body: {
+ organizationId: testOrgId,
+ userId: newUserId,
+ role: "member",
+ },
+ });
+
+ // Add team member with explicit organizationId
+ const addedMember = await auth.api.addTeamMember({
+ headers,
+ body: {
+ userId: newUserId,
+ teamId: testTeamId,
+ organizationId: testOrgId,
+ },
+ });
+
+ expect(addedMember.teamId).toBe(testTeamId);
+ expect(addedMember.userId).toBe(newUserId);
+
+ // Verify team member was added by listing team members
+ const teamMembersBefore = await auth.api.listTeamMembers({
+ headers,
+ query: {
+ teamId: testTeamId,
+ },
+ });
+ expect(teamMembersBefore.some((m) => m.userId === newUserId)).toBe(true);
+
+ // Remove team member with explicit organizationId
+ const removeRes = await auth.api.removeTeamMember({
+ headers,
+ body: {
+ userId: newUserId,
+ teamId: testTeamId,
+ organizationId: testOrgId,
+ },
+ });
+
+ expect(removeRes.message).toBe("Team member removed successfully.");
+
+ // Verify team member was removed by listing team members again
+ const teamMembersAfter = await auth.api.listTeamMembers({
+ headers,
+ query: {
+ teamId: testTeamId,
+ },
+ });
+ expect(teamMembersAfter.some((m) => m.userId === newUserId)).toBe(false);
+ });
+
it("should not be allowed to invite a member to a team that's reached maximum members", async () => {
const { auth, signInWithTestUser } = await getTestInstance({
user: {
diff --git a/packages/better-auth/src/plugins/two-factor/client.ts b/packages/better-auth/src/plugins/two-factor/client.ts
index 7f27b3cc244..2e117af7fae 100644
--- a/packages/better-auth/src/plugins/two-factor/client.ts
+++ b/packages/better-auth/src/plugins/two-factor/client.ts
@@ -7,6 +7,13 @@ export * from "./error-code";
export const twoFactorClient = (
options?:
| {
+ /**
+ * the page to redirect if a user needs to verify
+ * their two factor
+ *
+ * @warning This causes a full page reload when used.
+ */
+ twoFactorPage?: string;
/**
* a redirect function to call if a user needs to verify
* their two factor
@@ -43,6 +50,12 @@ export const twoFactorClient = (
if (context.data?.twoFactorRedirect) {
if (options?.onTwoFactorRedirect) {
await options.onTwoFactorRedirect();
+ return;
+ }
+
+ // fallback for when `onTwoFactorRedirect` is not used and only `twoFactorPage` is provided
+ if (options?.twoFactorPage && typeof window !== "undefined") {
+ window.location.href = options.twoFactorPage;
}
}
},
diff --git a/packages/btst/adapter-drizzle/package.json b/packages/btst/adapter-drizzle/package.json
index fef7e92d662..cb25c7d4b76 100644
--- a/packages/btst/adapter-drizzle/package.json
+++ b/packages/btst/adapter-drizzle/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/adapter-drizzle",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "Drizzle adapter for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/adapter-kysely/package.json b/packages/btst/adapter-kysely/package.json
index b81ec4cbb3e..45ab4c3a12b 100644
--- a/packages/btst/adapter-kysely/package.json
+++ b/packages/btst/adapter-kysely/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/adapter-kysely",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "Kysely adapter for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/adapter-kysely/src/bun-sqlite-dialect.ts b/packages/btst/adapter-kysely/src/bun-sqlite-dialect.ts
index 55b60139b31..b340267ae34 100644
--- a/packages/btst/adapter-kysely/src/bun-sqlite-dialect.ts
+++ b/packages/btst/adapter-kysely/src/bun-sqlite-dialect.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/kysely-adapter/src/bun-sqlite-dialect.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/adapter-kysely/src/d1-sqlite-dialect.ts b/packages/btst/adapter-kysely/src/d1-sqlite-dialect.ts
index 98b3ecc110d..12048dfde64 100644
--- a/packages/btst/adapter-kysely/src/d1-sqlite-dialect.ts
+++ b/packages/btst/adapter-kysely/src/d1-sqlite-dialect.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/kysely-adapter/src/d1-sqlite-dialect.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/adapter-kysely/src/dialect.ts b/packages/btst/adapter-kysely/src/dialect.ts
index aa596e2091e..14482473c3a 100644
--- a/packages/btst/adapter-kysely/src/dialect.ts
+++ b/packages/btst/adapter-kysely/src/dialect.ts
@@ -1,13 +1,13 @@
/**
* ⚠️ AUTO-GENERATED WITH PATCHES - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth with patches applied.
* Source: packages/kysely-adapter/src/dialect.ts
- *
+ *
* Patches applied:
* - @better-auth/core/utils imports replaced with local ../utils/string
* (avoids dependency issues with published @better-auth/core package)
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/adapter-kysely/src/kysely-adapter.ts b/packages/btst/adapter-kysely/src/kysely-adapter.ts
index 87643dea2aa..cef5040219f 100644
--- a/packages/btst/adapter-kysely/src/kysely-adapter.ts
+++ b/packages/btst/adapter-kysely/src/kysely-adapter.ts
@@ -1,17 +1,18 @@
/**
* ⚠️ AUTO-GENERATED WITH PATCHES - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth with patches applied.
* Source: packages/kysely-adapter/src/kysely-adapter.ts
- *
+ *
* Patches applied:
* - @better-auth/core/utils imports replaced with local ../utils/string
* (avoids dependency issues with published @better-auth/core package)
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
+import type { BetterAuthOptions } from "better-auth/types";
import type {
AdapterFactoryCustomizeAdapterCreator,
AdapterFactoryOptions,
@@ -21,7 +22,7 @@ import type {
Where,
} from "better-auth/adapters";
import { createAdapterFactory } from "better-auth/adapters";
-import type { BetterAuthOptions } from "better-auth/types";
+import { capitalizeFirstLetter } from "./utils/string";
import type {
InsertQueryBuilder,
Kysely,
@@ -30,7 +31,6 @@ import type {
} from "kysely";
import { sql } from "kysely";
import type { KyselyDatabaseType } from "./types";
-import { capitalizeFirstLetter } from "./utils/string";
interface KyselyAdapterConfig {
/**
@@ -136,12 +136,17 @@ export const kyselyAdapter = (
return res;
}
- const value = values[field] || where[0]?.value;
+ const value =
+ values[field] !== undefined ? values[field] : where[0]?.value;
res = await db
.selectFrom(model)
.selectAll()
.orderBy(getFieldName({ model, field }), "desc")
- .where(getFieldName({ model, field }), "=", value)
+ .where(
+ getFieldName({ model, field }),
+ value === null ? "is" : "=",
+ value,
+ )
.limit(1)
.executeTakeFirst();
return res;
@@ -201,11 +206,13 @@ export const kyselyAdapter = (
}
if (operator === "eq") {
- return eb(f, "=", value);
+ return value === null ? eb(f, "is", null) : eb(f, "=", value);
}
if (operator === "ne") {
- return eb(f, "<>", value);
+ return value === null
+ ? eb(f, "is not", null)
+ : eb(f, "<>", value);
}
if (operator === "gt") {
diff --git a/packages/btst/adapter-kysely/src/node-sqlite-dialect.ts b/packages/btst/adapter-kysely/src/node-sqlite-dialect.ts
index 616276fe157..fb26ed32117 100644
--- a/packages/btst/adapter-kysely/src/node-sqlite-dialect.ts
+++ b/packages/btst/adapter-kysely/src/node-sqlite-dialect.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/kysely-adapter/src/node-sqlite-dialect.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/adapter-kysely/src/types.ts b/packages/btst/adapter-kysely/src/types.ts
index c6cda89d25e..65eb73a65eb 100644
--- a/packages/btst/adapter-kysely/src/types.ts
+++ b/packages/btst/adapter-kysely/src/types.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/kysely-adapter/src/types.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/adapter-memory/package.json b/packages/btst/adapter-memory/package.json
index 32cf2f5a9c5..1c141915db0 100644
--- a/packages/btst/adapter-memory/package.json
+++ b/packages/btst/adapter-memory/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/adapter-memory",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "In-memory adapter for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/adapter-mongodb/package.json b/packages/btst/adapter-mongodb/package.json
index 923615bd6f2..0cbb844fa52 100644
--- a/packages/btst/adapter-mongodb/package.json
+++ b/packages/btst/adapter-mongodb/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/adapter-mongodb",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "MongoDB adapter for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/adapter-prisma/package.json b/packages/btst/adapter-prisma/package.json
index 1340f32f862..faefde51cd9 100644
--- a/packages/btst/adapter-prisma/package.json
+++ b/packages/btst/adapter-prisma/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/adapter-prisma",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "Prisma adapter for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/cli/package.json b/packages/btst/cli/package.json
index a7307b6a2a2..0007687fa48 100644
--- a/packages/btst/cli/package.json
+++ b/packages/btst/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/cli",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "CLI for btst schema generation and migration",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/cli/src/generators/drizzle.ts b/packages/btst/cli/src/generators/drizzle.ts
index 579823f3ee3..72106524702 100644
--- a/packages/btst/cli/src/generators/drizzle.ts
+++ b/packages/btst/cli/src/generators/drizzle.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/cli/src/generators/drizzle.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/cli/src/generators/kysely.ts b/packages/btst/cli/src/generators/kysely.ts
index b81e5140ab5..e3d9aadc955 100644
--- a/packages/btst/cli/src/generators/kysely.ts
+++ b/packages/btst/cli/src/generators/kysely.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/cli/src/generators/kysely.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/cli/src/generators/prisma.ts b/packages/btst/cli/src/generators/prisma.ts
index 13ac34a3100..008e6efe52b 100644
--- a/packages/btst/cli/src/generators/prisma.ts
+++ b/packages/btst/cli/src/generators/prisma.ts
@@ -1,13 +1,13 @@
/**
* ⚠️ AUTO-GENERATED WITH PATCHES - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth with patches applied.
* Source: packages/cli/src/generators/prisma.ts
- *
+ *
* Patches applied:
* - @better-auth/core/utils imports replaced with local ../utils/string
* (avoids dependency issues with published @better-auth/core package)
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
@@ -15,12 +15,12 @@
import { existsSync } from "node:fs";
import fs from "node:fs/promises";
import path from "node:path";
+import { capitalizeFirstLetter } from "../utils/string";
import { produceSchema } from "@mrleebo/prisma-ast";
import { initGetFieldName, initGetModelName } from "better-auth/adapters";
import type { DBFieldType } from "better-auth/db";
import { getAuthTables } from "better-auth/db";
import { getPrismaVersion } from "../utils/get-package-info";
-import { capitalizeFirstLetter } from "../utils/string";
import type { SchemaGenerator } from "./types";
export const generatePrismaSchema: SchemaGenerator = async ({
diff --git a/packages/btst/cli/src/generators/types.ts b/packages/btst/cli/src/generators/types.ts
index 31cc0b988cb..fabab54da24 100644
--- a/packages/btst/cli/src/generators/types.ts
+++ b/packages/btst/cli/src/generators/types.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/cli/src/generators/types.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/cli/src/utils/get-package-info.ts b/packages/btst/cli/src/utils/get-package-info.ts
index 40d98418d0c..9ff6f9e8ca2 100644
--- a/packages/btst/cli/src/utils/get-package-info.ts
+++ b/packages/btst/cli/src/utils/get-package-info.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/cli/src/utils/get-package-info.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/cli/src/utils/helper.ts b/packages/btst/cli/src/utils/helper.ts
index 41c9e3092e9..db5b2100779 100644
--- a/packages/btst/cli/src/utils/helper.ts
+++ b/packages/btst/cli/src/utils/helper.ts
@@ -1,9 +1,9 @@
/**
* ⚠️ AUTO-GENERATED - DO NOT MODIFY
- *
+ *
* This file is automatically copied from better-auth.
* Source: packages/cli/src/utils/helper.ts
- *
+ *
* To update: run `pnpm sync-upstream`
* Any manual changes will be overwritten.
*/
diff --git a/packages/btst/db/package.json b/packages/btst/db/package.json
index 70309762dfb..472e553f770 100644
--- a/packages/btst/db/package.json
+++ b/packages/btst/db/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/db",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "Core database utilities and schema definition for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/btst/plugins/package.json b/packages/btst/plugins/package.json
index 145c060e136..4c9976f7fdb 100644
--- a/packages/btst/plugins/package.json
+++ b/packages/btst/plugins/package.json
@@ -1,6 +1,6 @@
{
"name": "@btst/plugins",
- "version": "2.1.1",
+ "version": "2.1.2",
"description": "Plugin utilities and common plugins for btst",
"type": "module",
"license": "MIT",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index d3b6d183307..4074241a8aa 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "auth",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "The CLI for Better Auth",
"type": "module",
"license": "MIT",
@@ -69,6 +69,7 @@
"commander": "^12.1.0",
"dotenv": "^17.3.1",
"drizzle-orm": "^0.41.0",
+ "get-tsconfig": "^4.13.6",
"open": "^10.2.0",
"pg": "^8.19.0",
"prettier": "^3.8.1",
diff --git a/packages/cli/src/commands/ai.ts b/packages/cli/src/commands/ai.ts
new file mode 100644
index 00000000000..ef817719bff
--- /dev/null
+++ b/packages/cli/src/commands/ai.ts
@@ -0,0 +1,781 @@
+import { execSync } from "node:child_process";
+import * as fs from "node:fs";
+import * as os from "node:os";
+import * as path from "node:path";
+import chalk from "chalk";
+import { Command } from "commander";
+import prompts from "prompts";
+import yoctoSpinner from "yocto-spinner";
+
+const PROTOCOL_URL = "https://agent-auth-protocol.com";
+const AGENT_CLI_PKG = "@auth/agent-cli";
+const AGENT_PLUGIN_PKG = "@better-auth/agent-auth";
+const DEFAULT_REGISTRY = "https://agent-auth.directory";
+const SKILLS_REPO = "better-auth/agent-auth";
+
+interface McpEntry {
+ command: string;
+ args: string[];
+}
+
+function cancelled(): never {
+ console.log(chalk.yellow("\n✋ Setup cancelled."));
+ process.exit(0);
+}
+
+function check(value: T | undefined): T {
+ if (value === undefined || value === null) cancelled();
+ return value;
+}
+
+// ── Main ──────────────────────────────────────────
+
+async function aiAction() {
+ console.log(
+ "\n" +
+ [
+ ` ██ ████`,
+ ` ████ ██ ${chalk.bold("Agent Auth")} ${chalk.dim("Setup")}`,
+ ` ██ ████ ${chalk.gray("AI agent authentication & capability-based authorization.")}`,
+ ].join("\n"),
+ );
+ console.log();
+
+ const { setup } = await prompts({
+ type: "select",
+ name: "setup",
+ message: "What would you like to do?",
+ choices: [
+ {
+ title: "Integrate Agent Auth client",
+ value: "client",
+ description: "MCP server, CLI, or SDK for your agents",
+ },
+ {
+ title: "Create an Agent Auth server",
+ value: "server",
+ description: "expose capabilities from your service to AI agents",
+ },
+ ],
+ });
+
+ check(setup);
+
+ if (setup === "client") {
+ await setupClient();
+ } else {
+ await setupServerSelection();
+ }
+}
+
+// ── Client Integration ────────────────────────────
+
+async function setupClient() {
+ const { method } = await prompts({
+ type: "select",
+ name: "method",
+ message: "How do you want to integrate?",
+ choices: [
+ {
+ title: "MCP Server",
+ value: "mcp",
+ description: "for AI tools — Claude, Cursor, Windsurf, etc.",
+ },
+ {
+ title: "CLI",
+ value: "cli",
+ description: "command-line tool for agent workflows",
+ },
+ ],
+ });
+
+ check(method);
+
+ if (method === "mcp") {
+ await setupMcp();
+ } else {
+ await setupCli();
+ }
+}
+
+// ── Server Selection ──────────────────────────────
+
+async function setupServerSelection() {
+ const { implementation } = await prompts({
+ type: "select",
+ name: "implementation",
+ message: "Choose an implementation",
+ choices: [
+ {
+ title: "Better Auth + Agent Auth",
+ value: "better-auth",
+ description: "TypeScript",
+ },
+ ],
+ });
+
+ check(implementation);
+
+ await setupServer();
+}
+
+// ── MCP Server Setup ──────────────────────────────
+
+async function setupMcp() {
+ const { tool } = await prompts({
+ type: "select",
+ name: "tool",
+ message: "Which AI tool?",
+ choices: [
+ { title: "Cursor", value: "cursor" },
+ { title: "Claude Code", value: "claude-code" },
+ { title: "Claude Desktop", value: "claude-desktop" },
+ { title: "Windsurf", value: "windsurf" },
+ { title: "VS Code / Copilot", value: "vscode" },
+ { title: "Open Code", value: "opencode" },
+ { title: "Other", value: "other" },
+ ],
+ });
+ check(tool);
+
+ let scope: "project" | "global" = "global";
+
+ if (tool === "cursor" || tool === "vscode") {
+ const hintProject =
+ tool === "cursor" ? ".cursor/mcp.json" : ".vscode/mcp.json";
+ const hintGlobal =
+ tool === "cursor" ? "~/.cursor/mcp.json" : "user settings";
+ const { s } = await prompts({
+ type: "select",
+ name: "s",
+ message: "Where should it be configured?",
+ choices: [
+ {
+ title: "This project",
+ value: "project",
+ description: hintProject,
+ },
+ {
+ title: "Global (all projects)",
+ value: "global",
+ description: hintGlobal,
+ },
+ ],
+ });
+ check(s);
+ scope = s;
+ }
+
+ const { registryUrl } = await prompts({
+ type: "text",
+ name: "registryUrl",
+ message: "Registry URL",
+ initial: DEFAULT_REGISTRY,
+ });
+
+ const registry = registryUrl?.trim() || DEFAULT_REGISTRY;
+ const mcpArgs = buildMcpArgs(registry);
+
+ if (tool === "claude-code") {
+ await setupClaudeCode(mcpArgs);
+ } else if (tool === "opencode") {
+ await setupOpenCode(mcpArgs);
+ } else if (tool === "other") {
+ const entry: McpEntry = { command: "npx", args: mcpArgs };
+ showJsonConfig(entry);
+ } else {
+ await writeMcpConfigInteractive(tool, scope, mcpArgs);
+ }
+
+ await offerSkillInstall("agent-auth-mcp");
+
+ showNextSteps([
+ `${chalk.cyan("Docs")} ${PROTOCOL_URL}/docs/integrate-client`,
+ `${chalk.cyan("GitHub")} https://github.com/better-auth/agent-auth`,
+ ]);
+
+ console.log(
+ chalk.green("\n✔ ") +
+ chalk.bold("Done! ") +
+ "Restart your AI tool to connect.\n",
+ );
+}
+
+async function setupClaudeCode(args: string[]) {
+ const { scope } = await prompts({
+ type: "select",
+ name: "scope",
+ message: "Where should it be configured?",
+ choices: [
+ {
+ title: "This project",
+ value: "project",
+ description: "--scope project",
+ },
+ {
+ title: "Global (all projects)",
+ value: "user",
+ description: "--scope user",
+ },
+ ],
+ });
+ check(scope);
+
+ const cmdParts = [
+ "claude",
+ "mcp",
+ "add",
+ "agent-auth",
+ "--scope",
+ scope,
+ "--",
+ "npx",
+ ...args,
+ ];
+ const cmd = cmdParts.join(" ");
+
+ console.log(chalk.bold.white("\nRun this command:"));
+ console.log(chalk.cyan(` ${cmd}\n`));
+
+ const { run } = await prompts({
+ type: "confirm",
+ name: "run",
+ message: "Run it now?",
+ initial: true,
+ });
+
+ if (run) {
+ const s = yoctoSpinner({
+ text: "Adding MCP server to Claude Code…",
+ color: "white",
+ });
+ s.start();
+ try {
+ execSync(cmd, { stdio: "pipe" });
+ s.success("Added to Claude Code.");
+ } catch {
+ s.stop();
+ console.log(chalk.yellow("⚠ Could not run the command automatically."));
+ console.log(chalk.gray(" Run the command above manually."));
+ }
+ }
+}
+
+async function setupOpenCode(args: string[]) {
+ const configPath = path.join(process.cwd(), "opencode.json");
+ const display = "opencode.json";
+
+ const openCodeEntry = {
+ type: "stdio" as const,
+ command: "npx",
+ args,
+ enabled: true,
+ };
+
+ const { write } = await prompts({
+ type: "confirm",
+ name: "write",
+ message: `Write config to ${chalk.cyan(display)}?`,
+ initial: true,
+ });
+
+ if (write) {
+ writeOpenCodeConfig(configPath, openCodeEntry);
+ console.log(chalk.green(`\n✓ Written to ${display}`));
+ } else {
+ const json = JSON.stringify(
+ {
+ $schema: "https://opencode.ai/config.json",
+ mcp: { "agent-auth": openCodeEntry },
+ },
+ null,
+ 2,
+ );
+ console.log(chalk.bold.white("\nAdd to your opencode.json:\n"));
+ console.log(
+ json
+ .split("\n")
+ .map((line) => chalk.cyan(` ${line}`))
+ .join("\n"),
+ );
+ console.log();
+ }
+}
+
+function writeOpenCodeConfig(
+ configPath: string,
+ entry: { type: string; command: string; args: string[]; enabled: boolean },
+) {
+ let config: { mcp?: Record; [key: string]: unknown } = {};
+ if (fs.existsSync(configPath)) {
+ try {
+ config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
+ } catch {
+ /* start fresh */
+ }
+ }
+ const mcp = (config.mcp as Record | undefined) ?? {};
+ mcp["agent-auth"] = entry;
+ config.$schema = "https://opencode.ai/config.json";
+ config.mcp = mcp;
+
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
+}
+
+async function writeMcpConfigInteractive(
+ tool: string,
+ scope: "project" | "global",
+ args: string[],
+) {
+ const entry: McpEntry = { command: "npx", args };
+ const configPath = getMcpConfigPath(tool, scope);
+
+ if (!configPath) {
+ showJsonConfig(entry);
+ return;
+ }
+
+ const display = displayPath(configPath, scope);
+ const { write } = await prompts({
+ type: "confirm",
+ name: "write",
+ message: `Write config to ${chalk.cyan(display)}?`,
+ initial: true,
+ });
+
+ if (write) {
+ writeMcpConfig(configPath, entry);
+ console.log(chalk.green(`\n✓ Written to ${display}`));
+ } else {
+ showJsonConfig(entry);
+ }
+}
+
+// ── CLI Setup ─────────────────────────────────────
+
+async function setupCli() {
+ const { installCli } = await prompts({
+ type: "confirm",
+ name: "installCli",
+ message: `Install ${chalk.cyan(AGENT_CLI_PKG)} globally?`,
+ initial: true,
+ });
+
+ if (installCli) {
+ const s = yoctoSpinner({
+ text: `Installing ${AGENT_CLI_PKG}…`,
+ color: "white",
+ });
+ s.start();
+ try {
+ execSync(`npm install -g ${AGENT_CLI_PKG}`, { stdio: "pipe" });
+ s.success(`${AGENT_CLI_PKG} installed globally.`);
+ } catch {
+ s.stop();
+ console.log(
+ chalk.yellow("⚠ Could not install automatically. Run manually:"),
+ );
+ console.log(chalk.cyan(` npm install -g ${AGENT_CLI_PKG}\n`));
+ }
+ } else {
+ console.log(
+ chalk.dim(`\n To install later: npm install -g ${AGENT_CLI_PKG}\n`),
+ );
+ }
+
+ await offerSkillInstall("agent-auth-cli");
+
+ console.log(chalk.bold.white("\nUsage:"));
+ console.log(chalk.gray(" # Discover a provider"));
+ console.log(chalk.cyan(" auth-agent discover https://api.example.com"));
+ console.log(chalk.gray("\n # Search the registry for providers"));
+ console.log(chalk.cyan(` auth-agent search "send email"`));
+ console.log(chalk.gray("\n # Connect an agent with capabilities"));
+ console.log(
+ chalk.cyan(
+ " auth-agent connect --provider --capabilities ",
+ ),
+ );
+ console.log(chalk.gray("\n # Execute a capability"));
+ console.log(
+ chalk.cyan(
+ ` auth-agent execute --args '{"key":"value"}'`,
+ ),
+ );
+ console.log(chalk.gray("\n # Run as MCP server"));
+ console.log(chalk.cyan(` auth-agent mcp`));
+
+ showNextSteps([
+ `${chalk.cyan("Docs")} ${PROTOCOL_URL}/docs/integrate-client`,
+ `${chalk.cyan("GitHub")} https://github.com/better-auth/agent-auth`,
+ ]);
+
+ console.log(
+ chalk.green("\n✔ ") +
+ chalk.bold("Ready. ") +
+ "Run auth-agent --help to see all commands.\n",
+ );
+}
+
+// ── Server Setup ──────────────────────────────────
+
+async function setupServer() {
+ const { source } = await prompts({
+ type: "select",
+ name: "source",
+ message: "How do you want to define capabilities?",
+ choices: [
+ {
+ title: "Default",
+ value: "manual",
+ description: "define capabilities in code",
+ },
+ {
+ title: "From an OpenAPI spec",
+ value: "openapi",
+ description: "derive capabilities from an OpenAPI document",
+ },
+ {
+ title: "From an MCP server",
+ value: "mcp",
+ description: "proxy an existing MCP server's tools",
+ },
+ ],
+ });
+ check(source);
+
+ const { name } = await prompts({
+ type: "text",
+ name: "name",
+ message: "What's your service called?",
+ validate: (v: string) => (v?.trim() ? true : "Name is required."),
+ });
+ check(name);
+
+ const { description } = await prompts({
+ type: "text",
+ name: "description",
+ message: `Short description ${chalk.dim("(press Enter to skip)")}`,
+ });
+
+ const desc = description?.trim() || undefined;
+
+ let sourceUrl: string | undefined;
+ if (source === "openapi") {
+ const { url } = await prompts({
+ type: "text",
+ name: "url",
+ message: `OpenAPI spec URL ${chalk.dim("(e.g. https://api.example.com/openapi.json)")}`,
+ validate: (v: string) => (v?.trim() ? true : "URL is required."),
+ });
+ check(url);
+ sourceUrl = url.trim();
+ } else if (source === "mcp") {
+ const { url } = await prompts({
+ type: "text",
+ name: "url",
+ message: `MCP server URL ${chalk.dim("(e.g. https://api.example.com/mcp)")}`,
+ validate: (v: string) => (v?.trim() ? true : "URL is required."),
+ });
+ check(url);
+ sourceUrl = url.trim();
+ }
+
+ const code = generateServerCode(name.trim(), desc, source, sourceUrl);
+
+ const { write } = await prompts({
+ type: "confirm",
+ name: "write",
+ message: "Generate an auth config file?",
+ initial: true,
+ });
+
+ if (write) {
+ const { filePath } = await prompts({
+ type: "text",
+ name: "filePath",
+ message: "File path",
+ initial: "lib/auth.ts",
+ });
+
+ const target = filePath?.trim() || "lib/auth.ts";
+
+ if (fs.existsSync(target)) {
+ const { overwrite } = await prompts({
+ type: "confirm",
+ name: "overwrite",
+ message: `${chalk.yellow(target)} already exists. Overwrite?`,
+ initial: false,
+ });
+
+ if (!overwrite) {
+ showCodeBlock(code, "auth config");
+ showServerOutro();
+ return;
+ }
+ }
+
+ const dir = path.dirname(target);
+ if (dir && dir !== "." && !fs.existsSync(dir)) {
+ fs.mkdirSync(dir, { recursive: true });
+ }
+ fs.writeFileSync(target, code);
+ console.log(chalk.green(`\n✓ Created ${target}`));
+ } else {
+ showCodeBlock(code, "auth config");
+ }
+
+ showServerOutro();
+}
+
+function generateServerCode(
+ name: string,
+ description: string | undefined,
+ source: string,
+ sourceUrl: string | undefined,
+): string {
+ const descLine = description
+ ? `\n\t\t\tproviderDescription: ${JSON.stringify(description)},`
+ : "";
+
+ if (source === "openapi" && sourceUrl) {
+ return `import { betterAuth } from "better-auth";
+import { agentAuth } from "${AGENT_PLUGIN_PKG}";
+import { createFromOpenAPI } from "${AGENT_PLUGIN_PKG}/openapi";
+
+const spec = await fetch(${JSON.stringify(sourceUrl)}).then(r => r.json());
+
+const openapi = createFromOpenAPI(spec, {
+\tbaseUrl: ${JSON.stringify(sourceUrl.replace(/\/openapi\.json$|\/openapi\.yaml$|\/swagger\.json$|\/docs\/openapi$/, ""))},
+});
+
+export const auth = betterAuth({
+\tplugins: [
+\t\tagentAuth({
+\t\t\tproviderName: ${JSON.stringify(name)},${descLine}
+\t\t\t...openapi,
+\t\t}),
+\t],
+});
+`;
+ }
+
+ if (source === "mcp" && sourceUrl) {
+ return `import { betterAuth } from "better-auth";
+import { agentAuth } from "${AGENT_PLUGIN_PKG}";
+
+export const auth = betterAuth({
+\tplugins: [
+\t\tagentAuth({
+\t\t\tproviderName: ${JSON.stringify(name)},${descLine}
+\t\t\tmcpServer: ${JSON.stringify(sourceUrl)},
+\t\t}),
+\t],
+});
+`;
+ }
+
+ return `import { betterAuth } from "better-auth";
+import { agentAuth } from "${AGENT_PLUGIN_PKG}";
+
+export const auth = betterAuth({
+\tplugins: [
+\t\tagentAuth({
+\t\t\tproviderName: ${JSON.stringify(name)},${descLine}
+\t\t\tcapabilities: [
+\t\t\t\t{
+\t\t\t\t\tname: "example",
+\t\t\t\t\tdescription: "An example capability — replace with your own",
+\t\t\t\t\tinput: {
+\t\t\t\t\t\ttype: "object",
+\t\t\t\t\t\tproperties: {
+\t\t\t\t\t\t\tmessage: { type: "string", description: "Input message" },
+\t\t\t\t\t\t},
+\t\t\t\t\t},
+\t\t\t\t},
+\t\t\t],
+\t\t\tasync onExecute({ capability, arguments: args }) {
+\t\t\t\tswitch (capability) {
+\t\t\t\t\tcase "example":
+\t\t\t\t\t\treturn { message: \`Hello from \${(args as Record).message}\` };
+\t\t\t\t\tdefault:
+\t\t\t\t\t\tthrow new Error(\`Unknown capability: \${capability}\`);
+\t\t\t\t}
+\t\t\t},
+\t\t}),
+\t],
+});
+`;
+}
+
+function showServerOutro() {
+ console.log(chalk.bold.white("\nNext steps:\n"));
+ console.log(chalk.white(" 1. Install dependencies:"));
+ console.log(chalk.cyan(` npm install better-auth ${AGENT_PLUGIN_PKG}\n`));
+ console.log(chalk.white(" 2. Configure your database:"));
+ console.log(
+ chalk.gray(
+ " Better Auth needs a database to store agents, hosts, and grants.",
+ ),
+ );
+ console.log(
+ chalk.cyan(" https://www.better-auth.com/docs/concepts/database\n"),
+ );
+ console.log(chalk.white(" 3. Run database migrations:"));
+ console.log(chalk.cyan(" npx auth migrate\n"));
+ console.log(
+ chalk.white(" 4. Expose the discovery endpoint at your app root:"),
+ );
+ console.log(chalk.gray(" GET /.well-known/agent-configuration"));
+ console.log(
+ chalk.gray(" → return auth.api.getAgentConfiguration({ headers })\n"),
+ );
+ console.log(` ${chalk.cyan("Docs")} ${PROTOCOL_URL}/docs/build-server`);
+ console.log(
+ ` ${chalk.cyan("GitHub")} https://github.com/better-auth/agent-auth`,
+ );
+
+ console.log(
+ chalk.green("\n✔ ") +
+ chalk.bold("Server scaffolded. ") +
+ "Follow the steps above to finish setup.\n",
+ );
+}
+
+// ── Helpers ───────────────────────────────────────
+
+async function offerSkillInstall(skillName: string) {
+ const { installSkill } = await prompts({
+ type: "confirm",
+ name: "installSkill",
+ message: `Install the ${chalk.cyan(skillName)} skill for your coding agents?`,
+ initial: true,
+ });
+
+ if (!installSkill) return;
+
+ const cmd = `npx -y skills add ${SKILLS_REPO} --skill ${skillName}`;
+ const s = yoctoSpinner({
+ text: `Installing ${skillName} skill…`,
+ color: "white",
+ });
+ s.start();
+ try {
+ execSync(cmd, { stdio: "pipe" });
+ s.success(`${skillName} skill installed.`);
+ } catch {
+ s.stop();
+ console.log(
+ chalk.yellow("⚠ Could not install automatically. Run manually:"),
+ );
+ console.log(chalk.cyan(` ${cmd}\n`));
+ }
+}
+
+function buildMcpArgs(registry: string): string[] {
+ const args = ["-y", AGENT_CLI_PKG, "mcp"];
+ if (registry && registry !== DEFAULT_REGISTRY) {
+ args.push("--registry-url", registry);
+ }
+ return args;
+}
+
+function getMcpConfigPath(
+ tool: string,
+ scope: "project" | "global",
+): string | null {
+ const home = os.homedir();
+ switch (tool) {
+ case "cursor":
+ return scope === "global"
+ ? path.join(home, ".cursor", "mcp.json")
+ : path.join(process.cwd(), ".cursor", "mcp.json");
+ case "claude-desktop":
+ if (process.platform === "win32")
+ return path.join(
+ process.env.APPDATA || home,
+ "Claude",
+ "claude_desktop_config.json",
+ );
+ if (process.platform === "darwin")
+ return path.join(
+ home,
+ "Library",
+ "Application Support",
+ "Claude",
+ "claude_desktop_config.json",
+ );
+ return path.join(home, ".config", "Claude", "claude_desktop_config.json");
+ case "windsurf":
+ return path.join(home, ".codeium", "windsurf", "mcp_config.json");
+ case "vscode":
+ return scope === "global"
+ ? null
+ : path.join(process.cwd(), ".vscode", "mcp.json");
+ default:
+ return null;
+ }
+}
+
+function writeMcpConfig(configPath: string, entry: McpEntry) {
+ let config: Record = {};
+ if (fs.existsSync(configPath)) {
+ try {
+ config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
+ } catch {
+ /* start fresh */
+ }
+ }
+ const servers =
+ (config.mcpServers as Record | undefined) ?? {};
+ servers["agent-auth"] = entry;
+ config.mcpServers = servers;
+
+ const dir = path.dirname(configPath);
+ if (!fs.existsSync(dir)) {
+ fs.mkdirSync(dir, { recursive: true });
+ }
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
+}
+
+function displayPath(filePath: string, scope: "project" | "global"): string {
+ if (scope === "project") {
+ return path.relative(process.cwd(), filePath) || filePath;
+ }
+ return filePath.replace(os.homedir(), "~");
+}
+
+function showJsonConfig(entry: McpEntry) {
+ const json = JSON.stringify({ mcpServers: { "agent-auth": entry } }, null, 2);
+ console.log(chalk.bold.white("\nAdd to your MCP configuration:\n"));
+ console.log(
+ json
+ .split("\n")
+ .map((line) => chalk.cyan(` ${line}`))
+ .join("\n"),
+ );
+ console.log();
+}
+
+function showCodeBlock(code: string, title: string) {
+ console.log(chalk.bold.white(`\n${title}:\n`));
+ console.log(
+ code
+ .split("\n")
+ .map((line) => chalk.dim(` ${line}`))
+ .join("\n"),
+ );
+}
+
+function showNextSteps(lines: string[]) {
+ console.log(chalk.bold.white("\nLearn more:\n"));
+ for (const line of lines) {
+ console.log(` ${line}`);
+ }
+}
+
+// ── Export ─────────────────────────────────────────
+
+export const ai = new Command("ai")
+ .description("Interactive setup for Agent Auth — AI agent authentication")
+ .action(aiAction);
diff --git a/packages/cli/src/commands/generate.ts b/packages/cli/src/commands/generate.ts
index d9becc224c7..63a17f669c7 100644
--- a/packages/cli/src/commands/generate.ts
+++ b/packages/cli/src/commands/generate.ts
@@ -11,7 +11,7 @@ import chalk from "chalk";
import { Command } from "commander";
import prompts from "prompts";
import yoctoSpinner from "yocto-spinner";
-import * as z from "zod/v4";
+import * as z from "zod";
import { generateSchema } from "../generators";
import { getConfig } from "../utils/get-config";
diff --git a/packages/cli/src/commands/init/configs/temp-plugins.config.ts b/packages/cli/src/commands/init/configs/temp-plugins.config.ts
index 9e9b39eab91..dded56c6cb9 100644
--- a/packages/cli/src/commands/init/configs/temp-plugins.config.ts
+++ b/packages/cli/src/commands/init/configs/temp-plugins.config.ts
@@ -1,6 +1,6 @@
// This is a temporary plugin config file until we support actually using the plugin config files.
-import * as z from "zod/v4";
+import * as z from "zod";
import type { GetArgumentsOptions } from "../generate-auth";
import type { ImportGroup } from "../utility/imports";
import { createImport } from "../utility/imports";
diff --git a/packages/cli/src/commands/init/index.ts b/packages/cli/src/commands/init/index.ts
index b787c4837da..22643cdc9d2 100644
--- a/packages/cli/src/commands/init/index.ts
+++ b/packages/cli/src/commands/init/index.ts
@@ -6,7 +6,7 @@ import { Command } from "commander";
import open from "open";
import prompts from "prompts";
import yoctoSpinner from "yocto-spinner";
-import z from "zod";
+import * as z from "zod";
import { cliVersion } from "../..";
import { generateDrizzleSchema } from "../../generators/drizzle";
import { generatePrismaSchema } from "../../generators/prisma";
diff --git a/packages/cli/src/commands/init/utility/plugin.test.ts b/packages/cli/src/commands/init/utility/plugin.test.ts
index ae5879c5f18..52afdd502d8 100644
--- a/packages/cli/src/commands/init/utility/plugin.test.ts
+++ b/packages/cli/src/commands/init/utility/plugin.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import * as z from "zod/v4";
+import * as z from "zod";
import type { PluginConfig } from "../configs/temp-plugins.config";
import { tempPluginsConfig } from "../configs/temp-plugins.config";
import type { GetArgumentsFn } from "../generate-auth";
diff --git a/packages/cli/src/commands/migrate.ts b/packages/cli/src/commands/migrate.ts
index 5f3bbb6954e..cf9ecc6937d 100644
--- a/packages/cli/src/commands/migrate.ts
+++ b/packages/cli/src/commands/migrate.ts
@@ -10,7 +10,7 @@ import chalk from "chalk";
import { Command } from "commander";
import prompts from "prompts";
import yoctoSpinner from "yocto-spinner";
-import * as z from "zod/v4";
+import * as z from "zod";
import { getConfig } from "../utils/get-config";
/** @internal */
diff --git a/packages/cli/src/commands/upgrade.ts b/packages/cli/src/commands/upgrade.ts
index f503557011e..1dbee9c2501 100644
--- a/packages/cli/src/commands/upgrade.ts
+++ b/packages/cli/src/commands/upgrade.ts
@@ -5,7 +5,7 @@ import { Command } from "commander";
import prompts from "prompts";
import * as semver from "semver";
import yoctoSpinner from "yocto-spinner";
-import * as z from "zod/v4";
+import * as z from "zod";
import { detectPackageManager } from "../utils/check-package-managers";
import { fetchLatestVersion } from "../utils/fetch-latest-version";
import { getPackageInfo } from "../utils/get-package-info";
diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts
index a97874a515c..e19a08440ac 100644
--- a/packages/cli/src/index.ts
+++ b/packages/cli/src/index.ts
@@ -1,6 +1,7 @@
#!/usr/bin/env node
import { Command } from "commander";
+import { ai } from "./commands/ai";
import { generate } from "./commands/generate";
import { info } from "./commands/info";
import { init } from "./commands/init";
@@ -30,6 +31,7 @@ async function main() {
// it doesn't matter if we can't read the package.json file, we'll just use an empty object
}
program
+ .addCommand(ai)
.addCommand(init)
.addCommand(migrate)
.addCommand(generate)
diff --git a/packages/cli/src/utils/get-config.ts b/packages/cli/src/utils/get-config.ts
index 91f8a3142db..0fc96a6e6d6 100644
--- a/packages/cli/src/utils/get-config.ts
+++ b/packages/cli/src/utils/get-config.ts
@@ -7,10 +7,11 @@ import babelPresetTypeScript from "@babel/preset-typescript";
import type { BetterAuthOptions } from "@better-auth/core";
import { BetterAuthError } from "@better-auth/core/error";
import { loadConfig } from "c12";
+import type { TsConfigResult } from "get-tsconfig";
+import { getTsconfig, parseTsconfig } from "get-tsconfig";
import type { JitiOptions } from "jiti";
import { addCloudflareModules } from "./add-cloudflare-modules";
import { addSvelteKitEnvModules } from "./add-svelte-kit-env-modules";
-import { getTsconfigInfo } from "./get-tsconfig-info";
let possiblePaths = [
"auth.ts",
@@ -42,93 +43,104 @@ possiblePaths = [
...possiblePaths.map((it) => `app/${it}`),
];
-function resolveReferencePath(configDir: string, refPath: string): string {
- const resolvedPath = path.resolve(configDir, refPath);
-
- // If it ends with .json, treat as direct file reference
- if (refPath.endsWith(".json")) {
- return resolvedPath;
+function mergeAliases(
+ target: Record,
+ source: Record,
+): void {
+ for (const [alias, aliasPath] of Object.entries(source)) {
+ if (!(alias in target)) {
+ target[alias] = aliasPath;
+ }
}
+}
- // If the exact path exists and is a file, use it
- if (fs.existsSync(resolvedPath)) {
- try {
- const stats = fs.statSync(resolvedPath);
- if (stats.isFile()) {
- return resolvedPath;
- }
- } catch {
- // Fall through to directory handling
+function extractAliases(tsconfig: TsConfigResult): Record {
+ const { paths = {}, baseUrl } = tsconfig.config.compilerOptions ?? {};
+ const result: Record = {};
+ const configDir = path.dirname(tsconfig.path);
+ const resolvedBaseUrl = baseUrl
+ ? path.resolve(configDir, baseUrl)
+ : configDir;
+
+ for (const [alias, aliasPaths = []] of Object.entries(paths)) {
+ for (const aliasedPath of aliasPaths) {
+ const finalAlias = alias.slice(-1) === "*" ? alias.slice(0, -1) : alias;
+ const finalAliasedPath =
+ aliasedPath.slice(-1) === "*" ? aliasedPath.slice(0, -1) : aliasedPath;
+
+ result[finalAlias || ""] = path.join(resolvedBaseUrl, finalAliasedPath);
}
}
+ return result;
+}
- // Otherwise, assume directory reference
- return path.resolve(configDir, refPath, "tsconfig.json");
+/**
+ * Reads raw tsconfig JSON to get `references` (which get-tsconfig strips out).
+ */
+function readRawTsconfigReferences(
+ tsconfigPath: string,
+): Array<{ path: string }> | undefined {
+ try {
+ const text = fs.readFileSync(tsconfigPath, "utf-8");
+ const stripped = text
+ .replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) =>
+ g ? "" : m,
+ )
+ .replace(/,(?=\s*[}\]])/g, "");
+ const raw = JSON.parse(stripped);
+ return raw.references;
+ } catch {
+ return undefined;
+ }
}
-function getPathAliasesRecursive(
+/**
+ * Collect path aliases from tsconfig references recursively.
+ */
+function collectReferencesAliases(
tsconfigPath: string,
visited = new Set(),
): Record {
- if (visited.has(tsconfigPath)) {
- return {};
- }
- visited.add(tsconfigPath);
-
- if (!fs.existsSync(tsconfigPath)) {
- console.warn(`Referenced tsconfig not found: ${tsconfigPath}`);
- return {};
- }
-
- try {
- const tsConfig = getTsconfigInfo(undefined, tsconfigPath);
- const { paths = {}, baseUrl = "." } = tsConfig.compilerOptions || {};
- const result: Record = {};
+ const result: Record = {};
+ const refs = readRawTsconfigReferences(tsconfigPath);
+ if (!refs) return result;
- const configDir = path.dirname(tsconfigPath);
- const obj = Object.entries(paths) as [string, string[]][];
- for (const [alias, aliasPaths] of obj) {
- for (const aliasedPath of aliasPaths) {
- const resolvedBaseUrl = path.resolve(configDir, baseUrl);
- const finalAlias = alias.slice(-1) === "*" ? alias.slice(0, -1) : alias;
- const finalAliasedPath =
- aliasedPath.slice(-1) === "*"
- ? aliasedPath.slice(0, -1)
- : aliasedPath;
+ const configDir = path.dirname(tsconfigPath);
+ for (const ref of refs) {
+ const resolvedRef = path.resolve(configDir, ref.path);
+ const refTsconfigPath = resolvedRef.endsWith(".json")
+ ? resolvedRef
+ : path.join(resolvedRef, "tsconfig.json");
- result[finalAlias || ""] = path.join(resolvedBaseUrl, finalAliasedPath);
- }
- }
+ if (visited.has(refTsconfigPath)) continue;
+ visited.add(refTsconfigPath);
- if (tsConfig.references) {
- for (const ref of tsConfig.references) {
- const refPath = resolveReferencePath(configDir, ref.path);
- const refAliases = getPathAliasesRecursive(refPath, visited);
- for (const [alias, aliasPath] of Object.entries(refAliases)) {
- if (!(alias in result)) {
- result[alias] = aliasPath;
- }
- }
- }
+ try {
+ const refConfig = parseTsconfig(refTsconfigPath);
+ mergeAliases(
+ result,
+ extractAliases({ path: refTsconfigPath, config: refConfig }),
+ );
+ } catch {
+ continue;
}
- return result;
- } catch (error) {
- console.warn(`Error parsing tsconfig at ${tsconfigPath}: ${error}`);
- return {};
+ mergeAliases(result, collectReferencesAliases(refTsconfigPath, visited));
}
+ return result;
}
function getPathAliases(cwd: string): Record | null {
- let tsConfigPath = path.join(cwd, "tsconfig.json");
- if (!fs.existsSync(tsConfigPath)) {
- tsConfigPath = path.join(cwd, "jsconfig.json");
- }
- if (!fs.existsSync(tsConfigPath)) {
+ const configName = fs.existsSync(path.join(cwd, "tsconfig.json"))
+ ? "tsconfig.json"
+ : "jsconfig.json";
+ const tsconfig = getTsconfig(cwd, configName);
+ if (!tsconfig) {
return null;
}
try {
- const result = getPathAliasesRecursive(tsConfigPath);
+ const result = extractAliases(tsconfig);
+ mergeAliases(result, collectReferencesAliases(tsconfig.path));
addSvelteKitEnvModules(result);
addCloudflareModules(result);
return result;
diff --git a/packages/cli/src/utils/get-tsconfig-info.ts b/packages/cli/src/utils/get-tsconfig-info.ts
deleted file mode 100644
index c0e35c7ea46..00000000000
--- a/packages/cli/src/utils/get-tsconfig-info.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import fs from "node:fs";
-import path from "node:path";
-
-function stripJsonComments(jsonString: string): string {
- return jsonString
- .replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) =>
- g ? "" : m,
- )
- .replace(/,(?=\s*[}\]])/g, "");
-}
-
-export function getTsconfigInfo(cwd?: string, flatPath?: string) {
- let tsConfigPath: string;
- if (flatPath) {
- tsConfigPath = flatPath;
- } else {
- tsConfigPath = cwd
- ? path.join(cwd, "tsconfig.json")
- : path.join("tsconfig.json");
- }
- try {
- const text = fs.readFileSync(tsConfigPath, "utf-8");
- return JSON.parse(stripJsonComments(text));
- } catch (error) {
- throw error;
- }
-}
diff --git a/packages/cli/test/get-config.test.ts b/packages/cli/test/get-config.test.ts
index cdea0d5de31..b61657e523c 100644
--- a/packages/cli/test/get-config.test.ts
+++ b/packages/cli/test/get-config.test.ts
@@ -897,4 +897,217 @@ describe("getConfig", async () => {
expect(config).not.toBe(null);
expect(config?.emailAndPassword?.enabled).toBe(true);
});
-}, 30000);
+
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/6373
+ */
+ it("should resolve path aliases from extended tsconfig", async () => {
+ const authPath = path.join(tmpDir, "src", "auth");
+ const dbPath = path.join(tmpDir, "src", "db");
+ await fs.mkdir(authPath, { recursive: true });
+ await fs.mkdir(dbPath, { recursive: true });
+
+ // Create base tsconfig with path aliases
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.base.json"),
+ `{
+ "compilerOptions": {
+ "paths": {
+ "@src/*": ["./src/*"]
+ }
+ }
+ }`,
+ );
+
+ // Create tsconfig.json that extends base
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.json"),
+ `{
+ "extends": "./tsconfig.base.json"
+ }`,
+ );
+
+ // Create dummy db.ts
+ await fs.writeFile(
+ path.join(dbPath, "db.ts"),
+ `class PrismaClient {
+ constructor() {}
+ }
+ export const db = new PrismaClient()`,
+ );
+
+ // Create auth.ts using the alias from extended config
+ await fs.writeFile(
+ path.join(authPath, "auth.ts"),
+ `import {betterAuth} from "better-auth";
+ import {prismaAdapter} from "better-auth/adapters/prisma";
+ import {db} from "@src/db/db";
+
+ export const auth = betterAuth({
+ database: prismaAdapter(db, {
+ provider: 'sqlite'
+ }),
+ emailAndPassword: {
+ enabled: true,
+ }
+ })`,
+ );
+
+ const config = await getConfig({
+ cwd: tmpDir,
+ configPath: "src/auth/auth.ts",
+ });
+
+ expect(config).not.toBe(null);
+ expect(config).toMatchObject({
+ emailAndPassword: { enabled: true },
+ });
+ });
+
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/6373
+ */
+ it("should resolve path aliases from chained extends", async () => {
+ const authPath = path.join(tmpDir, "src", "auth");
+ const dbPath = path.join(tmpDir, "src", "db");
+ await fs.mkdir(authPath, { recursive: true });
+ await fs.mkdir(dbPath, { recursive: true });
+
+ // Create grandparent tsconfig with path aliases
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.root.json"),
+ `{
+ "compilerOptions": {
+ "paths": {
+ "@server/*": ["./src/*"]
+ }
+ }
+ }`,
+ );
+
+ // Create parent tsconfig that extends grandparent
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.base.json"),
+ `{
+ "extends": "./tsconfig.root.json"
+ }`,
+ );
+
+ // Create tsconfig.json that extends parent
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.json"),
+ `{
+ "extends": "./tsconfig.base.json"
+ }`,
+ );
+
+ // Create dummy db.ts
+ await fs.writeFile(
+ path.join(dbPath, "db.ts"),
+ `class PrismaClient {
+ constructor() {}
+ }
+ export const db = new PrismaClient()`,
+ );
+
+ // Create auth.ts using the alias from grandparent
+ await fs.writeFile(
+ path.join(authPath, "auth.ts"),
+ `import {betterAuth} from "better-auth";
+ import {prismaAdapter} from "better-auth/adapters/prisma";
+ import {db} from "@server/db/db";
+
+ export const auth = betterAuth({
+ database: prismaAdapter(db, {
+ provider: 'sqlite'
+ }),
+ emailAndPassword: {
+ enabled: true,
+ }
+ })`,
+ );
+
+ const config = await getConfig({
+ cwd: tmpDir,
+ configPath: "src/auth/auth.ts",
+ });
+
+ expect(config).not.toBe(null);
+ expect(config).toMatchObject({
+ emailAndPassword: { enabled: true },
+ });
+ });
+
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/6373
+ */
+ it("should let child paths override parent paths from extends", async () => {
+ const authPath = path.join(tmpDir, "server", "auth");
+ const dbPath = path.join(tmpDir, "server", "db");
+ const oldDbPath = path.join(tmpDir, "old", "db");
+ await fs.mkdir(authPath, { recursive: true });
+ await fs.mkdir(dbPath, { recursive: true });
+ await fs.mkdir(oldDbPath, { recursive: true });
+
+ // Create parent tsconfig with path aliases pointing to old location
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.base.json"),
+ `{
+ "compilerOptions": {
+ "paths": {
+ "@server/*": ["./old/*"]
+ }
+ }
+ }`,
+ );
+
+ // Create child tsconfig that overrides the alias
+ await fs.writeFile(
+ path.join(tmpDir, "tsconfig.json"),
+ `{
+ "extends": "./tsconfig.base.json",
+ "compilerOptions": {
+ "paths": {
+ "@server/*": ["./server/*"]
+ }
+ }
+ }`,
+ );
+
+ // Create dummy db.ts in the correct (overridden) location
+ await fs.writeFile(
+ path.join(dbPath, "db.ts"),
+ `class PrismaClient {
+ constructor() {}
+ }
+ export const db = new PrismaClient()`,
+ );
+
+ // Create auth.ts
+ await fs.writeFile(
+ path.join(authPath, "auth.ts"),
+ `import {betterAuth} from "better-auth";
+ import {prismaAdapter} from "better-auth/adapters/prisma";
+ import {db} from "@server/db/db";
+
+ export const auth = betterAuth({
+ database: prismaAdapter(db, {
+ provider: 'sqlite'
+ }),
+ emailAndPassword: {
+ enabled: true,
+ }
+ })`,
+ );
+
+ const config = await getConfig({
+ cwd: tmpDir,
+ configPath: "server/auth/auth.ts",
+ });
+
+ expect(config).not.toBe(null);
+ expect(config).toMatchObject({
+ emailAndPassword: { enabled: true },
+ });
+ });
+});
diff --git a/packages/core/package.json b/packages/core/package.json
index dcc86340185..5333ebb3fa6 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/core",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "The most comprehensive authentication framework for TypeScript.",
"type": "module",
"license": "MIT",
@@ -96,6 +96,11 @@
"dev-source": "./src/oauth2/index.ts",
"types": "./dist/oauth2/index.d.mts",
"default": "./dist/oauth2/index.mjs"
+ },
+ "./instrumentation": {
+ "dev-source": "./src/instrumentation/index.ts",
+ "types": "./dist/instrumentation/index.d.mts",
+ "default": "./dist/instrumentation/index.mjs"
}
},
"typesVersions": {
@@ -135,6 +140,9 @@
],
"oauth2": [
"dist/oauth2/index.d.mts"
+ ],
+ "instrumentation": [
+ "dist/instrumentation/index.d.mts"
]
}
},
diff --git a/packages/core/src/db/adapter/get-id-field.test.ts b/packages/core/src/db/adapter/get-id-field.test.ts
new file mode 100644
index 00000000000..5a47f714eac
--- /dev/null
+++ b/packages/core/src/db/adapter/get-id-field.test.ts
@@ -0,0 +1,222 @@
+import { describe, expect, it } from "vitest";
+import type { BetterAuthOptions } from "../../types";
+import type { BetterAuthDBSchema } from "../type";
+import { initGetIdField } from "./get-id-field";
+
+const minimalSchema: BetterAuthDBSchema = {
+ user: {
+ modelName: "user",
+ fields: {
+ name: { type: "string" },
+ email: { type: "string" },
+ },
+ },
+};
+
+const uuidRegex =
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+
+function getField(
+ options: BetterAuthOptions,
+ initExtra?: Partial[0]>,
+ fieldExtra?: { customModelName?: string; forceAllowId?: boolean },
+) {
+ const idField = initGetIdField({
+ schema: minimalSchema,
+ options,
+ ...initExtra,
+ });
+ return idField({
+ customModelName: fieldExtra?.customModelName ?? "user",
+ forceAllowId: fieldExtra?.forceAllowId,
+ });
+}
+
+describe("defaultValue priority", () => {
+ it("should return undefined when disableIdGeneration is true", () => {
+ const field = getField(
+ { database: {} as any },
+ { disableIdGeneration: true },
+ );
+ expect(field.defaultValue).toBeUndefined();
+ });
+
+ it("should return undefined when generateId is false", () => {
+ const value = getField({
+ database: {} as any,
+ advanced: { database: { generateId: false } },
+ }).defaultValue?.();
+ expect(value).toBeUndefined();
+ });
+
+ it("should return undefined when generateId is 'serial'", () => {
+ const value = getField({
+ database: {} as any,
+ advanced: { database: { generateId: "serial" } },
+ }).defaultValue?.();
+ expect(value).toBeUndefined();
+ });
+
+ it("should use generateId function over 'uuid' and customIdGenerator", () => {
+ const value = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: () => "fn-id" } },
+ },
+ { customIdGenerator: () => "adapter-id" },
+ ).defaultValue?.();
+ expect(value).toBe("fn-id");
+ });
+
+ it("should use 'uuid' over customIdGenerator", () => {
+ const value = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { customIdGenerator: () => "adapter-id", supportsUUIDs: false },
+ ).defaultValue?.();
+ expect(value).toMatch(uuidRegex);
+ });
+
+ it("should use customIdGenerator when generateId is not set", () => {
+ const value = getField(
+ { database: {} as any },
+ { customIdGenerator: () => "adapter-id" },
+ ).defaultValue?.();
+ expect(value).toBe("adapter-id");
+ });
+
+ it("should fall back to default id generation", () => {
+ const value = getField({ database: {} as any }).defaultValue?.();
+ expect(typeof value).toBe("string");
+ expect(value).not.toMatch(uuidRegex);
+ });
+});
+
+describe("type and required", () => {
+ it("should have type 'number' when generateId is 'serial'", () => {
+ const field = getField({
+ database: {} as any,
+ advanced: { database: { generateId: "serial" } },
+ });
+ expect(field.type).toBe("number");
+ expect(field.required).toBe(false);
+ });
+
+ it("should have type 'string' by default", () => {
+ const field = getField({ database: {} as any });
+ expect(field.type).toBe("string");
+ expect(field.required).toBe(true);
+ });
+
+ it("should not generate id when useUUIDs and supportsUUIDs", () => {
+ const field = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { supportsUUIDs: true },
+ );
+ expect(field.required).toBe(false);
+ expect(field.defaultValue).toBeUndefined();
+ });
+});
+
+describe("transform.input", () => {
+ it("should return undefined for falsy value", () => {
+ const field = getField({ database: {} as any });
+ expect(field.transform.input(undefined)).toBeUndefined();
+ expect(field.transform.input(null)).toBeUndefined();
+ expect(field.transform.input("")).toBeUndefined();
+ });
+
+ it("should return value as-is by default", () => {
+ const field = getField({ database: {} as any });
+ expect(field.transform.input("some-id")).toBe("some-id");
+ });
+
+ describe("serial", () => {
+ it("should convert string to number", () => {
+ const field = getField({
+ database: {} as any,
+ advanced: { database: { generateId: "serial" } },
+ });
+ expect(field.transform.input("42")).toBe(42);
+ });
+
+ it("should return undefined for non-numeric string", () => {
+ const field = getField({
+ database: {} as any,
+ advanced: { database: { generateId: "serial" } },
+ });
+ expect(field.transform.input("not-a-number")).toBeUndefined();
+ });
+ });
+
+ describe("uuid", () => {
+ it("should return value as-is when shouldGenerateId and not forceAllowId", () => {
+ const field = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { supportsUUIDs: false },
+ );
+ const uuid = crypto.randomUUID();
+ expect(field.transform.input(uuid)).toBe(uuid);
+ });
+
+ it("should return undefined when supportsUUIDs (DB handles it)", () => {
+ const field = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { supportsUUIDs: true },
+ );
+ expect(field.transform.input("some-value")).toBeUndefined();
+ });
+
+ it("should accept valid UUID when forceAllowId is true", () => {
+ const uuid = crypto.randomUUID();
+ const field = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { supportsUUIDs: false },
+ { forceAllowId: true },
+ );
+ expect(field.transform.input(uuid)).toBe(uuid);
+ });
+
+ it("should generate new UUID for non-string value when DB doesn't support UUIDs", () => {
+ const field = getField(
+ {
+ database: {} as any,
+ advanced: { database: { generateId: "uuid" } },
+ },
+ { supportsUUIDs: false },
+ { forceAllowId: true },
+ );
+ const result = field.transform.input(123);
+ expect(result).toMatch(uuidRegex);
+ });
+ });
+});
+
+describe("transform.output", () => {
+ it("should return undefined for falsy value", () => {
+ const field = getField({ database: {} as any });
+ expect(field.transform.output(undefined)).toBeUndefined();
+ expect(field.transform.output(null)).toBeUndefined();
+ expect(field.transform.output("")).toBeUndefined();
+ });
+
+ it("should convert value to string", () => {
+ const field = getField({ database: {} as any });
+ expect(field.transform.output(123)).toBe("123");
+ expect(field.transform.output("abc")).toBe("abc");
+ });
+});
diff --git a/packages/core/src/db/adapter/get-id-field.ts b/packages/core/src/db/adapter/get-id-field.ts
index 5b3e9b192c6..c4f76a5d2c0 100644
--- a/packages/core/src/db/adapter/get-id-field.ts
+++ b/packages/core/src/db/adapter/get-id-field.ts
@@ -57,18 +57,29 @@ export const initGetIdField = ({
defaultValue() {
if (disableIdGeneration) return undefined;
const generateId = options.advanced?.database?.generateId;
- if (generateId === false || useNumberId) return undefined;
+
+ // let the database handle id generation
+ if (generateId === false || generateId === "serial")
+ return undefined;
+
+ // user-provided function takes highest priority
if (typeof generateId === "function") {
return generateId({
model,
});
}
- if (customIdGenerator) {
- return customIdGenerator({ model });
- }
+
+ // user-provided "uuid" option
if (generateId === "uuid") {
return crypto.randomUUID();
}
+
+ // database adapter-level custom id generator
+ if (customIdGenerator) {
+ return customIdGenerator({ model });
+ }
+
+ // fallback to default id generation
return defaultGenerateId();
},
}
diff --git a/packages/core/src/instrumentation/attributes.ts b/packages/core/src/instrumentation/attributes.ts
new file mode 100644
index 00000000000..60de687df4a
--- /dev/null
+++ b/packages/core/src/instrumentation/attributes.ts
@@ -0,0 +1,21 @@
+/** HTTP route attribute (e.g. /api/auth/sign-in). */
+export const ATTR_HTTP_ROUTE = "http.route" as const;
+
+/** HTTP response status code. */
+export const ATTR_HTTP_RESPONSE_STATUS_CODE =
+ "http.response.status_code" as const;
+
+/** Database collection name. */
+export const ATTR_DB_COLLECTION_NAME = "db.collection.name" as const;
+
+/** Database operation name. */
+export const ATTR_DB_OPERATION_NAME = "db.operation.name" as const;
+
+/** Operation identifier (e.g. getSession, signUpWithEmailAndPassword). */
+export const ATTR_OPERATION_ID = "better_auth.operation_id" as const;
+
+/** Hook type (e.g. before, after). */
+export const ATTR_HOOK_TYPE = "better_auth.hook.type" as const;
+
+/** Execution context (e.g. user, plugin:id). */
+export const ATTR_CONTEXT = "better_auth.context" as const;
diff --git a/packages/core/src/instrumentation/index.ts b/packages/core/src/instrumentation/index.ts
new file mode 100644
index 00000000000..c076618a804
--- /dev/null
+++ b/packages/core/src/instrumentation/index.ts
@@ -0,0 +1,2 @@
+export * from "./attributes";
+export * from "./tracer";
diff --git a/packages/core/src/instrumentation/tracer.ts b/packages/core/src/instrumentation/tracer.ts
new file mode 100644
index 00000000000..b62edd45877
--- /dev/null
+++ b/packages/core/src/instrumentation/tracer.ts
@@ -0,0 +1,22 @@
+/**
+ * No-op span wrapper. Calls fn() directly; actual OpenTelemetry tracing is
+ * not included in this build. Install @opentelemetry/sdk-trace-node and
+ * configure a TracerProvider for real tracing.
+ */
+export function withSpan(
+ _name: string,
+ _attributes: Record,
+ fn: () => T,
+): T;
+export function withSpan(
+ _name: string,
+ _attributes: Record,
+ fn: () => Promise,
+): Promise;
+export function withSpan(
+ _name: string,
+ _attributes: Record,
+ fn: () => T | Promise,
+): T | Promise {
+ return fn();
+}
diff --git a/packages/core/src/social-providers/apple.ts b/packages/core/src/social-providers/apple.ts
index 6e0f8dbdaeb..e58b9cc2390 100644
--- a/packages/core/src/social-providers/apple.ts
+++ b/packages/core/src/social-providers/apple.ts
@@ -147,7 +147,7 @@ export const apple = (options: AppleOptions) => {
return refreshAccessToken({
refreshToken,
options,
- tokenEndpoint: "https://appleid.apple.com/auth/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/atlassian.ts b/packages/core/src/social-providers/atlassian.ts
index 0d2d0db2d1b..43c0177bcf4 100644
--- a/packages/core/src/social-providers/atlassian.ts
+++ b/packages/core/src/social-providers/atlassian.ts
@@ -30,6 +30,7 @@ export interface AtlassianOptions extends ProviderOptions {
}
export const atlassian = (options: AtlassianOptions) => {
+ const tokenEndpoint = "https://auth.atlassian.com/oauth/token";
return {
id: "atlassian",
name: "Atlassian",
@@ -70,7 +71,7 @@ export const atlassian = (options: AtlassianOptions) => {
codeVerifier,
redirectURI,
options,
- tokenEndpoint: "https://auth.atlassian.com/oauth/token",
+ tokenEndpoint,
});
},
@@ -83,7 +84,7 @@ export const atlassian = (options: AtlassianOptions) => {
clientId: options.clientId,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://auth.atlassian.com/oauth/token",
+ tokenEndpoint,
});
},
diff --git a/packages/core/src/social-providers/discord.ts b/packages/core/src/social-providers/discord.ts
index 9053a1c4906..147edaf5e43 100644
--- a/packages/core/src/social-providers/discord.ts
+++ b/packages/core/src/social-providers/discord.ts
@@ -80,6 +80,7 @@ export interface DiscordOptions extends ProviderOptions {
}
export const discord = (options: DiscordOptions) => {
+ const tokenEndpoint = "https://discord.com/api/oauth2/token";
return {
id: "discord",
name: "Discord",
@@ -109,7 +110,7 @@ export const discord = (options: DiscordOptions) => {
code,
redirectURI,
options,
- tokenEndpoint: "https://discord.com/api/oauth2/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -122,7 +123,7 @@ export const discord = (options: DiscordOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://discord.com/api/oauth2/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/figma.ts b/packages/core/src/social-providers/figma.ts
index b44966053cd..0a1bc726206 100644
--- a/packages/core/src/social-providers/figma.ts
+++ b/packages/core/src/social-providers/figma.ts
@@ -20,6 +20,7 @@ export interface FigmaOptions extends ProviderOptions {
}
export const figma = (options: FigmaOptions) => {
+ const tokenEndpoint = "https://api.figma.com/v1/oauth/token";
return {
id: "figma",
name: "Figma",
@@ -56,7 +57,7 @@ export const figma = (options: FigmaOptions) => {
codeVerifier,
redirectURI,
options,
- tokenEndpoint: "https://api.figma.com/v1/oauth/token",
+ tokenEndpoint,
authentication: "basic",
});
},
@@ -70,7 +71,7 @@ export const figma = (options: FigmaOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://api.figma.com/v1/oauth/token",
+ tokenEndpoint,
authentication: "basic",
});
},
diff --git a/packages/core/src/social-providers/github.ts b/packages/core/src/social-providers/github.ts
index c74d4a4ec01..c16fb108435 100644
--- a/packages/core/src/social-providers/github.ts
+++ b/packages/core/src/social-providers/github.ts
@@ -126,7 +126,7 @@ export const github = (options: GithubOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://github.com/login/oauth/access_token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/huggingface.ts b/packages/core/src/social-providers/huggingface.ts
index 763f850ef9a..c7523830bac 100644
--- a/packages/core/src/social-providers/huggingface.ts
+++ b/packages/core/src/social-providers/huggingface.ts
@@ -43,6 +43,7 @@ export interface HuggingFaceOptions
}
export const huggingface = (options: HuggingFaceOptions) => {
+ const tokenEndpoint = "https://huggingface.co/oauth/token";
return {
id: "huggingface",
name: "Hugging Face",
@@ -68,7 +69,7 @@ export const huggingface = (options: HuggingFaceOptions) => {
codeVerifier,
redirectURI,
options,
- tokenEndpoint: "https://huggingface.co/oauth/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -81,7 +82,7 @@ export const huggingface = (options: HuggingFaceOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://huggingface.co/oauth/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/index.ts b/packages/core/src/social-providers/index.ts
index 05aa0056858..5b86f225229 100644
--- a/packages/core/src/social-providers/index.ts
+++ b/packages/core/src/social-providers/index.ts
@@ -33,6 +33,7 @@ import { twitch } from "./twitch";
import { twitter } from "./twitter";
import { vercel } from "./vercel";
import { vk } from "./vk";
+import { wechat } from "./wechat";
import { zoom } from "./zoom";
export const socialProviders = {
@@ -70,6 +71,7 @@ export const socialProviders = {
polar,
railway,
vercel,
+ wechat,
};
export const socialProviderList = Object.keys(socialProviders) as [
@@ -126,6 +128,7 @@ export * from "./twitch";
export * from "./twitter";
export * from "./vercel";
export * from "./vk";
+export * from "./wechat";
export * from "./zoom";
export type SocialProviderList = typeof socialProviderList;
diff --git a/packages/core/src/social-providers/kakao.ts b/packages/core/src/social-providers/kakao.ts
index 2b441dc9420..d232ccc8d67 100644
--- a/packages/core/src/social-providers/kakao.ts
+++ b/packages/core/src/social-providers/kakao.ts
@@ -102,6 +102,7 @@ export interface KakaoOptions extends ProviderOptions {
}
export const kakao = (options: KakaoOptions) => {
+ const tokenEndpoint = "https://kauth.kakao.com/oauth/token";
return {
id: "kakao",
name: "Kakao",
@@ -125,7 +126,7 @@ export const kakao = (options: KakaoOptions) => {
code,
redirectURI,
options,
- tokenEndpoint: "https://kauth.kakao.com/oauth/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -138,7 +139,7 @@ export const kakao = (options: KakaoOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://kauth.kakao.com/oauth/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/naver.ts b/packages/core/src/social-providers/naver.ts
index f9ebcbe5ca3..0898f8fe10f 100644
--- a/packages/core/src/social-providers/naver.ts
+++ b/packages/core/src/social-providers/naver.ts
@@ -40,6 +40,7 @@ export interface NaverOptions extends ProviderOptions {
}
export const naver = (options: NaverOptions) => {
+ const tokenEndpoint = "https://nid.naver.com/oauth2.0/token";
return {
id: "naver",
name: "Naver",
@@ -61,7 +62,7 @@ export const naver = (options: NaverOptions) => {
code,
redirectURI,
options,
- tokenEndpoint: "https://nid.naver.com/oauth2.0/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -74,7 +75,7 @@ export const naver = (options: NaverOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://nid.naver.com/oauth2.0/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/polar.ts b/packages/core/src/social-providers/polar.ts
index ae855eda76d..8f2fff4f6dd 100644
--- a/packages/core/src/social-providers/polar.ts
+++ b/packages/core/src/social-providers/polar.ts
@@ -33,6 +33,7 @@ export interface PolarProfile {
export interface PolarOptions extends ProviderOptions {}
export const polar = (options: PolarOptions) => {
+ const tokenEndpoint = "https://api.polar.sh/v1/oauth2/token";
return {
id: "polar",
name: "Polar",
@@ -59,7 +60,7 @@ export const polar = (options: PolarOptions) => {
codeVerifier,
redirectURI,
options,
- tokenEndpoint: "https://api.polar.sh/v1/oauth2/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -72,7 +73,7 @@ export const polar = (options: PolarOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://api.polar.sh/v1/oauth2/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/roblox.ts b/packages/core/src/social-providers/roblox.ts
index fbd5656ab58..33d08b98196 100644
--- a/packages/core/src/social-providers/roblox.ts
+++ b/packages/core/src/social-providers/roblox.ts
@@ -33,6 +33,7 @@ export interface RobloxOptions extends ProviderOptions {
}
export const roblox = (options: RobloxOptions) => {
+ const tokenEndpoint = "https://apis.roblox.com/oauth/v1/token";
return {
id: "roblox",
name: "Roblox",
@@ -55,7 +56,7 @@ export const roblox = (options: RobloxOptions) => {
code,
redirectURI: options.redirectURI || redirectURI,
options,
- tokenEndpoint: "https://apis.roblox.com/oauth/v1/token",
+ tokenEndpoint,
authentication: "post",
});
},
@@ -69,7 +70,7 @@ export const roblox = (options: RobloxOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://apis.roblox.com/oauth/v1/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/slack.ts b/packages/core/src/social-providers/slack.ts
index 160f8eefb01..7dcd267c19d 100644
--- a/packages/core/src/social-providers/slack.ts
+++ b/packages/core/src/social-providers/slack.ts
@@ -38,6 +38,7 @@ export interface SlackOptions extends ProviderOptions {
}
export const slack = (options: SlackOptions) => {
+ const tokenEndpoint = "https://slack.com/api/openid.connect.token";
return {
id: "slack",
name: "Slack",
@@ -60,7 +61,7 @@ export const slack = (options: SlackOptions) => {
code,
redirectURI,
options,
- tokenEndpoint: "https://slack.com/api/openid.connect.token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -73,7 +74,7 @@ export const slack = (options: SlackOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://slack.com/api/openid.connect.token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/spotify.ts b/packages/core/src/social-providers/spotify.ts
index f47f35a8b05..6853b0c968e 100644
--- a/packages/core/src/social-providers/spotify.ts
+++ b/packages/core/src/social-providers/spotify.ts
@@ -20,6 +20,7 @@ export interface SpotifyOptions extends ProviderOptions {
}
export const spotify = (options: SpotifyOptions) => {
+ const tokenEndpoint = "https://accounts.spotify.com/api/token";
return {
id: "spotify",
name: "Spotify",
@@ -43,7 +44,7 @@ export const spotify = (options: SpotifyOptions) => {
codeVerifier,
redirectURI,
options,
- tokenEndpoint: "https://accounts.spotify.com/api/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -56,7 +57,7 @@ export const spotify = (options: SpotifyOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://accounts.spotify.com/api/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/tiktok.ts b/packages/core/src/social-providers/tiktok.ts
index b4512d8ec2b..4b55a76a357 100644
--- a/packages/core/src/social-providers/tiktok.ts
+++ b/packages/core/src/social-providers/tiktok.ts
@@ -127,6 +127,7 @@ export interface TiktokOptions extends ProviderOptions {
}
export const tiktok = (options: TiktokOptions) => {
+ const tokenEndpoint = "https://open.tiktokapis.com/v2/oauth/token/";
return {
id: "tiktok",
name: "TikTok",
@@ -151,7 +152,7 @@ export const tiktok = (options: TiktokOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://open.tiktokapis.com/v2/oauth/token/",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -162,7 +163,7 @@ export const tiktok = (options: TiktokOptions) => {
options: {
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://open.tiktokapis.com/v2/oauth/token/",
+ tokenEndpoint,
authentication: "post",
extraParams: {
client_key: options.clientKey,
diff --git a/packages/core/src/social-providers/twitch.ts b/packages/core/src/social-providers/twitch.ts
index 00075721cc5..543449ce7b2 100644
--- a/packages/core/src/social-providers/twitch.ts
+++ b/packages/core/src/social-providers/twitch.ts
@@ -38,6 +38,7 @@ export interface TwitchOptions extends ProviderOptions {
claims?: string[] | undefined;
}
export const twitch = (options: TwitchOptions) => {
+ const tokenEndpoint = "https://id.twitch.tv/oauth2/token";
return {
id: "twitch",
name: "Twitch",
@@ -67,7 +68,7 @@ export const twitch = (options: TwitchOptions) => {
code,
redirectURI,
options,
- tokenEndpoint: "https://id.twitch.tv/oauth2/token",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -80,7 +81,7 @@ export const twitch = (options: TwitchOptions) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://id.twitch.tv/oauth2/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/twitter.ts b/packages/core/src/social-providers/twitter.ts
index 210962cb5a6..30557249582 100644
--- a/packages/core/src/social-providers/twitter.ts
+++ b/packages/core/src/social-providers/twitter.ts
@@ -104,6 +104,7 @@ export interface TwitterOption extends ProviderOptions {
}
export const twitter = (options: TwitterOption) => {
+ const tokenEndpoint = "https://api.x.com/2/oauth2/token";
return {
id: "twitter",
name: "Twitter",
@@ -130,7 +131,7 @@ export const twitter = (options: TwitterOption) => {
authentication: "basic",
redirectURI,
options,
- tokenEndpoint: "https://api.x.com/2/oauth2/token",
+ tokenEndpoint,
});
},
@@ -145,7 +146,7 @@ export const twitter = (options: TwitterOption) => {
clientSecret: options.clientSecret,
},
authentication: "basic",
- tokenEndpoint: "https://api.x.com/2/oauth2/token",
+ tokenEndpoint,
});
},
async getUserInfo(token) {
diff --git a/packages/core/src/social-providers/vk.ts b/packages/core/src/social-providers/vk.ts
index 37062604432..b0898ceb5bf 100644
--- a/packages/core/src/social-providers/vk.ts
+++ b/packages/core/src/social-providers/vk.ts
@@ -26,6 +26,7 @@ export interface VkOption extends ProviderOptions {
}
export const vk = (options: VkOption) => {
+ const tokenEndpoint = "https://id.vk.com/oauth2/auth";
return {
id: "vk",
name: "VK",
@@ -57,7 +58,7 @@ export const vk = (options: VkOption) => {
redirectURI: options.redirectURI || redirectURI,
options,
deviceId,
- tokenEndpoint: "https://id.vk.com/oauth2/auth",
+ tokenEndpoint,
});
},
refreshAccessToken: options.refreshAccessToken
@@ -70,7 +71,7 @@ export const vk = (options: VkOption) => {
clientKey: options.clientKey,
clientSecret: options.clientSecret,
},
- tokenEndpoint: "https://id.vk.com/oauth2/auth",
+ tokenEndpoint,
});
},
async getUserInfo(data) {
diff --git a/packages/core/src/social-providers/wechat.ts b/packages/core/src/social-providers/wechat.ts
new file mode 100644
index 00000000000..8e9681cb2ee
--- /dev/null
+++ b/packages/core/src/social-providers/wechat.ts
@@ -0,0 +1,213 @@
+import { betterFetch } from "@better-fetch/fetch";
+import type { OAuth2Tokens, OAuthProvider, ProviderOptions } from "../oauth2";
+
+/**
+ * WeChat user profile information
+ * @see https://developers.weixin.qq.com/doc/oplatform/en/Website_App/WeChat_Login/Wechat_Login.html
+ */
+export interface WeChatProfile extends Record {
+ /**
+ * User's unique OpenID
+ */
+ openid: string;
+ /**
+ * User's nickname
+ */
+ nickname: string;
+ /**
+ * User's avatar image URL
+ */
+ headimgurl: string;
+ /**
+ * User's privileges
+ */
+ privilege: string[];
+ /**
+ * User's UnionID (unique across the developer's various applications)
+ */
+ unionid?: string;
+ /** @note Email is currently unsupported by WeChat */
+ email?: string;
+}
+
+export interface WeChatOptions extends ProviderOptions {
+ /**
+ * WeChat App ID
+ */
+ clientId: string;
+ /**
+ * WeChat App Secret
+ */
+ clientSecret: string;
+ /**
+ * Platform type for WeChat login
+ * - Currently only supports "WebsiteApp" for WeChat Website Application (网站应用)
+ * @default "WebsiteApp"
+ */
+ platformType?: "WebsiteApp";
+
+ /**
+ * UI language for the WeChat login page
+ * cn for Simplified Chinese, en for English
+ * @default "cn" if left undefined
+ */
+ lang?: "cn" | "en";
+}
+
+export const wechat = (options: WeChatOptions) => {
+ return {
+ id: "wechat",
+ name: "WeChat",
+ createAuthorizationURL({ state, scopes, redirectURI }) {
+ const _scopes = options.disableDefaultScope ? [] : ["snsapi_login"];
+ options.scope && _scopes.push(...options.scope);
+ scopes && _scopes.push(...scopes);
+
+ // WeChat uses non-standard OAuth2 parameters (appid instead of client_id)
+ // and requires a fragment (#wechat_redirect), so we construct the URL manually.
+ const url = new URL("https://open.weixin.qq.com/connect/qrconnect");
+ url.searchParams.set("scope", _scopes.join(","));
+ url.searchParams.set("response_type", "code");
+ url.searchParams.set("appid", options.clientId);
+ url.searchParams.set("redirect_uri", options.redirectURI || redirectURI);
+ url.searchParams.set("state", state);
+ url.searchParams.set("lang", options.lang || "cn");
+ url.hash = "wechat_redirect";
+
+ return url;
+ },
+
+ // WeChat uses non-standard token exchange (appid/secret instead of
+ // client_id/client_secret, GET instead of POST), so shared helpers
+ // like validateAuthorizationCode/getOAuth2Tokens cannot be used directly.
+ validateAuthorizationCode: async ({ code }) => {
+ const params = new URLSearchParams({
+ appid: options.clientId,
+ secret: options.clientSecret,
+ code: code,
+ grant_type: "authorization_code",
+ });
+
+ const { data: tokenData, error } = await betterFetch<{
+ access_token: string;
+ expires_in: number;
+ refresh_token: string;
+ openid: string;
+ scope: string;
+ unionid?: string;
+ errcode?: number;
+ errmsg?: string;
+ }>(
+ "https://api.weixin.qq.com/sns/oauth2/access_token?" +
+ params.toString(),
+ {
+ method: "GET",
+ },
+ );
+
+ if (error || !tokenData || tokenData.errcode) {
+ throw new Error(
+ `Failed to validate authorization code: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
+ );
+ }
+
+ return {
+ tokenType: "Bearer" as const,
+ accessToken: tokenData.access_token,
+ refreshToken: tokenData.refresh_token,
+ accessTokenExpiresAt: new Date(
+ Date.now() + tokenData.expires_in * 1000,
+ ),
+ scopes: tokenData.scope.split(","),
+ // WeChat requires openid for the userinfo endpoint, which is
+ // returned alongside the access token.
+ openid: tokenData.openid,
+ unionid: tokenData.unionid,
+ };
+ },
+
+ refreshAccessToken: options.refreshAccessToken
+ ? options.refreshAccessToken
+ : async (refreshToken) => {
+ const params = new URLSearchParams({
+ appid: options.clientId,
+ grant_type: "refresh_token",
+ refresh_token: refreshToken,
+ });
+
+ const { data: tokenData, error } = await betterFetch<{
+ access_token: string;
+ expires_in: number;
+ refresh_token: string;
+ openid: string;
+ scope: string;
+ errcode?: number;
+ errmsg?: string;
+ }>(
+ "https://api.weixin.qq.com/sns/oauth2/refresh_token?" +
+ params.toString(),
+ {
+ method: "GET",
+ },
+ );
+
+ if (error || !tokenData || tokenData.errcode) {
+ throw new Error(
+ `Failed to refresh access token: ${tokenData?.errmsg || error?.message || "Unknown error"}`,
+ );
+ }
+
+ return {
+ tokenType: "Bearer" as const,
+ accessToken: tokenData.access_token,
+ refreshToken: tokenData.refresh_token,
+ accessTokenExpiresAt: new Date(
+ Date.now() + tokenData.expires_in * 1000,
+ ),
+ scopes: tokenData.scope.split(","),
+ };
+ },
+
+ async getUserInfo(token) {
+ if (options.getUserInfo) {
+ return options.getUserInfo(token);
+ }
+
+ const openid = (token as OAuth2Tokens & { openid?: string }).openid;
+
+ if (!openid) {
+ return null;
+ }
+
+ const params = new URLSearchParams({
+ access_token: token.accessToken || "",
+ openid: openid,
+ lang: "zh_CN",
+ });
+
+ const { data: profile, error } = await betterFetch<
+ WeChatProfile & { errcode?: number; errmsg?: string }
+ >("https://api.weixin.qq.com/sns/userinfo?" + params.toString(), {
+ method: "GET",
+ });
+
+ if (error || !profile || profile.errcode) {
+ return null;
+ }
+
+ const userMap = await options.mapProfileToUser?.(profile);
+ return {
+ user: {
+ id: profile.unionid || profile.openid || openid,
+ name: profile.nickname,
+ email: profile.email || null,
+ image: profile.headimgurl,
+ emailVerified: false,
+ ...userMap,
+ },
+ data: profile,
+ };
+ },
+ options,
+ } satisfies OAuthProvider;
+};
diff --git a/packages/core/src/utils/fetch-metadata.test.ts b/packages/core/src/utils/fetch-metadata.test.ts
new file mode 100644
index 00000000000..c4295bd5fc8
--- /dev/null
+++ b/packages/core/src/utils/fetch-metadata.test.ts
@@ -0,0 +1,28 @@
+import { describe, expect, it } from "vitest";
+import { isBrowserFetchRequest } from "./fetch-metadata";
+
+describe("isBrowserFetchRequest", () => {
+ it("returns true for browser fetch requests", () => {
+ expect(
+ isBrowserFetchRequest(
+ new Headers({
+ "Sec-Fetch-Mode": "cors",
+ }),
+ ),
+ ).toBe(true);
+ });
+
+ it("returns false for navigation requests", () => {
+ expect(
+ isBrowserFetchRequest(
+ new Headers({
+ "Sec-Fetch-Mode": "navigate",
+ }),
+ ),
+ ).toBe(false);
+ });
+
+ it("returns false without fetch metadata", () => {
+ expect(isBrowserFetchRequest()).toBe(false);
+ });
+});
diff --git a/packages/core/src/utils/fetch-metadata.ts b/packages/core/src/utils/fetch-metadata.ts
new file mode 100644
index 00000000000..6c1cfccf946
--- /dev/null
+++ b/packages/core/src/utils/fetch-metadata.ts
@@ -0,0 +1,3 @@
+export function isBrowserFetchRequest(headers?: Headers | null): boolean {
+ return headers?.get("sec-fetch-mode") === "cors";
+}
diff --git a/packages/core/tsdown.config.ts b/packages/core/tsdown.config.ts
index 97821f1e5a3..e9e85247da3 100644
--- a/packages/core/tsdown.config.ts
+++ b/packages/core/tsdown.config.ts
@@ -22,8 +22,11 @@ export default defineConfig({
"./src/utils/*.ts",
"!./src/utils/*.test.ts",
"./src/error/index.ts",
+ "./src/instrumentation/index.ts",
],
- external: ["@better-auth/core/async_hooks"],
+ deps: {
+ neverBundle: ["@better-auth/core/async_hooks"],
+ },
env: {
BETTER_AUTH_VERSION: packageJson.version,
BETTER_AUTH_TELEMETRY_ENDPOINT:
diff --git a/packages/drizzle-adapter/package.json b/packages/drizzle-adapter/package.json
index 64729558bab..b47ecdb7eff 100644
--- a/packages/drizzle-adapter/package.json
+++ b/packages/drizzle-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/drizzle-adapter",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Drizzle adapter for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/electron/package.json b/packages/electron/package.json
index b63480f1cb5..38c79c3475b 100644
--- a/packages/electron/package.json
+++ b/packages/electron/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/electron",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Better Auth integration for Electron applications.",
"type": "module",
"license": "MIT",
diff --git a/packages/electron/src/client.ts b/packages/electron/src/client.ts
index 34994ed8cdc..34e97ba41ac 100644
--- a/packages/electron/src/client.ts
+++ b/packages/electron/src/client.ts
@@ -25,19 +25,37 @@ import {
const { app, safeStorage, webContents } = electron;
-const storageAdapter = (storage: Storage) => {
+const storageAdapter = (storage: Storage, sessionKeys: Set) => {
+ const memory = new Map();
+
return {
...storage,
getDecrypted: (name: string) => {
+ if (sessionKeys.has(name) && memory.has(name)) {
+ return memory.get(name) ?? null;
+ }
+
+ if (!safeStorage.isEncryptionAvailable()) return null;
const item = storage.getItem(name);
if (!item || typeof item !== "string") return null;
- return safeStorage.decryptString(Buffer.from(base64.decode(item)));
+ try {
+ return safeStorage.decryptString(Buffer.from(base64.decode(item)));
+ } catch {
+ return null;
+ }
},
setEncrypted: (name: string, value: string) => {
- return storage.setItem(
- name,
- base64.encode(safeStorage.encryptString(value)),
- );
+ if (!safeStorage.isEncryptionAvailable()) {
+ if (sessionKeys.has(name)) {
+ memory.set(name, value);
+ }
+ return;
+ }
+ try {
+ storage.setItem(name, base64.encode(safeStorage.encryptString(value)));
+ } catch {
+ return;
+ }
},
};
};
@@ -56,7 +74,10 @@ export const electronClient = (options: O) => {
let store: ClientStore | null = null;
const cookieName = `${opts.storagePrefix}.cookie`;
const localCacheName = `${opts.storagePrefix}.local_cache`;
- const { getDecrypted, setEncrypted } = storageAdapter(opts.storage);
+ const { getDecrypted, setEncrypted } = storageAdapter(
+ opts.storage,
+ new Set([cookieName, localCacheName]),
+ );
if (
(isDevelopment() || isTest()) &&
diff --git a/packages/electron/test/electron.test.ts b/packages/electron/test/electron.test.ts
index 718b9079baa..7911ced3d8a 100644
--- a/packages/electron/test/electron.test.ts
+++ b/packages/electron/test/electron.test.ts
@@ -40,6 +40,7 @@ const mockElectron = vi.hoisted(() => {
openExternal: vi.fn(),
},
safeStorage: {
+ isEncryptionAvailable: vi.fn(() => true),
encryptString: vi.fn((str: string) =>
Buffer.from(str).toString("base64"),
),
@@ -77,7 +78,7 @@ const mockElectron = vi.hoisted(() => {
vi.mock("electron", () => mockElectron);
describe("Electron", () => {
- const { auth, client, proxyClient, options } = testUtils();
+ const { auth, client, proxyClient, options, customFetchImpl } = testUtils();
it("should throw error when making requests outside the main process", async ({
setProcessType,
@@ -1023,8 +1024,40 @@ describe("Electron", () => {
});
describe("cookies", () => {
+ async function setupSessionWithTokenExchange() {
+ (globalThis as any)[kElectron] = new Map([
+ ["abc", "test-challenge"],
+ ]);
+ 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,
+ codeChallenge: "test-challenge",
+ codeChallengeMethod: "plain",
+ state: "abc",
+ }),
+ expiresAt: new Date(Date.now() + 300 * 1000),
+ },
+ });
+ await client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: "test-challenge",
+ state: "abc",
+ },
+ });
+ }
+
it("should send cookie and get session", async ({ setProcessType }) => {
setProcessType("browser");
+ await setupSessionWithTokenExchange();
const { data } = await client.getSession();
expect(data).toMatchObject({
@@ -1035,7 +1068,10 @@ describe("Electron", () => {
expect(mockElectron.safeStorage.decryptString).toHaveBeenCalled();
});
- it("should get cookies", async () => {
+ it("should get cookies", async ({ setProcessType }) => {
+ setProcessType("browser");
+ await setupSessionWithTokenExchange();
+
const c = client.getCookie();
expect(c).includes("better-auth.session_token");
});
@@ -1318,13 +1354,9 @@ describe("Electron", () => {
);
});
- it("should surface safeStorage errors during encryption", async ({
- setProcessType,
- }) => {
+ it("should not store when encryption fails", 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",
@@ -1353,22 +1385,136 @@ describe("Electron", () => {
},
});
- // 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", {
+ const result = await client.$fetch("/electron/token", {
+ method: "POST",
+ body: {
+ token: identifier,
+ code_verifier: codeVerifier,
+ state: "abc",
+ },
+ });
+
+ expect((result.data as any)?.user).toMatchObject({
+ email: "safe-storage@test.com",
+ name: "Sage Storage Test",
+ });
+ expect(client.getCookie()).not.toMatch(
+ /better-auth\.session_token=[a-zA-Z0-9_-]{10,}/,
+ );
+ });
+
+ it("should use memory storage when encryption is unavailable", async ({
+ setProcessType,
+ }) => {
+ setProcessType("browser");
+ mockElectron.safeStorage.isEncryptionAvailable.mockReturnValue(false);
+ try {
+ const memoryFallbackStorage = new Map();
+ const clientWithStorage = createAuthClient({
+ baseURL: "http://localhost:3000",
+ fetchOptions: { customFetchImpl },
+ plugins: [
+ electronClient({
+ ...options,
+ storage: {
+ getItem: (name) => memoryFallbackStorage.get(name) ?? null,
+ setItem: (name, value) => {
+ memoryFallbackStorage.set(name, value);
+ },
+ },
+ }),
+ ],
+ });
+
+ const { user } = await auth.api.signUpEmail({
+ body: {
+ name: "Memory Storage Test",
+ email: "memory-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),
+ },
+ });
+
+ const result = await clientWithStorage.$fetch("/electron/token", {
method: "POST",
body: {
token: identifier,
code_verifier: codeVerifier,
state: "abc",
},
- }),
- ).rejects.toThrow("encryption failed");
+ });
+
+ expect((result.data as any)?.user).toMatchObject({
+ email: "memory-storage@test.com",
+ name: "Memory Storage Test",
+ });
+ expect(clientWithStorage.getCookie()).toContain(
+ "better-auth.session_token=",
+ );
+ expect(memoryFallbackStorage.has("better-auth.cookie")).toBe(false);
+ } finally {
+ mockElectron.safeStorage.isEncryptionAvailable.mockReturnValue(true);
+ }
+ });
+
+ it("should return null on decrypt failure", async ({ setProcessType }) => {
+ setProcessType("browser");
+
+ const cookieStorage = new Map([
+ [
+ "better-auth.cookie",
+ Buffer.from('{"session":"old"}').toString("base64"),
+ ],
+ ]);
+ const clientWithStorage = createAuthClient({
+ baseURL: "http://localhost:3000",
+ fetchOptions: { customFetchImpl },
+ plugins: [
+ electronClient({
+ ...options,
+ storage: {
+ getItem: (name) => cookieStorage.get(name) ?? null,
+ setItem: (name, value) => {
+ cookieStorage.set(name, value);
+ return true;
+ },
+ },
+ }),
+ ],
+ });
+
+ mockElectron.safeStorage.decryptString.mockImplementationOnce(() => {
+ throw new Error(
+ "Error while decrypting the ciphertext provided to safeStorage.decryptString.",
+ );
+ });
+
+ // getCookie() uses getDecrypted internally
+ const cookie = clientWithStorage.getCookie();
+ expect(cookie).toBe("");
});
it("should quit when single instance lock not acquired", async ({
diff --git a/packages/electron/test/utils.ts b/packages/electron/test/utils.ts
index e6c759b2158..94cd97f809e 100644
--- a/packages/electron/test/utils.ts
+++ b/packages/electron/test/utils.ts
@@ -8,7 +8,7 @@ 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 { afterAll, afterEach, beforeAll, test, vi } from "vitest";
import { electronClient } from "../src/client";
import { electron } from "../src/index";
import { electronProxyClient } from "../src/proxy";
@@ -109,6 +109,7 @@ function getTestInstance(overrideOpts?: BetterAuthOptions) {
client,
options,
customFetchImpl,
+ storage,
};
}
@@ -120,6 +121,9 @@ export function testUtils(overrideOpts?: BetterAuthOptions) {
await runMigrations();
vi.useFakeTimers();
});
+ afterEach(() => {
+ testInstance.storage.clear();
+ });
afterAll(() => {
vi.useRealTimers();
});
diff --git a/packages/electron/tsdown.config.ts b/packages/electron/tsdown.config.ts
index 42dc3fd1dbe..607eb3e1bbd 100644
--- a/packages/electron/tsdown.config.ts
+++ b/packages/electron/tsdown.config.ts
@@ -10,23 +10,32 @@ export default defineConfig([
"./src/proxy.ts",
"./src/storage.ts",
],
- external: ["better-auth", "better-call", "@better-fetch/fetch", "electron"],
+ deps: {
+ neverBundle: [
+ "better-auth",
+ "better-call",
+ "@better-fetch/fetch",
+ "electron",
+ ],
+ },
treeshake: true,
},
{
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/preload.ts"],
- external: (id, _, isResolved) => {
- if (isResolved) return false;
- return (
- !id.startsWith(".") &&
- !id.startsWith("better-call") &&
- !id.startsWith("@better-auth/core")
- );
+ deps: {
+ neverBundle: (id, _, isResolved) => {
+ if (isResolved) return false;
+ return (
+ !id.startsWith(".") &&
+ !id.startsWith("better-call") &&
+ !id.startsWith("@better-auth/core")
+ );
+ },
+ alwaysBundle: [/^@better-auth\/core/, /^better-call/],
+ onlyAllowBundle: ["better-call", "@standard-schema/spec"],
},
- noExternal: [/^@better-auth\/core/, /^better-call/],
- inlineOnly: ["better-call", "@standard-schema/spec"],
treeshake: true,
},
]);
diff --git a/packages/expo/package.json b/packages/expo/package.json
index c3b543fc74b..b77f0bd8776 100644
--- a/packages/expo/package.json
+++ b/packages/expo/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/expo",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Better Auth integration for Expo and React Native applications.",
"type": "module",
"license": "MIT",
diff --git a/packages/expo/tsdown.config.ts b/packages/expo/tsdown.config.ts
index a44883fa000..9c9d726884e 100644
--- a/packages/expo/tsdown.config.ts
+++ b/packages/expo/tsdown.config.ts
@@ -4,15 +4,17 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts", "./src/plugins/index.ts"],
- external: [
- "better-auth",
- "better-call",
- "@better-fetch/fetch",
- "react-native",
- "expo-web-browser",
- "expo-linking",
- "expo-constants",
- ],
+ deps: {
+ neverBundle: [
+ "better-auth",
+ "better-call",
+ "@better-fetch/fetch",
+ "react-native",
+ "expo-web-browser",
+ "expo-linking",
+ "expo-constants",
+ ],
+ },
platform: "neutral",
sourcemap: true,
treeshake: true,
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 9513d1fe203..06ba0d9f987 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/i18n",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "i18n plugin for Better Auth - translate error messages",
"type": "module",
"license": "MIT",
diff --git a/packages/i18n/tsdown.config.ts b/packages/i18n/tsdown.config.ts
index e254acf9196..cc70b8cdddd 100644
--- a/packages/i18n/tsdown.config.ts
+++ b/packages/i18n/tsdown.config.ts
@@ -4,7 +4,9 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts"],
- external: ["@better-auth/core", "better-auth"],
+ deps: {
+ neverBundle: ["@better-auth/core", "better-auth"],
+ },
sourcemap: true,
treeshake: true,
});
diff --git a/packages/kysely-adapter/package.json b/packages/kysely-adapter/package.json
index ca5ba229c7f..5ef9d89b6d0 100644
--- a/packages/kysely-adapter/package.json
+++ b/packages/kysely-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/kysely-adapter",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Kysely adapter for Better Auth",
"type": "module",
"license": "MIT",
@@ -51,6 +51,11 @@
"@better-auth/utils": "^0.3.0",
"kysely": "^0.27.0 || ^0.28.0"
},
+ "peerDependenciesMeta": {
+ "kysely": {
+ "optional": true
+ }
+ },
"devDependencies": {
"@cloudflare/workers-types": "^4.20250121.0",
"@better-auth/core": "workspace:*",
diff --git a/packages/memory-adapter/package.json b/packages/memory-adapter/package.json
index e7b662998ae..af019634a6e 100644
--- a/packages/memory-adapter/package.json
+++ b/packages/memory-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/memory-adapter",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Memory adapter for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/mongo-adapter/package.json b/packages/mongo-adapter/package.json
index 749f53e6d4e..7a91fd0d4fc 100644
--- a/packages/mongo-adapter/package.json
+++ b/packages/mongo-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/mongo-adapter",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Mongo adapter for Better Auth",
"type": "module",
"license": "MIT",
@@ -46,6 +46,11 @@
"@better-auth/utils": "^0.3.0",
"mongodb": "^6.0.0 || ^7.0.0"
},
+ "peerDependenciesMeta": {
+ "mongodb": {
+ "optional": true
+ }
+ },
"devDependencies": {
"@better-auth/core": "workspace:*",
"@better-auth/utils": "^0.3.1",
diff --git a/packages/mongo-adapter/src/mongodb-adapter.test.ts b/packages/mongo-adapter/src/mongodb-adapter.test.ts
index 96505229af6..1de804824a4 100644
--- a/packages/mongo-adapter/src/mongodb-adapter.test.ts
+++ b/packages/mongo-adapter/src/mongodb-adapter.test.ts
@@ -1,3 +1,4 @@
+import { ObjectId, UUID } from "mongodb";
import { describe, expect, it, vi } from "vitest";
import { mongodbAdapter } from "./mongodb-adapter";
@@ -10,3 +11,142 @@ describe("mongodb-adapter", () => {
expect(adapter).toBeDefined();
});
});
+
+describe("uuid support", () => {
+ const uuidRegex =
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+ const uuid = "550e8400-e29b-41d4-a716-446655440000";
+
+ function createMockDb() {
+ const insertedDocs: any[] = [];
+ const updatedFilters: any[] = [];
+ const updatedValues: any[] = [];
+
+ const collection = vi.fn(() => ({
+ insertOne: vi.fn(async (doc: any) => {
+ insertedDocs.push(doc);
+ return { insertedId: doc._id };
+ }),
+ aggregate: vi.fn(() => ({
+ toArray: vi.fn(async () => {
+ return [];
+ }),
+ })),
+ findOneAndUpdate: vi.fn(async (filter: any, update: any) => {
+ updatedFilters.push(filter);
+ updatedValues.push(update);
+ return { value: { ...update.$set, _id: filter._id } };
+ }),
+ deleteOne: vi.fn(async () => {}),
+ }));
+
+ return {
+ db: { collection } as any,
+ insertedDocs,
+ updatedFilters,
+ updatedValues,
+ };
+ }
+
+ function createAdapter(
+ db: any,
+ generateId: "uuid" | (() => string) | undefined,
+ ) {
+ const adapterFactory = mongodbAdapter(db, { transaction: false });
+ return adapterFactory({
+ database: {} as any,
+ advanced: {
+ database: {
+ ...(generateId !== undefined ? { generateId } : {}),
+ },
+ },
+ } as any);
+ }
+
+ it("should store _id as BSON UUID when generateId is 'uuid'", async () => {
+ const { db, insertedDocs } = createMockDb();
+ const adapter = createAdapter(db, "uuid");
+
+ await adapter.create({
+ model: "user",
+ data: {
+ name: "Test",
+ email: "test@test.com",
+ emailVerified: true,
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ },
+ });
+
+ expect(insertedDocs.length).toBe(1);
+ expect(insertedDocs[0]._id).toBeInstanceOf(UUID);
+ expect(insertedDocs[0]._id.toString()).toMatch(uuidRegex);
+ });
+
+ it("should store FK fields as BSON UUID when generateId is 'uuid'", async () => {
+ const { db, insertedDocs } = createMockDb();
+ const adapter = createAdapter(db, "uuid");
+
+ await adapter.create({
+ model: "session",
+ data: {
+ userId: uuid,
+ token: "test-token",
+ expiresAt: new Date(),
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ },
+ });
+
+ expect(insertedDocs.length).toBe(1);
+ expect(insertedDocs[0]._id).toBeInstanceOf(UUID);
+ expect(insertedDocs[0].userId).toBeInstanceOf(UUID);
+ expect(insertedDocs[0].userId.toString()).toBe(uuid);
+ });
+
+ it("should store _id as ObjectId when generateId is not set", async () => {
+ const { db, insertedDocs } = createMockDb();
+ const adapter = createAdapter(db, undefined);
+
+ await adapter.create({
+ model: "user",
+ data: {
+ name: "Test",
+ email: "test@test.com",
+ emailVerified: true,
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ },
+ });
+
+ expect(insertedDocs.length).toBe(1);
+ expect(insertedDocs[0]._id).toBeInstanceOf(ObjectId);
+ });
+
+ it("should convert BSON UUID to string in output", async () => {
+ const bsonUuid = new UUID(uuid);
+ const { db } = createMockDb();
+
+ // Override aggregate to return a document with BSON UUID
+ (db.collection as any).mockReturnValue({
+ aggregate: vi.fn(() => ({
+ toArray: vi.fn(async () => [
+ {
+ _id: bsonUuid,
+ name: "Test",
+ email: "test@test.com",
+ },
+ ]),
+ })),
+ });
+
+ const adapter = createAdapter(db, "uuid");
+ const result = await adapter.findOne({
+ model: "user",
+ where: [{ field: "id", value: uuid }],
+ });
+
+ expect(result).not.toBeNull();
+ expect((result as Record).id).toBe(uuid);
+ });
+});
diff --git a/packages/mongo-adapter/src/mongodb-adapter.ts b/packages/mongo-adapter/src/mongodb-adapter.ts
index 0fcc95962f8..18cf00ae63e 100644
--- a/packages/mongo-adapter/src/mongodb-adapter.ts
+++ b/packages/mongo-adapter/src/mongodb-adapter.ts
@@ -8,7 +8,7 @@ import type {
} from "@better-auth/core/db/adapter";
import { createAdapterFactory } from "@better-auth/core/db/adapter";
import type { ClientSession, Db, MongoClient } from "mongodb";
-import { ObjectId } from "mongodb";
+import { ObjectId, UUID } from "mongodb";
class MongoAdapterError extends Error {
constructor(
@@ -77,6 +77,17 @@ export const mongodbAdapter = (
options,
}) => {
const customIdGen = getCustomIdGenerator(options);
+ const useUUIDs = options.advanced?.database?.generateId === "uuid";
+
+ function coerceToIdType(value: string): ObjectId | UUID {
+ if (useUUIDs) return new UUID(value);
+ return new ObjectId(value);
+ }
+
+ function isIdInstance(value: unknown): value is ObjectId | UUID {
+ if (useUUIDs) return value instanceof UUID;
+ return value instanceof ObjectId;
+ }
function serializeID({
field,
@@ -100,7 +111,7 @@ export const mongodbAdapter = (
return value;
}
if (typeof value !== "string") {
- if (value instanceof ObjectId) {
+ if (isIdInstance(value)) {
return value;
}
if (Array.isArray(value)) {
@@ -110,12 +121,12 @@ export const mongodbAdapter = (
}
if (typeof v === "string") {
try {
- return new ObjectId(v);
+ return coerceToIdType(v);
} catch {
return v;
}
}
- if (v instanceof ObjectId) {
+ if (isIdInstance(v)) {
return v;
}
throw new MongoAdapterError("INVALID_ID", "Invalid id value");
@@ -124,7 +135,7 @@ export const mongodbAdapter = (
throw new MongoAdapterError("INVALID_ID", "Invalid id value");
}
try {
- return new ObjectId(value);
+ return coerceToIdType(value);
} catch {
return value;
}
@@ -635,15 +646,16 @@ export const mongodbAdapter = (
if (action !== "create" && action !== "update") {
return data;
}
- if (data instanceof ObjectId) {
+ const IdClass =
+ options.advanced?.database?.generateId === "uuid" ? UUID : ObjectId;
+ if (data instanceof IdClass) {
return data;
}
if (Array.isArray(data)) {
return data.map((v) => {
if (typeof v === "string") {
try {
- const oid = new ObjectId(v);
- return oid;
+ return new IdClass(v);
} catch {
return v;
}
@@ -653,8 +665,7 @@ export const mongodbAdapter = (
}
if (typeof data === "string") {
try {
- const oid = new ObjectId(data);
- return oid;
+ return new IdClass(data);
} catch {
return data;
}
@@ -669,18 +680,23 @@ export const mongodbAdapter = (
if (action === "update") {
return data;
}
- const oid = new ObjectId();
- return oid;
+ return new IdClass();
}
return data;
},
customTransformOutput({ data, field, fieldAttributes }) {
if (field === "id" || fieldAttributes.references?.field === "id") {
+ if (data instanceof UUID) {
+ return data.toString();
+ }
if (data instanceof ObjectId) {
return data.toHexString();
}
if (Array.isArray(data)) {
return data.map((v) => {
+ if (v instanceof UUID) {
+ return v.toString();
+ }
if (v instanceof ObjectId) {
return v.toHexString();
}
diff --git a/packages/oauth-provider/package.json b/packages/oauth-provider/package.json
index bec977286ec..57ec1b8e32b 100644
--- a/packages/oauth-provider/package.json
+++ b/packages/oauth-provider/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/oauth-provider",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "An oauth provider plugin for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/oauth-provider/src/authorize.test.ts b/packages/oauth-provider/src/authorize.test.ts
index 218b86ad047..d0cb415b196 100644
--- a/packages/oauth-provider/src/authorize.test.ts
+++ b/packages/oauth-provider/src/authorize.test.ts
@@ -148,6 +148,37 @@ describe("oauth authorize - unauthenticated", async () => {
`redirect_uri=${encodeURIComponent(redirectUri)}`,
);
});
+
+ it("should return login_required when prompt=none and user is not logged in", async () => {
+ if (!oauthClient?.client_id) {
+ throw Error("beforeAll not run properly");
+ }
+
+ const authUrl = new URL(`${authServerBaseUrl}/api/auth/oauth2/authorize`);
+ authUrl.searchParams.set("client_id", oauthClient.client_id);
+ authUrl.searchParams.set("redirect_uri", redirectUri);
+ authUrl.searchParams.set("response_type", "code");
+ authUrl.searchParams.set("scope", "openid");
+ authUrl.searchParams.set("state", "prompt-none-login-required");
+ authUrl.searchParams.set("prompt", "none");
+ authUrl.searchParams.set("code_challenge", generateRandomString(43));
+ authUrl.searchParams.set("code_challenge_method", "S256");
+
+ let callbackRedirectUrl = "";
+ await unauthenticatedClient.$fetch(authUrl.toString(), {
+ onError(context) {
+ callbackRedirectUrl = context.response.headers.get("Location") || "";
+ },
+ });
+
+ expect(callbackRedirectUrl).toContain(redirectUri);
+ expect(callbackRedirectUrl).toContain("error=login_required");
+ expect(callbackRedirectUrl).toContain("state=prompt-none-login-required");
+ expect(callbackRedirectUrl).toContain(
+ `iss=${encodeURIComponent(authServerBaseUrl)}`,
+ );
+ expect(callbackRedirectUrl).not.toContain("/login");
+ });
});
describe("oauth authorize - authenticated", async () => {
@@ -179,6 +210,7 @@ describe("oauth authorize - authenticated", async () => {
});
let oauthClient: OAuthClient | null;
+ let oauthClientNeedsConsent: OAuthClient | null;
const providerId = "test";
const redirectUri = `${rpBaseUrl}/api/auth/oauth2/callback/${providerId}`;
// Registers a confidential client application to work with
@@ -195,6 +227,19 @@ describe("oauth authorize - authenticated", async () => {
expect(response?.client_secret).toBeDefined();
expect(response?.redirect_uris).toEqual([redirectUri]);
oauthClient = response;
+
+ const responseNeedsConsent = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUri],
+ skip_consent: false,
+ },
+ });
+ expect(responseNeedsConsent?.client_id).toBeDefined();
+ expect(responseNeedsConsent?.user_id).toBeDefined();
+ expect(responseNeedsConsent?.client_secret).toBeDefined();
+ expect(responseNeedsConsent?.redirect_uris).toEqual([redirectUri]);
+ oauthClientNeedsConsent = responseNeedsConsent;
});
it("should authorize and include iss parameter", async () => {
@@ -292,4 +337,35 @@ describe("oauth authorize - authenticated", async () => {
expect(issParam).toBe(metadataIssuer);
});
+
+ it("should return consent_required when prompt=none and consent is needed", async () => {
+ if (!oauthClientNeedsConsent?.client_id) {
+ throw Error("beforeAll not run properly");
+ }
+
+ const authUrl = new URL(`${authServerBaseUrl}/api/auth/oauth2/authorize`);
+ authUrl.searchParams.set("client_id", oauthClientNeedsConsent.client_id);
+ authUrl.searchParams.set("redirect_uri", redirectUri);
+ authUrl.searchParams.set("response_type", "code");
+ authUrl.searchParams.set("scope", "openid");
+ authUrl.searchParams.set("state", "prompt-none-consent-required");
+ authUrl.searchParams.set("prompt", "none");
+ authUrl.searchParams.set("code_challenge", generateRandomString(43));
+ authUrl.searchParams.set("code_challenge_method", "S256");
+
+ let callbackRedirectUrl = "";
+ await client.$fetch(authUrl.toString(), {
+ onError(context) {
+ callbackRedirectUrl = context.response.headers.get("Location") || "";
+ },
+ });
+
+ expect(callbackRedirectUrl).toContain(redirectUri);
+ expect(callbackRedirectUrl).toContain("error=consent_required");
+ expect(callbackRedirectUrl).toContain("state=prompt-none-consent-required");
+ expect(callbackRedirectUrl).toContain(
+ `iss=${encodeURIComponent(authServerBaseUrl)}`,
+ );
+ expect(callbackRedirectUrl).not.toContain("/consent");
+ });
});
diff --git a/packages/oauth-provider/src/authorize.ts b/packages/oauth-provider/src/authorize.ts
index 33370609f92..a6e1d896ff9 100644
--- a/packages/oauth-provider/src/authorize.ts
+++ b/packages/oauth-provider/src/authorize.ts
@@ -1,4 +1,5 @@
import type { GenericEndpointContext } from "@better-auth/core";
+import { isBrowserFetchRequest } from "@better-auth/core/utils/fetch-metadata";
import { getSessionFromCtx } from "better-auth/api";
import { generateRandomString, makeSignature } from "better-auth/crypto";
import type { Verification } from "better-auth/db";
@@ -20,6 +21,16 @@ import {
storeToken,
} from "./utils";
+/**
+ * OIDC Error Codes
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError
+ */
+type OIDCAuthError =
+ | "login_required"
+ | "consent_required"
+ | "interaction_required"
+ | "account_selection_required";
+
/**
* Formats an error url
*/
@@ -40,8 +51,9 @@ export function formatErrorURL(
}
export const handleRedirect = (ctx: GenericEndpointContext, uri: string) => {
+ const fromFetch = isBrowserFetchRequest(ctx.request?.headers);
const acceptJson = ctx.headers?.get("accept")?.includes("application/json");
- if (acceptJson) {
+ if (fromFetch || acceptJson) {
return {
redirect: true,
url: uri.toString(),
@@ -51,6 +63,25 @@ export const handleRedirect = (ctx: GenericEndpointContext, uri: string) => {
}
};
+function redirectWithPromptNoneError(
+ ctx: GenericEndpointContext,
+ opts: OAuthOptions,
+ query: OAuthAuthorizationQuery,
+ error: OIDCAuthError,
+ description: string,
+) {
+ return handleRedirect(
+ ctx,
+ formatErrorURL(
+ query.redirect_uri,
+ error,
+ description,
+ query.state,
+ getIssuer(ctx, opts),
+ ),
+ );
+}
+
/**
* Validates that the issuer URL
* - MUST use HTTPS scheme (HTTP allowed for localhost in dev)
@@ -158,6 +189,7 @@ export async function authorizeEndpoint(
const promptSet = ctx.query?.prompt
? parsePrompt(ctx.query?.prompt)
: undefined;
+ const promptNone = promptSet?.has("none") ?? false;
if (promptSet?.has("select_account") && !opts.selectAccount?.page) {
throw ctx.redirect(
getErrorURL(
@@ -276,6 +308,15 @@ export async function authorizeEndpoint(
// Check for session
const session = await getSessionFromCtx(ctx);
if (!session || promptSet?.has("login") || promptSet?.has("create")) {
+ if (promptNone) {
+ return redirectWithPromptNoneError(
+ ctx,
+ opts,
+ query,
+ "login_required",
+ "authentication required",
+ );
+ }
return redirectWithPromptCode(
ctx,
opts,
@@ -300,6 +341,15 @@ export async function authorizeEndpoint(
scopes: requestedScopes,
});
if (selectedAccountRedirect) {
+ if (promptNone) {
+ return redirectWithPromptNoneError(
+ ctx,
+ opts,
+ query,
+ "account_selection_required",
+ "End-User account selection is required",
+ );
+ }
return redirectWithPromptCode(ctx, opts, "select_account");
}
}
@@ -313,6 +363,15 @@ export async function authorizeEndpoint(
scopes: requestedScopes,
});
if (signupRedirect) {
+ if (promptNone) {
+ return redirectWithPromptNoneError(
+ ctx,
+ opts,
+ query,
+ "interaction_required",
+ "End-User interaction is required",
+ );
+ }
return redirectWithPromptCode(
ctx,
opts,
@@ -330,6 +389,15 @@ export async function authorizeEndpoint(
scopes: requestedScopes,
});
if (postLoginRedirect) {
+ if (promptNone) {
+ return redirectWithPromptNoneError(
+ ctx,
+ opts,
+ query,
+ "interaction_required",
+ "End-User interaction is required",
+ );
+ }
return redirectWithPromptCode(ctx, opts, "post_login");
}
}
@@ -382,6 +450,15 @@ export async function authorizeEndpoint(
!consent ||
!requestedScopes.every((val) => consent.scopes.includes(val))
) {
+ if (promptNone) {
+ return redirectWithPromptNoneError(
+ ctx,
+ opts,
+ query,
+ "consent_required",
+ "End-User consent is required",
+ );
+ }
return redirectWithPromptCode(ctx, opts, "consent");
}
diff --git a/packages/oauth-provider/src/client.ts b/packages/oauth-provider/src/client.ts
index b5278e5fca6..ad95e59c2f4 100644
--- a/packages/oauth-provider/src/client.ts
+++ b/packages/oauth-provider/src/client.ts
@@ -33,24 +33,14 @@ export const oauthProviderClient = () => {
: safeJSONParse>(ctx.body ?? "{}")
: ctx.body;
if (body?.oauth_query) return;
- const pathname =
- typeof ctx.url === "string"
- ? new URL(ctx.url).pathname
- : ctx.url.pathname;
- // Should only need to run for /sign-in/email, /sign-in/social, /sign-in/oauth2, /oauth2/consent, /oauth2/continue
if (
- pathname.endsWith("/sign-in/email") ||
- pathname.endsWith("/sign-in/social") ||
- pathname.endsWith("/sign-in/oauth2") ||
- pathname.endsWith("/oauth2/consent") ||
- pathname.endsWith("/oauth2/continue")
+ typeof window !== "undefined" &&
+ window?.location?.search &&
+ !(ctx.method === "GET" || ctx.method === "DELETE")
) {
ctx.body = JSON.stringify({
...body,
- oauth_query:
- typeof window !== "undefined"
- ? parseSignedQuery(window?.location?.search)
- : undefined,
+ oauth_query: parseSignedQuery(window.location.search),
});
}
},
diff --git a/packages/oauth-provider/src/introspect.ts b/packages/oauth-provider/src/introspect.ts
index 491904ff566..5683d33a40e 100644
--- a/packages/oauth-provider/src/introspect.ts
+++ b/packages/oauth-provider/src/introspect.ts
@@ -18,6 +18,7 @@ import {
getJwtPlugin,
getStoredToken,
parseClientMetadata,
+ resolveSubjectIdentifier,
validateClientCredentials,
} from "./utils";
@@ -371,6 +372,27 @@ export async function validateAccessToken(
});
}
+/**
+ * Resolves pairwise sub on an introspection payload.
+ * Applied at the presentation layer so internal validation functions
+ * keep real user.id (needed for user lookup in /userinfo).
+ */
+async function resolveIntrospectionSub(
+ opts: OAuthOptions,
+ payload: JWTPayload,
+ client: SchemaClient,
+): Promise {
+ if (payload.active && payload.sub) {
+ const resolvedSub = await resolveSubjectIdentifier(
+ payload.sub as string,
+ client,
+ opts,
+ );
+ return { ...payload, sub: resolvedSub };
+ }
+ return payload;
+}
+
export async function introspectEndpoint(
ctx: GenericEndpointContext,
opts: OAuthOptions,
@@ -429,7 +451,7 @@ export async function introspectEndpoint(
token,
client.clientId,
);
- return payload;
+ return resolveIntrospectionSub(opts, payload, client);
} catch (error) {
if (error instanceof APIError) {
if (token_type_hint === "access_token") {
@@ -452,7 +474,7 @@ export async function introspectEndpoint(
refreshToken.token,
client.clientId,
);
- return payload;
+ return resolveIntrospectionSub(opts, payload, client);
} catch (error) {
if (error instanceof APIError) {
if (token_type_hint === "refresh_token") {
diff --git a/packages/oauth-provider/src/metadata.test.ts b/packages/oauth-provider/src/metadata.test.ts
index 8c0f2533d9c..69ecc28cbe6 100644
--- a/packages/oauth-provider/src/metadata.test.ts
+++ b/packages/oauth-provider/src/metadata.test.ts
@@ -107,7 +107,13 @@ describe("oauth metadata", async () => {
id_token_signing_alg_values_supported: ["EdDSA"],
end_session_endpoint: `${baseURL}/oauth2/end-session`,
acr_values_supported: ["urn:mace:incommon:iap:bronze"],
- prompt_values_supported: ["login", "consent", "create", "select_account"],
+ prompt_values_supported: [
+ "login",
+ "consent",
+ "create",
+ "select_account",
+ "none",
+ ],
});
const oauthMetadata = await auth.api.getOAuthServerConfig();
expect(oauthMetadata).toMatchObject(metadata ?? {});
diff --git a/packages/oauth-provider/src/metadata.ts b/packages/oauth-provider/src/metadata.ts
index 50d7ab48862..37eab3dc3dd 100644
--- a/packages/oauth-provider/src/metadata.ts
+++ b/packages/oauth-provider/src/metadata.ts
@@ -89,7 +89,9 @@ export function oidcServerMetadata(
claims_supported:
opts?.advertisedMetadata?.claims_supported ?? opts?.claims ?? [],
userinfo_endpoint: `${baseURL}/oauth2/userinfo`,
- subject_types_supported: ["public"],
+ subject_types_supported: opts.pairwiseSecret
+ ? ["public", "pairwise"]
+ : ["public"],
id_token_signing_alg_values_supported: jwtPluginOptions?.jwks?.keyPairConfig
?.alg
? [jwtPluginOptions?.jwks?.keyPairConfig?.alg]
@@ -98,7 +100,13 @@ export function oidcServerMetadata(
: ["EdDSA"],
end_session_endpoint: `${baseURL}/oauth2/end-session`,
acr_values_supported: ["urn:mace:incommon:iap:bronze"],
- prompt_values_supported: ["login", "consent", "create", "select_account"],
+ prompt_values_supported: [
+ "login",
+ "consent",
+ "create",
+ "select_account",
+ "none",
+ ],
};
return metadata;
}
diff --git a/packages/oauth-provider/src/middleware/index.ts b/packages/oauth-provider/src/middleware/index.ts
new file mode 100644
index 00000000000..eb25d596621
--- /dev/null
+++ b/packages/oauth-provider/src/middleware/index.ts
@@ -0,0 +1,17 @@
+import { APIError, createAuthMiddleware } from "better-auth/api";
+import type { OAuthOptions, Scope } from "../types";
+import { verifyOAuthQueryParams } from "../utils";
+
+export const publicSessionMiddleware = (opts: OAuthOptions) =>
+ createAuthMiddleware(async (ctx) => {
+ if (!opts.allowPublicClientPrelogin) {
+ throw new APIError("BAD_REQUEST");
+ }
+ const query = ctx.body.oauth_query;
+ const isValid = await verifyOAuthQueryParams(query, ctx.context.secret);
+ if (!isValid) {
+ throw new APIError("UNAUTHORIZED", {
+ error: "invalid_signature",
+ });
+ }
+ });
diff --git a/packages/oauth-provider/src/oauth.test.ts b/packages/oauth-provider/src/oauth.test.ts
index 70763547fbe..1a64b059176 100644
--- a/packages/oauth-provider/src/oauth.test.ts
+++ b/packages/oauth-provider/src/oauth.test.ts
@@ -285,6 +285,78 @@ describe("oauth", async () => {
expect(callbackUrl).toContain("/success");
});
+ it("should return a JSON redirect after email sign-in in a fetch-based oauth flow", async ({
+ onTestFinished,
+ }) => {
+ if (!oauthClient?.client_id || !oauthClient?.client_secret) {
+ throw Error("beforeAll not run properly");
+ }
+
+ const { customFetchImpl: customFetchImplRP } = await createTestInstance();
+
+ const client = createAuthClient({
+ plugins: [genericOAuthClient()],
+ baseURL: rpBaseUrl,
+ fetchOptions: {
+ customFetchImpl: customFetchImplRP,
+ },
+ });
+ const headers = new Headers();
+ const data = await client.signIn.oauth2(
+ {
+ providerId,
+ callbackURL: "/success",
+ },
+ {
+ throw: true,
+ onSuccess: cookieSetter(headers),
+ },
+ );
+
+ let loginRedirectUri = "";
+ await authClient.$fetch(data.url, {
+ method: "GET",
+ onError(ctx) {
+ loginRedirectUri = ctx.response.headers.get("Location") || "";
+ },
+ });
+ expect(loginRedirectUri).toContain("/login");
+
+ vi.stubGlobal("window", {
+ location: {
+ href: "",
+ search: new URL(loginRedirectUri, authServerBaseUrl).search,
+ },
+ });
+ onTestFinished(() => {
+ vi.unstubAllGlobals();
+ });
+
+ let signInLocationHeader = "";
+ const signInResponse = await authClient.signIn.email(
+ {
+ email: testUser.email,
+ password: testUser.password,
+ },
+ {
+ headers: {
+ "Sec-Fetch-Mode": "cors",
+ },
+ throw: true,
+ onResponse(ctx) {
+ signInLocationHeader = ctx.response.headers.get("Location") || "";
+ },
+ },
+ );
+
+ expect(signInLocationHeader).toBe("");
+ expect(signInResponse.redirect).toBe(true);
+ expect(signInResponse.url).toContain(
+ `${rpBaseUrl}/api/auth/oauth2/callback/${providerId}`,
+ );
+ expect(signInResponse.url).not.toContain(`${authServerBaseUrl}/login`);
+ });
+
it("should sign in using generic oauth discovery", async ({
onTestFinished,
}) => {
@@ -375,6 +447,7 @@ describe("oauth - prompt", async () => {
const scopes = ["openid", "profile", "email", "offline_access", "read:posts"];
let enableSelectAccount = false;
let enablePostLogin = false;
+ let selectedPostLogin = false;
let isUserRegistered = true;
const {
auth: authorizationServer,
@@ -409,10 +482,12 @@ describe("oauth - prompt", async () => {
page: "/select-organization",
shouldRedirect({ session }) {
if (!enablePostLogin) return false;
+ if (selectedPostLogin) return false;
return !session?.activeOrganizationId;
},
consentReferenceId({ session }) {
if (!enablePostLogin) return undefined;
+ if (selectedPostLogin) return undefined;
const activeOrganizationId = (session?.activeOrganizationId ??
undefined) as string | undefined;
if (!activeOrganizationId)
@@ -1092,6 +1167,109 @@ describe("oauth - prompt", async () => {
enableSelectAccount = false;
});
+ it("none - should return account_selection_required when account selection is required", async () => {
+ if (!oauthClient?.client_id || !oauthClient?.client_secret) {
+ throw Error("beforeAll not run properly");
+ }
+
+ enableSelectAccount = true;
+ try {
+ const { customFetchImpl: customFetchImplRP } = await createTestInstance({
+ prompt: "none",
+ });
+ const client = createAuthClient({
+ plugins: [genericOAuthClient()],
+ baseURL: rpBaseUrl,
+ fetchOptions: {
+ customFetchImpl: customFetchImplRP,
+ },
+ });
+
+ const data = await client.signIn.oauth2(
+ {
+ providerId,
+ callbackURL: "/success",
+ },
+ {
+ headers,
+ throw: true,
+ },
+ );
+ expect(data.url).toContain(`prompt=none`);
+
+ let callbackRedirectUri = "";
+ await serverClient.$fetch(data.url, {
+ method: "GET",
+ headers,
+ onError(context) {
+ callbackRedirectUri = context.response.headers.get("Location") || "";
+ },
+ });
+
+ expect(callbackRedirectUri).toContain(redirectUri);
+ expect(callbackRedirectUri).toContain("error=account_selection_required");
+ expect(callbackRedirectUri).toContain("state=");
+ expect(callbackRedirectUri).toContain(
+ `iss=${encodeURIComponent(authServerBaseUrl)}`,
+ );
+ expect(callbackRedirectUri).not.toContain("/select-account");
+ } finally {
+ enableSelectAccount = false;
+ }
+ });
+
+ it("none - should return interaction_required when post login is required", async () => {
+ if (!oauthClient?.client_id || !oauthClient?.client_secret) {
+ throw Error("beforeAll not run properly");
+ }
+
+ enableSelectAccount = false;
+ enablePostLogin = true;
+ try {
+ const { customFetchImpl: customFetchImplRP } = await createTestInstance({
+ prompt: "none",
+ });
+ const client = createAuthClient({
+ plugins: [genericOAuthClient()],
+ baseURL: rpBaseUrl,
+ fetchOptions: {
+ customFetchImpl: customFetchImplRP,
+ },
+ });
+
+ const data = await client.signIn.oauth2(
+ {
+ providerId,
+ callbackURL: "/success",
+ },
+ {
+ headers,
+ throw: true,
+ },
+ );
+ expect(data.url).toContain(`prompt=none`);
+
+ let callbackRedirectUri = "";
+ await serverClient.$fetch(data.url, {
+ method: "GET",
+ headers,
+ onError(context) {
+ callbackRedirectUri = context.response.headers.get("Location") || "";
+ },
+ });
+
+ expect(callbackRedirectUri).toContain(redirectUri);
+ expect(callbackRedirectUri).toContain("error=interaction_required");
+ expect(callbackRedirectUri).toContain("state=");
+ expect(callbackRedirectUri).toContain(
+ `iss=${encodeURIComponent(authServerBaseUrl)}`,
+ );
+ expect(callbackRedirectUri).not.toContain("/select-organization");
+ } finally {
+ enablePostLogin = false;
+ }
+ });
+
it("login+consent - should always redirect to login and force consent (notice consent previously given)", async ({
onTestFinished,
}) => {
@@ -1251,6 +1429,84 @@ describe("oauth - prompt", async () => {
enableSelectAccount = false;
});
+ it("shall allow user to post login via continue", async ({
+ onTestFinished,
+ }) => {
+ if (!oauthClient?.client_id || !oauthClient?.client_secret) {
+ throw Error("beforeAll not run properly");
+ }
+ enablePostLogin = true;
+ const { customFetchImpl: customFetchImplRP, cookieSetter } =
+ await createTestInstance();
+ const client = createAuthClient({
+ plugins: [genericOAuthClient(), organization()],
+ baseURL: rpBaseUrl,
+ fetchOptions: {
+ customFetchImpl: customFetchImplRP,
+ },
+ });
+
+ // Generate authorize url
+ const oauthHeaders = new Headers();
+ const data = await client.signIn.oauth2(
+ {
+ providerId,
+ callbackURL: "/success",
+ },
+ {
+ headers,
+ throw: true,
+ onSuccess: cookieSetter(oauthHeaders),
+ },
+ );
+ expect(data.url).toContain(
+ `${authServerBaseUrl}/api/auth/oauth2/authorize`,
+ );
+ expect(data.url).toContain(`client_id=${oauthClient.client_id}`);
+
+ // Check for redirection to /select-organization
+ let selectOrgRedirectUri = "";
+ await serverClient.$fetch(data.url, {
+ method: "GET",
+ headers,
+ onError(context) {
+ selectOrgRedirectUri = context.response.headers.get("Location") || "";
+ cookieSetter(headers)(context);
+ },
+ });
+ expect(selectOrgRedirectUri).toContain(`/select-organization`);
+ expect(selectOrgRedirectUri).toContain(
+ `client_id=${oauthClient.client_id}`,
+ );
+ expect(selectOrgRedirectUri).toContain(`scope=`);
+ expect(selectOrgRedirectUri).toContain(`state=`);
+ vi.stubGlobal("window", {
+ location: {
+ search: new URL(selectOrgRedirectUri, authServerBaseUrl).search,
+ },
+ });
+ onTestFinished(() => {
+ vi.unstubAllGlobals();
+ });
+
+ selectedPostLogin = true;
+ const continueRes = await serverClient.oauth2.continue(
+ {
+ postLogin: true,
+ },
+ {
+ headers,
+ throw: true,
+ onResponse: cookieSetter(headers),
+ },
+ );
+ expect(continueRes.url).toContain(redirectUri);
+ expect(continueRes.url).toContain(`code=`);
+
+ selectedPostLogin = false;
+ enablePostLogin = false;
+ });
+
it("shall allow user to select an organization/team post login and consent", async ({
onTestFinished,
}) => {
@@ -1312,6 +1568,7 @@ describe("oauth - prompt", async () => {
vi.unstubAllGlobals();
});
+ let consentRedirectUri = "";
// Select Account and continue auth flow
await serverClient.organization.setActive(
{
@@ -1320,22 +1577,12 @@ describe("oauth - prompt", async () => {
},
{
headers,
- throw: true,
- onResponse: cookieSetter(headers),
- },
- );
- const selectedAccountRes = await serverClient.oauth2.continue(
- {
- postLogin: true,
- },
- {
- headers,
- throw: true,
- onResponse: cookieSetter(headers),
+ onResponse(context) {
+ consentRedirectUri = context.response.headers.get("Location") || "";
+ cookieSetter(headers)(context);
+ },
},
);
- expect(selectedAccountRes.redirect).toBeTruthy();
- const consentRedirectUri = selectedAccountRes?.url;
expect(consentRedirectUri).toContain(`/consent`);
expect(consentRedirectUri).toContain(`client_id=${oauthClient.client_id}`);
expect(consentRedirectUri).toContain(`scope=`);
diff --git a/packages/oauth-provider/src/oauth.ts b/packages/oauth-provider/src/oauth.ts
index 92cb0f2bf5c..bb38542539b 100644
--- a/packages/oauth-provider/src/oauth.ts
+++ b/packages/oauth-provider/src/oauth.ts
@@ -9,7 +9,6 @@ import {
sessionMiddleware,
} from "better-auth/api";
import { parseSetCookieHeader } from "better-auth/cookies";
-import { constantTimeEqual, makeSignature } from "better-auth/crypto";
import { mergeSchema } from "better-auth/db";
import type { BetterAuthPlugin } from "better-auth/types";
import * as z from "zod";
@@ -28,7 +27,11 @@ import { tokenEndpoint } from "./token";
import type { OAuthOptions, Scope } from "./types";
import { SafeUrlSchema } from "./types/zod";
import { userInfoEndpoint } from "./userinfo";
-import { deleteFromPrompt, getJwtPlugin } from "./utils";
+import {
+ deleteFromPrompt,
+ getJwtPlugin,
+ verifyOAuthQueryParams,
+} from "./utils";
declare module "@better-auth/core" {
interface BetterAuthPluginRegistry {
@@ -118,6 +121,13 @@ export const oauthProvider = >(options: O) => {
clientRegistrationAllowedScopes,
};
+ // Validate pairwiseSecret minimum length
+ if (opts.pairwiseSecret && opts.pairwiseSecret.length < 32) {
+ throw new BetterAuthError(
+ "pairwiseSecret must be at least 32 characters long for adequate HMAC-SHA256 security",
+ );
+ }
+
// TODO: device_code grant also allows for refresh tokens
if (
opts.grantTypes &&
@@ -202,27 +212,20 @@ export const oauthProvider = >(options: O) => {
handler: createAuthMiddleware(async (ctx) => {
// Verify query signature
const query = ctx.body.oauth_query;
- let queryParams = new URLSearchParams(query);
- const sig = queryParams.get("sig");
- const exp = Number(queryParams.get("exp"));
- queryParams.delete("sig");
- queryParams = new URLSearchParams(queryParams);
- const verifySig = await makeSignature(
- queryParams.toString(),
+ const isValid = await verifyOAuthQueryParams(
+ query,
ctx.context.secret,
);
- if (
- !sig ||
- !constantTimeEqual(sig, verifySig) ||
- new Date(exp * 1000) < new Date()
- ) {
+ if (!isValid) {
throw new APIError("BAD_REQUEST", {
error: "invalid_signature",
});
}
+ const queryParams = new URLSearchParams(query);
+ queryParams.delete("sig");
queryParams.delete("exp");
await oAuthState.set({
- query: new URLSearchParams(queryParams).toString(),
+ query: queryParams.toString(),
});
// If path starts oauth2 authorize (ie /sign-in/social, /sign-in/oauth2), add to additional data body
@@ -1131,6 +1134,7 @@ export const oauthProvider = >(options: O) => {
.default(["code"])
.optional(),
type: z.enum(["web", "native", "user-agent-based"]).optional(),
+ subject_type: z.enum(["public", "pairwise"]).optional(),
}),
metadata: {
openapi: {
@@ -1294,6 +1298,8 @@ export const oauthProvider = >(options: O) => {
createOAuthClient: oauthClientEndpoints.createOAuthClient(opts),
getOAuthClient: oauthClientEndpoints.getOAuthClient(opts),
getOAuthClientPublic: oauthClientEndpoints.getOAuthClientPublic(opts),
+ getOAuthClientPublicPrelogin:
+ oauthClientEndpoints.getOAuthClientPublicPrelogin(opts),
getOAuthClients: oauthClientEndpoints.getOAuthClients(opts),
adminUpdateOAuthClient: oauthClientEndpoints.adminUpdateOAuthClient(opts),
updateOAuthClient: oauthClientEndpoints.updateOAuthClient(opts),
diff --git a/packages/oauth-provider/src/oauthClient/endpoints.test.ts b/packages/oauth-provider/src/oauthClient/endpoints.test.ts
index 02abd452f23..f6af25fccfa 100644
--- a/packages/oauth-provider/src/oauthClient/endpoints.test.ts
+++ b/packages/oauth-provider/src/oauthClient/endpoints.test.ts
@@ -1,4 +1,5 @@
import { createAuthClient } from "better-auth/client";
+import { makeSignature } from "better-auth/crypto";
import { jwt } from "better-auth/plugins/jwt";
import { getTestInstance } from "better-auth/test";
import { describe, expect, it } from "vitest";
@@ -11,7 +12,7 @@ describe("oauthClient", async () => {
const baseUrl = "http://localhost:3000";
const rpBaseUrl = "http://localhost:5000";
const redirectUri = `${rpBaseUrl}/api/auth/oauth2/callback/${providerId}`;
- const { signInWithTestUser, customFetchImpl } = await getTestInstance({
+ const { auth, signInWithTestUser, customFetchImpl } = await getTestInstance({
baseURL: baseUrl,
plugins: [
oauthProvider({
@@ -21,6 +22,7 @@ describe("oauthClient", async () => {
oauthAuthServerConfig: true,
openidConfig: true,
},
+ allowPublicClientPrelogin: true,
}),
jwt(),
],
@@ -103,6 +105,27 @@ describe("oauthClient", async () => {
});
});
+ it("should get public-only information about a client prelogin", async () => {
+ // Creates mock valid search params
+ const signedParams = new URLSearchParams({
+ exp: `${Math.floor(Date.now() / 1000) + 60}`,
+ });
+ const sig = await makeSignature(
+ signedParams.toString(),
+ (auth.options as unknown as { secret: string }).secret,
+ );
+ signedParams.set("sig", sig);
+
+ const client = await authClient.oauth2.publicClientPrelogin({
+ client_id: oauthUiClient.client_id,
+ oauth_query: signedParams.toString(),
+ });
+ expect(client.data).toMatchObject({
+ client_id: oauthUiClient.client_id,
+ ...testUiClientInput,
+ });
+ });
+
it("should get user's clients", async () => {
const clients = await authClient.oauth2.getClients();
expect(clients?.data?.length).toBe(3);
diff --git a/packages/oauth-provider/src/oauthClient/endpoints.ts b/packages/oauth-provider/src/oauthClient/endpoints.ts
index 27c3ca2bcb3..c681280e777 100644
--- a/packages/oauth-provider/src/oauthClient/endpoints.ts
+++ b/packages/oauth-provider/src/oauthClient/endpoints.ts
@@ -53,10 +53,11 @@ export async function getClientEndpoint(
* This is commonly used to display information on login flow pages.
*/
export async function getClientPublicEndpoint(
- ctx: GenericEndpointContext & { query: { client_id: string } },
+ ctx: GenericEndpointContext,
opts: OAuthOptions,
+ clientId: string,
) {
- const client = await getClient(ctx, opts, ctx.query.client_id);
+ const client = await getClient(ctx, opts, clientId);
if (!client) {
throw new APIError("NOT_FOUND", {
error_description: "client not found",
diff --git a/packages/oauth-provider/src/oauthClient/index.ts b/packages/oauth-provider/src/oauthClient/index.ts
index 1229c201fdc..fcfd2c0ea0b 100644
--- a/packages/oauth-provider/src/oauthClient/index.ts
+++ b/packages/oauth-provider/src/oauthClient/index.ts
@@ -1,5 +1,6 @@
import { createAuthEndpoint, sessionMiddleware } from "better-auth/api";
import * as z from "zod";
+import { publicSessionMiddleware } from "../middleware";
import { createOAuthClientEndpoint } from "../register";
import type { OAuthOptions, Scope } from "../types";
import { SafeUrlSchema } from "../types/zod";
@@ -57,6 +58,7 @@ export const adminCreateOAuthClient = (opts: OAuthOptions) =>
skip_consent: z.boolean().optional(),
enable_end_session: z.boolean().optional(),
require_pkce: z.boolean().optional(),
+ subject_type: z.enum(["public", "pairwise"]).optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
}),
metadata: {
@@ -450,12 +452,35 @@ export const getOAuthClientPublic = (opts: OAuthOptions) =>
}),
metadata: {
openapi: {
- description: "Gets publically available client fields",
+ description: "Gets publicly available client fields",
},
},
},
async (ctx) => {
- return getClientPublicEndpoint(ctx, opts);
+ const clientId = ctx.query.client_id;
+ return getClientPublicEndpoint(ctx, opts, clientId);
+ },
+ );
+
+export const getOAuthClientPublicPrelogin = (opts: OAuthOptions) =>
+ createAuthEndpoint(
+ "/oauth2/public-client-prelogin",
+ {
+ method: "POST",
+ use: [publicSessionMiddleware(opts)],
+ body: z.object({
+ client_id: z.string(),
+ oauth_query: z.string().optional(),
+ }),
+ metadata: {
+ openapi: {
+ description: "Gets publicly available client fields (prior to login)",
+ },
+ },
+ },
+ async (ctx) => {
+ const clientId = ctx.body.client_id;
+ return getClientPublicEndpoint(ctx, opts, clientId);
},
);
diff --git a/packages/oauth-provider/src/pairwise.test.ts b/packages/oauth-provider/src/pairwise.test.ts
new file mode 100644
index 00000000000..fedae757248
--- /dev/null
+++ b/packages/oauth-provider/src/pairwise.test.ts
@@ -0,0 +1,569 @@
+import { createAuthClient } from "better-auth/client";
+import { generateRandomString } from "better-auth/crypto";
+import {
+ createAuthorizationCodeRequest,
+ createAuthorizationURL,
+} from "better-auth/oauth2";
+import { jwt } from "better-auth/plugins/jwt";
+import { getTestInstance } from "better-auth/test";
+import { APIError } from "better-call";
+import { decodeJwt } from "jose";
+import { beforeAll, describe, expect, it } from "vitest";
+import { oauthProviderClient } from "./client";
+import { oauthProvider } from "./oauth";
+import type { OAuthClient } from "./types/oauth";
+
+describe("pairwise subject identifiers", async () => {
+ const authServerBaseUrl = "http://localhost:3000";
+ const rpBaseUrl = "http://localhost:5000";
+ const rpBaseUrl2 = "http://localhost:6000";
+ const validAudience = "https://myapi.example.com";
+
+ const { auth, signInWithTestUser, customFetchImpl } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt({
+ jwt: {
+ issuer: authServerBaseUrl,
+ },
+ }),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-pairwise-secret-key-32chars!!",
+ validAudiences: [validAudience],
+ allowDynamicClientRegistration: true,
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ const client = createAuthClient({
+ plugins: [oauthProviderClient()],
+ baseURL: authServerBaseUrl,
+ fetchOptions: {
+ customFetchImpl,
+ headers,
+ },
+ });
+
+ let pairwiseClientA: OAuthClient | null;
+ let pairwiseClientB: OAuthClient | null;
+ let publicClient: OAuthClient | null;
+ let sameHostClientA: OAuthClient | null;
+
+ const redirectUriA = `${rpBaseUrl}/api/auth/oauth2/callback/test-a`;
+ const redirectUriB = `${rpBaseUrl2}/api/auth/oauth2/callback/test-b`;
+ const redirectUriSameHost = `${rpBaseUrl}/api/auth/oauth2/callback/test-same`;
+ const redirectUriPublic = `${rpBaseUrl}/api/auth/oauth2/callback/test-public`;
+
+ beforeAll(async () => {
+ pairwiseClientA = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUriA],
+ scope: "openid profile email offline_access",
+ skip_consent: true,
+ subject_type: "pairwise",
+ },
+ });
+ expect(pairwiseClientA?.client_id).toBeDefined();
+
+ pairwiseClientB = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUriB],
+ scope: "openid profile email offline_access",
+ skip_consent: true,
+ subject_type: "pairwise",
+ },
+ });
+ expect(pairwiseClientB?.client_id).toBeDefined();
+
+ publicClient = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUriPublic],
+ scope: "openid profile email offline_access",
+ skip_consent: true,
+ },
+ });
+ expect(publicClient?.client_id).toBeDefined();
+
+ sameHostClientA = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUriSameHost],
+ scope: "openid profile email offline_access",
+ skip_consent: true,
+ subject_type: "pairwise",
+ },
+ });
+ expect(sameHostClientA?.client_id).toBeDefined();
+ });
+
+ async function getTokensForClient(
+ oauthClient: OAuthClient,
+ redirectUri: string,
+ overrides?: {
+ resource?: string;
+ },
+ ) {
+ const codeVerifier = generateRandomString(32);
+ const url = await createAuthorizationURL({
+ id: "test",
+ options: {
+ clientId: oauthClient.client_id,
+ clientSecret: oauthClient.client_secret!,
+ redirectURI: redirectUri,
+ },
+ redirectURI: "",
+ authorizationEndpoint: `${authServerBaseUrl}/api/auth/oauth2/authorize`,
+ state: "test-state",
+ scopes: ["openid", "profile", "email", "offline_access"],
+ codeVerifier,
+ });
+
+ let callbackRedirectUrl = "";
+ await client.$fetch(url.toString(), {
+ headers,
+ onError(context) {
+ callbackRedirectUrl = context.response.headers.get("Location") || "";
+ },
+ });
+ const callbackUrl = new URL(callbackRedirectUrl);
+ const code = callbackUrl.searchParams.get("code")!;
+
+ const { body, headers: reqHeaders } = createAuthorizationCodeRequest({
+ code,
+ codeVerifier,
+ redirectURI: redirectUri,
+ options: {
+ clientId: oauthClient.client_id,
+ clientSecret: oauthClient.client_secret!,
+ redirectURI: redirectUri,
+ },
+ resource: overrides?.resource,
+ });
+
+ const tokens = await client.$fetch<{
+ access_token?: string;
+ id_token?: string;
+ refresh_token?: string;
+ expires_in?: number;
+ token_type?: string;
+ scope?: string;
+ }>("/oauth2/token", {
+ method: "POST",
+ body,
+ headers: reqHeaders,
+ });
+
+ return tokens;
+ }
+
+ it("should produce different sub across pairwise clients (cross-RP unlinkability)", async () => {
+ const tokensA = await getTokensForClient(pairwiseClientA!, redirectUriA);
+ const tokensB = await getTokensForClient(pairwiseClientB!, redirectUriB);
+
+ const idTokenA = decodeJwt(tokensA.data!.id_token!);
+ const idTokenB = decodeJwt(tokensB.data!.id_token!);
+
+ expect(idTokenA.sub).toBeDefined();
+ expect(idTokenB.sub).toBeDefined();
+ // Different sectors → different pairwise sub
+ expect(idTokenA.sub).not.toBe(idTokenB.sub);
+ });
+
+ it("should produce same sub for same pairwise client (determinism)", async () => {
+ const tokens1 = await getTokensForClient(pairwiseClientA!, redirectUriA);
+ const tokens2 = await getTokensForClient(pairwiseClientA!, redirectUriA);
+
+ const idToken1 = decodeJwt(tokens1.data!.id_token!);
+ const idToken2 = decodeJwt(tokens2.data!.id_token!);
+
+ expect(idToken1.sub).toBe(idToken2.sub);
+ });
+
+ it("should return user.id as sub for public client (fallback)", async () => {
+ const publicTokens = await getTokensForClient(
+ publicClient!,
+ redirectUriPublic,
+ );
+ const pairwiseTokens = await getTokensForClient(
+ pairwiseClientA!,
+ redirectUriA,
+ );
+
+ const publicIdToken = decodeJwt(publicTokens.data!.id_token!);
+ const pairwiseIdToken = decodeJwt(pairwiseTokens.data!.id_token!);
+
+ expect(publicIdToken.sub).toBeDefined();
+ // Public sub differs from pairwise sub for same user
+ expect(publicIdToken.sub).not.toBe(pairwiseIdToken.sub);
+ });
+
+ it("should produce same pairwise sub for clients on same host (sector isolation)", async () => {
+ const tokensA = await getTokensForClient(pairwiseClientA!, redirectUriA);
+ const tokensSameHost = await getTokensForClient(
+ sameHostClientA!,
+ redirectUriSameHost,
+ );
+
+ const idTokenA = decodeJwt(tokensA.data!.id_token!);
+ const idTokenSameHost = decodeJwt(tokensSameHost.data!.id_token!);
+
+ // Same host (localhost) → same sector → same pairwise sub
+ expect(idTokenA.sub).toBe(idTokenSameHost.sub);
+ });
+
+ it("should have consistent sub between id_token and userinfo", async () => {
+ const tokens = await getTokensForClient(pairwiseClientA!, redirectUriA);
+ const idToken = decodeJwt(tokens.data!.id_token!);
+
+ const userinfo = await client.$fetch<{ sub?: string }>("/oauth2/userinfo", {
+ method: "GET",
+ headers: {
+ authorization: `Bearer ${tokens.data!.access_token}`,
+ },
+ });
+
+ expect(userinfo.data?.sub).toBe(idToken.sub);
+ });
+
+ it("should return pairwise sub in opaque access token introspection", async () => {
+ const tokens = await getTokensForClient(pairwiseClientA!, redirectUriA);
+
+ const introspection = await client.oauth2.introspect(
+ {
+ client_id: pairwiseClientA!.client_id,
+ client_secret: pairwiseClientA!.client_secret,
+ token: tokens.data!.access_token!,
+ token_type_hint: "access_token",
+ },
+ {
+ headers: {
+ accept: "application/json",
+ "content-type": "application/x-www-form-urlencoded",
+ },
+ },
+ );
+
+ const idToken = decodeJwt(tokens.data!.id_token!);
+ expect(introspection.data?.active).toBe(true);
+ expect(introspection.data?.sub).toBe(idToken.sub);
+ });
+
+ it("should preserve pairwise sub after token refresh", async () => {
+ const tokens = await getTokensForClient(pairwiseClientA!, redirectUriA);
+ const originalIdToken = decodeJwt(tokens.data!.id_token!);
+
+ const refreshBody = new URLSearchParams({
+ grant_type: "refresh_token",
+ client_id: pairwiseClientA!.client_id,
+ client_secret: pairwiseClientA!.client_secret!,
+ refresh_token: tokens.data!.refresh_token!,
+ });
+
+ const refreshResponse = await client.$fetch<{
+ access_token?: string;
+ id_token?: string;
+ refresh_token?: string;
+ }>("/oauth2/token", {
+ method: "POST",
+ body: refreshBody,
+ headers: {
+ "content-type": "application/x-www-form-urlencoded",
+ },
+ });
+
+ expect(refreshResponse.data?.id_token).toBeDefined();
+ const refreshedIdToken = decodeJwt(refreshResponse.data!.id_token!);
+ expect(refreshedIdToken.sub).toBe(originalIdToken.sub);
+ });
+
+ it("should keep user.id in JWT access token sub (not pairwise)", async () => {
+ const tokens = await getTokensForClient(pairwiseClientA!, redirectUriA, {
+ resource: validAudience,
+ });
+
+ const accessToken = decodeJwt(tokens.data!.access_token!);
+ const idToken = decodeJwt(tokens.data!.id_token!);
+
+ // JWT access token uses real user.id for user lookup
+ expect(accessToken.sub).toBeDefined();
+ expect(accessToken.sub).not.toBe(idToken.sub);
+ });
+});
+
+describe("pairwise DCR validation", async () => {
+ const authServerBaseUrl = "http://localhost:3000";
+ const rpBaseUrl = "http://localhost:5000";
+ const redirectUri = `${rpBaseUrl}/api/auth/oauth2/callback/test`;
+
+ it("should reject pairwise subject_type when pairwiseSecret not configured", async () => {
+ const { auth, signInWithTestUser } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ await expect(
+ auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUri],
+ subject_type: "pairwise",
+ },
+ }),
+ ).rejects.toThrow(APIError);
+ });
+
+ it("should accept pairwise subject_type when pairwiseSecret is configured", async () => {
+ const { auth, signInWithTestUser } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-secret-for-dcr-test-32chars!",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ const response = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUri],
+ subject_type: "pairwise",
+ skip_consent: true,
+ },
+ });
+
+ expect(response?.client_id).toBeDefined();
+ expect(response?.subject_type).toBe("pairwise");
+ });
+
+ it("should default to public when no subject_type specified", async () => {
+ const { auth, signInWithTestUser } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-secret-for-dcr-test-32chars!",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ const response = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [redirectUri],
+ skip_consent: true,
+ },
+ });
+
+ expect(response?.client_id).toBeDefined();
+ expect(response?.subject_type).toBeUndefined();
+ });
+
+ it("should reject pairwise client with redirect_uris on different hosts", async () => {
+ const { auth, signInWithTestUser } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-secret-for-dcr-test-32chars!",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ await expect(
+ auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [
+ "https://app-a.example.com/callback",
+ "https://app-b.example.com/callback",
+ ],
+ subject_type: "pairwise",
+ },
+ }),
+ ).rejects.toThrow(APIError);
+ });
+
+ it("should accept pairwise client with redirect_uris on the same host", async () => {
+ const { auth, signInWithTestUser } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-secret-for-dcr-test-32chars!",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ const response = await auth.api.adminCreateOAuthClient({
+ headers,
+ body: {
+ redirect_uris: [
+ "https://app.example.com/callback-a",
+ "https://app.example.com/callback-b",
+ ],
+ subject_type: "pairwise",
+ skip_consent: true,
+ },
+ });
+
+ expect(response?.client_id).toBeDefined();
+ expect(response?.subject_type).toBe("pairwise");
+ });
+
+ it("should round-trip subject_type through DCR", async () => {
+ const { signInWithTestUser, customFetchImpl } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-secret-for-dcr-test-32chars!",
+ allowDynamicClientRegistration: true,
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const { headers } = await signInWithTestUser();
+ const dcrClient = createAuthClient({
+ plugins: [oauthProviderClient()],
+ baseURL: authServerBaseUrl,
+ fetchOptions: {
+ customFetchImpl,
+ headers,
+ },
+ });
+
+ const response = await dcrClient.$fetch("/oauth2/register", {
+ method: "POST",
+ body: {
+ redirect_uris: [redirectUri],
+ subject_type: "pairwise",
+ token_endpoint_auth_method: "none",
+ },
+ });
+
+ expect(response.data?.subject_type).toBe("pairwise");
+ });
+});
+
+describe("pairwise configuration validation", () => {
+ it("should reject pairwiseSecret shorter than 32 characters", () => {
+ expect(() =>
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "too-short",
+ }),
+ ).toThrow("pairwiseSecret must be at least 32 characters");
+ });
+
+ it("should accept pairwiseSecret of 32+ characters", () => {
+ expect(() =>
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "a-valid-secret-that-is-32-chars!",
+ }),
+ ).not.toThrow();
+ });
+});
+
+describe("pairwise metadata", async () => {
+ const authServerBaseUrl = "http://localhost:3000";
+
+ it("should include pairwise in subject_types_supported when secret configured", async () => {
+ const { auth } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ pairwiseSecret: "test-pairwise-metadata-secret!!!",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const metadata = await auth.api.getOpenIdConfig();
+ expect(metadata.subject_types_supported).toEqual(["public", "pairwise"]);
+ });
+
+ it("should only include public when no pairwise secret", async () => {
+ const { auth } = await getTestInstance({
+ baseURL: authServerBaseUrl,
+ plugins: [
+ jwt(),
+ oauthProvider({
+ loginPage: "/login",
+ consentPage: "/consent",
+ silenceWarnings: {
+ oauthAuthServerConfig: true,
+ openidConfig: true,
+ },
+ }),
+ ],
+ });
+
+ const metadata = await auth.api.getOpenIdConfig();
+ expect(metadata.subject_types_supported).toEqual(["public"]);
+ });
+});
diff --git a/packages/oauth-provider/src/register.ts b/packages/oauth-provider/src/register.ts
index 94ae1113de1..05a830c4a22 100644
--- a/packages/oauth-provider/src/register.ts
+++ b/packages/oauth-provider/src/register.ts
@@ -110,6 +110,45 @@ export async function checkOAuthClient(
});
}
+ // Validate subject_type
+ if (client.subject_type !== undefined) {
+ if (
+ client.subject_type !== "public" &&
+ client.subject_type !== "pairwise"
+ ) {
+ throw new APIError("BAD_REQUEST", {
+ error: "invalid_client_metadata",
+ error_description: `subject_type must be "public" or "pairwise"`,
+ });
+ }
+ if (client.subject_type === "pairwise" && !opts.pairwiseSecret) {
+ throw new APIError("BAD_REQUEST", {
+ error: "invalid_client_metadata",
+ error_description:
+ "pairwise subject_type requires server pairwiseSecret configuration",
+ });
+ }
+ // Per OIDC Core §8.1, when multiple redirect_uris have different hosts,
+ // a sector_identifier_uri is required (not yet supported). Reject registration
+ // until sector_identifier_uri support is added.
+ if (
+ client.subject_type === "pairwise" &&
+ client.redirect_uris &&
+ client.redirect_uris.length > 1
+ ) {
+ const hosts = new Set(
+ client.redirect_uris.map((uri: string) => new URL(uri).host),
+ );
+ if (hosts.size > 1) {
+ throw new APIError("BAD_REQUEST", {
+ error: "invalid_client_metadata",
+ error_description:
+ "pairwise clients with redirect_uris on different hosts require a sector_identifier_uri, which is not yet supported. All redirect_uris must share the same host.",
+ });
+ }
+ }
+ }
+
// Check requested application scopes
const requestedScopes = (client?.scope as string | undefined)
?.split(" ")
@@ -263,6 +302,7 @@ export function oauthToSchema(input: OAuthClient): SchemaClient {
skip_consent: skipConsent,
enable_end_session: enableEndSession,
require_pkce: requirePKCE,
+ subject_type: subjectType,
reference_id: referenceId,
metadata: inputMetadata,
// All other metadata
@@ -317,6 +357,7 @@ export function oauthToSchema(input: OAuthClient): SchemaClient {
skipConsent,
enableEndSession,
requirePKCE,
+ subjectType,
referenceId,
metadata,
};
@@ -364,6 +405,7 @@ export function schemaToOAuth(input: SchemaClient): OAuthClient {
skipConsent,
enableEndSession,
requirePKCE,
+ subjectType,
referenceId,
metadata, // in JSON format
} = input;
@@ -417,6 +459,7 @@ export function schemaToOAuth(input: SchemaClient): OAuthClient {
skip_consent: skipConsent ?? undefined,
enable_end_session: enableEndSession ?? undefined,
require_pkce: requirePKCE ?? undefined,
+ subject_type: subjectType ?? undefined,
reference_id: referenceId ?? undefined,
};
}
diff --git a/packages/oauth-provider/src/schema.ts b/packages/oauth-provider/src/schema.ts
index ddf1b063cc7..5d116af4930 100644
--- a/packages/oauth-provider/src/schema.ts
+++ b/packages/oauth-provider/src/schema.ts
@@ -27,6 +27,10 @@ export const schema = {
type: "boolean",
required: false,
},
+ subjectType: {
+ type: "string",
+ required: false,
+ },
scopes: {
type: "string[]",
required: false,
diff --git a/packages/oauth-provider/src/token.ts b/packages/oauth-provider/src/token.ts
index f632f11eee6..7d3d493edcf 100644
--- a/packages/oauth-provider/src/token.ts
+++ b/packages/oauth-provider/src/token.ts
@@ -22,6 +22,7 @@ import {
getStoredToken,
isPKCERequired,
parseClientMetadata,
+ resolveSubjectIdentifier,
storeToken,
validateClientCredentials,
} from "./utils";
@@ -132,6 +133,7 @@ async function createIdToken(
const iat = Math.floor(Date.now() / 1000);
const exp = iat + (opts.idTokenExpiresIn ?? 36000);
const userClaims = userNormalClaims(user, scopes);
+ const resolvedSub = await resolveSubjectIdentifier(user.id, client, opts);
const authTimeSec =
authTime != null ? Math.floor(authTime.getTime() / 1000) : undefined;
// TODO: this should be validated against the login process
@@ -157,7 +159,7 @@ async function createIdToken(
auth_time: authTimeSec,
acr,
iss: jwtPluginOptions?.jwt?.issuer ?? ctx.context.baseURL,
- sub: user.id,
+ sub: resolvedSub,
aud: client.clientId,
nonce,
iat,
diff --git a/packages/oauth-provider/src/types/index.ts b/packages/oauth-provider/src/types/index.ts
index facdfc4a7af..3c6e5a7467c 100644
--- a/packages/oauth-provider/src/types/index.ts
+++ b/packages/oauth-provider/src/types/index.ts
@@ -115,6 +115,11 @@ export interface OAuthOptions<
scopeExpirations?: {
[K in Scopes[number]]?: number | string | Date;
};
+ /**
+ * Allows /oauth2/public-client-prelogin endpoint to be
+ * requestable prior to login via a valid oauth_query.
+ */
+ allowPublicClientPrelogin?: boolean;
/**
* Allow unauthenticated dynamic client registration.
*
@@ -664,6 +669,14 @@ export interface OAuthOptions<
*/
userinfo?: { window: number; max: number } | false;
};
+ /**
+ * Secret used to compute pairwise subject identifiers (HMAC-SHA256).
+ * When set, clients with `subject_type: "pairwise"` receive unique,
+ * unlinkable `sub` values per sector identifier.
+ *
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#PairwiseAlg
+ */
+ pairwiseSecret?: string;
}
export interface OAuthAuthorizationQuery {
@@ -907,6 +920,8 @@ export interface SchemaClient<
skipConsent?: boolean;
/** Used to enable client to logout via the `/oauth2/end-session` endpoint */
enableEndSession?: boolean;
+ /** Subject identifier type: "public" (default) or "pairwise" */
+ subjectType?: "public" | "pairwise";
/** Reference to the owner of this client. Eg. Organization, Team, Profile */
referenceId?: string;
/**
diff --git a/packages/oauth-provider/src/types/oauth.ts b/packages/oauth-provider/src/types/oauth.ts
index 760d25d77d8..7de56189dbb 100644
--- a/packages/oauth-provider/src/types/oauth.ts
+++ b/packages/oauth-provider/src/types/oauth.ts
@@ -216,9 +216,9 @@ export interface OIDCMetadata extends AuthServerMetadata {
* pairwise: the subject identifier is unique to the client
* public: the subject identifier is unique to the server
*
- * only `public` is supported.
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes
*/
- subject_types_supported: "public"[];
+ subject_types_supported: ("public" | "pairwise")[];
/**
* Supported ID token signing algorithms.
*
@@ -307,6 +307,12 @@ export interface OAuthClient {
* requesting offline_access scope, regardless of this setting.
*/
require_pkce?: boolean;
+ /**
+ * Subject identifier type for this client.
+ *
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes
+ */
+ subject_type?: "public" | "pairwise";
//---- All other metadata ----//
reference_id?: string;
[key: string]: unknown;
diff --git a/packages/oauth-provider/src/userinfo.ts b/packages/oauth-provider/src/userinfo.ts
index 109651f4082..f204b96261e 100644
--- a/packages/oauth-provider/src/userinfo.ts
+++ b/packages/oauth-provider/src/userinfo.ts
@@ -3,6 +3,7 @@ import { APIError } from "better-auth/api";
import type { User } from "better-auth/types";
import { validateAccessToken } from "./introspect";
import type { OAuthOptions, Scope } from "./types";
+import { getClient, resolveSubjectIdentifier } from "./utils";
/**
* Provides shared /userinfo and id_token claims functionality
@@ -80,6 +81,21 @@ export async function userInfoEndpoint(
}
const baseUserClaims = userNormalClaims(user, scopes ?? []);
+
+ // Resolve pairwise sub if server has pairwise enabled and client is configured for it
+ if (opts.pairwiseSecret) {
+ const clientId = (jwt.client_id ?? jwt.azp) as string | undefined;
+ if (clientId) {
+ const client = await getClient(ctx, opts, clientId);
+ if (client) {
+ baseUserClaims.sub = await resolveSubjectIdentifier(
+ user.id,
+ client,
+ opts,
+ );
+ }
+ }
+ }
const additionalInfoUserClaims =
opts.customUserInfoClaims && scopes?.length
? await opts.customUserInfoClaims({ user, scopes, jwt })
diff --git a/packages/oauth-provider/src/utils/index.ts b/packages/oauth-provider/src/utils/index.ts
index 4739a598d37..0311cc05de4 100644
--- a/packages/oauth-provider/src/utils/index.ts
+++ b/packages/oauth-provider/src/utils/index.ts
@@ -4,6 +4,7 @@ import { base64, base64Url } from "@better-auth/utils/base64";
import { createHash } from "@better-auth/utils/hash";
import {
constantTimeEqual,
+ makeSignature,
symmetricDecrypt,
symmetricEncrypt,
} from "better-auth/crypto";
@@ -61,6 +62,22 @@ export const getJwtPlugin = (ctx: AuthContext) => {
const cachedTrustedClients = new TTLCache>();
+export async function verifyOAuthQueryParams(
+ oauth_query: string,
+ secret: string,
+) {
+ const queryParams = new URLSearchParams(oauth_query);
+ const sig = queryParams.get("sig");
+ const exp = Number(queryParams.get("exp"));
+ queryParams.delete("sig");
+ const verifySig = await makeSignature(queryParams.toString(), secret);
+ return (
+ !!sig &&
+ constantTimeEqual(sig, verifySig) &&
+ new Date(exp * 1000) >= new Date()
+ );
+}
+
/**
* Get a client by ID, checking trusted clients first, then database
*/
@@ -418,6 +435,54 @@ export function parsePrompt(prompt: string) {
return new Set(set);
}
+/**
+ * Extracts the sector identifier (hostname) from a client's first redirect URI.
+ *
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#PairwiseAlg
+ * @internal
+ */
+export function getSectorIdentifier(client: SchemaClient): string {
+ const uri = client.redirectUris?.[0];
+ if (!uri) {
+ throw new BetterAuthError(
+ "Client has no redirect URIs for sector identifier",
+ );
+ }
+ return new URL(uri).host;
+}
+
+/**
+ * Computes a pairwise subject identifier using HMAC-SHA256.
+ *
+ * @see https://openid.net/specs/openid-connect-core-1_0.html#PairwiseAlg
+ * @internal
+ */
+export async function computePairwiseSub(
+ userId: string,
+ client: SchemaClient,
+ secret: string,
+): Promise {
+ const sectorId = getSectorIdentifier(client);
+ return makeSignature(`${sectorId}.${userId}`, secret);
+}
+
+/**
+ * Returns the appropriate subject identifier for a user+client pair.
+ * Uses pairwise when the client opts in and the server has a secret configured.
+ *
+ * @internal
+ */
+export async function resolveSubjectIdentifier(
+ userId: string,
+ client: SchemaClient,
+ opts: OAuthOptions,
+): Promise {
+ if (client.subjectType === "pairwise" && opts.pairwiseSecret) {
+ return computePairwiseSub(userId, client, opts.pairwiseSecret);
+ }
+ return userId;
+}
+
/**
* Deletes a prompt value
*
diff --git a/packages/oauth-provider/tsdown.config.ts b/packages/oauth-provider/tsdown.config.ts
index 1e3b6255df5..a658e1f1ee7 100644
--- a/packages/oauth-provider/tsdown.config.ts
+++ b/packages/oauth-provider/tsdown.config.ts
@@ -4,13 +4,15 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts", "./src/client-resource.ts"],
- external: [
- "@better-auth/core",
- "@better-auth/utils",
- "@better-fetch/fetch",
- "better-auth",
- "better-call",
- ],
+ deps: {
+ neverBundle: [
+ "@better-auth/core",
+ "@better-auth/utils",
+ "@better-fetch/fetch",
+ "better-auth",
+ "better-call",
+ ],
+ },
sourcemap: true,
treeshake: true,
clean: true,
diff --git a/packages/passkey/package.json b/packages/passkey/package.json
index bb1fcf7de40..8103114fc82 100644
--- a/packages/passkey/package.json
+++ b/packages/passkey/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/passkey",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Passkey plugin for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/passkey/src/client.ts b/packages/passkey/src/client.ts
index 10922321cf8..2ea1db37ba2 100644
--- a/packages/passkey/src/client.ts
+++ b/packages/passkey/src/client.ts
@@ -77,7 +77,7 @@ export const getPasskeyActions = (
data: null,
error: {
code: "AUTH_CANCELLED",
- message: "auth cancelled",
+ message: PASSKEY_ERROR_CODES.AUTH_CANCELLED,
status: 400,
statusText: "BAD_REQUEST",
},
@@ -158,7 +158,7 @@ export const getPasskeyActions = (
data: null,
error: {
code: e.code,
- message: "previously registered",
+ message: PASSKEY_ERROR_CODES.PREVIOUSLY_REGISTERED,
status: 400,
statusText: "BAD_REQUEST",
},
@@ -169,7 +169,7 @@ export const getPasskeyActions = (
data: null,
error: {
code: e.code,
- message: "registration cancelled",
+ message: PASSKEY_ERROR_CODES.REGISTRATION_CANCELLED,
status: 400,
statusText: "BAD_REQUEST",
},
@@ -189,7 +189,8 @@ export const getPasskeyActions = (
data: null,
error: {
code: "UNKNOWN_ERROR",
- message: e instanceof Error ? e.message : "unknown error",
+ message:
+ e instanceof Error ? e.message : PASSKEY_ERROR_CODES.UNKNOWN_ERROR,
status: 500,
statusText: "INTERNAL_SERVER_ERROR",
},
diff --git a/packages/passkey/src/error-codes.ts b/packages/passkey/src/error-codes.ts
index bf724ae2d22..12ba1e38870 100644
--- a/packages/passkey/src/error-codes.ts
+++ b/packages/passkey/src/error-codes.ts
@@ -9,4 +9,8 @@ export const PASSKEY_ERROR_CODES = defineErrorCodes({
AUTHENTICATION_FAILED: "Authentication failed",
UNABLE_TO_CREATE_SESSION: "Unable to create session",
FAILED_TO_UPDATE_PASSKEY: "Failed to update passkey",
+ PREVIOUSLY_REGISTERED: "Previously registered",
+ REGISTRATION_CANCELLED: "Registration cancelled",
+ AUTH_CANCELLED: "Auth cancelled",
+ UNKNOWN_ERROR: "Unknown error",
});
diff --git a/packages/passkey/src/index.ts b/packages/passkey/src/index.ts
index 1f61327d28f..97d4d3605f9 100644
--- a/packages/passkey/src/index.ts
+++ b/packages/passkey/src/index.ts
@@ -21,6 +21,8 @@ declare module "@better-auth/core" {
}
}
+export { PASSKEY_ERROR_CODES } from "./error-codes";
+
const MAX_AGE_IN_SECONDS = 60 * 5; // 5 minutes
export const passkey = (options?: PasskeyOptions | undefined) => {
diff --git a/packages/passkey/tsdown.config.ts b/packages/passkey/tsdown.config.ts
index 97122ea4b96..4e3ef1b566e 100644
--- a/packages/passkey/tsdown.config.ts
+++ b/packages/passkey/tsdown.config.ts
@@ -4,14 +4,16 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts"],
- external: [
- "nanostores",
- "@better-auth/utils",
- "better-call",
- "@better-fetch/fetch",
- "@better-auth/core",
- "better-auth",
- ],
+ deps: {
+ neverBundle: [
+ "nanostores",
+ "@better-auth/utils",
+ "better-call",
+ "@better-fetch/fetch",
+ "@better-auth/core",
+ "better-auth",
+ ],
+ },
sourcemap: true,
treeshake: true,
});
diff --git a/packages/prisma-adapter/package.json b/packages/prisma-adapter/package.json
index 8676e35671d..f2f37481120 100644
--- a/packages/prisma-adapter/package.json
+++ b/packages/prisma-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/prisma-adapter",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Prisma adapter for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/prisma-adapter/src/prisma-adapter.test.ts b/packages/prisma-adapter/src/prisma-adapter.test.ts
index 9240dc3d0f5..75fa99ff801 100644
--- a/packages/prisma-adapter/src/prisma-adapter.test.ts
+++ b/packages/prisma-adapter/src/prisma-adapter.test.ts
@@ -1,14 +1,113 @@
+import type { BetterAuthOptions } from "@better-auth/core";
import { describe, expect, it, vi } from "vitest";
import { prismaAdapter } from "./prisma-adapter";
describe("prisma-adapter", () => {
+ const createTestAdapter = (prisma: Record) =>
+ prismaAdapter(prisma as never, {
+ provider: "sqlite",
+ })({} as BetterAuthOptions);
+
it("should create prisma adapter", () => {
const prisma = {
$transaction: vi.fn(),
- } as any;
- const adapter = prismaAdapter(prisma, {
+ };
+ const adapter = prismaAdapter(prisma as never, {
provider: "sqlite",
});
expect(adapter).toBeDefined();
});
+
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/8365
+ */
+ it("should fall back to updateMany for non-unique verification identifiers", async () => {
+ const update = vi.fn();
+ const updateMany = vi.fn().mockResolvedValue({ count: 1 });
+ const findFirst = vi.fn().mockResolvedValue({
+ id: "verification-id",
+ identifier: "magic-link-token",
+ value: "updated-value",
+ });
+ const adapter = createTestAdapter({
+ $transaction: vi.fn(),
+ verification: {
+ findFirst,
+ update,
+ updateMany,
+ },
+ });
+
+ const result = await adapter.update({
+ model: "verification",
+ where: [{ field: "identifier", value: "magic-link-token" }],
+ update: { value: "updated-value" },
+ });
+
+ expect(update).not.toHaveBeenCalled();
+ expect(updateMany).toHaveBeenCalledWith(
+ expect.objectContaining({
+ where: {
+ identifier: "magic-link-token",
+ },
+ data: expect.objectContaining({
+ value: "updated-value",
+ updatedAt: expect.any(Date),
+ }),
+ }),
+ );
+ expect(findFirst).toHaveBeenCalledWith({
+ where: {
+ identifier: "magic-link-token",
+ },
+ });
+ expect(result).toEqual({
+ id: "verification-id",
+ identifier: "magic-link-token",
+ value: "updated-value",
+ });
+ });
+
+ it("should keep using update for unique non-id fields", async () => {
+ const update = vi.fn().mockResolvedValue({
+ id: "session-id",
+ token: "session-token",
+ userId: "user-id",
+ });
+ const updateMany = vi.fn();
+ const findFirst = vi.fn();
+ const adapter = createTestAdapter({
+ $transaction: vi.fn(),
+ session: {
+ findFirst,
+ update,
+ updateMany,
+ },
+ });
+
+ const result = await adapter.update({
+ model: "session",
+ where: [{ field: "token", value: "session-token" }],
+ update: { userId: "user-id" },
+ });
+
+ expect(update).toHaveBeenCalledWith(
+ expect.objectContaining({
+ where: {
+ token: "session-token",
+ },
+ data: expect.objectContaining({
+ userId: "user-id",
+ updatedAt: expect.any(Date),
+ }),
+ }),
+ );
+ expect(updateMany).not.toHaveBeenCalled();
+ expect(findFirst).not.toHaveBeenCalled();
+ expect(result).toEqual({
+ id: "session-id",
+ token: "session-token",
+ userId: "user-id",
+ });
+ });
});
diff --git a/packages/prisma-adapter/src/prisma-adapter.ts b/packages/prisma-adapter/src/prisma-adapter.ts
index 2eb3673a50e..cbb0fdababe 100644
--- a/packages/prisma-adapter/src/prisma-adapter.ts
+++ b/packages/prisma-adapter/src/prisma-adapter.ts
@@ -183,6 +183,35 @@ export const prismaAdapter = (prisma: PrismaClient, config: PrismaConfig) => {
return operator;
}
}
+ const hasRootUniqueWhereCondition = (
+ model: string,
+ where?: Where[] | undefined,
+ ) => {
+ if (!where?.length) {
+ return false;
+ }
+
+ return where.some((condition) => {
+ if (condition.connector === "OR") {
+ return false;
+ }
+
+ if (condition.operator && condition.operator !== "eq") {
+ return false;
+ }
+
+ if (condition.field === "id") {
+ return true;
+ }
+
+ return (
+ getFieldAttributes({
+ model,
+ field: condition.field,
+ })?.unique === true
+ );
+ });
+ };
const convertWhereClause = ({
action,
model,
@@ -463,6 +492,28 @@ export const prismaAdapter = (prisma: PrismaClient, config: PrismaConfig) => {
`Model ${model} does not exist in the database. If you haven't generated the Prisma client, you need to run 'npx prisma generate'`,
);
}
+ const hasRootUniqueCondition = hasRootUniqueWhereCondition(
+ model,
+ where,
+ );
+ if (!hasRootUniqueCondition) {
+ const whereClause = convertWhereClause({
+ model,
+ where,
+ action: "updateMany",
+ });
+ const result = await db[model]!.updateMany({
+ where: whereClause,
+ data: update,
+ });
+ if (!result?.count) {
+ return null;
+ }
+
+ return await db[model]!.findFirst({
+ where: whereClause,
+ });
+ }
const whereClause = convertWhereClause({
model,
where,
diff --git a/packages/redis-storage/package.json b/packages/redis-storage/package.json
index a10f82e69ba..693b69ebd86 100644
--- a/packages/redis-storage/package.json
+++ b/packages/redis-storage/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/redis-storage",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Redis storage for Better Auth secondary storage",
"type": "module",
"license": "MIT",
diff --git a/packages/scim/package.json b/packages/scim/package.json
index 3360db12b9d..2a4fbcc5c30 100644
--- a/packages/scim/package.json
+++ b/packages/scim/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/scim",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "SCIM plugin for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/sso/package.json b/packages/sso/package.json
index 80a06758138..de36bced540 100644
--- a/packages/sso/package.json
+++ b/packages/sso/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/sso",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "SSO plugin for Better Auth",
"type": "module",
"license": "MIT",
@@ -66,7 +66,7 @@
"dependencies": {
"@better-auth/utils": "catalog:",
"@better-fetch/fetch": "catalog:",
- "fast-xml-parser": "^5.4.1",
+ "fast-xml-parser": "^5.5.6",
"jose": "^6.1.3",
"samlify": "^2.10.2",
"tldts": "^6.1.0",
diff --git a/packages/sso/src/routes/domain-verification.ts b/packages/sso/src/routes/domain-verification.ts
index 64e5d12332e..1e8b141f488 100644
--- a/packages/sso/src/routes/domain-verification.ts
+++ b/packages/sso/src/routes/domain-verification.ts
@@ -4,7 +4,7 @@ import {
sessionMiddleware,
} from "better-auth/api";
import { generateRandomString } from "better-auth/crypto";
-import * as z from "zod/v4";
+import * as z from "zod";
import type { SSOOptions, SSOProvider } from "../types";
import { getHostnameFromDomain } from "../utils";
diff --git a/packages/sso/src/routes/providers.ts b/packages/sso/src/routes/providers.ts
index ef01f9d8031..5901430fa54 100644
--- a/packages/sso/src/routes/providers.ts
+++ b/packages/sso/src/routes/providers.ts
@@ -4,7 +4,7 @@ import {
createAuthEndpoint,
sessionMiddleware,
} from "better-auth/api";
-import z from "zod/v4";
+import * as z from "zod";
import { DEFAULT_MAX_SAML_METADATA_SIZE } from "../constants";
import { validateConfigAlgorithms } from "../saml";
import type { Member, OIDCConfig, SAMLConfig, SSOOptions } from "../types";
diff --git a/packages/sso/src/routes/schemas.ts b/packages/sso/src/routes/schemas.ts
index 417500adc65..cc836d75c68 100644
--- a/packages/sso/src/routes/schemas.ts
+++ b/packages/sso/src/routes/schemas.ts
@@ -1,4 +1,4 @@
-import z from "zod/v4";
+import * as z from "zod";
const oidcMappingSchema = z
.object({
diff --git a/packages/sso/src/routes/sso.ts b/packages/sso/src/routes/sso.ts
index fcdf88f0c8a..bad821fd564 100644
--- a/packages/sso/src/routes/sso.ts
+++ b/packages/sso/src/routes/sso.ts
@@ -23,7 +23,7 @@ import saml from "samlify";
import type { BindingContext } from "samlify/types/src/entity";
import type { IdentityProvider } from "samlify/types/src/entity-idp";
import type { FlowResult } from "samlify/types/src/flow";
-import z from "zod/v4";
+import * as z from "zod";
import { getVerificationIdentifier } from "./domain-verification";
interface AuthnRequestRecord {
diff --git a/packages/stripe/package.json b/packages/stripe/package.json
index 4275b1f0f82..84f81431e2f 100644
--- a/packages/stripe/package.json
+++ b/packages/stripe/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/stripe",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Stripe plugin for Better Auth",
"type": "module",
"license": "MIT",
diff --git a/packages/stripe/src/index.ts b/packages/stripe/src/index.ts
index 4b03a8f4088..c3c10c7f555 100644
--- a/packages/stripe/src/index.ts
+++ b/packages/stripe/src/index.ts
@@ -239,7 +239,7 @@ export const stripe = (options: O) => {
await client.subscriptions.update(stripeSub.id, {
items,
- proration_behavior: "create_prorations",
+ proration_behavior: plan.prorationBehavior ?? "create_prorations",
});
await ctx.adapter.update({
model: "subscription",
diff --git a/packages/stripe/src/routes.ts b/packages/stripe/src/routes.ts
index 9bdbee0493d..9e9b103a14f 100644
--- a/packages/stripe/src/routes.ts
+++ b/packages/stripe/src/routes.ts
@@ -7,7 +7,7 @@ import type { Organization } from "better-auth/plugins/organization";
import { defu } from "defu";
import type Stripe from "stripe";
import type { Stripe as StripeType } from "stripe";
-import * as z from "zod/v4";
+import * as z from "zod";
import { STRIPE_ERROR_CODES } from "./error-codes";
import {
onCheckoutSessionCompleted,
@@ -347,7 +347,7 @@ export const upgradeSubscription = (options: StripeOptions) => {
let stripeCustomer: Stripe.Customer | undefined;
try {
const result = await client.customers.search({
- query: `metadata["${customerMetadata.keys.organizationId}"]:"${org.id}"`,
+ query: `metadata["${customerMetadata.keys.organizationId}"]:"${org.id}" AND metadata["${customerMetadata.keys.customerType}"]:"organization"`,
limit: 1,
});
stripeCustomer = result.data[0];
@@ -362,7 +362,9 @@ export const upgradeSubscription = (options: StripeOptions) => {
if (
customer.metadata?.[
customerMetadata.keys.organizationId
- ] === org.id
+ ] === org.id &&
+ customer.metadata?.[customerMetadata.keys.customerType] ===
+ "organization"
) {
stripeCustomer = customer;
break;
@@ -908,7 +910,7 @@ export const upgradeSubscription = (options: StripeOptions) => {
await client.subscriptions
.update(activeSubscription.id, {
items: itemUpdates,
- proration_behavior: "create_prorations",
+ proration_behavior: plan.prorationBehavior ?? "create_prorations",
})
.catch(async (e) => {
throw ctx.error("BAD_REQUEST", {
@@ -1640,7 +1642,7 @@ export const subscriptionSuccess = (options: StripeOptions) => {
use: [originCheck((ctx) => ctx.query.callbackURL)],
},
async (ctx) => {
- const callbackURL = ctx.query?.callbackURL || "/";
+ let callbackURL = ctx.query?.callbackURL || "/";
const session = await getSessionFromCtx(ctx);
if (!session) {
@@ -1653,6 +1655,15 @@ export const subscriptionSuccess = (options: StripeOptions) => {
throw ctx.redirect(getUrl(ctx, callbackURL));
}
+ /**
+ * Replace the Stripe {CHECKOUT_SESSION_ID} template variable in callbackURL.
+ * @see https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=stripe-hosted#modify-the-success-url
+ */
+ callbackURL = callbackURL.replaceAll(
+ "{CHECKOUT_SESSION_ID}",
+ ctx.query.checkoutSessionId,
+ );
+
// Resolve subscriptionId from Stripe checkout session metadata.
// The metadata is set server-side when creating the checkout session,
// so it cannot be tampered with — no ownership check needed.
diff --git a/packages/stripe/src/types.ts b/packages/stripe/src/types.ts
index d2381166c4c..562e543a089 100644
--- a/packages/stripe/src/types.ts
+++ b/packages/stripe/src/types.ts
@@ -81,6 +81,20 @@ export type StripePlan = {
* automatically sync the seat quantity in Stripe.
*/
seatPriceId?: string | undefined;
+ /**
+ * Proration behavior when updating this plan's subscription.
+ *
+ * Controls how Stripe handles mid-cycle price changes.
+ * - `create_prorations`: Add proration line items to the next invoice (default)
+ * - `always_invoice`: Create prorations and immediately invoice
+ * - `none`: No proration; new price applies at next billing cycle
+ *
+ * @default "create_prorations"
+ * @see https://docs.stripe.com/billing/subscriptions/prorations
+ */
+ prorationBehavior?:
+ | Stripe.SubscriptionUpdateParams.ProrationBehavior
+ | undefined;
/**
* Additional line items to include in the checkout session.
*
diff --git a/packages/stripe/test/seat-based-billing.test.ts b/packages/stripe/test/seat-based-billing.test.ts
index c174d8dc871..c677f7e3eb4 100644
--- a/packages/stripe/test/seat-based-billing.test.ts
+++ b/packages/stripe/test/seat-based-billing.test.ts
@@ -516,6 +516,121 @@ describe("seat-based billing", () => {
expect(updateCall[1]!.proration_behavior).toBe("create_prorations");
});
+ it("should use custom prorationBehavior from plan config", async () => {
+ const customProrationOptions: StripeOptions = {
+ ...seatPlanOptions,
+ subscription: {
+ enabled: true,
+ plans: [
+ {
+ priceId: "price_team_base",
+ name: "team",
+ seatPriceId: "price_team_seat",
+ prorationBehavior: "always_invoice",
+ },
+ {
+ priceId: "price_enterprise_base",
+ name: "enterprise",
+ seatPriceId: "price_enterprise_seat",
+ prorationBehavior: "always_invoice",
+ },
+ ],
+ authorizeReference: async () => true,
+ },
+ };
+
+ const { client, auth, sessionSetter } = await getTestInstance(
+ {
+ plugins: [organization(), stripe(customProrationOptions)],
+ },
+ {
+ disableTestUser: true,
+ clientOptions: {
+ plugins: [
+ organizationClient(),
+ stripeClient({ subscription: true }),
+ ],
+ },
+ },
+ );
+ const ctx = await auth.$context;
+
+ await client.signUp.email(
+ {
+ email: "proration-test@test.com",
+ password: "password",
+ name: "Proration User",
+ },
+ { throw: true },
+ );
+ const headers = new Headers();
+ await client.signIn.email(
+ { email: "proration-test@test.com", password: "password" },
+ { throw: true, onSuccess: sessionSetter(headers) },
+ );
+
+ const org = await client.organization.create({
+ name: "Proration Org",
+ slug: "proration-org",
+ fetchOptions: { headers },
+ });
+ const orgId = org.data?.id as string;
+
+ await ctx.adapter.update({
+ model: "organization",
+ update: { stripeCustomerId: "cus_proration" },
+ where: [{ field: "id", value: orgId }],
+ });
+ await ctx.adapter.create({
+ model: "subscription",
+ data: {
+ referenceId: orgId,
+ stripeCustomerId: "cus_proration",
+ stripeSubscriptionId: "sub_proration",
+ status: "active",
+ plan: "team",
+ seats: 2,
+ },
+ });
+
+ mockStripe.subscriptions.list.mockResolvedValue({
+ data: [
+ {
+ id: "sub_proration",
+ status: "active",
+ cancel_at_period_end: false,
+ cancel_at: null,
+ items: {
+ data: [
+ {
+ id: "si_base",
+ price: { id: "price_team_base", lookup_key: null },
+ quantity: 1,
+ },
+ {
+ id: "si_seat",
+ price: { id: "price_team_seat", lookup_key: null },
+ quantity: 2,
+ },
+ ],
+ },
+ },
+ ],
+ });
+
+ const res = await client.subscription.upgrade({
+ plan: "enterprise",
+ customerType: "organization",
+ referenceId: orgId,
+ fetchOptions: { headers },
+ });
+
+ expect(res.data?.url).toBeDefined();
+
+ const updateCall = mockStripe.subscriptions.update.mock.calls[0]!;
+ expect(updateCall[1]!.proration_behavior).toBe("always_invoice");
+ });
+
it("should skip seat item swap when seat pricing is unchanged", async () => {
const sameSeatOptions: StripeOptions = {
...seatPlanOptions,
@@ -995,6 +1110,130 @@ describe("seat-based billing", () => {
expect.objectContaining({ id: "si_seat", quantity: 1 }),
);
});
+
+ it("should use custom prorationBehavior on member removal", async () => {
+ mockStripe.subscriptions.retrieve.mockResolvedValue({
+ id: "sub_seat_remove_proration",
+ status: "active",
+ items: {
+ data: [
+ {
+ id: "si_base",
+ price: { id: "price_team_base" },
+ quantity: 1,
+ },
+ {
+ id: "si_seat",
+ price: { id: "price_team_seat" },
+ quantity: 2,
+ },
+ ],
+ },
+ });
+
+ const customProrationOptions: StripeOptions = {
+ ...seatPlanOptions,
+ subscription: {
+ enabled: true,
+ plans: [
+ {
+ priceId: "price_team_base",
+ name: "team",
+ seatPriceId: "price_team_seat",
+ prorationBehavior: "none",
+ },
+ {
+ priceId: "price_enterprise_base",
+ name: "enterprise",
+ seatPriceId: "price_enterprise_seat",
+ prorationBehavior: "none",
+ },
+ ],
+ authorizeReference: async () => true,
+ },
+ };
+
+ const { client, auth, sessionSetter } = await getTestInstance(
+ {
+ plugins: [organization(), stripe(customProrationOptions)],
+ },
+ {
+ disableTestUser: true,
+ clientOptions: {
+ plugins: [
+ organizationClient(),
+ stripeClient({ subscription: true }),
+ ],
+ },
+ },
+ );
+ const ctx = await auth.$context;
+
+ await client.signUp.email(
+ {
+ email: "proration-remove@test.com",
+ password: "password",
+ name: "Proration Remove User",
+ },
+ { throw: true },
+ );
+ const headers = new Headers();
+ await client.signIn.email(
+ { email: "proration-remove@test.com", password: "password" },
+ { throw: true, onSuccess: sessionSetter(headers) },
+ );
+
+ const org = await client.organization.create({
+ name: "Proration Remove Org",
+ slug: "proration-remove-org",
+ fetchOptions: { headers },
+ });
+ const orgId = org.data?.id as string;
+
+ await ctx.adapter.update({
+ model: "organization",
+ update: { stripeCustomerId: "cus_proration_remove" },
+ where: [{ field: "id", value: orgId }],
+ });
+ await ctx.adapter.create({
+ model: "subscription",
+ data: {
+ referenceId: orgId,
+ stripeCustomerId: "cus_proration_remove",
+ stripeSubscriptionId: "sub_seat_remove_proration",
+ status: "active",
+ plan: "team",
+ seats: 2,
+ },
+ });
+
+ const memberUser = await ctx.adapter.create({
+ model: "user",
+ data: { email: "proration-removable@test.com", name: "Removable" },
+ });
+ const member = await ctx.adapter.create({
+ model: "member",
+ data: {
+ userId: memberUser.id,
+ organizationId: orgId,
+ role: "member",
+ createdAt: new Date(),
+ },
+ });
+
+ await client.organization.removeMember({
+ memberIdOrEmail: member.id,
+ organizationId: orgId,
+ fetchOptions: { headers },
+ });
+
+ expect(mockStripe.subscriptions.update).toHaveBeenCalledWith(
+ "sub_seat_remove_proration",
+ expect.objectContaining({
+ proration_behavior: "none",
+ }),
+ );
+ });
});
describe("webhook seat handling", () => {
diff --git a/packages/stripe/test/stripe-organization.test.ts b/packages/stripe/test/stripe-organization.test.ts
index e1d7fe4b2e0..a7035eeb06f 100644
--- a/packages/stripe/test/stripe-organization.test.ts
+++ b/packages/stripe/test/stripe-organization.test.ts
@@ -1664,6 +1664,172 @@ describe("stripe - organization customer", () => {
}),
);
});
+
+ it("should not match user customer with organizationId in metadata during org customer lookup", async () => {
+ const userCustomerId = "cus_user_with_org_metadata";
+ const orgCustomerId = "cus_org_new";
+
+ const mockStripeCustomerType = {
+ prices: {
+ list: vi.fn().mockResolvedValue({ data: [{ id: "price_lookup_123" }] }),
+ },
+ customers: {
+ create: vi.fn().mockResolvedValue({
+ id: orgCustomerId,
+ metadata: { customerType: "organization" },
+ }),
+ list: vi.fn().mockResolvedValue({ data: [] }),
+ // First call (user upgrade): no existing customer
+ // Second call (org upgrade): returns user customer only if query
+ // lacks customerType filter — verifies the fix actually matters
+ search: vi.fn().mockResolvedValueOnce({ data: [] }),
+ retrieve: vi.fn(),
+ update: vi.fn(),
+ },
+ checkout: {
+ sessions: {
+ create: vi.fn().mockResolvedValue({
+ url: "https://checkout.stripe.com/mock",
+ id: "cs_mock123",
+ }),
+ },
+ },
+ billingPortal: {
+ sessions: {
+ create: vi
+ .fn()
+ .mockResolvedValue({ url: "https://billing.stripe.com/mock" }),
+ },
+ },
+ subscriptions: {
+ retrieve: vi.fn(),
+ list: vi.fn().mockResolvedValue({ data: [] }),
+ update: vi.fn(),
+ },
+ webhooks: { constructEventAsync: vi.fn() },
+ };
+
+ const stripeOptionsCustomerType: StripeOptions = {
+ ...baseOrgStripeOptions,
+ stripeClient: mockStripeCustomerType as unknown as Stripe,
+ };
+
+ const { client, auth, sessionSetter } = await getTestInstance(
+ {
+ plugins: [organization(), stripe(stripeOptionsCustomerType)],
+ },
+ {
+ disableTestUser: true,
+ clientOptions: {
+ plugins: [organizationClient(), stripeClient({ subscription: true })],
+ },
+ },
+ );
+ const ctx = await auth.$context;
+
+ // User A signs up
+ await client.signUp.email(
+ { ...testUser, email: "user-a@email.com" },
+ { throw: true },
+ );
+ const userAHeaders = new Headers();
+ await client.signIn.email(
+ { ...testUser, email: "user-a@email.com" },
+ { throw: true, onSuccess: sessionSetter(userAHeaders) },
+ );
+
+ // User B signs up and creates an organization
+ await client.signUp.email(
+ { ...testUser, email: "user-b@email.com" },
+ { throw: true },
+ );
+ const userBHeaders = new Headers();
+ await client.signIn.email(
+ { ...testUser, email: "user-b@email.com" },
+ { throw: true, onSuccess: sessionSetter(userBHeaders) },
+ );
+
+ const org = await client.organization.create({
+ name: "Test Org",
+ slug: "customer-type-filter-org",
+ fetchOptions: { headers: userBHeaders },
+ });
+ const orgId = org.data?.id as string;
+
+ // User A upgrades with metadata containing the org's ID
+ mockStripeCustomerType.customers.create.mockResolvedValueOnce({
+ id: userCustomerId,
+ metadata: {
+ userId: "user-a",
+ customerType: "user",
+ organizationId: orgId,
+ },
+ });
+
+ await client.subscription.upgrade({
+ plan: "starter",
+ metadata: { organizationId: orgId },
+ fetchOptions: { headers: userAHeaders },
+ });
+
+ // Organization upgrades
+ mockStripeCustomerType.customers.search.mockImplementationOnce(
+ (params: { query?: string }) => {
+ const query = params?.query ?? "";
+ if (query.includes(orgId) && !query.includes("customerType")) {
+ // Without the fix: user customer would be returned
+ return Promise.resolve({
+ data: [
+ {
+ id: userCustomerId,
+ metadata: {
+ userId: "user-a",
+ customerType: "user",
+ organizationId: orgId,
+ },
+ },
+ ],
+ });
+ }
+ // With the fix: customerType filter excludes user customer
+ return Promise.resolve({ data: [] });
+ },
+ );
+
+ mockStripeCustomerType.customers.create.mockResolvedValueOnce({
+ id: orgCustomerId,
+ metadata: { organizationId: orgId, customerType: "organization" },
+ });
+
+ await client.subscription.upgrade({
+ plan: "starter",
+ customerType: "organization",
+ referenceId: orgId,
+ fetchOptions: { headers: userBHeaders },
+ });
+
+ // Organization should have its own customer, not User A's
+ const updatedOrg = await ctx.adapter.findOne<{
+ id: string;
+ stripeCustomerId?: string;
+ }>({
+ model: "organization",
+ where: [{ field: "id", value: orgId }],
+ });
+ expect(updatedOrg?.stripeCustomerId).toBe(orgCustomerId);
+
+ // Find the org lookup search call and verify the full query
+ const orgSearchCall =
+ mockStripeCustomerType.customers.search.mock.calls.find(
+ ([arg]) =>
+ typeof arg?.query === "string" &&
+ arg.query.includes(orgId) &&
+ arg.query.includes("organizationId"),
+ );
+ expect(orgSearchCall?.[0]?.query).toContain(
+ `metadata["organizationId"]:"${orgId}" AND metadata["customerType"]:"organization"`,
+ );
+ });
});
describe("stripe - organizationHooks integration", () => {
diff --git a/packages/stripe/test/stripe.test.ts b/packages/stripe/test/stripe.test.ts
index 2089eff761f..1ba291889d3 100644
--- a/packages/stripe/test/stripe.test.ts
+++ b/packages/stripe/test/stripe.test.ts
@@ -7481,6 +7481,134 @@ describe("stripe", () => {
expect(response.headers.get("location")).toContain(callbackURL);
});
+ /**
+ * @see https://github.com/better-auth/better-auth/issues/8255
+ */
+ it("should replace {CHECKOUT_SESSION_ID} placeholder in callbackURL with actual session ID", async () => {
+ const testSubscriptionId = "sub_placeholder_test";
+ const testCheckoutSessionId = "cs_placeholder_456";
+ const testCustomerId = "cus_placeholder_test";
+
+ const stripeForTest = {
+ ...stripeOptions.stripeClient,
+ checkout: {
+ sessions: {
+ ...stripeOptions.stripeClient.checkout.sessions,
+ retrieve: vi.fn(),
+ },
+ },
+ subscriptions: {
+ ...stripeOptions.stripeClient.subscriptions,
+ list: vi.fn().mockResolvedValue({
+ data: [
+ {
+ id: testSubscriptionId,
+ status: "active",
+ cancel_at_period_end: false,
+ cancel_at: null,
+ canceled_at: null,
+ trial_start: null,
+ trial_end: null,
+ items: {
+ data: [
+ {
+ price: {
+ id: process.env.STRIPE_PRICE_ID_1,
+ recurring: { interval: "month" },
+ },
+ quantity: 1,
+ current_period_start: Math.floor(Date.now() / 1000),
+ current_period_end:
+ Math.floor(Date.now() / 1000) + 30 * 86400,
+ },
+ ],
+ },
+ },
+ ],
+ }),
+ },
+ };
+
+ const testOptions = {
+ ...stripeOptions,
+ stripeClient: stripeForTest as unknown as Stripe,
+ };
+
+ const {
+ client,
+ auth: testAuth,
+ sessionSetter,
+ } = await getTestInstance(
+ {
+ database: memory,
+ plugins: [stripe(testOptions)],
+ },
+ {
+ disableTestUser: true,
+ clientOptions: {
+ plugins: [stripeClient({ subscription: true })],
+ },
+ },
+ );
+ const testCtx = await testAuth.$context;
+
+ const headers = new Headers();
+ const userRes = await client.signUp.email(
+ {
+ email: "placeholder-test@test.com",
+ password: "password",
+ name: "Placeholder Test",
+ },
+ { throw: true },
+ );
+ await client.signIn.email(
+ { email: "placeholder-test@test.com", password: "password" },
+ { throw: true, onSuccess: sessionSetter(headers) },
+ );
+
+ const sub = await testCtx.adapter.create({
+ model: "subscription",
+ data: {
+ referenceId: userRes.user.id,
+ stripeCustomerId: testCustomerId,
+ status: "incomplete",
+ plan: "starter",
+ },
+ });
+
+ (stripeForTest.checkout.sessions.retrieve as any).mockResolvedValue({
+ id: testCheckoutSessionId,
+ metadata: {
+ userId: userRes.user.id,
+ subscriptionId: sub.id,
+ referenceId: userRes.user.id,
+ },
+ });
+
+ // User passes {CHECKOUT_SESSION_ID} in their successUrl, which gets
+ // URL-encoded inside callbackURL. Stripe can only replace the literal
+ // (unencoded) placeholder, so the encoded version stays as-is.
+ // Better Auth should replace it with the actual session ID before redirecting.
+ const callbackURL =
+ "http://localhost:5173/billing/success?session_id={CHECKOUT_SESSION_ID}";
+ const url = `http://localhost:3000/api/auth/subscription/success?callbackURL=${encodeURIComponent(callbackURL)}&checkoutSessionId=${testCheckoutSessionId}`;
+ const response = await testAuth.handler(
+ new Request(url, {
+ method: "GET",
+ headers,
+ redirect: "manual",
+ }),
+ );
+
+ expect(response.status).toBe(302);
+ const location = response.headers.get("location")!;
+ // The placeholder must be replaced with the actual checkout session ID
+ expect(location).toContain(`session_id=${testCheckoutSessionId}`);
+ // The literal placeholder must NOT remain in the redirect URL
+ expect(location).not.toContain("{CHECKOUT_SESSION_ID}");
+ expect(location).not.toContain("%7BCHECKOUT_SESSION_ID%7D");
+ });
+
it("should redirect when checkout session retrieval fails", async () => {
const stripeForTest = {
...stripeOptions.stripeClient,
diff --git a/packages/stripe/tsdown.config.ts b/packages/stripe/tsdown.config.ts
index 87ee90a250b..6db760ce45f 100644
--- a/packages/stripe/tsdown.config.ts
+++ b/packages/stripe/tsdown.config.ts
@@ -4,6 +4,13 @@ export default defineConfig({
dts: { build: true, incremental: true },
format: ["esm"],
entry: ["./src/index.ts", "./src/client.ts"],
- external: ["better-auth", "better-call", "@better-fetch/fetch", "stripe"],
+ deps: {
+ neverBundle: [
+ "better-auth",
+ "better-call",
+ "@better-fetch/fetch",
+ "stripe",
+ ],
+ },
sourcemap: true,
});
diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json
index d7a18d2c72b..b9c6546bfd9 100644
--- a/packages/telemetry/package.json
+++ b/packages/telemetry/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/telemetry",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Telemetry package for Better Auth",
"type": "module",
"license": "MIT",
@@ -36,6 +36,7 @@
".": {
"dev-source": "./src/index.ts",
"types": "./dist/index.d.mts",
+ "node": "./dist/node.mjs",
"default": "./dist/index.mjs"
}
},
diff --git a/packages/telemetry/src/detectors/detect-system-info.ts b/packages/telemetry/src/detectors/detect-system-info.ts
index 248d10e1e9d..7379c8eb2bb 100644
--- a/packages/telemetry/src/detectors/detect-system-info.ts
+++ b/packages/telemetry/src/detectors/detect-system-info.ts
@@ -1,5 +1,4 @@
import { env } from "@better-auth/core/env";
-import { importRuntime } from "../utils/import-util";
function getVendor() {
const hasAny = (...keys: string[]) =>
@@ -73,131 +72,30 @@ function getVendor() {
return null;
}
+// In the default (non-node) build, system info detection is not available.
+// The node build (src/node.ts) provides its own inline implementation
+// using static top-level imports of node:os and node:fs.
export async function detectSystemInfo() {
- try {
- //check if it's cloudflare
- if (getVendor() === "cloudflare") return "cloudflare";
- const os = await importRuntime("os");
- const cpus = os.cpus();
- return {
- deploymentVendor: getVendor(),
- systemPlatform: os.platform(),
- systemRelease: os.release(),
- systemArchitecture: os.arch(),
- cpuCount: cpus.length,
- cpuModel: cpus.length ? cpus[0]!.model : null,
- cpuSpeed: cpus.length ? cpus[0]!.speed : null,
- memory: os.totalmem(),
- isWSL: await isWsl(),
- isDocker: await isDocker(),
- isTTY:
- typeof process !== "undefined" && (process as any).stdout
- ? (process as any).stdout.isTTY
- : null,
- };
- } catch {
- return {
- systemPlatform: null,
- systemRelease: null,
- systemArchitecture: null,
- cpuCount: null,
- cpuModel: null,
- cpuSpeed: null,
- memory: null,
- isWSL: null,
- isDocker: null,
- isTTY: null,
- };
- }
-}
-
-let isDockerCached: boolean | undefined;
-
-async function hasDockerEnv() {
- if (getVendor() === "cloudflare") return false;
-
- try {
- const fs = await importRuntime("fs");
- fs.statSync("/.dockerenv");
- return true;
- } catch {
- return false;
- }
-}
-
-async function hasDockerCGroup() {
- if (getVendor() === "cloudflare") return false;
- try {
- const fs = await importRuntime("fs");
- return fs.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
- } catch {
- return false;
- }
-}
-
-async function isDocker() {
- if (getVendor() === "cloudflare") return false;
-
- if (isDockerCached === undefined) {
- isDockerCached = (await hasDockerEnv()) || (await hasDockerCGroup());
- }
-
- return isDockerCached;
-}
-
-async function isWsl() {
- try {
- if (getVendor() === "cloudflare") return false;
- if (typeof process === "undefined" || process?.platform !== "linux") {
- return false;
- }
- const fs = await importRuntime("fs");
- const os = await importRuntime("os");
- if (os.release().toLowerCase().includes("microsoft")) {
- if (await isInsideContainer()) {
- return false;
- }
-
- return true;
- }
-
- return fs
- .readFileSync("/proc/version", "utf8")
- .toLowerCase()
- .includes("microsoft")
- ? !(await isInsideContainer())
- : false;
- } catch {
- return false;
- }
-}
-
-let isInsideContainerCached: boolean | undefined;
-
-const hasContainerEnv = async () => {
- if (getVendor() === "cloudflare") return false;
- try {
- const fs = await importRuntime("fs");
- fs.statSync("/run/.containerenv");
- return true;
- } catch {
- return false;
- }
-};
-
-async function isInsideContainer() {
- if (isInsideContainerCached === undefined) {
- isInsideContainerCached = (await hasContainerEnv()) || (await isDocker());
- }
-
- return isInsideContainerCached;
+ return {
+ deploymentVendor: getVendor(),
+ systemPlatform: null,
+ systemRelease: null,
+ systemArchitecture: null,
+ cpuCount: null,
+ cpuModel: null,
+ cpuSpeed: null,
+ memory: null,
+ isWSL: null,
+ isDocker: null,
+ isTTY: null,
+ };
}
export function isCI() {
return (
env.CI !== "false" &&
("BUILD_ID" in env || // Jenkins, Cloudbees
- "BUILD_NUMBER" in env || // Jenkins, TeamCity (fixed typo: extra space removed)
+ "BUILD_NUMBER" in env || // Jenkins, TeamCity
"CI" in env || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari, Cloudflare
"CI_APP_ID" in env || // Appflow
"CI_BUILD_ID" in env || // Appflow
diff --git a/packages/telemetry/src/node.ts b/packages/telemetry/src/node.ts
new file mode 100644
index 00000000000..40e7b36f657
--- /dev/null
+++ b/packages/telemetry/src/node.ts
@@ -0,0 +1,381 @@
+import fs from "node:fs";
+import fsPromises from "node:fs/promises";
+import os from "node:os";
+import path from "node:path";
+import type { BetterAuthOptions } from "@better-auth/core";
+import { ENV, getBooleanEnvVar, isTest, logger } from "@better-auth/core/env";
+import { betterFetch } from "@better-fetch/fetch";
+import type { PackageJson } from "type-fest";
+import { getTelemetryAuthConfig } from "./detectors/detect-auth-config";
+import { detectPackageManager } from "./detectors/detect-project-info";
+import { detectEnvironment, detectRuntime } from "./detectors/detect-runtime";
+import type { TelemetryContext, TelemetryEvent } from "./types";
+import { hashToBase64 } from "./utils/hash";
+import { generateId } from "./utils/id";
+export { getTelemetryAuthConfig };
+export type { TelemetryEvent } from "./types";
+
+// --- Node-specific: package.json reading ---
+
+let packageJSONCache: PackageJson | undefined;
+
+async function readRootPackageJson(): Promise {
+ if (packageJSONCache) return packageJSONCache;
+ try {
+ const cwd = process.cwd();
+ if (!cwd) return undefined;
+ const raw = await fsPromises.readFile(
+ path.join(cwd, "package.json"),
+ "utf-8",
+ );
+ packageJSONCache = JSON.parse(raw);
+ return packageJSONCache as PackageJson;
+ } catch {}
+ return undefined;
+}
+
+async function getPackageVersion(pkg: string): Promise {
+ if (packageJSONCache) {
+ return (packageJSONCache.dependencies?.[pkg] ||
+ packageJSONCache.devDependencies?.[pkg] ||
+ packageJSONCache.peerDependencies?.[pkg]) as string | undefined;
+ }
+
+ try {
+ const cwd = process.cwd();
+ if (!cwd) throw new Error("no-cwd");
+ const pkgJsonPath = path.join(cwd, "node_modules", pkg, "package.json");
+ const raw = await fsPromises.readFile(pkgJsonPath, "utf-8");
+ const json = JSON.parse(raw);
+ const resolved =
+ (json.version as string) ||
+ (await getVersionFromLocalPackageJson(pkg)) ||
+ undefined;
+ return resolved;
+ } catch {}
+
+ return getVersionFromLocalPackageJson(pkg);
+}
+
+async function getVersionFromLocalPackageJson(
+ pkg: string,
+): Promise {
+ const json = await readRootPackageJson();
+ if (!json) return undefined;
+ const allDeps = {
+ ...json.dependencies,
+ ...json.devDependencies,
+ ...json.peerDependencies,
+ } as Record;
+ return allDeps[pkg];
+}
+
+async function getNameFromLocalPackageJson(): Promise {
+ const json = await readRootPackageJson();
+ return json?.name as string | undefined;
+}
+
+// --- Node-specific: system info ---
+
+async function detectSystemInfo() {
+ try {
+ const cpus = os.cpus();
+ return {
+ deploymentVendor: getVendor(),
+ systemPlatform: os.platform(),
+ systemRelease: os.release(),
+ systemArchitecture: os.arch(),
+ cpuCount: cpus.length,
+ cpuModel: cpus.length ? cpus[0]!.model : null,
+ cpuSpeed: cpus.length ? cpus[0]!.speed : null,
+ memory: os.totalmem(),
+ isWSL: await isWsl(),
+ isDocker: await isDocker(),
+ isTTY: (process as any).stdout ? (process as any).stdout.isTTY : null,
+ };
+ } catch {
+ return {
+ systemPlatform: null,
+ systemRelease: null,
+ systemArchitecture: null,
+ cpuCount: null,
+ cpuModel: null,
+ cpuSpeed: null,
+ memory: null,
+ isWSL: null,
+ isDocker: null,
+ isTTY: null,
+ };
+ }
+}
+
+function getVendor() {
+ const env = process.env as Record;
+ const hasAny = (...keys: string[]) => keys.some((k) => Boolean(env[k]));
+
+ if (
+ hasAny("CF_PAGES", "CF_PAGES_URL", "CF_ACCOUNT_ID") ||
+ (typeof navigator !== "undefined" &&
+ navigator.userAgent === "Cloudflare-Workers")
+ ) {
+ return "cloudflare";
+ }
+
+ if (hasAny("VERCEL", "VERCEL_URL", "VERCEL_ENV")) return "vercel";
+ if (hasAny("NETLIFY", "NETLIFY_URL")) return "netlify";
+ if (
+ hasAny(
+ "RENDER",
+ "RENDER_URL",
+ "RENDER_INTERNAL_HOSTNAME",
+ "RENDER_SERVICE_ID",
+ )
+ )
+ return "render";
+ if (
+ hasAny("AWS_LAMBDA_FUNCTION_NAME", "AWS_EXECUTION_ENV", "LAMBDA_TASK_ROOT")
+ )
+ return "aws";
+ if (
+ hasAny(
+ "GOOGLE_CLOUD_FUNCTION_NAME",
+ "GOOGLE_CLOUD_PROJECT",
+ "GCP_PROJECT",
+ "K_SERVICE",
+ )
+ )
+ return "gcp";
+ if (
+ hasAny(
+ "AZURE_FUNCTION_NAME",
+ "FUNCTIONS_WORKER_RUNTIME",
+ "WEBSITE_INSTANCE_ID",
+ "WEBSITE_SITE_NAME",
+ )
+ )
+ return "azure";
+ if (hasAny("DENO_DEPLOYMENT_ID", "DENO_REGION")) return "deno-deploy";
+ if (hasAny("FLY_APP_NAME", "FLY_REGION", "FLY_ALLOC_ID")) return "fly-io";
+ if (hasAny("RAILWAY_STATIC_URL", "RAILWAY_ENVIRONMENT_NAME"))
+ return "railway";
+ if (hasAny("DYNO", "HEROKU_APP_NAME")) return "heroku";
+ if (hasAny("DO_DEPLOYMENT_ID", "DO_APP_NAME", "DIGITALOCEAN"))
+ return "digitalocean";
+ if (hasAny("KOYEB", "KOYEB_DEPLOYMENT_ID", "KOYEB_APP_NAME")) return "koyeb";
+ return null;
+}
+
+let isDockerCached: boolean | undefined;
+
+async function hasDockerEnv() {
+ try {
+ fs.statSync("/.dockerenv");
+ return true;
+ } catch {
+ return false;
+ }
+}
+
+async function hasDockerCGroup() {
+ try {
+ return fs.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
+ } catch {
+ return false;
+ }
+}
+
+async function isDocker() {
+ if (isDockerCached === undefined) {
+ isDockerCached = (await hasDockerEnv()) || (await hasDockerCGroup());
+ }
+ return isDockerCached;
+}
+
+let isInsideContainerCached: boolean | undefined;
+
+const hasContainerEnv = async () => {
+ try {
+ fs.statSync("/run/.containerenv");
+ return true;
+ } catch {
+ return false;
+ }
+};
+
+async function isInsideContainer() {
+ if (isInsideContainerCached === undefined) {
+ isInsideContainerCached = (await hasContainerEnv()) || (await isDocker());
+ }
+ return isInsideContainerCached;
+}
+
+async function isWsl() {
+ try {
+ if (process.platform !== "linux") {
+ return false;
+ }
+ if (os.release().toLowerCase().includes("microsoft")) {
+ if (await isInsideContainer()) {
+ return false;
+ }
+ return true;
+ }
+
+ return fs
+ .readFileSync("/proc/version", "utf8")
+ .toLowerCase()
+ .includes("microsoft")
+ ? !(await isInsideContainer())
+ : false;
+ } catch {
+ return false;
+ }
+}
+
+// --- Node-specific: project ID ---
+
+let projectIdCached: string | null = null;
+
+async function getProjectId(baseUrl: string | undefined): Promise {
+ if (projectIdCached) return projectIdCached;
+
+ const projectName = await getNameFromLocalPackageJson();
+ if (projectName) {
+ projectIdCached = await hashToBase64(
+ baseUrl ? baseUrl + projectName : projectName,
+ );
+ return projectIdCached;
+ }
+
+ if (baseUrl) {
+ projectIdCached = await hashToBase64(baseUrl);
+ return projectIdCached;
+ }
+
+ projectIdCached = generateId(32);
+ return projectIdCached;
+}
+
+// --- detectDatabase/detectFramework override using local package.json reading ---
+
+async function detectDatabaseNode() {
+ const DATABASES: Record = {
+ pg: "postgresql",
+ mysql: "mysql",
+ mariadb: "mariadb",
+ sqlite3: "sqlite",
+ "better-sqlite3": "sqlite",
+ "@prisma/client": "prisma",
+ mongoose: "mongodb",
+ mongodb: "mongodb",
+ "drizzle-orm": "drizzle",
+ };
+ for (const [pkg, name] of Object.entries(DATABASES)) {
+ const version = await getPackageVersion(pkg);
+ if (version) return { name, version };
+ }
+ return undefined;
+}
+
+async function detectFrameworkNode() {
+ const FRAMEWORKS: Record = {
+ next: "next",
+ nuxt: "nuxt",
+ "react-router": "react-router",
+ astro: "astro",
+ "@sveltejs/kit": "sveltekit",
+ "solid-start": "solid-start",
+ "tanstack-start": "tanstack-start",
+ hono: "hono",
+ express: "express",
+ elysia: "elysia",
+ expo: "expo",
+ };
+ for (const [pkg, name] of Object.entries(FRAMEWORKS)) {
+ const version = await getPackageVersion(pkg);
+ if (version) return { name, version };
+ }
+ return undefined;
+}
+
+// --- Main telemetry export (node version) ---
+
+const noop: (event: TelemetryEvent) => Promise = async function noop() {};
+
+export async function createTelemetry(
+ options: BetterAuthOptions,
+ context?: TelemetryContext | undefined,
+) {
+ const debugEnabled =
+ options.telemetry?.debug ||
+ getBooleanEnvVar("BETTER_AUTH_TELEMETRY_DEBUG", false);
+
+ const telemetryEndpoint = ENV.BETTER_AUTH_TELEMETRY_ENDPOINT;
+ if (!telemetryEndpoint && !context?.customTrack) {
+ return {
+ publish: noop,
+ };
+ }
+ const track = async (event: TelemetryEvent) => {
+ if (context?.customTrack) {
+ await context.customTrack(event).catch(logger.error);
+ } else if (telemetryEndpoint) {
+ if (debugEnabled) {
+ logger.info("telemetry event", JSON.stringify(event, null, 2));
+ } else {
+ await betterFetch(telemetryEndpoint, {
+ method: "POST",
+ body: event,
+ }).catch(logger.error);
+ }
+ }
+ };
+
+ const isEnabled = async () => {
+ const telemetryEnabled =
+ options.telemetry?.enabled !== undefined
+ ? options.telemetry.enabled
+ : false;
+ const envEnabled = getBooleanEnvVar("BETTER_AUTH_TELEMETRY", false);
+ return (
+ (envEnabled || telemetryEnabled) && (context?.skipTestCheck || !isTest())
+ );
+ };
+
+ const enabled = await isEnabled();
+ let anonymousId: string | undefined;
+
+ if (enabled) {
+ anonymousId = await getProjectId(
+ typeof options.baseURL === "string" ? options.baseURL : undefined,
+ );
+
+ const payload = {
+ config: await getTelemetryAuthConfig(options, context),
+ runtime: detectRuntime(),
+ database: await detectDatabaseNode(),
+ framework: await detectFrameworkNode(),
+ environment: detectEnvironment(),
+ systemInfo: await detectSystemInfo(),
+ packageManager: detectPackageManager(),
+ };
+
+ void track({ type: "init", payload, anonymousId });
+ }
+
+ return {
+ publish: async (event: TelemetryEvent) => {
+ if (!enabled) return;
+ if (!anonymousId) {
+ anonymousId = await getProjectId(
+ typeof options.baseURL === "string" ? options.baseURL : undefined,
+ );
+ }
+ await track({
+ type: event.type,
+ payload: event.payload,
+ anonymousId,
+ });
+ },
+ };
+}
diff --git a/packages/telemetry/src/utils/import-util.ts b/packages/telemetry/src/utils/import-util.ts
deleted file mode 100644
index 2fe75f55073..00000000000
--- a/packages/telemetry/src/utils/import-util.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export const importRuntime = (m: string): Promise => {
- return (Function("mm", "return import(mm)") as any)(m);
-};
diff --git a/packages/telemetry/src/utils/package-json.ts b/packages/telemetry/src/utils/package-json.ts
index 51791be8449..594b9451815 100644
--- a/packages/telemetry/src/utils/package-json.ts
+++ b/packages/telemetry/src/utils/package-json.ts
@@ -1,75 +1,15 @@
-import type { PackageJson } from "type-fest";
+// In the default (non-node) build, filesystem access is not available.
+// The node build (src/node.ts) provides its own inline implementation
+// using static top-level imports of node:fs/promises and node:path.
-let packageJSONCache: PackageJson | undefined;
-
-async function readRootPackageJson() {
- if (packageJSONCache) return packageJSONCache;
- try {
- const cwd =
- typeof process !== "undefined" && typeof process.cwd === "function"
- ? process.cwd()
- : "";
- if (!cwd) return undefined;
- // Lazily import Node built-ins only when available (Node/Bun/Deno) and
- // avoid static analyzer/bundler resolution by obfuscating module names
- const importRuntime = (m: string) =>
- (Function("mm", "return import(mm)") as any)(m);
- const [{ default: fs }, { default: path }] = await Promise.all([
- importRuntime("fs/promises"),
- importRuntime("path"),
- ]);
- const raw = await fs.readFile(path.join(cwd, "package.json"), "utf-8");
- packageJSONCache = JSON.parse(raw);
- return packageJSONCache as PackageJson;
- } catch {}
+export async function getPackageVersion(
+ _pkg: string,
+): Promise {
return undefined;
}
-export async function getPackageVersion(pkg: string) {
- if (packageJSONCache) {
- return (packageJSONCache.dependencies?.[pkg] ||
- packageJSONCache.devDependencies?.[pkg] ||
- packageJSONCache.peerDependencies?.[pkg]) as string | undefined;
- }
-
- try {
- const cwd =
- typeof process !== "undefined" && typeof process.cwd === "function"
- ? process.cwd()
- : "";
- if (!cwd) throw new Error("no-cwd");
- const importRuntime = (m: string) =>
- (Function("mm", "return import(mm)") as any)(m);
- const [{ default: fs }, { default: path }] = await Promise.all([
- importRuntime("fs/promises"),
- importRuntime("path"),
- ]);
- const pkgJsonPath = path.join(cwd, "node_modules", pkg, "package.json");
- const raw = await fs.readFile(pkgJsonPath, "utf-8");
- const json = JSON.parse(raw);
- const resolved =
- (json.version as string) ||
- (await getVersionFromLocalPackageJson(pkg)) ||
- undefined;
- return resolved;
- } catch {}
-
- const fromRoot = await getVersionFromLocalPackageJson(pkg);
- return fromRoot;
-}
-
-async function getVersionFromLocalPackageJson(pkg: string) {
- const json = await readRootPackageJson();
- if (!json) return undefined;
- const allDeps = {
- ...json.dependencies,
- ...json.devDependencies,
- ...json.peerDependencies,
- } as Record;
- return allDeps[pkg];
-}
-
-export async function getNameFromLocalPackageJson() {
- const json = await readRootPackageJson();
- return json?.name as string | undefined;
+export async function getNameFromLocalPackageJson(): Promise<
+ string | undefined
+> {
+ return undefined;
}
diff --git a/packages/telemetry/tsdown.config.ts b/packages/telemetry/tsdown.config.ts
index d100d00ed5a..ef780f9c8a8 100644
--- a/packages/telemetry/tsdown.config.ts
+++ b/packages/telemetry/tsdown.config.ts
@@ -1,8 +1,16 @@
import { defineConfig } from "tsdown";
-export default defineConfig({
- dts: { build: true, incremental: true },
- format: ["esm"],
- entry: ["./src/index.ts"],
- sourcemap: true,
-});
+export default defineConfig([
+ {
+ dts: { build: true, incremental: true },
+ format: ["esm"],
+ entry: ["./src/index.ts"],
+ sourcemap: true,
+ },
+ {
+ dts: { build: true, incremental: true },
+ format: ["esm"],
+ entry: ["./src/node.ts"],
+ sourcemap: true,
+ },
+]);
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index f4ac00b8cec..b611c21584f 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@better-auth/test-utils",
- "version": "1.5.4",
+ "version": "1.5.6",
"description": "Testing utilities for Better Auth adapter development",
"type": "module",
"license": "MIT",
@@ -28,7 +28,7 @@
],
"exports": {
"./adapter": {
- "dev-source": "./src/adapter.ts",
+ "dev-source": "./src/adapter/index.ts",
"default": "./dist/adapter.mjs",
"types": "./dist/adapter.d.mts"
}
diff --git a/packages/test-utils/src/adapter/index.ts b/packages/test-utils/src/adapter/index.ts
index e309ce0b1d0..401b4caab5b 100644
--- a/packages/test-utils/src/adapter/index.ts
+++ b/packages/test-utils/src/adapter/index.ts
@@ -4,4 +4,5 @@ export {
type TestEntry,
type TestSuiteStats,
} from "./create-test-suite";
+export * from "./suites";
export { type Logger, testAdapter } from "./test-adapter";
diff --git a/e2e/adapter/test/adapter-factory/auth-flow.ts b/packages/test-utils/src/adapter/suites/auth-flow.ts
similarity index 98%
rename from e2e/adapter/test/adapter-factory/auth-flow.ts
rename to packages/test-utils/src/adapter/suites/auth-flow.ts
index 0fb91c834c6..60c9ba8921e 100644
--- a/e2e/adapter/test/adapter-factory/auth-flow.ts
+++ b/packages/test-utils/src/adapter/suites/auth-flow.ts
@@ -1,7 +1,7 @@
import type { Session, User } from "@better-auth/core/db";
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import { setCookieToHeader } from "better-auth/cookies";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
/**
* This test suite tests basic authentication flow using the adapter.
diff --git a/e2e/adapter/test/adapter-factory/basic.ts b/packages/test-utils/src/adapter/suites/basic.ts
similarity index 99%
rename from e2e/adapter/test/adapter-factory/basic.ts
rename to packages/test-utils/src/adapter/suites/basic.ts
index 15dd776f03f..bf8d7fccaf1 100644
--- a/e2e/adapter/test/adapter-factory/basic.ts
+++ b/packages/test-utils/src/adapter/suites/basic.ts
@@ -5,7 +5,6 @@ import type {
User,
Verification,
} from "@better-auth/core/db";
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import type {
Invitation,
Member,
@@ -14,6 +13,7 @@ import type {
} from "better-auth/plugins/organization";
import { organization } from "better-auth/plugins/organization";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
/**
* This test suite tests the basic CRUD operations of the adapter.
diff --git a/packages/test-utils/src/adapter/suites/index.ts b/packages/test-utils/src/adapter/suites/index.ts
new file mode 100644
index 00000000000..c60974851e9
--- /dev/null
+++ b/packages/test-utils/src/adapter/suites/index.ts
@@ -0,0 +1,6 @@
+export * from "./auth-flow";
+export * from "./basic";
+export * from "./joins";
+export * from "./number-id";
+export * from "./transactions";
+export * from "./uuid";
diff --git a/e2e/adapter/test/adapter-factory/joins.ts b/packages/test-utils/src/adapter/suites/joins.ts
similarity index 89%
rename from e2e/adapter/test/adapter-factory/joins.ts
rename to packages/test-utils/src/adapter/suites/joins.ts
index 533d5297594..974c07a0ed0 100644
--- a/e2e/adapter/test/adapter-factory/joins.ts
+++ b/packages/test-utils/src/adapter/suites/joins.ts
@@ -1,5 +1,5 @@
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
import { getNormalTestSuiteTests } from "./basic";
export const joinsTestSuite = createTestSuite(
diff --git a/e2e/adapter/test/adapter-factory/number-id.ts b/packages/test-utils/src/adapter/suites/number-id.ts
similarity index 83%
rename from e2e/adapter/test/adapter-factory/number-id.ts
rename to packages/test-utils/src/adapter/suites/number-id.ts
index d2881c9fb0b..0a819cfc110 100644
--- a/e2e/adapter/test/adapter-factory/number-id.ts
+++ b/packages/test-utils/src/adapter/suites/number-id.ts
@@ -1,6 +1,6 @@
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import type { User } from "better-auth/types";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
import { getNormalTestSuiteTests } from "./basic";
export const numberIdTestSuite = createTestSuite(
@@ -23,10 +23,7 @@ export const numberIdTestSuite = createTestSuite(
return {
"init - tests": async () => {
const opts = helpers.getBetterAuthOptions();
- expect(
- opts.advanced?.database?.useNumberId ||
- opts.advanced?.database?.generateId === "serial",
- ).toBe(true);
+ expect(opts.advanced?.database?.generateId === "serial").toBe(true);
},
"create - should return a number id": async () => {
const user = await helpers.generate("user");
diff --git a/e2e/adapter/test/adapter-factory/transactions.ts b/packages/test-utils/src/adapter/suites/transactions.ts
similarity index 95%
rename from e2e/adapter/test/adapter-factory/transactions.ts
rename to packages/test-utils/src/adapter/suites/transactions.ts
index 1b08d03bf2e..54275393e88 100644
--- a/e2e/adapter/test/adapter-factory/transactions.ts
+++ b/packages/test-utils/src/adapter/suites/transactions.ts
@@ -1,6 +1,6 @@
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import type { User } from "better-auth/db";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
/**
* This test suite tests the transaction functionality of the adapter.
diff --git a/e2e/adapter/test/adapter-factory/uuid.ts b/packages/test-utils/src/adapter/suites/uuid.ts
similarity index 96%
rename from e2e/adapter/test/adapter-factory/uuid.ts
rename to packages/test-utils/src/adapter/suites/uuid.ts
index 1112f80c4e6..31c18430184 100644
--- a/e2e/adapter/test/adapter-factory/uuid.ts
+++ b/packages/test-utils/src/adapter/suites/uuid.ts
@@ -1,6 +1,6 @@
import type { User } from "@better-auth/core/db";
-import { createTestSuite } from "@better-auth/test-utils/adapter";
import { expect } from "vitest";
+import { createTestSuite } from "../create-test-suite";
import { getNormalTestSuiteTests } from "./basic";
export const uuidTestSuite = createTestSuite(
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a53f28c7453..286c608b1bf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,7 +26,7 @@ catalogs:
version: 3.6.1
vitest:
specifier: ^4.0.18
- version: 4.0.18
+ version: 4.1.0
react19:
'@types/react':
specifier: ^19.2.14
@@ -118,7 +118,7 @@ importers:
version: 5.9.3
vitest:
specifier: catalog:vitest
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
docs:
dependencies:
@@ -223,13 +223,13 @@ importers:
version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@scalar/nextjs-api-reference':
specifier: ^0.9.14
- version: 0.9.24(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)
+ version: 0.9.24(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)
'@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.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
+ version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
'@vercel/og':
specifier: ^0.8.6
version: 0.8.6
@@ -265,19 +265,19 @@ importers:
version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
fumadocs-core:
specifier: 16.5.2
- version: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ version: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
fumadocs-mdx:
specifier: 14.2.7
- version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
fumadocs-typescript:
specifier: ^5.1.2
- version: 5.1.4(f245ce4745497b47498caec764b8c0fe)
+ version: 5.1.4(9b4153ee01e9e4517d024462946a1b90)
fumadocs-ui:
specifier: 16.5.2
- version: 16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ version: 16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
geist:
specifier: ^1.5.1
- version: 1.7.0(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
+ version: 1.7.0(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
gray-matter:
specifier: ^4.0.3
version: 4.0.3
@@ -312,8 +312,8 @@ importers:
specifier: ^12.34.0
version: 12.34.3(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.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ specifier: 16.2.0
+ version: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -447,13 +447,13 @@ importers:
version: 0.30.6
drizzle-orm:
specifier: ^0.45.1
- version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
mongodb:
specifier: ^7.1.0
version: 7.1.0(socks@2.8.7)
mysql2:
specifier: ^3.18.2
- version: 3.18.2(@types/node@25.3.3)
+ version: 3.18.2(@types/node@25.5.0)
pg:
specifier: ^8.19.0
version: 8.19.0
@@ -586,7 +586,7 @@ importers:
version: 0.15.4(solid-js@1.9.11)
'@solidjs/start':
specifier: ^1.3.2
- version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 1.3.2(solid-js@1.9.11)(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
better-auth:
specifier: workspace:*
version: link:../../../packages/better-auth
@@ -595,7 +595,7 @@ importers:
version: 1.9.11
vinxi:
specifier: ^0.5.11
- version: 0.5.11(ea2978ce6718d4cf7fba8416fff7f771)
+ version: 0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b)
devDependencies:
'@better-auth-test/test-utils':
specifier: workspace:*
@@ -627,7 +627,7 @@ importers:
version: link:../test-utils
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
e2e/smoke:
devDependencies:
@@ -648,7 +648,7 @@ importers:
version: 5.9.3
msw:
specifier: ^2.12.10
- version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
+ version: 2.12.10(@types/node@25.5.0)(typescript@5.9.3)
e2e/smoke/test/fixtures/cloudflare:
dependencies:
@@ -660,14 +660,14 @@ importers:
version: link:../../../../../packages/better-auth
drizzle-orm:
specifier: ^0.45.1
- version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
hono:
- specifier: ^4.12.3
- version: 4.12.5
+ specifier: ^4.12.7
+ version: 4.12.7
devDependencies:
'@cloudflare/vitest-pool-workers':
specifier: ^0.12.18
- version: 0.12.18(@cloudflare/workers-types@4.20260226.1)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@4.0.18)
+ version: 0.12.18(@cloudflare/workers-types@4.20260226.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))
'@cloudflare/workers-types':
specifier: ^4.20260226.1
version: 4.20260226.1
@@ -691,14 +691,14 @@ importers:
e2e/smoke/test/fixtures/ipv6:
dependencies:
'@hono/node-server':
- specifier: ^1.19.9
- version: 1.19.11(hono@4.12.5)
+ specifier: ^1.19.10
+ version: 1.19.11(hono@4.12.7)
better-auth:
specifier: workspace:*
version: link:../../../../../packages/better-auth
hono:
- specifier: ^4.12.3
- version: 4.12.5
+ specifier: ^4.12.7
+ version: 4.12.7
e2e/smoke/test/fixtures/tsconfig-declaration:
dependencies:
@@ -719,7 +719,7 @@ importers:
version: link:../../../../../packages/better-auth
stripe:
specifier: ^20.4.0
- version: 20.4.0(@types/node@25.3.3)
+ version: 20.4.0(@types/node@25.5.0)
e2e/smoke/test/fixtures/tsconfig-exact-optional-property-types:
dependencies:
@@ -756,7 +756,7 @@ importers:
devDependencies:
vite:
specifier: ^7.3.1
- version: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
landing:
dependencies:
@@ -781,9 +781,9 @@ importers:
'@hookform/resolvers':
specifier: ^5.2.1
version: 5.2.2(react-hook-form@7.71.2(react@19.2.4))
- '@inkeep/ai-sdk-provider':
- specifier: ^0.54.0
- version: 0.54.0(83a68346fc13ad25aca201c9925acb84)
+ '@openrouter/ai-sdk-provider':
+ specifier: ^2.2.5
+ version: 2.2.5(ai@6.0.116(zod@4.3.6))(zod@4.3.6)
'@radix-ui/react-checkbox':
specifier: ^1.3.3
version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -832,15 +832,21 @@ importers:
'@tsparticles/slim':
specifier: ^3.9.1
version: 3.9.1
+ '@upstash/ratelimit':
+ specifier: ^2.0.8
+ version: 2.0.8(@upstash/redis@1.36.4)
+ '@upstash/redis':
+ specifier: ^1.36.4
+ version: 1.36.4
'@vercel/analytics':
specifier: ^1.6.1
- version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
+ version: 1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))
'@vercel/og':
specifier: ^0.10.1
version: 0.10.1
ai:
- specifier: ^6.0.104
- version: 6.0.105(zod@4.3.6)
+ specifier: ^6.0.116
+ version: 6.0.116(zod@4.3.6)
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -861,19 +867,19 @@ importers:
version: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
fumadocs-core:
specifier: 16.6.7
- version: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ version: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
fumadocs-mdx:
specifier: ^14.2.8
- version: 14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
fumadocs-typescript:
specifier: ^5.1.4
- version: 5.1.4(3749dc07ba6aad1af5ecb0ad432fe651)
+ version: 5.1.4(6f1717d56d58a3cff48f6e7a0874b43c)
fumadocs-ui:
specifier: 16.6.7
- version: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ version: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
geist:
specifier: ^1.7.0
- version: 1.7.0(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
+ version: 1.7.0(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))
hast-util-to-jsx-runtime:
specifier: ^2.3.6
version: 2.3.6
@@ -887,8 +893,8 @@ importers:
specifier: ^12.23.12
version: 12.34.3(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.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ specifier: 16.2.0
+ version: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
next-themes:
specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -942,10 +948,10 @@ importers:
version: 0.183.2
typesense:
specifier: ^3.0.2
- version: 3.0.2(@babel/runtime@7.28.6)
+ version: 3.0.2(@babel/runtime@7.29.2)
typesense-fumadocs-adapter:
specifier: ^0.3.0
- version: 0.3.0(315bbd73201b0530b183e3c1250d4415)
+ version: 0.3.0(588ddc5beb77b81f1d770f6df2e4097f)
unist-util-visit:
specifier: ^5.1.0
version: 5.1.0
@@ -1055,7 +1061,7 @@ importers:
version: 0.31.9
drizzle-orm:
specifier: '>=0.41.0'
- version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
jose:
specifier: ^6.1.3
version: 6.1.3
@@ -1067,7 +1073,7 @@ importers:
version: 7.1.0(socks@2.8.7)
mysql2:
specifier: ^3.0.0
- version: 3.18.2(@types/node@25.3.3)
+ version: 3.18.2(@types/node@25.5.0)
nanostores:
specifier: ^1.1.1
version: 1.1.1
@@ -1089,13 +1095,13 @@ importers:
version: 0.116.3(@types/react@19.2.14)
'@sveltejs/kit':
specifier: ^2.53.3
- version: 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/react-start':
specifier: ^1.163.2
- version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/solid-start':
specifier: ^1.163.2
- version: 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ version: 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@types/better-sqlite3':
specifier: ^7.6.13
version: 7.6.13
@@ -1125,10 +1131,10 @@ importers:
version: 1.9.0
msw:
specifier: ^2.12.10
- version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
+ version: 2.12.10(@types/node@25.5.0)(typescript@5.9.3)
next:
- specifier: ^16.1.6
- version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ specifier: ^16.2.0
+ version: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
oauth2-mock-server:
specifier: ^8.2.2
version: 8.2.2
@@ -1158,7 +1164,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^4.0.18
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
vue:
specifier: ^3.5.29
version: 3.5.29(typescript@5.9.3)
@@ -1177,7 +1183,7 @@ importers:
version: link:../../better-auth
drizzle-orm:
specifier: ^0.38.2
- version: 0.38.4(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/react@19.2.14)(better-sqlite3@12.6.2)(bun-types@1.3.9)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react@19.2.4)
+ version: 0.38.4(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/react@19.2.14)(better-sqlite3@12.6.2)(bun-types@1.3.9)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react@19.2.4)
typescript:
specifier: 'catalog:'
version: 5.9.3
@@ -1227,7 +1233,7 @@ importers:
version: 3.6.1(sass@1.97.1)(typescript@5.9.3)(vue@3.5.29(typescript@5.9.3))
vitest:
specifier: 'catalog:'
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
packages/btst/adapter-mongodb:
dependencies:
@@ -1338,7 +1344,7 @@ importers:
version: 3.6.1(sass@1.97.1)(typescript@5.9.3)(vue@3.5.29(typescript@5.9.3))
vitest:
specifier: 'catalog:'
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.37)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@20.19.37)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
optionalDependencies:
better-sqlite3:
specifier: ^12.2.0
@@ -1370,7 +1376,7 @@ importers:
version: 3.6.1(sass@1.97.1)(typescript@5.9.3)(vue@3.5.29(typescript@5.9.3))
vitest:
specifier: 'catalog:'
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
packages/btst/plugins:
dependencies:
@@ -1434,7 +1440,10 @@ importers:
version: 17.3.1
drizzle-orm:
specifier: ^0.41.0
- version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ get-tsconfig:
+ specifier: ^4.13.6
+ version: 4.13.6
open:
specifier: ^10.2.0
version: 10.2.0
@@ -1535,7 +1544,7 @@ importers:
version: 0.3.1
drizzle-orm:
specifier: ^0.45.1
- version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ version: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
tsdown:
specifier: 'catalog:'
version: 0.21.0-beta.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
@@ -1792,7 +1801,7 @@ importers:
version: 5.9.3
vitest:
specifier: catalog:vitest
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
packages/scim:
dependencies:
@@ -1828,8 +1837,8 @@ importers:
specifier: 'catalog:'
version: 1.1.21
fast-xml-parser:
- specifier: ^5.4.1
- version: 5.4.1
+ specifier: ^5.5.6
+ version: 5.5.6
jose:
specifier: ^6.1.3
version: 6.1.3
@@ -1891,7 +1900,7 @@ importers:
version: 1.3.2(zod@4.3.6)
stripe:
specifier: ^20.4.0
- version: 20.4.0(@types/node@25.3.3)
+ version: 20.4.0(@types/node@25.5.0)
tsdown:
specifier: 'catalog:'
version: 0.21.0-beta.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
@@ -1928,7 +1937,7 @@ importers:
version: 0.21.0-beta.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3)
vitest:
specifier: catalog:vitest
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
test:
devDependencies:
@@ -1943,16 +1952,16 @@ importers:
version: link:../packages/better-auth
msw:
specifier: ^2.12.10
- version: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
+ version: 2.12.10(@types/node@25.5.0)(typescript@5.9.3)
openid-client:
specifier: ^6.8.2
version: 6.8.2
undici:
specifier: ^7.22.0
- version: 7.22.0
+ version: 7.24.1
vitest:
specifier: catalog:vitest
- version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
packages:
@@ -1970,32 +1979,14 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/anthropic@3.0.7':
- resolution: {integrity: sha512-WFE56yxgjecd77f8pNj1TkusfCKh34E4h+0J0qVOKDNFXuOsZiAb6dIG9Q3PUrwY1MuiMQLD/9ir0s+dVcVfeA==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.25.76 || ^4.1.8
-
- '@ai-sdk/azure@3.0.38':
- resolution: {integrity: sha512-ihePWrlsSfCz1sB6tkaRErw9w1f26uKncoVYu3EBjFhvuY0tOIOOcMS3649R/she8wPR/cP5n69t6C8BtjZAFA==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.25.76 || ^4.1.8
-
'@ai-sdk/gateway@3.0.59':
resolution: {integrity: sha512-MbtheWHgEFV/8HL1Z6E3hOAsmP73zZlNFg0F0nJAD0Adnjp4J/plqNK00Y896d+dWTw+r0OXzyov9/2wCFjH0Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/gateway@3.0.9':
- resolution: {integrity: sha512-EA5dZIukimwoJ9HIPuuREotAqaTItpdc/yImzVF0XGNg7B0YRJmYI8Uq3aCMr87vjr1YB1cWUfnrTt6OJ9eHiQ==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.25.76 || ^4.1.8
-
- '@ai-sdk/google@3.0.4':
- resolution: {integrity: sha512-2TlnBY0QAL4aYaV7fLdUvs+akTwE6B2l8CKSLpKrJlB0LVqmhXK6uP2CrOuCi/8d0H0q1JTr+avLgd23VNgcLQ==}
+ '@ai-sdk/gateway@3.0.66':
+ resolution: {integrity: sha512-SIQ0YY0iMuv+07HLsZ+bB990zUJ6S4ujORAh+Jv1V2KGNn73qQKnGO0JBk+w+Res8YqOFSycwDoWcFlQrVxS4A==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -2006,24 +1997,12 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai-compatible@2.0.4':
- resolution: {integrity: sha512-kzsXyybJKM3wtUtGZkNbvmpDwqpsvg/hTjlPZe3s/bCx3enVdAlRtXD853nnj6mZjteNCDLoR2OgVLuDpyRN5Q==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.25.76 || ^4.1.8
-
'@ai-sdk/openai@3.0.37':
resolution: {integrity: sha512-bcYjT3/58i/C0DN3AnrjiGsAb0kYivZLWWUtgTjsBurHSht/LTEy+w3dw5XQe3FmZwX7Z/mUQCiA3wB/5Kf7ow==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/openai@3.0.7':
- resolution: {integrity: sha512-CBoYn1U59Lop8yBL9KuVjHCKc/B06q9Qo0SasRwHoyMEq+X4I8LQZu3a8Ck1jwwcZTTxfyiExB70LtIRSynBDA==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.25.76 || ^4.1.8
-
'@ai-sdk/provider-utils@4.0.15':
resolution: {integrity: sha512-8XiKWbemmCbvNN0CLR9u3PQiet4gtEVIrX4zzLxnCj06AwsEDJwJVBbKrEI4t6qE8XRSIvU2irka0dcpziKW6w==}
engines: {node: '>=18'}
@@ -2036,16 +2015,12 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider-utils@4.0.4':
- resolution: {integrity: sha512-VxhX0B/dWGbpNHxrKCWUAJKXIXV015J4e7qYjdIU9lLWeptk0KMLGcqkB4wFxff5Njqur8dt8wRi1MN9lZtDqg==}
+ '@ai-sdk/provider-utils@4.0.19':
+ resolution: {integrity: sha512-3eG55CrSWCu2SXlqq2QCsFjo3+E7+Gmg7i/oRVoSZzIodTuDSfLb3MRje67xE9RFea73Zao7Lm4mADIfUETKGg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/provider@3.0.2':
- resolution: {integrity: sha512-HrEmNt/BH/hkQ7zpi2o6N3k1ZR1QTb7z85WYhYygiTxOQuaml4CMtHCWRbric5WPU+RNsYI7r1EpyVQMKO1pYw==}
- engines: {node: '>=18'}
-
'@ai-sdk/provider@3.0.8':
resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==}
engines: {node: '>=18'}
@@ -2131,18 +2106,10 @@ packages:
resolution: {integrity: sha512-GiwTmBFOU1/+UVNqqCGzFJYfBXEytUkiI+iRZ6Qx7KmUVtLm00sYySkfe203C9QtPG11yOz1ZaMek8dT/xnlgg==}
engines: {node: '>=20'}
- '@asteasolutions/zod-to-openapi@8.4.3':
- resolution: {integrity: sha512-lwfMTN7kDbFDwMniYZUebiGGHxVGBw9ZSI4IBYjm6Ey22Kd5z/fsQb2k+Okr8WMbCCC553vi/ZM9utl5/XcvuQ==}
- peerDependencies:
- zod: ^4.0.0
-
'@authenio/xml-encryption@2.0.2':
resolution: {integrity: sha512-cTlrKttbrRHEw3W+0/I609A2Matj5JQaRvfLtEIGZvlN0RaPi+3ANsMeqAyCAVlH/lUIW2tmtBlSMni74lcXeg==}
engines: {node: '>=12'}
- '@authzed/authzed-node@1.6.1':
- resolution: {integrity: sha512-Rj3rMtWOjo3igxY/2fpPrIedCTfDq3e+weykuxNBzV/y6azBCoXp8SzpjCEJXVcWyBD8bu/EKY3cye3kOLsKpQ==}
-
'@azure-rest/core-client@2.5.1':
resolution: {integrity: sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==}
engines: {node: '>=20.0.0'}
@@ -2241,8 +2208,8 @@ packages:
resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@8.0.0-rc.1':
- resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==}
+ '@babel/generator@8.0.0-rc.2':
+ resolution: {integrity: sha512-oCQ1IKPwkzCeJzAPb7Fv8rQ9k5+1sG8mf2uoHiMInPYvkRfrDJxbTIbH51U+jstlkghus0vAi3EBvkfvEsYNLQ==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-annotate-as-pure@7.27.3':
@@ -2265,8 +2232,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-define-polyfill-provider@0.6.6':
- resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==}
+ '@babel/helper-define-polyfill-provider@0.6.8':
+ resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -2328,8 +2295,8 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@8.0.0-rc.1':
- resolution: {integrity: sha512-I4YnARytXC2RzkLNVnf5qFNFMzp679qZpmtw/V3Jt2uGnWiIxyJtaukjG7R8pSx8nG2NamICpGfljQsogj+FbQ==}
+ '@babel/helper-validator-identifier@8.0.0-rc.2':
+ resolution: {integrity: sha512-xExUBkuXWJjVuIbO7z6q7/BA9bgfJDEhVL0ggrggLMbg0IzCUWGT1hZGE8qUH7Il7/RD/a6cZ3AAFrrlp1LF/A==}
engines: {node: ^20.19.0 || >=22.12.0}
'@babel/helper-validator-option@7.27.1':
@@ -2353,8 +2320,13 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/parser@8.0.0-rc.1':
- resolution: {integrity: sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA==}
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/parser@8.0.0-rc.2':
+ resolution: {integrity: sha512-29AhEtcq4x8Dp3T72qvUMZHx0OMXCj4Jy/TEReQa+KWLln524Cj1fWb3QFi0l/xSpptQBR6y9RNEXuxpFvwiUQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -2700,12 +2672,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-template-literals@7.27.1':
- resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-transform-typescript@7.28.6':
resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==}
engines: {node: '>=6.9.0'}
@@ -2734,6 +2700,10 @@ packages:
resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines: {node: '>=6.9.0'}
+ '@babel/runtime@7.29.2':
+ resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
+ engines: {node: '>=6.9.0'}
+
'@babel/template@7.28.6':
resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
engines: {node: '>=6.9.0'}
@@ -2746,35 +2716,10 @@ packages:
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
- '@babel/types@8.0.0-rc.1':
- resolution: {integrity: sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ==}
+ '@babel/types@8.0.0-rc.2':
+ resolution: {integrity: sha512-91gAaWRznDwSX4E2tZ1YjBuIfnQVOFDCQ2r0Toby0gu4XEbyF623kXLMA8d4ZbCu+fINcrudkmEcwSUHgDDkNw==}
engines: {node: ^20.19.0 || >=22.12.0}
- '@better-auth/core@1.4.19':
- resolution: {integrity: sha512-uADLHG1jc5BnEJi7f6ijUN5DmPPRSj++7m/G19z3UqA3MVCo4Y4t1MMa4IIxLCqGDFv22drdfxescgW+HnIowA==}
- peerDependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.21
- better-call: 1.1.8
- jose: ^6.1.0
- kysely: ^0.28.5
- nanostores: ^1.0.1
-
- '@better-auth/sso@1.4.19':
- resolution: {integrity: sha512-4OVPii6DQgIRm/DqO74Q4tZHx0LlNHXif3qrW7/iDzRO507h/AVAoJ9/U2fGycsPxUtPh1BT3PGHfX09sbF9Bw==}
- peerDependencies:
- '@better-auth/utils': 0.3.0
- better-auth: 1.4.19
- better-call: 1.1.8
-
- '@better-auth/telemetry@1.4.19':
- resolution: {integrity: sha512-ApGNS7olCTtDpKF8Ow3Z+jvFAirOj7c4RyFUpu8axklh3mH57ndpfUAUjhgA8UVoaaH/mnm/Tl884BlqiewLyw==}
- peerDependencies:
- '@better-auth/core': 1.4.19
-
- '@better-auth/utils@0.3.0':
- resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==}
-
'@better-auth/utils@0.3.1':
resolution: {integrity: sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==}
@@ -2973,19 +2918,6 @@ packages:
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
- '@composio/client@0.1.0-alpha.40':
- resolution: {integrity: sha512-xkd+LseCiuFLxiXXtjFgON0bO4M/1AsBQD4omhf2nl5tXJI0sXj72wCf1EXhT2jIu5pgJqJ4H64ZzwoM0fHDvg==}
-
- '@composio/core@0.2.6':
- resolution: {integrity: sha512-QQgZz9o0ikl+A38PhyE0/j5V1y5wDDl8z6yfYw/WYAkk7AqjOJI9eJ/eujwgkTWxKnMaxrkthVzsjtvg/KIoYw==}
- peerDependencies:
- zod: '>=3.25.76 <5'
-
- '@composio/json-schema-to-zod@0.1.19':
- resolution: {integrity: sha512-OynnORVWjsqDv13EvFa4Bb+B1SzBqpkWGi6qXm4vpB3EG65o3T9FbhDCqWB3ZufnMmH1T/NYS526O0lnn2LoCQ==}
- peerDependencies:
- zod: '>=3.25.76 <4 || >=4.1 <5'
-
'@cspell/cspell-bundled-dicts@9.7.0':
resolution: {integrity: sha512-s7h1vo++Q3AsfQa3cs0u/KGwm3SYInuIlC4kjlCBWjQmb4KddiZB5O1u0+3TlA7GycHb5M4CR7MDfHUICgJf+w==}
engines: {node: '>=20'}
@@ -3239,10 +3171,6 @@ packages:
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
- '@egjs/hammerjs@2.0.17':
- resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==}
- engines: {node: '>=0.8.0'}
-
'@electric-sql/pglite-socket@0.0.20':
resolution: {integrity: sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==}
hasBin: true
@@ -4192,15 +4120,6 @@ packages:
tailwindcss:
optional: true
- '@grpc/grpc-js@1.14.3':
- resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==}
- engines: {node: '>=12.10.0'}
-
- '@grpc/proto-loader@0.8.0':
- resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==}
- engines: {node: '>=6'}
- hasBin: true
-
'@hapi/hoek@9.3.0':
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
@@ -4225,19 +4144,6 @@ packages:
peerDependencies:
hono: ^4
- '@hono/zod-openapi@1.2.2':
- resolution: {integrity: sha512-va6vsL23wCJ1d0Vd+vGL1XOt+wPwItxirYafuhlW9iC2MstYr2FvsI7mctb45eBTjZfkqB/3LYDJEppPjOEiHw==}
- engines: {node: '>=16.0.0'}
- peerDependencies:
- hono: '>=4.3.6'
- zod: ^4.0.0
-
- '@hono/zod-validator@0.7.6':
- resolution: {integrity: sha512-Io1B6d011Gj1KknV4rXYz4le5+5EubcWEU/speUjuw9XMMIaP3n78yXLhjd2A3PXaXaUwEAluOiAyLqhBEJgsw==}
- peerDependencies:
- hono: '>=3.9.0'
- zod: ^3.25.0 || ^4.0.0
-
'@hookform/resolvers@5.2.2':
resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
peerDependencies:
@@ -4402,17 +4308,6 @@ packages:
cpu: [x64]
os: [win32]
- '@inkeep/agents-core@0.54.0':
- resolution: {integrity: sha512-zHQ+r0LYhLU/4GvFGOv7BoQGqwAPf61sZDRF/Me460oNuJk1tnh/mKcqDCBG9pRNzA96bujznOReGzVxSIndgw==}
- engines: {node: '>=22.18.0'}
- peerDependencies:
- '@hono/zod-openapi': ^1.1.5
- zod: ^4.3.6
-
- '@inkeep/ai-sdk-provider@0.54.0':
- resolution: {integrity: sha512-yvYAyiWJJ9/07/H4FnXRqp3kCiKOsFI1FyZJFl2HuqPmoqRtlO0gDryp8b3gDW4SVsqGY2phK31lobI0E+qs1g==}
- engines: {node: '>=22.18.0'}
-
'@inquirer/ansi@1.0.2':
resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
engines: {node: '>=18'}
@@ -4520,9 +4415,6 @@ packages:
'@js-joda/core@5.7.0':
resolution: {integrity: sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==}
- '@js-sdsl/ordered-map@4.4.2':
- resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
-
'@jsonjoy.com/base64@1.1.2':
resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
engines: {node: '>=10.0'}
@@ -4758,94 +4650,6 @@ packages:
resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==}
engines: {node: '>=18'}
- '@nangohq/node@0.69.38':
- resolution: {integrity: sha512-8Bmt5SPRAXcWg/mcQLP+DZTGir02RsHgXSPHs/KAliyNZX81O/YpCVlr87dSrtzSO1UpMeBk5aKnelMvCAgVEg==}
- engines: {node: '>=20.0'}
-
- '@nangohq/types@0.69.38':
- resolution: {integrity: sha512-YHTk4+55PtguG094qOZaRdJ1qXB8wTmffpq6vdQYhGzZJUk9TPRqHA0P5i2FM/ZuOczX6ciHOmUWmqykxHaRog==}
-
- '@napi-rs/keyring-darwin-arm64@1.2.0':
- resolution: {integrity: sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@napi-rs/keyring-darwin-x64@1.2.0':
- resolution: {integrity: sha512-dBHjtKRCj4ByfnfqIKIJLo3wueQNJhLRyuxtX/rR4K/XtcS7VLlRD01XXizjpre54vpmObj63w+ZpHG+mGM8uA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@napi-rs/keyring-freebsd-x64@1.2.0':
- resolution: {integrity: sha512-DPZFr11pNJSnaoh0dzSUNF+T6ORhy3CkzUT3uGixbA71cAOPJ24iG8e8QrLOkuC/StWrAku3gBnth2XMWOcR3Q==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [freebsd]
-
- '@napi-rs/keyring-linux-arm-gnueabihf@1.2.0':
- resolution: {integrity: sha512-8xv6DyEMlvRdqJzp4F39RLUmmTQsLcGYYv/3eIfZNZN1O5257tHxTrFYqAsny659rJJK2EKeSa7PhrSibQqRWQ==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
-
- '@napi-rs/keyring-linux-arm64-gnu@1.2.0':
- resolution: {integrity: sha512-Pu2V6Py+PBt7inryEecirl+t+ti8bhZphjP+W68iVaXHUxLdWmkgL9KI1VkbRHbx5k8K5Tew9OP218YfmVguIA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@napi-rs/keyring-linux-arm64-musl@1.2.0':
- resolution: {integrity: sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@napi-rs/keyring-linux-riscv64-gnu@1.2.0':
- resolution: {integrity: sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==}
- engines: {node: '>= 10'}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@napi-rs/keyring-linux-x64-gnu@1.2.0':
- resolution: {integrity: sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@napi-rs/keyring-linux-x64-musl@1.2.0':
- resolution: {integrity: sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@napi-rs/keyring-win32-arm64-msvc@1.2.0':
- resolution: {integrity: sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@napi-rs/keyring-win32-ia32-msvc@1.2.0':
- resolution: {integrity: sha512-EYL+EEI6bCsYi3LfwcQdnX3P/R76ENKNn+3PmpGheBsUFLuh0gQuP7aMVHM4rTw6UVe+L3vCLZSptq/oeacz0A==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
-
- '@napi-rs/keyring-win32-x64-msvc@1.2.0':
- resolution: {integrity: sha512-xFlx/TsmqmCwNU9v+AVnEJgoEAlBYgzFF5Ihz1rMpPAt4qQWWkMd4sCyM1gMJ1A/GnRqRegDiQpwaxGUHFtFbA==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@napi-rs/keyring@1.2.0':
- resolution: {integrity: sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==}
- engines: {node: '>= 10'}
-
'@napi-rs/wasm-runtime@1.1.1':
resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
@@ -4860,65 +4664,65 @@ packages:
resolution: {integrity: sha512-qziF8R9kf7mRNgSpmUH96O0aV1ZiwK4c9ZecFQbDSQuYhgy9GY1WTjiQF0oQnohjTjWNtXhrU39LAeXWNLaBJg==}
engines: {node: ^18.14.0 || >=20}
- '@netlify/otel@5.1.1':
- resolution: {integrity: sha512-WCSlOsd0a0Vn+iPC5PYru7rq/5/QpBGnvam6C7cq9DEiTFqfwExNoxk6SWI0T6nI56gkBryaGsENLTEnUue1lg==}
+ '@netlify/otel@5.1.3':
+ resolution: {integrity: sha512-rnyh3V0rHzySPWD2mUys40hV8sDML8l46gGSLl7F+9DN4Y6ivaFXjsvNkSt/3B5ANq5Hw8LAavXgHRefyT8lRw==}
engines: {node: ^18.14.0 || >=20.6.1}
'@netlify/runtime-utils@2.2.1':
resolution: {integrity: sha512-dyJeuggzQM8+Dsi0T8Z9UjfLJ6vCmNC36W6WE2aqzfTdTw4wPkh2xlEu4LoD75+TGuYK7jIhEoU2QcCXOzfyAQ==}
engines: {node: ^18.14.0 || >=20}
- '@next/env@16.1.6':
- resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
+ '@next/env@16.2.0':
+ resolution: {integrity: sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA==}
- '@next/swc-darwin-arm64@16.1.6':
- resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==}
+ '@next/swc-darwin-arm64@16.2.0':
+ resolution: {integrity: sha512-/JZsqKzKt01IFoiLLAzlNqys7qk2F3JkcUhj50zuRhKDQkZNOz9E5N6wAQWprXdsvjRP4lTFj+/+36NSv5AwhQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-x64@16.1.6':
- resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==}
+ '@next/swc-darwin-x64@16.2.0':
+ resolution: {integrity: sha512-/hV8erWq4SNlVgglUiW5UmQ5Hwy5EW/AbbXlJCn6zkfKxTy/E/U3V8U1Ocm2YCTUoFgQdoMxRyRMOW5jYy4ygg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@next/swc-linux-arm64-gnu@16.1.6':
- resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==}
+ '@next/swc-linux-arm64-gnu@16.2.0':
+ resolution: {integrity: sha512-GkjL/Q7MWOwqWR9zoxu1TIHzkOI2l2BHCf7FzeQG87zPgs+6WDh+oC9Sw9ARuuL/FUk6JNCgKRkA6rEQYadUaw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@next/swc-linux-arm64-musl@16.1.6':
- resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==}
+ '@next/swc-linux-arm64-musl@16.2.0':
+ resolution: {integrity: sha512-1ffhC6KY5qWLg5miMlKJp3dZbXelEfjuXt1qcp5WzSCQy36CV3y+JT7OC1WSFKizGQCDOcQbfkH/IjZP3cdRNA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@next/swc-linux-x64-gnu@16.1.6':
- resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==}
+ '@next/swc-linux-x64-gnu@16.2.0':
+ resolution: {integrity: sha512-FmbDcZQ8yJRq93EJSL6xaE0KK/Rslraf8fj1uViGxg7K4CKBCRYSubILJPEhjSgZurpcPQq12QNOJQ0DRJl6Hg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@next/swc-linux-x64-musl@16.1.6':
- resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==}
+ '@next/swc-linux-x64-musl@16.2.0':
+ resolution: {integrity: sha512-HzjIHVkmGAwRbh/vzvoBWWEbb8BBZPxBvVbDQDvzHSf3D8RP/4vjw7MNLDXFF9Q1WEzeQyEj2zdxBtVAHu5Oyw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@next/swc-win32-arm64-msvc@16.1.6':
- resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==}
+ '@next/swc-win32-arm64-msvc@16.2.0':
+ resolution: {integrity: sha512-UMiFNQf5H7+1ZsZPxEsA064WEuFbRNq/kEXyepbCnSErp4f5iut75dBA8UeerFIG3vDaQNOfCpevnERPp2V+nA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@next/swc-win32-x64-msvc@16.1.6':
- resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==}
+ '@next/swc-win32-x64-msvc@16.2.0':
+ resolution: {integrity: sha512-DRrNJKW+/eimrZgdhVN1uvkN1OI4j6Lpefwr44jKQ0YQzztlmOBUUzHuV5GxOMPK3nmodAYElUVCY8ZXo/IWeA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -5002,8 +4806,8 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@openrouter/ai-sdk-provider@2.2.3':
- resolution: {integrity: sha512-NovC+BaCfEeJwhToDrs8JeDYXXlJdEyz7lcxkjtyePSE4eoAKik872SyDK0MzXKcz8MRkv7XlNhPI6zz4TQp0g==}
+ '@openrouter/ai-sdk-provider@2.2.5':
+ resolution: {integrity: sha512-IgM96gPvpxMZYYJQSIuXqvHX0mUXHEvsa/AtIlfb1VK4ek584ydAzc/wf3IuKxNof15o38WZMpCwfsOFHv96Jg==}
engines: {node: '>=18'}
peerDependencies:
ai: ^6.0.0
@@ -5017,541 +4821,58 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/auto-instrumentations-node@0.62.2':
- resolution: {integrity: sha512-Ipe6X7ddrCiRsuewyTU83IvKiSFT4piqmv9z8Ovg1E7v98pdTj1pUE6sDrHV50zl7/ypd+cONBgt+EYSZu4u9Q==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.4.1
- '@opentelemetry/core': ^2.0.0
-
- '@opentelemetry/baggage-span-processor@0.4.2':
- resolution: {integrity: sha512-chJ9dJ3QSGZeqM71C95vqCtGpHru1+2OF802zW5D0FrpfzOgp2uJ0OdhA/ab2y0IOFbsH7xYu1tKGr7xV40vNw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
'@opentelemetry/context-async-hooks@1.30.1':
resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/context-async-hooks@2.0.1':
- resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/context-async-hooks@2.5.1':
- resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
'@opentelemetry/core@1.30.1':
resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/core@2.0.1':
- resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/core@2.5.1':
- resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/exporter-jaeger@2.5.1':
- resolution: {integrity: sha512-U97uyVcWGaXlbsB2v7K3ljg8AeE3jaBRqUp5+/pYReZsK2V4sPfZu4iXeO1vLK1ZIXEdghg5RgWXAB7Uj6ubog==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/exporter-logs-otlp-grpc@0.203.0':
- resolution: {integrity: sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-logs-otlp-http@0.203.0':
- resolution: {integrity: sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-logs-otlp-proto@0.203.0':
- resolution: {integrity: sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0':
- resolution: {integrity: sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-metrics-otlp-http@0.203.0':
- resolution: {integrity: sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-metrics-otlp-proto@0.203.0':
- resolution: {integrity: sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-prometheus@0.203.0':
- resolution: {integrity: sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-trace-otlp-grpc@0.203.0':
- resolution: {integrity: sha512-322coOTf81bm6cAA8+ML6A+m4r2xTCdmAZzGNTboPXRzhwPt4JEmovsFAs+grpdarObd68msOJ9FfH3jxM6wqA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-trace-otlp-http@0.203.0':
- resolution: {integrity: sha512-ZDiaswNYo0yq/cy1bBLJFe691izEJ6IgNmkjm4C6kE9ub/OMQqDXORx2D2j8fzTBTxONyzusbaZlqtfmyqURPw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-trace-otlp-proto@0.203.0':
- resolution: {integrity: sha512-1xwNTJ86L0aJmWRwENCJlH4LULMG2sOXWIVw+Szta4fkqKVY50Eo4HoVKKq6U9QEytrWCr8+zjw0q/ZOeXpcAQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/exporter-zipkin@2.0.1':
- resolution: {integrity: sha512-a9eeyHIipfdxzCfc2XPrE+/TI3wmrZUDFtG2RRXHSbZZULAny7SyybSvaDvS77a7iib5MPiAvluwVvbGTsHxsw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/instrumentation-amqplib@0.50.0':
- resolution: {integrity: sha512-kwNs/itehHG/qaQBcVrLNcvXVPW0I4FCOVtw3LHMLdYIqD7GJ6Yv2nX+a4YHjzbzIeRYj8iyMp0Bl7tlkidq5w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-aws-lambda@0.54.1':
- resolution: {integrity: sha512-qm8pGSAM1mXk7unbrGktWWGJc6IFI58ZsaHJ+i420Fp5VO3Vf7GglIgaXTS8CKBrVB4LHFj3NvzJg31PtsAQcA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-aws-sdk@0.58.0':
- resolution: {integrity: sha512-9vFH7gU686dsAeLMCkqUj9y0MQZ1xrTtStSpNV2UaGWtDnRjJrAdJLu9Y545oKEaDTeVaob4UflyZvvpZnw3Xw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-bunyan@0.49.0':
- resolution: {integrity: sha512-ky5Am1y6s3Ex/3RygHxB/ZXNG07zPfg9Z6Ora+vfeKcr/+I6CJbWXWhSBJor3gFgKN3RvC11UWVURnmDpBS6Pg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-cassandra-driver@0.49.0':
- resolution: {integrity: sha512-BNIvqldmLkeikfI5w5Rlm9vG5NnQexfPoxOgEMzfDVOEF+vS6351I6DzWLLgWWR9CNF/jQJJi/lr6am2DLp0Rw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-connect@0.47.0':
- resolution: {integrity: sha512-pjenvjR6+PMRb6/4X85L4OtkQCootgb/Jzh/l/Utu3SJHBid1F+gk9sTGU2FWuhhEfV6P7MZ7BmCdHXQjgJ42g==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-cucumber@0.19.0':
- resolution: {integrity: sha512-99ms8kQWRuPt5lkDqbJJzD+7Tq5TMUlBZki4SA2h6CgK4ncX+tyep9XFY1e+XTBLJIWmuFMGbWqBLJ4fSKIQNQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/instrumentation-dataloader@0.21.1':
- resolution: {integrity: sha512-hNAm/bwGawLM8VDjKR0ZUDJ/D/qKR3s6lA5NV+btNaPVm2acqhPcT47l2uCVi+70lng2mywfQncor9v8/ykuyw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-dns@0.47.0':
- resolution: {integrity: sha512-775fOnewWkTF4iXMGKgwvOGqEmPrU1PZpXjjqvTrEErYBJe7Fz1WlEeUStHepyKOdld7Ghv7TOF/kE3QDctvrg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-express@0.52.0':
- resolution: {integrity: sha512-W7pizN0Wh1/cbNhhTf7C62NpyYw7VfCFTYg0DYieSTrtPBT1vmoSZei19wfKLnrMsz3sHayCg0HxCVL2c+cz5w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-fastify@0.48.0':
- resolution: {integrity: sha512-3zQlE/DoVfVH6/ycuTv7vtR/xib6WOa0aLFfslYcvE62z0htRu/ot8PV/zmMZfnzpTQj8S/4ULv36R6UIbpJIg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-fs@0.23.0':
- resolution: {integrity: sha512-Puan+QopWHA/KNYvDfOZN6M/JtF6buXEyD934vrb8WhsX1/FuM7OtoMlQyIqAadnE8FqqDL4KDPiEfCQH6pQcQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-generic-pool@0.47.0':
- resolution: {integrity: sha512-UfHqf3zYK+CwDwEtTjaD12uUqGGTswZ7ofLBEdQ4sEJp9GHSSJMQ2hT3pgBxyKADzUdoxQAv/7NqvL42ZI+Qbw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-graphql@0.51.0':
- resolution: {integrity: sha512-LchkOu9X5DrXAnPI1+Z06h/EH/zC7D6sA86hhPrk3evLlsJTz0grPrkL/yUJM9Ty0CL/y2HSvmWQCjbJEz/ADg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-grpc@0.203.0':
- resolution: {integrity: sha512-Qmjx2iwccHYRLoE4RFS46CvQE9JG9Pfeae4EPaNZjvIuJxb/pZa2R9VWzRlTehqQWpAvto/dGhtkw8Tv+o0LTg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-hapi@0.50.0':
- resolution: {integrity: sha512-5xGusXOFQXKacrZmDbpHQzqYD1gIkrMWuwvlrEPkYOsjUqGUjl1HbxCsn5Y9bUXOCgP1Lj6A4PcKt1UiJ2MujA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-http@0.203.0':
- resolution: {integrity: sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-ioredis@0.51.0':
- resolution: {integrity: sha512-9IUws0XWCb80NovS+17eONXsw1ZJbHwYYMXiwsfR9TSurkLV5UNbRSKb9URHO+K+pIJILy9wCxvyiOneMr91Ig==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-kafkajs@0.13.0':
- resolution: {integrity: sha512-FPQyJsREOaGH64hcxlzTsIEQC4DYANgTwHjiB7z9lldmvua1LRMVn3/FfBlzXoqF179B0VGYviz6rn75E9wsDw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-knex@0.48.0':
- resolution: {integrity: sha512-V5wuaBPv/lwGxuHjC6Na2JFRjtPgstw19jTFl1B1b6zvaX8zVDYUDaR5hL7glnQtUSCMktPttQsgK4dhXpddcA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-koa@0.51.0':
- resolution: {integrity: sha512-XNLWeMTMG1/EkQBbgPYzCeBD0cwOrfnn8ao4hWgLv0fNCFQu1kCsJYygz2cvKuCs340RlnG4i321hX7R8gj3Rg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-lru-memoizer@0.48.0':
- resolution: {integrity: sha512-KUW29wfMlTPX1wFz+NNrmE7IzN7NWZDrmFWHM/VJcmFEuQGnnBuTIdsP55CnBDxKgQ/qqYFp4udQFNtjeFosPw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-memcached@0.47.0':
- resolution: {integrity: sha512-vXDs/l4hlWy1IepPG1S6aYiIZn+tZDI24kAzwKKJmR2QEJRL84PojmALAEJGazIOLl/VdcCPZdMb0U2K0VzojA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-mongodb@0.56.0':
- resolution: {integrity: sha512-YG5IXUUmxX3Md2buVMvxm9NWlKADrnavI36hbJsihqqvBGsWnIfguf0rUP5Srr0pfPqhQjUP+agLMsvu0GmUpA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-mongoose@0.50.0':
- resolution: {integrity: sha512-Am8pk1Ct951r4qCiqkBcGmPIgGhoDiFcRtqPSLbJrUZqEPUsigjtMjoWDRLG1Ki1NHgOF7D0H7d+suWz1AAizw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-mysql2@0.50.0':
- resolution: {integrity: sha512-PoOMpmq73rOIE3nlTNLf3B1SyNYGsp7QXHYKmeTZZnJ2Ou7/fdURuOhWOI0e6QZ5gSem18IR1sJi6GOULBQJ9g==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-mysql@0.49.0':
- resolution: {integrity: sha512-QU9IUNqNsrlfE3dJkZnFHqLjlndiU39ll/YAAEvWE40sGOCi9AtOF6rmEGzJ1IswoZ3oyePV7q2MP8SrhJfVAA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-nestjs-core@0.49.0':
- resolution: {integrity: sha512-1R/JFwdmZIk3T/cPOCkVvFQeKYzbbUvDxVH3ShXamUwBlGkdEu5QJitlRMyVNZaHkKZKWgYrBarGQsqcboYgaw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-net@0.47.0':
- resolution: {integrity: sha512-csoJ++Njpf7C09JH+0HNGenuNbDZBqO1rFhMRo6s0rAmJwNh9zY3M/urzptmKlqbKnf4eH0s+CKHy/+M8fbFsQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-oracledb@0.29.0':
- resolution: {integrity: sha512-2aHLiJdkyiUbooIUm7FaZf+O4jyqEl+RfFpgud1dxT87QeeYM216wi+xaMNzsb5yKtRBqbA3qeHBCyenYrOZwA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-pg@0.56.1':
- resolution: {integrity: sha512-0/PiHDPVaLdcXNw6Gqb3JBdMxComMEwh444X8glwiynJKJHRTR49+l2cqJfoOVzB8Sl1XRl3Yaqw6aDi3s8e9w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-pino@0.50.1':
- resolution: {integrity: sha512-pBbvuWiHA9iAumAuQ0SKYOXK7NRlbnVTf/qBV0nMdRnxBPrc/GZTbh0f7Y59gZfYsbCLhXLL1oRTEnS+PwS3CA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-redis@0.52.0':
- resolution: {integrity: sha512-R8Y7cCZlJ2Vl31S2i7bl5SqyC/aul54ski4wCFip/Tp9WGtLK1xVATi2rwy2wkc8ZCtjdEe9eEVR+QFG6gGZxg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-restify@0.49.0':
- resolution: {integrity: sha512-tsGZZhS4mVZH7omYxw5jpsrD3LhWizqWc0PYtAnzpFUvL5ZINHE+cm57bssTQ2AK/GtZMxu9LktwCvIIf3dSmw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-router@0.48.0':
- resolution: {integrity: sha512-Wixrc8CchuJojXpaS/dCQjFOMc+3OEil1H21G+WLYQb8PcKt5kzW9zDBT19nyjjQOx/D/uHPfgbrT+Dc7cfJ9w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-runtime-node@0.17.1':
- resolution: {integrity: sha512-c1FlAk+bB2uF9a8YneGmNPTl7c/xVaan4mmWvbkWcOmH/ipKqR1LaKUlz/BMzLrJLjho1EJlG2NrS2w2Arg+nw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-socket.io@0.50.0':
- resolution: {integrity: sha512-6JN6lnKN9ZuZtZdMQIR+no1qHzQvXSZUsNe3sSWMgqmNRyEXuDUWBIyKKeG0oHRHtR4xE4QhJyD4D5kKRPWZFA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-tedious@0.22.0':
- resolution: {integrity: sha512-XrrNSUCyEjH1ax9t+Uo6lv0S2FCCykcF7hSxBMxKf7Xn0bPRxD3KyFUZy25aQXzbbbUHhtdxj3r2h88SfEM3aA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/instrumentation-undici@0.14.0':
- resolution: {integrity: sha512-2HN+7ztxAReXuxzrtA3WboAKlfP5OsPA57KQn2AdYZbJ3zeRPcLXyW4uO/jpLE6PLm0QRtmeGCmfYpqRlwgSwg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.7.0
-
- '@opentelemetry/instrumentation-winston@0.48.1':
- resolution: {integrity: sha512-XyOuVwdziirHHYlsw+BWrvdI/ymjwnexupKA787zQQ+D5upaE/tseZxjfQa7+t4+FdVLxHICaMTmkSD4yZHpzQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
'@opentelemetry/instrumentation@0.203.0':
resolution: {integrity: sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/otlp-exporter-base@0.203.0':
- resolution: {integrity: sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/otlp-grpc-exporter-base@0.203.0':
- resolution: {integrity: sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
- '@opentelemetry/otlp-transformer@0.203.0':
- resolution: {integrity: sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
-
'@opentelemetry/propagator-b3@1.30.1':
resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/propagator-b3@2.0.1':
- resolution: {integrity: sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
'@opentelemetry/propagator-jaeger@1.30.1':
resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/propagator-jaeger@2.0.1':
- resolution: {integrity: sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/redis-common@0.38.2':
- resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==}
- engines: {node: ^18.19.0 || >=20.6.0}
-
- '@opentelemetry/resource-detector-alibaba-cloud@0.31.11':
- resolution: {integrity: sha512-R/asn6dAOWMfkLeEwqHCUz0cNbb9oiHVyd11iwlypeT/p9bR1lCX5juu5g/trOwxo62dbuFcDbBdKCJd3O2Edg==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/resource-detector-aws@2.12.0':
- resolution: {integrity: sha512-VelueKblsnQEiBVqEYcvM9VEb+B8zN6nftltdO9HAD7qi/OlicP4z/UGJ9EeW2m++WabdMoj0G3QVL8YV0P9tw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/resource-detector-azure@0.10.0':
- resolution: {integrity: sha512-5cNAiyPBg53Uxe/CW7hsCq8HiKNAUGH+gi65TtgpzSR9bhJG4AEbuZhbJDFwe97tn2ifAD1JTkbc/OFuaaFWbA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/resource-detector-container@0.7.11':
- resolution: {integrity: sha512-XUxnGuANa/EdxagipWMXKYFC7KURwed9/V0+NtYjFmwWHzV9/J4IYVGTK8cWDpyUvAQf/vE4sMa3rnS025ivXQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
- '@opentelemetry/resource-detector-gcp@0.37.0':
- resolution: {integrity: sha512-LGpJBECIMsVKhiulb4nxUw++m1oF4EiDDPmFGW2aqYaAF0oUvJNv8Z/55CAzcZ7SxvlTgUwzewXDBsuCup7iqw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.0.0
-
'@opentelemetry/resources@1.30.1':
resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/resources@2.0.1':
- resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/resources@2.5.1':
- resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/sdk-logs@0.203.0':
- resolution: {integrity: sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.4.0 <1.10.0'
-
- '@opentelemetry/sdk-metrics@2.0.1':
- resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.9.0 <1.10.0'
-
- '@opentelemetry/sdk-metrics@2.5.1':
- resolution: {integrity: sha512-RKMn3QKi8nE71ULUo0g/MBvq1N4icEBo7cQSKnL3URZT16/YH3nSVgWegOjwx7FRBTrjOIkMJkCUn/ZFIEfn4A==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.9.0 <1.10.0'
-
- '@opentelemetry/sdk-node@0.203.0':
- resolution: {integrity: sha512-zRMvrZGhGVMvAbbjiNQW3eKzW/073dlrSiAKPVWmkoQzah9wfynpVPeL55f9fVIm0GaBxTLcPeukWGy0/Wj7KQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
'@opentelemetry/sdk-trace-base@1.30.1':
resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/sdk-trace-base@2.0.1':
- resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
- '@opentelemetry/sdk-trace-base@2.5.1':
- resolution: {integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.3.0 <1.10.0'
-
'@opentelemetry/sdk-trace-node@1.30.1':
resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/sdk-trace-node@2.0.1':
- resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
- '@opentelemetry/sdk-trace-node@2.5.1':
- resolution: {integrity: sha512-9lopQ6ZoElETOEN0csgmtEV5/9C7BMfA7VtF4Jape3i954b6sTY2k3Xw3CxUTKreDck/vpAuJM+EDo4zheUw+A==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
'@opentelemetry/semantic-conventions@1.28.0':
resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==}
engines: {node: '>=14'}
- '@opentelemetry/semantic-conventions@1.40.0':
- resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==}
- engines: {node: '>=14'}
-
- '@opentelemetry/sql-common@0.41.2':
- resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==}
- engines: {node: ^18.19.0 || >=20.6.0}
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
-
'@orama/cuid2@2.2.3':
resolution: {integrity: sha512-Lcak3chblMejdlSHgYU2lS2cdOhDpU6vkfIJH4m+YKvqQyLqs1bB8+w6NT1MG5bO12NUK2GFc34Mn2xshMIQ1g==}
@@ -5565,6 +4886,9 @@ packages:
'@oxc-project/types@0.114.0':
resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==}
+ '@oxc-project/types@0.115.0':
+ resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
+
'@oxc-resolver/binding-android-arm-eabi@11.19.0':
resolution: {integrity: sha512-dlMjjWE3h+qMujLp5nBX/x7R5ny+xfr4YtsyaMNuM5JImOtQBzpFxQr9kJOKGL+9RbaoTOXpt5KF05f9pnOsgw==}
cpu: [arm]
@@ -5813,9 +5137,6 @@ packages:
'@petamoriken/float16@3.9.3':
resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==}
- '@pinojs/redact@0.4.0':
- resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
-
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -5917,42 +5238,6 @@ packages:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@protobuf-ts/runtime-rpc@2.11.1':
- resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==}
-
- '@protobuf-ts/runtime@2.11.1':
- resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==}
-
- '@protobufjs/aspromise@1.1.2':
- resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
-
- '@protobufjs/base64@1.1.2':
- resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
-
- '@protobufjs/codegen@2.0.4':
- resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
-
- '@protobufjs/eventemitter@1.1.0':
- resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
-
- '@protobufjs/fetch@1.1.0':
- resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
-
- '@protobufjs/float@1.0.2':
- resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
-
- '@protobufjs/inquire@1.1.0':
- resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
-
- '@protobufjs/path@1.1.2':
- resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
-
- '@protobufjs/pool@1.1.0':
- resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
-
- '@protobufjs/utf8@1.1.0':
- resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
-
'@publint/pack@0.1.4':
resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==}
engines: {node: '>=18'}
@@ -6905,9 +6190,6 @@ packages:
resolution: {integrity: sha512-1rjYZf62fCm6QAinHmRAKnJxIypX0VF/zBPd0qWvWABMZugrS0eACuIbk9Wk0StBod4yL8KnwEJyg77ak8xYzQ==}
engines: {node: '>= 20.19.4'}
- '@react-native/normalize-colors@0.74.89':
- resolution: {integrity: sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==}
-
'@react-native/normalize-colors@0.81.5':
resolution: {integrity: sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==}
@@ -6951,8 +6233,8 @@ packages:
'@react-native-masked-view/masked-view':
optional: true
- '@react-navigation/native-stack@7.14.4':
- resolution: {integrity: sha512-HFEnM5Q7JY3FmmiolD/zvgY+9sxZAyVGPZJoz7BdTvJmi1VHOdplf24YiH45mqeitlGnaOlvNT55rH4abHJ5eA==}
+ '@react-navigation/native-stack@7.14.5':
+ resolution: {integrity: sha512-NuyMf21kKk3jODvYgpcDA+HwyWr/KEj72ciqquyEupZlsmQ3WNUGgdaixEB3A19+iPOvHLQzDLcoTrrqZk8Leg==}
peerDependencies:
'@react-navigation/native': ^7.1.33
react: '>= 18.2.0'
@@ -7050,30 +6332,60 @@ packages:
cpu: [arm64]
os: [android]
+ '@rolldown/binding-android-arm64@1.0.0-rc.8':
+ resolution: {integrity: sha512-5bcmMQDWEfWUq3m79Mcf/kbO6e5Jr6YjKSsA1RnpXR6k73hQ9z1B17+4h93jXpzHvS18p7bQHM1HN/fSd+9zog==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
'@rolldown/binding-darwin-arm64@1.0.0-rc.5':
resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.8':
+ resolution: {integrity: sha512-dcHPd5N4g9w2iiPRJmAvO0fsIWzF2JPr9oSuTjxLL56qu+oML5aMbBMNwWbk58Mt3pc7vYs9CCScwLxdXPdRsg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
'@rolldown/binding-darwin-x64@1.0.0-rc.5':
resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
+ '@rolldown/binding-darwin-x64@1.0.0-rc.8':
+ resolution: {integrity: sha512-mw0VzDvoj8AuR761QwpdCFN0sc/jspuc7eRYJetpLWd+XyansUrH3C7IgNw6swBOgQT9zBHNKsVCjzpfGJlhUA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
'@rolldown/binding-freebsd-x64@1.0.0-rc.5':
resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.8':
+ resolution: {integrity: sha512-xNrRa6mQ9NmMIJBdJtPMPG8Mso0OhM526pDzc/EKnRrIrrkHD1E0Z6tONZRmUeJElfsQ6h44lQQCcDilSNIvSQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.8':
+ resolution: {integrity: sha512-WgCKoO6O/rRUwimWfEJDeztwJJmuuX0N2bYLLRxmXDTtCwjToTOqk7Pashl/QpQn3H/jHjx0b5yCMbcTVYVpNg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7081,6 +6393,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.8':
+ resolution: {integrity: sha512-tOHgTOQa8G4Z3ULj4G3NYOGGJEsqPHR91dT72u63OtVsZ7B6wFJKOx+ZKv+pvwzxWz92/I2ycaqi2/Ll4l+rlg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7088,6 +6407,27 @@ packages:
os: [linux]
libc: [musl]
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.8':
+ resolution: {integrity: sha512-oRbxcgDujCi2Yp1GTxoUFsIFlZsuPHU4OV4AzNc3/6aUmR4lfm9FK0uwQu82PJsuUwnF2jFdop3Ep5c1uK7Uxg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.8':
+ resolution: {integrity: sha512-oaLRyUHw8kQE5M89RqrDJZ10GdmGJcMeCo8tvaE4ukOofqgjV84AbqBSH6tTPjeT2BHv+xlKj678GBuIb47lKA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.8':
+ resolution: {integrity: sha512-1hjSKFrod5MwBBdLOOA0zpUuSfSDkYIY+QqcMcIU1WOtswZtZdUkcFcZza9b2HcAb0bnpmmyo0LZcaxLb2ov1g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7095,6 +6435,13 @@ packages:
os: [linux]
libc: [glibc]
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.8':
+ resolution: {integrity: sha512-a1+F0aV4Wy9tT3o+cHl3XhOy6aFV+B8Ll+/JFj98oGkb6lGk3BNgrxd+80RwYRVd23oLGvj3LwluKYzlv1PEuw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
'@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -7102,35 +6449,68 @@ packages:
os: [linux]
libc: [musl]
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.8':
+ resolution: {integrity: sha512-bGyXCFU11seFrf7z8PcHSwGEiFVkZ9vs+auLacVOQrVsI8PFHJzzJROF3P6b0ODDmXr0m6Tj5FlDhcXVk0Jp8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
'@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.8':
+ resolution: {integrity: sha512-n8d+L2bKgf9G3+AM0bhHFWdlz9vYKNim39ujRTieukdRek0RAo2TfG2uEnV9spa4r4oHUfL9IjcY3M9SlqN1gw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
'@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.8':
+ resolution: {integrity: sha512-4R4iJDIk7BrJdteAbEAICXPoA7vZoY/M0OBfcRlQxzQvUYMcEp2GbC/C8UOgQJhu2TjGTpX1H8vVO1xHWcRqQA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
'@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.8':
+ resolution: {integrity: sha512-3lwnklba9qQOpFnQ7EW+A1m4bZTWXZE4jtehsZ0YOl2ivW1FQqp5gY7X2DLuKITggesyuLwcmqS11fA7NtrmrA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.8':
+ resolution: {integrity: sha512-VGjCx9Ha1P/r3tXGDZyG0Fcq7Q0Afnk64aaKzr1m40vbn1FL8R3W0V1ELDvPgzLXaaqK/9PnsqSaLWXfn6JtGQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
'@rolldown/pluginutils@1.0.0-beta.40':
resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==}
'@rolldown/pluginutils@1.0.0-rc.5':
resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==}
+ '@rolldown/pluginutils@1.0.0-rc.8':
+ resolution: {integrity: sha512-wzJwL82/arVfeSP3BLr1oTy40XddjtEdrdgtJ4lLRBu06mP3q/8HGM6K0JRlQuTA3XB0pNJx2so/nmpY4xyOew==}
+
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
engines: {node: '>=14.0.0'}
@@ -8004,9 +7384,6 @@ packages:
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
- '@types/aws-lambda@8.10.152':
- resolution: {integrity: sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==}
-
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -8031,9 +7408,6 @@ packages:
'@types/bun@1.3.9':
resolution: {integrity: sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw==}
- '@types/bunyan@1.8.11':
- resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==}
-
'@types/cacheable-request@6.0.3':
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
@@ -8172,9 +7546,6 @@ packages:
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
- '@types/hammerjs@2.0.46':
- resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==}
-
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -8205,9 +7576,6 @@ packages:
'@types/jsesc@2.5.1':
resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
'@types/jsrsasign@10.5.15':
resolution: {integrity: sha512-3stUTaSRtN09PPzVWR6aySD9gNnuymz+WviNHoTb85dKu+BjaV4uBbWWGykBBJkfwPtcNZVfTn2lbX00U+yhpQ==}
@@ -8220,18 +7588,12 @@ packages:
'@types/mdx@2.0.13':
resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
- '@types/memcached@2.2.10':
- resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==}
-
'@types/micromatch@4.0.10':
resolution: {integrity: sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==}
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/mysql@2.15.27':
- resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==}
-
'@types/nlcst@2.0.3':
resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
@@ -8247,21 +7609,12 @@ packages:
'@types/node@25.3.2':
resolution: {integrity: sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==}
- '@types/node@25.3.3':
- resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==}
+ '@types/node@25.5.0':
+ resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
'@types/offscreencanvas@2019.7.3':
resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==}
- '@types/oracledb@6.5.2':
- resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==}
-
- '@types/pg-pool@2.0.6':
- resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==}
-
- '@types/pg@8.15.5':
- resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==}
-
'@types/pg@8.16.0':
resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==}
@@ -8323,9 +7676,6 @@ packages:
'@types/supports-color@8.1.3':
resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==}
- '@types/tedious@4.0.14':
- resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
-
'@types/text-table@0.2.5':
resolution: {integrity: sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA==}
@@ -8381,6 +7731,18 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ '@upstash/core-analytics@0.0.10':
+ resolution: {integrity: sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@upstash/ratelimit@2.0.8':
+ resolution: {integrity: sha512-YSTMBJ1YIxsoPkUMX/P4DDks/xV5YYCswWMamU8ZIfK9ly6ppjRnVOyBhMDXBmzjODm4UQKcxsJPvaeFAijp5w==}
+ peerDependencies:
+ '@upstash/redis': ^1.34.3
+
+ '@upstash/redis@1.36.4':
+ resolution: {integrity: sha512-w4s/msmyMqxOxaVhC8TQ2whJ77+Zd8YaSFokXL4mULQopaYb4xNJcm/PedtFQyLJn65nneySw9IwYnlMBBmFHg==}
+
'@urql/core@5.2.0':
resolution: {integrity: sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==}
@@ -8423,15 +7785,6 @@ packages:
vue-router:
optional: true
- '@vercel/functions@1.6.0':
- resolution: {integrity: sha512-R6FKQrYT5MZs5IE1SqeCJWxMuBdHawFcCZboKKw8p7s+6/mcd55Gx6tWmyKnQTyrSEA04NH73Tc9CbqpEle8RA==}
- engines: {node: '>= 16'}
- peerDependencies:
- '@aws-sdk/credential-provider-web-identity': '*'
- peerDependenciesMeta:
- '@aws-sdk/credential-provider-web-identity':
- optional: true
-
'@vercel/nft@1.3.2':
resolution: {integrity: sha512-HC8venRc4Ya7vNeBsJneKHHMDDWpQie7VaKhAIOst3MKO+DES+Y/SbzSp8mFkD7OzwAE2HhHkeSuSmwS20mz3A==}
engines: {node: '>=20'}
@@ -8471,6 +7824,9 @@ packages:
'@vitest/expect@4.0.18':
resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
+ '@vitest/expect@4.1.0':
+ resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==}
+
'@vitest/mocker@4.0.18':
resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==}
peerDependencies:
@@ -8482,18 +7838,41 @@ packages:
vite:
optional: true
+ '@vitest/mocker@4.1.0':
+ resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
'@vitest/pretty-format@4.0.18':
resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==}
+ '@vitest/pretty-format@4.1.0':
+ resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==}
+
'@vitest/runner@4.0.18':
resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==}
+ '@vitest/runner@4.1.0':
+ resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==}
+
'@vitest/snapshot@4.0.18':
resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==}
+ '@vitest/snapshot@4.1.0':
+ resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==}
+
'@vitest/spy@4.0.18':
resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
+ '@vitest/spy@4.1.0':
+ resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==}
+
'@vitest/ui@4.0.18':
resolution: {integrity: sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==}
peerDependencies:
@@ -8502,6 +7881,9 @@ packages:
'@vitest/utils@4.0.18':
resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
+ '@vitest/utils@4.1.0':
+ resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==}
+
'@vscode/sudo-prompt@9.3.2':
resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==}
@@ -8633,8 +8015,8 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- ai@6.0.14:
- resolution: {integrity: sha512-OaEJFeQ3gb45eZtC/lSNKqAxmsrqWxC8wLmIVXFYAMvPXE3lb96zIdS3swYArR4uXOVt6N7H/XZSyQz/Dl+HTw==}
+ ai@6.0.116:
+ resolution: {integrity: sha512-7yM+cTmyRLeNIXwt4Vj+mrrJgVQ9RMIW5WO0ydoLoYkewIvsMcvUmqS4j2RJTUXaF1HphwmSKUMQ/HypNRGOmA==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -8660,9 +8042,6 @@ packages:
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
- ansi-color@0.2.2:
- resolution: {integrity: sha512-qPx7iZZDHITYrrfzaUFXQpIcF2xYifcQHQflP1pFz8yY3lfU6GgCHb0+hJD7nimYKO7f2iaYYwBpZ+GaNcAhcA==}
-
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -8751,20 +8130,12 @@ packages:
resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==}
engines: {node: '>= 0.4'}
- array-buffer-byte-length@1.0.2:
- resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
- engines: {node: '>= 0.4'}
-
array-iterate@2.0.1:
resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
array-timsort@1.0.3:
resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
- arraybuffer.prototype.slice@1.0.4:
- resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
- engines: {node: '>= 0.4'}
-
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
@@ -8795,10 +8166,6 @@ packages:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
- async-function@1.0.0:
- resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
- engines: {node: '>= 0.4'}
-
async-limiter@1.0.1:
resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
@@ -8811,10 +8178,6 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- atomic-sleep@1.0.0:
- resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
- engines: {node: '>=8.0.0'}
-
atomically@2.1.1:
resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==}
@@ -8825,10 +8188,6 @@ packages:
peerDependencies:
postcss: ^8.1.0
- available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
-
aws-ssl-profiles@1.1.2:
resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==}
engines: {node: '>= 6.0.0'}
@@ -8870,8 +8229,8 @@ packages:
peerDependencies:
'@babel/core': ^7.20.12
- babel-plugin-polyfill-corejs2@0.4.15:
- resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==}
+ babel-plugin-polyfill-corejs2@0.4.17:
+ resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -8880,8 +8239,8 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- babel-plugin-polyfill-regenerator@0.6.6:
- resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==}
+ babel-plugin-polyfill-regenerator@0.6.8:
+ resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -8971,76 +8330,6 @@ packages:
peerDependencies:
better-auth: ^1.0.3
- better-auth@1.4.19:
- resolution: {integrity: sha512-3RlZJcA0+NH25wYD85vpIGwW9oSTuEmLIaGbT8zg41w/Pa2hVWHKedjoUHHJtnzkBXzDb+CShkLnSw7IThDdqQ==}
- peerDependencies:
- '@lynx-js/react': '*'
- '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0
- '@sveltejs/kit': ^2.0.0
- '@tanstack/react-start': ^1.0.0
- '@tanstack/solid-start': ^1.0.0
- better-sqlite3: ^12.0.0
- drizzle-kit: '>=0.31.4'
- drizzle-orm: '>=0.41.0'
- mongodb: ^6.0.0 || ^7.0.0
- mysql2: ^3.0.0
- next: ^14.0.0 || ^15.0.0 || ^16.0.0
- pg: ^8.0.0
- prisma: ^5.0.0 || ^6.0.0 || ^7.0.0
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- solid-js: ^1.0.0
- svelte: ^4.0.0 || ^5.0.0
- vitest: ^2.0.0 || ^3.0.0 || ^4.0.0
- vue: ^3.0.0
- peerDependenciesMeta:
- '@lynx-js/react':
- optional: true
- '@prisma/client':
- optional: true
- '@sveltejs/kit':
- optional: true
- '@tanstack/react-start':
- optional: true
- '@tanstack/solid-start':
- optional: true
- better-sqlite3:
- optional: true
- drizzle-kit:
- optional: true
- drizzle-orm:
- optional: true
- mongodb:
- optional: true
- mysql2:
- optional: true
- next:
- optional: true
- pg:
- optional: true
- prisma:
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
- solid-js:
- optional: true
- svelte:
- optional: true
- vitest:
- optional: true
- vue:
- optional: true
-
- better-call@1.1.8:
- resolution: {integrity: sha512-XMQ2rs6FNXasGNfMjzbyroSwKwYbZ/T3IxruSS6U2MJRsSYh3wYtG3o6H00ZlKZ/C/UPOAD97tqgQJNsxyeTXw==}
- peerDependencies:
- zod: ^4.0.0
- peerDependenciesMeta:
- zod:
- optional: true
-
better-call@1.3.2:
resolution: {integrity: sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==}
peerDependencies:
@@ -9064,9 +8353,6 @@ packages:
resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
engines: {node: '>=0.6'}
- bignumber.js@9.3.1:
- resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
-
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
@@ -9170,10 +8456,6 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- bufrw@1.4.0:
- resolution: {integrity: sha512-sWm8iPbqvL9+5SiYxXH73UOkyEbGQg7kyHQmReF89WJHQJw2eV4P/yZ0E+b71cczJ4pPobVhXxgQcmfSTgGHxQ==}
- engines: {node: '>= 0.10.x'}
-
bumpp@10.4.1:
resolution: {integrity: sha512-X/bwWs5Gbb/D7rN4aHLB7zdjiA6nGdjckM1sTHhI9oovIbEw2L5pw5S4xzk8ZTeOZ8EnwU/Ze4SoZ6/Vr3pM2Q==}
engines: {node: '>=18'}
@@ -9226,10 +8508,6 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- call-bind@1.0.8:
- resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
- engines: {node: '>= 0.4'}
-
call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines: {node: '>= 0.4'}
@@ -9486,9 +8764,6 @@ packages:
colorette@1.4.0:
resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@@ -9626,8 +8901,8 @@ packages:
copy-anything@2.0.6:
resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
- core-js-compat@3.48.0:
- resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
+ core-js-compat@3.49.0:
+ resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -9669,9 +8944,6 @@ packages:
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
hasBin: true
- cross-fetch@3.2.0:
- resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
-
cross-fetch@4.1.0:
resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==}
@@ -9747,9 +9019,6 @@ packages:
resolution: {integrity: sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==}
engines: {node: '>=16'}
- css-in-js-utils@3.1.0:
- resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==}
-
css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
@@ -9961,27 +9230,12 @@ packages:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
- data-view-buffer@1.0.2:
- resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-length@1.0.2:
- resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-offset@1.0.1:
- resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
- engines: {node: '>= 0.4'}
-
date-fns-jalali@4.1.0-0:
resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==}
date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
- dateformat@4.6.3:
- resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
-
dax-sh@0.43.2:
resolution: {integrity: sha512-uULa1sSIHgXKGCqJ/pA0zsnzbHlVnuq7g8O2fkHokWFNwEGIhh5lAJlxZa1POG5En5ba7AU4KcBAvGQWMMf8rg==}
deprecated: This package has moved to simply be 'dax' instead of 'dax-sh'
@@ -9989,6 +9243,9 @@ packages:
dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+ dayjs@1.11.20:
+ resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
+
db0@0.3.4:
resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
peerDependencies:
@@ -10196,10 +9453,6 @@ packages:
resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
engines: {node: '>=12'}
- dotenv-expand@12.0.3:
- resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==}
- engines: {node: '>=12'}
-
dotenv@16.4.7:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
@@ -10404,98 +9657,6 @@ packages:
sqlite3:
optional: true
- drizzle-orm@0.44.7:
- resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==}
- peerDependencies:
- '@aws-sdk/client-rds-data': '>=3'
- '@cloudflare/workers-types': '>=4'
- '@electric-sql/pglite': '>=0.2.0'
- '@libsql/client': '>=0.10.0'
- '@libsql/client-wasm': '>=0.10.0'
- '@neondatabase/serverless': '>=0.10.0'
- '@op-engineering/op-sqlite': '>=2'
- '@opentelemetry/api': ^1.4.1
- '@planetscale/database': '>=1.13'
- '@prisma/client': '*'
- '@tidbcloud/serverless': '*'
- '@types/better-sqlite3': '*'
- '@types/pg': '*'
- '@types/sql.js': '*'
- '@upstash/redis': '>=1.34.7'
- '@vercel/postgres': '>=0.8.0'
- '@xata.io/client': '*'
- better-sqlite3: '>=7'
- bun-types: '*'
- expo-sqlite: '>=14.0.0'
- gel: '>=2'
- knex: '*'
- kysely: '*'
- mysql2: '>=2'
- pg: '>=8'
- postgres: '>=3'
- prisma: '*'
- sql.js: '>=1'
- sqlite3: '>=5'
- peerDependenciesMeta:
- '@aws-sdk/client-rds-data':
- optional: true
- '@cloudflare/workers-types':
- optional: true
- '@electric-sql/pglite':
- optional: true
- '@libsql/client':
- optional: true
- '@libsql/client-wasm':
- optional: true
- '@neondatabase/serverless':
- optional: true
- '@op-engineering/op-sqlite':
- optional: true
- '@opentelemetry/api':
- optional: true
- '@planetscale/database':
- optional: true
- '@prisma/client':
- optional: true
- '@tidbcloud/serverless':
- optional: true
- '@types/better-sqlite3':
- optional: true
- '@types/pg':
- optional: true
- '@types/sql.js':
- optional: true
- '@upstash/redis':
- optional: true
- '@vercel/postgres':
- optional: true
- '@xata.io/client':
- optional: true
- better-sqlite3:
- optional: true
- bun-types:
- optional: true
- expo-sqlite:
- optional: true
- gel:
- optional: true
- knex:
- optional: true
- kysely:
- optional: true
- mysql2:
- optional: true
- pg:
- optional: true
- postgres:
- optional: true
- prisma:
- optional: true
- sql.js:
- optional: true
- sqlite3:
- optional: true
-
drizzle-orm@0.45.1:
resolution: {integrity: sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==}
peerDependencies:
@@ -10588,12 +9749,6 @@ packages:
sqlite3:
optional: true
- drizzle-zod@0.8.3:
- resolution: {integrity: sha512-66yVOuvGhKJnTdiqj1/Xaaz9/qzOdRJADpDa68enqS6g3t0kpNkwNYjUuaeXgZfO/UWuIM9HIhSlJ6C5ZraMww==}
- peerDependencies:
- drizzle-orm: '>=0.36.0'
- zod: ^3.25.0 || ^4.0.0
-
dts-resolver@2.1.3:
resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
engines: {node: '>=20.19.0'}
@@ -10745,17 +9900,10 @@ packages:
error-stack-parser@2.1.4:
resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
- error@7.0.2:
- resolution: {integrity: sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==}
-
errorhandler@1.5.2:
resolution: {integrity: sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==}
engines: {node: '>= 0.8'}
- es-abstract@1.24.1:
- resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
- engines: {node: '>= 0.4'}
-
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -10767,6 +9915,9 @@ packages:
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
@@ -10775,10 +9926,6 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- es-to-primitive@1.3.0:
- resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
- engines: {node: '>= 0.4'}
-
es-toolkit@1.44.0:
resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==}
@@ -10926,10 +10073,6 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
- exit-hook@4.0.0:
- resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==}
- engines: {node: '>=18'}
-
expand-template@2.0.3:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
@@ -11091,9 +10234,6 @@ packages:
resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==}
engines: {node: '>=8.0.0'}
- fast-copy@4.0.2:
- resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==}
-
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -11111,24 +10251,21 @@ packages:
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- fast-safe-stringify@2.1.1:
- resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
-
fast-sha256@1.3.0:
resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==}
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
- fast-xml-builder@1.0.0:
- resolution: {integrity: sha512-fpZuDogrAgnyt9oDDz+5DBz0zgPdPZz6D4IR7iESxRXElrlGTRkHJ9eEt+SACRJwT0FNFrt71DFQIUFBJfX/uQ==}
+ fast-xml-builder@1.1.4:
+ resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==}
fast-xml-parser@4.5.4:
resolution: {integrity: sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==}
hasBin: true
- fast-xml-parser@5.4.1:
- resolution: {integrity: sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A==}
+ fast-xml-parser@5.5.6:
+ resolution: {integrity: sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==}
hasBin: true
fastq@1.20.1:
@@ -11142,12 +10279,6 @@ packages:
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- fbjs-css-vars@1.0.2:
- resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==}
-
- fbjs@3.0.5:
- resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==}
-
fd-package-json@2.0.0:
resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==}
@@ -11211,10 +10342,6 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- find-up@7.0.0:
- resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
- engines: {node: '>=18'}
-
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
@@ -11240,10 +10367,6 @@ packages:
fontfaceobserver@2.3.0:
resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==}
- for-each@0.3.5:
- resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
- engines: {node: '>= 0.4'}
-
foreground-child@2.0.0:
resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
engines: {node: '>=8.0.0'}
@@ -11265,9 +10388,6 @@ packages:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
- forwarded-parse@2.1.2:
- resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==}
-
forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
@@ -11578,21 +10698,6 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- function.prototype.name@1.1.8:
- resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
- engines: {node: '>= 0.4'}
-
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
- gaxios@6.7.1:
- resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==}
- engines: {node: '>=14'}
-
- gcp-metadata@6.1.1:
- resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==}
- engines: {node: '>=14'}
-
geist@1.7.0:
resolution: {integrity: sha512-ZaoiZwkSf0DwwB1ncdLKp+ggAldqxl5L1+SXaNIBGkPAqcu+xjVJLxlf3/S8vLt9UHx1xu5fz3lbzKCj5iOVdQ==}
peerDependencies:
@@ -11606,10 +10711,6 @@ packages:
generate-function@2.3.1:
resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
- generator-function@2.0.1:
- resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
- engines: {node: '>= 0.4'}
-
gensequence@8.0.8:
resolution: {integrity: sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==}
engines: {node: '>=20'}
@@ -11657,10 +10758,6 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- get-symbol-description@1.1.0:
- resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
- engines: {node: '>= 0.4'}
-
get-tsconfig@4.13.6:
resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
@@ -11720,13 +10817,6 @@ packages:
glsl-noise@0.0.0:
resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==}
- google-logging-utils@0.0.2:
- resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==}
- engines: {node: '>=14'}
-
- google-protobuf@4.0.2:
- resolution: {integrity: sha512-yD2fqbNgvJPuQwdKJiPdbUcXveNRxgqy070gzsBsCyFJA8Qdj9oxa9xtkddb/JEhcDk0RD5SfGUWg+nhINfMxA==}
-
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -11779,10 +10869,6 @@ packages:
resolution: {integrity: sha512-hR/uLYQdngTyEfxnOoa+e6KTcfBFyc1hgFj/Cc144A5JJUuHFYqIEBDcD4FeGqUeKLRZqJ9eN9u7/GDjYEgS1g==}
engines: {node: '>=20.0.0'}
- has-bigints@1.1.0:
- resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
- engines: {node: '>= 0.4'}
-
has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
@@ -11794,10 +10880,6 @@ packages:
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
- has-proto@1.2.0:
- resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
- engines: {node: '>= 0.4'}
-
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
@@ -11853,9 +10935,6 @@ packages:
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
- help-me@5.0.0:
- resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
-
hermes-compiler@250829098.0.9:
resolution: {integrity: sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==}
@@ -11881,11 +10960,6 @@ packages:
resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==}
engines: {node: '>=6'}
- hexer@1.5.0:
- resolution: {integrity: sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==}
- engines: {node: '>= 0.10.x'}
- hasBin: true
-
highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
@@ -11896,15 +10970,12 @@ packages:
hls.js@1.6.15:
resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==}
- hoist-non-react-statics@3.3.2:
- resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
-
hono@4.11.4:
resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==}
engines: {node: '>=16.9.0'}
- hono@4.12.5:
- resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==}
+ hono@4.12.7:
+ resolution: {integrity: sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==}
engines: {node: '>=16.9.0'}
hookable@5.5.3:
@@ -11991,9 +11062,6 @@ packages:
resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
engines: {node: '>=10.18'}
- hyphenate-style-name@1.1.0:
- resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
-
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -12095,19 +11163,12 @@ packages:
inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
- inline-style-prefixer@7.0.1:
- resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==}
-
input-otp@1.4.2:
resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==}
peerDependencies:
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
- internal-slot@1.1.0:
- resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
- engines: {node: '>= 0.4'}
-
internmap@1.0.1:
resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
@@ -12143,48 +11204,20 @@ packages:
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- is-array-buffer@3.0.5:
- resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
- engines: {node: '>= 0.4'}
-
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
is-arrayish@0.3.4:
resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
- is-async-function@2.1.1:
- resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
- engines: {node: '>= 0.4'}
-
- is-bigint@1.1.0:
- resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
- engines: {node: '>= 0.4'}
-
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
- is-boolean-object@1.2.2:
- resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
- engines: {node: '>= 0.4'}
-
- is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
-
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
- is-data-view@1.0.2:
- resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
- engines: {node: '>= 0.4'}
-
- is-date-object@1.1.0:
- resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
- engines: {node: '>= 0.4'}
-
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -12209,10 +11242,6 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-finalizationregistry@1.1.1:
- resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
- engines: {node: '>= 0.4'}
-
is-fullwidth-code-point@2.0.0:
resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
engines: {node: '>=4'}
@@ -12221,10 +11250,6 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-generator-function@1.1.2:
- resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
- engines: {node: '>= 0.4'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -12241,24 +11266,12 @@ packages:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
- is-map@2.0.3:
- resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
- engines: {node: '>= 0.4'}
-
is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
- is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
-
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
- is-number-object@1.1.1:
- resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
- engines: {node: '>= 0.4'}
-
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
@@ -12286,22 +11299,10 @@ packages:
is-reference@3.0.3:
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
- is-regex@1.2.1:
- resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
- engines: {node: '>= 0.4'}
-
is-safe-filename@0.1.1:
resolution: {integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==}
engines: {node: '>=20'}
- is-set@2.0.3:
- resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
- engines: {node: '>= 0.4'}
-
- is-shared-array-buffer@1.0.4:
- resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
- engines: {node: '>= 0.4'}
-
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
@@ -12310,18 +11311,6 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- is-string@1.1.1:
- resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
- engines: {node: '>= 0.4'}
-
- is-symbol@1.1.1:
- resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
- engines: {node: '>= 0.4'}
-
- is-typed-array@1.1.15:
- resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
- engines: {node: '>= 0.4'}
-
is-typedarray@1.0.0:
resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
@@ -12329,18 +11318,6 @@ packages:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
- is-weakmap@2.0.2:
- resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
- engines: {node: '>= 0.4'}
-
- is-weakref@1.1.1:
- resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
- engines: {node: '>= 0.4'}
-
- is-weakset@2.0.4:
- resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
- engines: {node: '>= 0.4'}
-
is-what@3.14.1:
resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
@@ -12371,9 +11348,6 @@ packages:
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
- isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
isbot@5.1.35:
resolution: {integrity: sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg==}
engines: {node: '>=18'}
@@ -12422,16 +11396,9 @@ packages:
peerDependencies:
react: ^19.0.0
- iwanthue@2.0.0:
- resolution: {integrity: sha512-baARnKbEygsic78ekXFxvEfVyiWPchkeoUYy6StEhjF4ayCanBZQhEiXlzPXIUXtgVCYyvwex0dnw1Ghg8UCCg==}
-
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- jaeger-client@3.19.0:
- resolution: {integrity: sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==}
- engines: {node: '>=10'}
-
jest-environment-node@29.7.0:
resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -12479,10 +11446,6 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
- jmespath@0.16.0:
- resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==}
- engines: {node: '>= 0.6.0'}
-
joi@17.13.3:
resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
@@ -12507,10 +11470,6 @@ packages:
react:
optional: true
- joycon@3.1.1:
- resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
- engines: {node: '>=10'}
-
jpeg-js@0.4.4:
resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
@@ -12554,9 +11513,6 @@ packages:
engines: {node: '>=6'}
hasBin: true
- json-bigint@1.0.0:
- resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==}
-
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -12711,30 +11667,60 @@ packages:
cpu: [arm64]
os: [android]
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
lightningcss-darwin-arm64@1.31.1:
resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
lightningcss-darwin-x64@1.31.1:
resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
lightningcss-freebsd-x64@1.31.1:
resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
lightningcss-linux-arm-gnueabihf@1.31.1:
resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
lightningcss-linux-arm64-gnu@1.31.1:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
engines: {node: '>= 12.0.0'}
@@ -12742,6 +11728,13 @@ packages:
os: [linux]
libc: [glibc]
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
lightningcss-linux-arm64-musl@1.31.1:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
engines: {node: '>= 12.0.0'}
@@ -12749,6 +11742,13 @@ packages:
os: [linux]
libc: [musl]
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
lightningcss-linux-x64-gnu@1.31.1:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
engines: {node: '>= 12.0.0'}
@@ -12756,6 +11756,13 @@ packages:
os: [linux]
libc: [glibc]
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
lightningcss-linux-x64-musl@1.31.1:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
engines: {node: '>= 12.0.0'}
@@ -12763,22 +11770,45 @@ packages:
os: [linux]
libc: [musl]
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
lightningcss-win32-arm64-msvc@1.31.1:
resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
lightningcss-win32-x64-msvc@1.31.1:
resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
lightningcss@1.31.1:
resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
engines: {node: '>= 12.0.0'}
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@@ -12819,16 +11849,9 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
lodash-es@4.17.23:
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
- lodash.camelcase@4.3.0:
- resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
-
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
@@ -12893,10 +11916,6 @@ packages:
resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
engines: {node: '>= 0.6.0'}
- long@2.4.0:
- resolution: {integrity: sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==}
- engines: {node: '>=0.6'}
-
long@5.3.2:
resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
@@ -13116,9 +12135,6 @@ packages:
memoize-one@5.2.1:
resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
- memoize-one@6.0.0:
- resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
-
memory-pager@1.5.0:
resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
@@ -13716,8 +12732,8 @@ packages:
native-duplexpair@1.0.0:
resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==}
- needle@3.3.1:
- resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
+ needle@3.5.0:
+ resolution: {integrity: sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==}
engines: {node: '>= 4.4.x'}
hasBin: true
@@ -13742,8 +12758,8 @@ packages:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
- next@16.1.6:
- resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==}
+ next@16.2.0:
+ resolution: {integrity: sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ==}
engines: {node: '>=20.9.0'}
hasBin: true
peerDependencies:
@@ -13950,13 +12966,6 @@ packages:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
- object.assign@4.1.7:
- resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
- engines: {node: '>= 0.4'}
-
- obliterator@2.0.5:
- resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==}
-
obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
@@ -13966,10 +12975,6 @@ packages:
ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
- on-exit-leak-free@2.1.2:
- resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
- engines: {node: '>=14.0.0'}
-
on-finished@2.3.0:
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
engines: {node: '>= 0.8'}
@@ -14022,28 +13027,9 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
- openai@5.23.2:
- resolution: {integrity: sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg==}
- hasBin: true
- peerDependencies:
- ws: ^8.18.0
- zod: ^3.23.8
- peerDependenciesMeta:
- ws:
- optional: true
- zod:
- optional: true
-
- openapi3-ts@4.5.0:
- resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
-
openid-client@6.8.2:
resolution: {integrity: sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA==}
- opentracing@0.14.7:
- resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==}
- engines: {node: '>=0.10'}
-
ora@3.4.0:
resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==}
engines: {node: '>=6'}
@@ -14055,10 +13041,6 @@ packages:
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
- own-keys@1.0.1:
- resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
- engines: {node: '>= 0.4'}
-
oxc-resolver@11.19.0:
resolution: {integrity: sha512-oEe42WEoZc2T5sCQqgaRBx8huzP4cJvrnm+BfNTJESdtM633Tqs6iowkpsMTXgnb7SLwU6N6D9bqwW/PULjo6A==}
@@ -14074,10 +13056,6 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -14086,10 +13064,6 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
p-map@3.0.0:
resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==}
engines: {node: '>=8'}
@@ -14189,9 +13163,9 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ path-expression-matcher@1.1.3:
+ resolution: {integrity: sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==}
+ engines: {node: '>=14.0.0'}
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
@@ -14300,23 +13274,6 @@ packages:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
- pino-abstract-transport@2.0.0:
- resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
-
- pino-abstract-transport@3.0.0:
- resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
-
- pino-pretty@13.1.3:
- resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==}
- hasBin: true
-
- pino-std-serializers@7.1.0:
- resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
-
- pino@9.14.0:
- resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
- hasBin: true
-
pirates@4.0.7:
resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines: {node: '>= 6'}
@@ -14363,10 +13320,6 @@ packages:
points-on-path@0.2.1:
resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
- possible-typed-array-names@1.1.0:
- resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
- engines: {node: '>= 0.4'}
-
postal-mime@2.7.3:
resolution: {integrity: sha512-MjhXadAJaWgYzevi46+3kLak8y6gbg0ku14O1gO/LNOuay8dO+1PtcSGvAdgDR0DoIsSaiIA8y/Ddw6MnrO0Tw==}
@@ -14644,13 +13597,6 @@ packages:
resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==}
engines: {node: '>=8'}
- process-warning@5.0.0:
- resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
-
- process@0.10.1:
- resolution: {integrity: sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==}
- engines: {node: '>= 0.6.0'}
-
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
@@ -14677,9 +13623,6 @@ packages:
promise-worker-transferable@1.0.4:
resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==}
- promise@7.3.1:
- resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
-
promise@8.3.0:
resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
@@ -14699,10 +13642,6 @@ packages:
proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
- protobufjs@7.5.4:
- resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
- engines: {node: '>=12.0.0'}
-
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -14737,9 +13676,6 @@ packages:
pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
- pusher-js@8.4.0:
- resolution: {integrity: sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q==}
-
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
@@ -14775,9 +13711,6 @@ packages:
queue@6.0.2:
resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
- quick-format-unescaped@4.0.4:
- resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
-
quick-lru@5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
@@ -14866,9 +13799,6 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
- react-is@16.13.1:
- resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
-
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
@@ -14887,53 +13817,21 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-native-gesture-handler@2.30.0:
- resolution: {integrity: sha512-5YsnKHGa0X9C8lb5oCnKm0fLUPM6CRduvUUw2Bav4RIj/C3HcFh4RIUnF8wgG6JQWCL1//gRx4v+LVWgcIQdGA==}
- peerDependencies:
- react: '*'
- react-native: '*'
-
- react-native-is-edge-to-edge@1.2.1:
- resolution: {integrity: sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==}
- peerDependencies:
- react: '*'
- react-native: '*'
-
react-native-is-edge-to-edge@1.3.1:
resolution: {integrity: sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA==}
peerDependencies:
react: '*'
react-native: '*'
- react-native-reanimated@4.2.1:
- resolution: {integrity: sha512-/NcHnZMyOvsD/wYXug/YqSKw90P9edN0kEPL5lP4PFf1aQ4F1V7MKe/E0tvfkXKIajy3Qocp5EiEnlcrK/+BZg==}
- peerDependencies:
- react: '*'
- react-native: '*'
- react-native-worklets: '>=0.7.0'
-
- react-native-safe-area-context@5.6.2:
- resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==}
- peerDependencies:
- react: '*'
- react-native: '*'
-
- react-native-screens@4.20.0:
- resolution: {integrity: sha512-wg3ILSd8yHM2YMsWqDjr1+Rxj1qn9CrzZ8qAqDXYd+jf6p3GIMwi+NugFUbRBRZMXs3MNEXCS1vAkvc2ZwpaAA==}
+ react-native-safe-area-context@5.7.0:
+ resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==}
peerDependencies:
react: '*'
react-native: '*'
- react-native-web@0.21.2:
- resolution: {integrity: sha512-SO2t9/17zM4iEnFvlu2DA9jqNbzNhoUP+AItkoCOyFmDMOhUnBBznBDCYN92fGdfAkfQlWzPoez6+zLxFNsZEg==}
- peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
-
- react-native-worklets@0.5.2:
- resolution: {integrity: sha512-lCzmuIPAK/UaOJYEPgYpVqrsxby1I54f7PyyZUMEO04nwc00CDrCvv9lCTY1daLHYTF8lS3f9zlzErfVsIKqkA==}
+ react-native-screens@4.24.0:
+ resolution: {integrity: sha512-SyoiGaDofiyGPFrUkn1oGsAzkRuX1JUvTD9YQQK3G1JGQ5VWkvHgYSsc1K9OrLsDQxN7NmV71O0sHCAh8cBetA==}
peerDependencies:
- '@babel/core': ^7.0.0-0
react: '*'
react-native: '*'
@@ -15073,10 +13971,6 @@ packages:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
- real-require@0.2.0:
- resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
- engines: {node: '>= 12.13.0'}
-
recast@0.23.11:
resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
engines: {node: '>= 4'}
@@ -15122,10 +14016,6 @@ packages:
reflect-metadata@0.2.2:
resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
- reflect.getprototypeof@1.0.10:
- resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
- engines: {node: '>= 0.4'}
-
regenerate-unicode-properties@10.2.2:
resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
engines: {node: '>=4'}
@@ -15154,10 +14044,6 @@ packages:
regexp-to-ast@0.5.0:
resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==}
- regexp.prototype.flags@1.5.4:
- resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
- engines: {node: '>= 0.4'}
-
regexpu-core@6.4.0:
resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
engines: {node: '>=4'}
@@ -15562,8 +14448,8 @@ packages:
robust-predicates@3.0.2:
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
- rolldown-plugin-dts@0.22.2:
- resolution: {integrity: sha512-Ge+XF962Kobjr0hRPx1neVnLU2jpKkD2zevZTfPKf/0el4eYo9SyGPm0stiHDG2JQuL0Q3HLD0Kn+ST8esvVdA==}
+ rolldown-plugin-dts@0.22.4:
+ resolution: {integrity: sha512-pueqTPyN1N6lWYivyDGad+j+GO3DT67pzpct8s8e6KGVIezvnrDjejuw1AXFeyDRas3xTq4Ja6Lj5R5/04C5GQ==}
engines: {node: '>=20.19.0'}
peerDependencies:
'@ts-macro/tsc': ^0.3.6
@@ -15586,12 +14472,17 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
- rollup-plugin-dts@6.3.0:
- resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==}
+ rolldown@1.0.0-rc.8:
+ resolution: {integrity: sha512-RGOL7mz/aoQpy/y+/XS9iePBfeNRDUdozrhCEJxdpJyimW8v6yp4c30q6OviUU5AnUJVLRL9GP//HUs6N3ALrQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rollup-plugin-dts@6.4.0:
+ resolution: {integrity: sha512-2i00A5UoPCoDecLEs13Eu105QegSGfrbp1sDeUj/54LKGmv6XFHDxWKC6Wsb4BobGUWYVCWWjmjAc8bXXbXH/Q==}
engines: {node: '>=16'}
peerDependencies:
rollup: ^3.29.4 || ^4
- typescript: ^4.5 || ^5.0
+ typescript: ^4.5 || ^5.0 || ^6.0
rollup-plugin-visualizer@6.0.5:
resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==}
@@ -15635,28 +14526,12 @@ packages:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
- safe-array-concat@1.1.3:
- resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
- engines: {node: '>=0.4'}
-
safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- safe-push-apply@1.0.0:
- resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
- engines: {node: '>= 0.4'}
-
- safe-regex-test@1.1.0:
- resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
- engines: {node: '>= 0.4'}
-
- safe-stable-stringify@2.5.0:
- resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
- engines: {node: '>=10'}
-
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -15680,8 +14555,8 @@ packages:
resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
engines: {node: '>=11.0.0'}
- sax@1.5.0:
- resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
+ sax@1.6.0:
+ resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
scheduler@0.27.0:
@@ -15697,9 +14572,6 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
- secure-json-parse@4.1.0:
- resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
-
selderee@0.11.0:
resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
@@ -15719,16 +14591,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
- semver@7.7.2:
- resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
- engines: {node: '>=10'}
- hasBin: true
-
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
- engines: {node: '>=10'}
- hasBin: true
-
semver@7.7.4:
resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
@@ -15789,21 +14651,6 @@ packages:
set-cookie-parser@3.0.1:
resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==}
- set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
-
- set-function-name@2.0.2:
- resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
- engines: {node: '>= 0.4'}
-
- set-proto@1.0.0:
- resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
- engines: {node: '>= 0.4'}
-
- setimmediate@1.0.5:
- resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
-
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -15905,6 +14752,10 @@ packages:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
+ slugify@1.6.8:
+ resolution: {integrity: sha512-HVk9X1E0gz3mSpoi60h/saazLKXKaZThMLU3u/aNwoYn8/xQyX2MGxL0ui2eaokkD7tF+Zo+cKTHUbe1mmmGzA==}
+ engines: {node: '>=8.0.0'}
+
smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -15935,9 +14786,6 @@ packages:
peerDependencies:
solid-js: ^1.7
- sonic-boom@4.2.1:
- resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
-
sonner@2.0.7:
resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
peerDependencies:
@@ -16010,6 +14858,11 @@ packages:
resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
engines: {node: '>= 0.6'}
+ srvx@0.11.12:
+ resolution: {integrity: sha512-AQfrGqntqVPXgP03pvBDN1KyevHC+KmYVqb8vVf4N+aomQqdhaZxjvoVp+AOm4u6x+GgNQY3MVzAUIn+TqwkOA==}
+ engines: {node: '>=20.16.0'}
+ hasBin: true
+
srvx@0.11.8:
resolution: {integrity: sha512-2n9t0YnAXPJjinytvxccNgs7rOA5gmE7Wowt/8Dy2dx2fDC6sBhfBpbrCvjYKALlVukPS/Uq3QwkolKNa7P/2Q==}
engines: {node: '>=20.16.0'}
@@ -16055,9 +14908,8 @@ packages:
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
- stop-iteration-iterator@1.1.0:
- resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
- engines: {node: '>= 0.4'}
+ std-env@4.0.0:
+ resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
stream-buffers@2.2.0:
resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==}
@@ -16076,9 +14928,6 @@ packages:
resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
engines: {node: '>=4'}
- string-template@0.2.1:
- resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==}
-
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -16098,18 +14947,6 @@ packages:
string.prototype.codepointat@0.2.1:
resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==}
- string.prototype.trim@1.2.10:
- resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimend@1.0.9:
- resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimstart@1.0.8:
- resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
- engines: {node: '>= 0.4'}
-
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -16170,8 +15007,8 @@ packages:
strnum@1.1.2:
resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==}
- strnum@2.1.2:
- resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
+ strnum@2.2.0:
+ resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==}
structured-headers@0.4.1:
resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==}
@@ -16207,9 +15044,6 @@ packages:
peerDependencies:
postcss: ^8.4.32
- styleq@0.1.3:
- resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==}
-
stylis@4.3.6:
resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
@@ -16313,8 +15147,8 @@ packages:
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
- tar@7.5.10:
- resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==}
+ tar@7.5.11:
+ resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==}
engines: {node: '>=18'}
tar@7.5.9:
@@ -16352,6 +15186,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ terser@5.46.1:
+ resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
test-exclude@6.0.0:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
@@ -16375,9 +15214,6 @@ packages:
peerDependencies:
tslib: ^2
- thread-stream@3.1.0:
- resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
-
three-mesh-bvh@0.8.3:
resolution: {integrity: sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==}
peerDependencies:
@@ -16391,11 +15227,6 @@ packages:
three@0.183.2:
resolution: {integrity: sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==}
- thriftrw@3.11.4:
- resolution: {integrity: sha512-UcuBd3eanB3T10nXWRRMwfwoaC6VMk7qe3/5YIWP2Jtw+EbHqJ0p1/K3x8ixiR5dozKSSfcg1W+0e33G1Di3XA==}
- engines: {node: '>= 0.10.x'}
- hasBin: true
-
throat@5.0.0:
resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
@@ -16422,6 +15253,10 @@ packages:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
+ tinyexec@1.0.4:
+ resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -16430,6 +15265,10 @@ packages:
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
engines: {node: '>=14.0.0'}
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ engines: {node: '>=14.0.0'}
+
tldts-core@6.1.86:
resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
@@ -16480,10 +15319,6 @@ packages:
resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
engines: {node: '>=18'}
- traverse@0.6.11:
- resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==}
- engines: {node: '>= 0.4'}
-
tree-dump@1.1.0:
resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
engines: {node: '>=10.0'}
@@ -16523,9 +15358,6 @@ packages:
ts-morph@27.0.2:
resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==}
- ts-pattern@5.9.0:
- resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==}
-
tsdown@0.21.0-beta.2:
resolution: {integrity: sha512-OKj8mKf0ws1ucxuEi3mO/OGyfRQxO9MY2D6SoIE/7RZcbojsZSBhJr4xC4MNivMqrQvi3Ke2e+aRZDemPBWPCw==}
engines: {node: '>=20.19.0'}
@@ -16612,9 +15444,6 @@ packages:
tw-animate-css@1.4.0:
resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
- tweetnacl@1.0.3:
- resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==}
-
type-detect@4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
@@ -16655,29 +15484,9 @@ packages:
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
engines: {node: '>= 0.6'}
- typed-array-buffer@1.0.3:
- resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-length@1.0.3:
- resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
- engines: {node: '>= 0.4'}
-
- typed-array-byte-offset@1.0.4:
- resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
- engines: {node: '>= 0.4'}
-
- typed-array-length@1.0.7:
- resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
- engines: {node: '>= 0.4'}
-
typedarray-to-buffer@3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
- typedarray.prototype.slice@1.0.5:
- resolution: {integrity: sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==}
- engines: {node: '>= 0.4'}
-
typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
@@ -16707,10 +15516,6 @@ packages:
peerDependencies:
'@babel/runtime': ^7.23.2
- ua-parser-js@1.0.41:
- resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==}
- hasBin: true
-
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
@@ -16721,10 +15526,6 @@ packages:
ultrahtml@1.6.0:
resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==}
- unbox-primitive@1.1.0:
- resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
- engines: {node: '>= 0.4'}
-
unbuild@3.6.1:
resolution: {integrity: sha512-+U5CdtrdjfWkZhuO4N9l5UhyiccoeMEXIc2Lbs30Haxb+tRwB3VwB8AoZRxlAzORXunenSo+j6lh45jx+xkKgg==}
hasBin: true
@@ -16755,16 +15556,16 @@ packages:
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
- undici@6.23.0:
- resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==}
+ undici@6.24.1:
+ resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==}
engines: {node: '>=18.17'}
undici@7.18.2:
resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
engines: {node: '>=20.18.1'}
- undici@7.22.0:
- resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==}
+ undici@7.24.1:
+ resolution: {integrity: sha512-5xoBibbmnjlcR3jdqtY2Lnx7WbrD/tHlT01TmvqZUFVc9Q1w4+j5hbnapTqbcXITMH1ovjq/W7BkqBilHiVAaA==}
engines: {node: '>=20.18.1'}
unenv@1.10.0:
@@ -16796,10 +15597,6 @@ packages:
unicode-trie@2.0.0:
resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
- unicorn-magic@0.1.0:
- resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
- engines: {node: '>=18'}
-
unicorn-magic@0.4.0:
resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
engines: {node: '>=20'}
@@ -16872,8 +15669,8 @@ packages:
resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
engines: {node: '>=18.12.0'}
- unrun@0.2.28:
- resolution: {integrity: sha512-LqMrI3ZEUMZ2476aCsbUTfy95CHByqez05nju4AQv4XFPkxh5yai7Di1/Qb0FoELHEEPDWhQi23EJeFyrBV0Og==}
+ unrun@0.2.31:
+ resolution: {integrity: sha512-qltXRUeKQSrIgVS4NbH6PXEFqq+dru2ivH9QINfB+TinSlslgQvursJEV56QzaX8VaDCV5KfbROwKTQf/APJFA==}
engines: {node: '>=20.19.0'}
hasBin: true
peerDependencies:
@@ -17031,10 +15828,6 @@ packages:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
- uuid@9.0.1:
- resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
- hasBin: true
-
valibot@1.2.0:
resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==}
peerDependencies:
@@ -17221,6 +16014,41 @@ packages:
jsdom:
optional: true
+ vitest@4.1.0:
+ resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.1.0
+ '@vitest/browser-preview': 4.1.0
+ '@vitest/browser-webdriverio': 4.1.0
+ '@vitest/ui': 4.1.0
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
vlq@1.0.1:
resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}
@@ -17330,25 +16158,9 @@ packages:
when-exit@2.1.5:
resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==}
- which-boxed-primitive@1.1.1:
- resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
- engines: {node: '>= 0.4'}
-
- which-builtin-type@1.2.1:
- resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
- engines: {node: '>= 0.4'}
-
- which-collection@1.0.2:
- resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
- engines: {node: '>= 0.4'}
-
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
- which-typed-array@1.1.20:
- resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
- engines: {node: '>= 0.4'}
-
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -17520,9 +16332,6 @@ packages:
resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==}
engines: {node: '>=8.0'}
- xorshift@1.2.0:
- resolution: {integrity: sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==}
-
xpath@0.0.32:
resolution: {integrity: sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==}
engines: {node: '>=0.6.0'}
@@ -17585,10 +16394,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.2.2:
- resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
- engines: {node: '>=12.20'}
-
yocto-spinner@0.2.3:
resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==}
engines: {node: '>=18.19'}
@@ -17682,19 +16487,6 @@ snapshots:
'@ai-sdk/provider-utils': 4.0.16(zod@4.3.6)
zod: 4.3.6
- '@ai-sdk/anthropic@3.0.7(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
- zod: 4.3.6
-
- '@ai-sdk/azure@3.0.38(zod@4.3.6)':
- dependencies:
- '@ai-sdk/openai': 3.0.37(zod@4.3.6)
- '@ai-sdk/provider': 3.0.8
- '@ai-sdk/provider-utils': 4.0.16(zod@4.3.6)
- zod: 4.3.6
-
'@ai-sdk/gateway@3.0.59(zod@4.3.6)':
dependencies:
'@ai-sdk/provider': 3.0.8
@@ -17702,43 +16494,25 @@ snapshots:
'@vercel/oidc': 3.1.0
zod: 4.3.6
- '@ai-sdk/gateway@3.0.9(zod@4.3.6)':
+ '@ai-sdk/gateway@3.0.66(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.19(zod@4.3.6)
'@vercel/oidc': 3.1.0
zod: 4.3.6
- '@ai-sdk/google@3.0.4(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
- zod: 4.3.6
-
'@ai-sdk/openai-compatible@2.0.30(zod@4.3.6)':
dependencies:
'@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
zod: 4.3.6
- '@ai-sdk/openai-compatible@2.0.4(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
- zod: 4.3.6
-
'@ai-sdk/openai@3.0.37(zod@4.3.6)':
dependencies:
'@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.16(zod@4.3.6)
zod: 4.3.6
- '@ai-sdk/openai@3.0.7(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
- zod: 4.3.6
-
'@ai-sdk/provider-utils@4.0.15(zod@4.3.6)':
dependencies:
'@ai-sdk/provider': 3.0.8
@@ -17753,17 +16527,13 @@ snapshots:
eventsource-parser: 3.0.6
zod: 4.3.6
- '@ai-sdk/provider-utils@4.0.4(zod@4.3.6)':
+ '@ai-sdk/provider-utils@4.0.19(zod@4.3.6)':
dependencies:
- '@ai-sdk/provider': 3.0.2
+ '@ai-sdk/provider': 3.0.8
'@standard-schema/spec': 1.1.0
eventsource-parser: 3.0.6
zod: 4.3.6
- '@ai-sdk/provider@3.0.2':
- dependencies:
- json-schema: 0.4.0
-
'@ai-sdk/provider@3.0.8':
dependencies:
json-schema: 0.4.0
@@ -17883,7 +16653,7 @@ snapshots:
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.6.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
'@arethetypeswrong/cli@0.18.2':
dependencies:
@@ -17906,24 +16676,12 @@ snapshots:
typescript: 5.6.1-rc
validate-npm-package-name: 5.0.1
- '@asteasolutions/zod-to-openapi@8.4.3(zod@4.3.6)':
- dependencies:
- openapi3-ts: 4.5.0
- zod: 4.3.6
-
'@authenio/xml-encryption@2.0.2':
dependencies:
'@xmldom/xmldom': 0.8.11
escape-html: 1.0.3
xpath: 0.0.32
- '@authzed/authzed-node@1.6.1':
- dependencies:
- '@grpc/grpc-js': 1.14.3
- '@protobuf-ts/runtime': 2.11.1
- '@protobuf-ts/runtime-rpc': 2.11.1
- google-protobuf: 4.0.2
-
'@azure-rest/core-client@2.5.1':
dependencies:
'@azure/abort-controller': 2.1.2
@@ -18114,16 +16872,16 @@ snapshots:
'@babel/generator@7.29.1':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
- '@babel/generator@8.0.0-rc.1':
+ '@babel/generator@8.0.0-rc.2':
dependencies:
- '@babel/parser': 8.0.0-rc.1
- '@babel/types': 8.0.0-rc.1
+ '@babel/parser': 8.0.0-rc.2
+ '@babel/types': 8.0.0-rc.2
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@types/jsesc': 2.5.1
@@ -18161,7 +16919,7 @@ snapshots:
regexpu-core: 6.4.0
semver: 6.3.1
- '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)':
+ '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
'@babel/helper-compilation-targets': 7.28.6
@@ -18238,7 +16996,7 @@ snapshots:
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/helper-validator-identifier@8.0.0-rc.1': {}
+ '@babel/helper-validator-identifier@8.0.0-rc.2': {}
'@babel/helper-validator-option@7.27.1': {}
@@ -18266,9 +17024,13 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
- '@babel/parser@8.0.0-rc.1':
+ '@babel/parser@7.29.2':
dependencies:
- '@babel/types': 8.0.0-rc.1
+ '@babel/types': 7.29.0
+
+ '@babel/parser@8.0.0-rc.2':
+ dependencies:
+ '@babel/types': 8.0.0-rc.2
'@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)':
dependencies:
@@ -18616,9 +17378,9 @@ snapshots:
'@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-corejs2: 0.4.17(@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)
+ babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -18641,12 +17403,6 @@ snapshots:
'@babel/core': 7.29.0
'@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-typescript@7.28.6(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
@@ -18689,10 +17445,12 @@ snapshots:
'@babel/runtime@7.28.6': {}
+ '@babel/runtime@7.29.2': {}
+
'@babel/template@7.28.6':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@babel/traverse@7.29.0':
@@ -18700,7 +17458,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/types': 7.29.0
debug: 4.4.3
@@ -18712,40 +17470,10 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@babel/types@8.0.0-rc.1':
+ '@babel/types@8.0.0-rc.2':
dependencies:
'@babel/helper-string-parser': 8.0.0-rc.2
- '@babel/helper-validator-identifier': 8.0.0-rc.1
-
- '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)':
- dependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.21
- '@standard-schema/spec': 1.1.0
- better-call: 1.1.8(zod@4.3.6)
- jose: 6.1.3
- kysely: 0.28.11
- nanostores: 1.1.1
- zod: 4.3.6
-
- '@better-auth/sso@1.4.19(@better-auth/utils@0.3.0)(better-auth@1.4.19(11628ebdb451ccbc3bb58323a9d36bac))(better-call@1.1.8(zod@4.3.6))':
- dependencies:
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.21
- better-auth: 1.4.19(11628ebdb451ccbc3bb58323a9d36bac)
- better-call: 1.1.8(zod@4.3.6)
- fast-xml-parser: 5.4.1
- jose: 6.1.3
- samlify: 2.10.2
- zod: 4.3.6
-
- '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))':
- dependencies:
- '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.21
-
- '@better-auth/utils@0.3.0': {}
+ '@babel/helper-validator-identifier': 8.0.0-rc.2
'@better-auth/utils@0.3.1': {}
@@ -18847,14 +17575,14 @@ snapshots:
optionalDependencies:
workerd: 1.20260305.0
- '@cloudflare/vitest-pool-workers@0.12.18(@cloudflare/workers-types@4.20260226.1)(@vitest/runner@4.0.18)(@vitest/snapshot@4.0.18)(vitest@4.0.18)':
+ '@cloudflare/vitest-pool-workers@0.12.18(@cloudflare/workers-types@4.20260226.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))':
dependencies:
- '@vitest/runner': 4.0.18
- '@vitest/snapshot': 4.0.18
+ '@vitest/runner': 4.1.0
+ '@vitest/snapshot': 4.1.0
cjs-module-lexer: 1.4.3
esbuild: 0.27.3
miniflare: 4.20260305.0
- vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
wrangler: 4.69.0(@cloudflare/workers-types@4.20260226.1)
transitivePeerDependencies:
- '@cloudflare/workers-types'
@@ -18896,27 +17624,6 @@ snapshots:
'@colors/colors@1.5.0':
optional: true
- '@composio/client@0.1.0-alpha.40': {}
-
- '@composio/core@0.2.6(ws@8.19.0)(zod@4.3.6)':
- dependencies:
- '@composio/client': 0.1.0-alpha.40
- '@composio/json-schema-to-zod': 0.1.19(zod@4.3.6)
- '@types/json-schema': 7.0.15
- chalk: 4.1.2
- openai: 5.23.2(ws@8.19.0)(zod@4.3.6)
- pusher-js: 8.4.0
- semver: 7.7.4
- uuid: 13.0.0
- zod: 4.3.6
- zod-to-json-schema: 3.25.1(zod@4.3.6)
- transitivePeerDependencies:
- - ws
-
- '@composio/json-schema-to-zod@0.1.19(zod@4.3.6)':
- dependencies:
- zod: 4.3.6
-
'@cspell/cspell-bundled-dicts@9.7.0':
dependencies:
'@cspell/dict-ada': 4.1.1
@@ -19156,11 +17863,6 @@ snapshots:
'@drizzle-team/brocli@0.10.2': {}
- '@egjs/hammerjs@2.0.17':
- dependencies:
- '@types/hammerjs': 2.0.46
- optional: true
-
'@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)':
dependencies:
'@electric-sql/pglite': 0.3.15
@@ -19643,17 +18345,17 @@ snapshots:
resolve.exports: 2.0.3
semver: 7.7.4
send: 0.19.2
- slugify: 1.6.6
+ slugify: 1.6.8
source-map-support: 0.5.21
stacktrace-parser: 0.1.11
structured-headers: 0.4.1
- tar: 7.5.10
+ tar: 7.5.11
terminal-link: 2.1.1
- undici: 6.23.0
+ undici: 6.24.1
wrap-ansi: 7.0.0
ws: 8.19.0
optionalDependencies:
- expo-router: 6.0.23(7b33e59f9d12d11b9d33eb703d0a2b18)
+ expo-router: 6.0.23(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(expo-constants@55.0.7)(expo-linking@55.0.7)(expo@54.0.33)(react-dom@19.2.4(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
react-native: 0.84.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.14)(react@19.2.4)
transitivePeerDependencies:
- bufferutil
@@ -19678,7 +18380,7 @@ snapshots:
resolve-from: 5.0.0
semver: 7.7.4
slash: 3.0.0
- slugify: 1.6.6
+ slugify: 1.6.8
xcode: 3.0.1
xml2js: 0.6.0
transitivePeerDependencies:
@@ -19719,7 +18421,7 @@ snapshots:
resolve-from: 5.0.0
resolve-workspace-root: 2.0.1
semver: 7.7.4
- slugify: 1.6.6
+ slugify: 1.6.8
sucrase: 3.35.1
transitivePeerDependencies:
- supports-color
@@ -19823,7 +18525,7 @@ snapshots:
glob: 13.0.6
hermes-parser: 0.29.1
jsc-safe-url: 0.2.4
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
minimatch: 9.0.9
postcss: 8.4.49
resolve-from: 5.0.0
@@ -19978,18 +18680,6 @@ snapshots:
optionalDependencies:
tailwindcss: 4.2.1
- '@grpc/grpc-js@1.14.3':
- dependencies:
- '@grpc/proto-loader': 0.8.0
- '@js-sdsl/ordered-map': 4.4.2
-
- '@grpc/proto-loader@0.8.0':
- dependencies:
- lodash.camelcase: 4.3.0
- long: 5.3.2
- protobufjs: 7.5.4
- yargs: 17.7.2
-
'@hapi/hoek@9.3.0':
optional: true
@@ -20002,27 +18692,14 @@ snapshots:
'@hongzhiyuan/preact@10.28.0-fc4af453': {}
- '@hono/node-server@1.19.11(hono@4.12.5)':
+ '@hono/node-server@1.19.11(hono@4.12.7)':
dependencies:
- hono: 4.12.5
+ hono: 4.12.7
'@hono/node-server@1.19.9(hono@4.11.4)':
dependencies:
hono: 4.11.4
- '@hono/zod-openapi@1.2.2(hono@4.12.5)(zod@4.3.6)':
- dependencies:
- '@asteasolutions/zod-to-openapi': 8.4.3(zod@4.3.6)
- '@hono/zod-validator': 0.7.6(hono@4.12.5)(zod@4.3.6)
- hono: 4.12.5
- openapi3-ts: 4.5.0
- zod: 4.3.6
-
- '@hono/zod-validator@0.7.6(hono@4.12.5)(zod@4.3.6)':
- dependencies:
- hono: 4.12.5
- zod: 4.3.6
-
'@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.4))':
dependencies:
'@standard-schema/utils': 0.3.0
@@ -20132,166 +18809,6 @@ snapshots:
'@img/sharp-win32-x64@0.34.5':
optional: true
- '@inkeep/agents-core@0.54.0(622a05d36aca0fde3eda1b1a3007a124)':
- dependencies:
- '@ai-sdk/anthropic': 3.0.7(zod@4.3.6)
- '@ai-sdk/azure': 3.0.38(zod@4.3.6)
- '@ai-sdk/gateway': 3.0.9(zod@4.3.6)
- '@ai-sdk/google': 3.0.4(zod@4.3.6)
- '@ai-sdk/openai': 3.0.7(zod@4.3.6)
- '@ai-sdk/openai-compatible': 2.0.4(zod@4.3.6)
- '@ai-sdk/provider': 3.0.2
- '@authzed/authzed-node': 1.6.1
- '@babel/parser': 7.29.0
- '@better-auth/sso': 1.4.19(@better-auth/utils@0.3.0)(better-auth@1.4.19(11628ebdb451ccbc3bb58323a9d36bac))(better-call@1.1.8(zod@4.3.6))
- '@composio/core': 0.2.6(ws@8.19.0)(zod@4.3.6)
- '@electric-sql/pglite': 0.3.15
- '@hono/zod-openapi': 1.2.2(hono@4.12.5)(zod@4.3.6)
- '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6)
- '@nangohq/node': 0.69.38
- '@nangohq/types': 0.69.38
- '@napi-rs/keyring': 1.2.0
- '@openrouter/ai-sdk-provider': 2.2.3(ai@6.0.14(zod@4.3.6))(zod@4.3.6)
- '@opentelemetry/api': 1.9.0
- '@vercel/functions': 1.6.0
- ai: 6.0.14(zod@4.3.6)
- ajv: 8.18.0
- better-auth: 1.4.19(11628ebdb451ccbc3bb58323a9d36bac)
- destr: 2.0.5
- dotenv: 17.3.1
- dotenv-expand: 12.0.3
- drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
- drizzle-zod: 0.8.3(drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(zod@4.3.6)
- exit-hook: 4.0.0
- find-up: 7.0.0
- hono: 4.12.5
- iwanthue: 2.0.0
- jmespath: 0.16.0
- jose: 6.1.3
- nanoid: 5.1.6
- pg: 8.19.0
- pino: 9.14.0
- pino-pretty: 13.1.3
- postgres: 3.4.8
- traverse: 0.6.11
- ts-pattern: 5.9.0
- zod: 4.3.6
- optionalDependencies:
- '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)
- '@opentelemetry/baggage-span-processor': 0.4.2(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-jaeger': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-node': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - '@aws-sdk/client-rds-data'
- - '@aws-sdk/credential-provider-web-identity'
- - '@better-auth/utils'
- - '@cfworker/json-schema'
- - '@cloudflare/workers-types'
- - '@libsql/client'
- - '@libsql/client-wasm'
- - '@lynx-js/react'
- - '@neondatabase/serverless'
- - '@op-engineering/op-sqlite'
- - '@opentelemetry/core'
- - '@planetscale/database'
- - '@prisma/client'
- - '@sveltejs/kit'
- - '@tanstack/react-start'
- - '@tanstack/solid-start'
- - '@tidbcloud/serverless'
- - '@types/better-sqlite3'
- - '@types/pg'
- - '@types/sql.js'
- - '@upstash/redis'
- - '@vercel/postgres'
- - '@xata.io/client'
- - better-call
- - better-sqlite3
- - bun-types
- - debug
- - drizzle-kit
- - encoding
- - expo-sqlite
- - gel
- - knex
- - kysely
- - mongodb
- - mysql2
- - next
- - pg-native
- - prisma
- - react
- - react-dom
- - solid-js
- - sql.js
- - sqlite3
- - supports-color
- - svelte
- - vitest
- - vue
- - ws
-
- '@inkeep/ai-sdk-provider@0.54.0(83a68346fc13ad25aca201c9925acb84)':
- dependencies:
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
- '@inkeep/agents-core': 0.54.0(622a05d36aca0fde3eda1b1a3007a124)
- zod: 4.3.6
- transitivePeerDependencies:
- - '@aws-sdk/client-rds-data'
- - '@aws-sdk/credential-provider-web-identity'
- - '@better-auth/utils'
- - '@cfworker/json-schema'
- - '@cloudflare/workers-types'
- - '@hono/zod-openapi'
- - '@libsql/client'
- - '@libsql/client-wasm'
- - '@lynx-js/react'
- - '@neondatabase/serverless'
- - '@op-engineering/op-sqlite'
- - '@opentelemetry/core'
- - '@planetscale/database'
- - '@prisma/client'
- - '@sveltejs/kit'
- - '@tanstack/react-start'
- - '@tanstack/solid-start'
- - '@tidbcloud/serverless'
- - '@types/better-sqlite3'
- - '@types/pg'
- - '@types/sql.js'
- - '@upstash/redis'
- - '@vercel/postgres'
- - '@xata.io/client'
- - better-call
- - better-sqlite3
- - bun-types
- - debug
- - drizzle-kit
- - encoding
- - expo-sqlite
- - gel
- - knex
- - kysely
- - mongodb
- - mysql2
- - next
- - pg-native
- - prisma
- - react
- - react-dom
- - solid-js
- - sql.js
- - sqlite3
- - supports-color
- - svelte
- - vitest
- - vue
- - ws
-
'@inquirer/ansi@1.0.2': {}
'@inquirer/confirm@5.1.21(@types/node@20.19.37)':
@@ -20310,12 +18827,12 @@ snapshots:
'@types/node': 25.3.2
optional: true
- '@inquirer/confirm@5.1.21(@types/node@25.3.3)':
+ '@inquirer/confirm@5.1.21(@types/node@25.5.0)':
dependencies:
- '@inquirer/core': 10.3.2(@types/node@25.3.3)
- '@inquirer/type': 3.0.10(@types/node@25.3.3)
+ '@inquirer/core': 10.3.2(@types/node@25.5.0)
+ '@inquirer/type': 3.0.10(@types/node@25.5.0)
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@inquirer/core@10.3.2(@types/node@20.19.37)':
dependencies:
@@ -20345,18 +18862,18 @@ snapshots:
'@types/node': 25.3.2
optional: true
- '@inquirer/core@10.3.2(@types/node@25.3.3)':
+ '@inquirer/core@10.3.2(@types/node@25.5.0)':
dependencies:
'@inquirer/ansi': 1.0.2
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@25.3.3)
+ '@inquirer/type': 3.0.10(@types/node@25.5.0)
cli-width: 4.1.0
mute-stream: 2.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@inquirer/figures@1.0.15': {}
@@ -20370,9 +18887,9 @@ snapshots:
'@types/node': 25.3.2
optional: true
- '@inquirer/type@3.0.10(@types/node@25.3.3)':
+ '@inquirer/type@3.0.10(@types/node@25.5.0)':
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@ioredis/commands@1.5.0': {}
@@ -20409,14 +18926,14 @@ snapshots:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
jest-mock: 29.7.0
'@jest/fake-timers@29.7.0':
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -20450,7 +18967,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/yargs': 17.0.35
chalk: 4.1.2
@@ -20485,8 +19002,6 @@ snapshots:
'@js-joda/core@5.7.0': {}
- '@js-sdsl/ordered-map@4.4.2': {}
-
'@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
@@ -20744,7 +19259,7 @@ snapshots:
'@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)':
dependencies:
- '@hono/node-server': 1.19.11(hono@4.12.5)
+ '@hono/node-server': 1.19.11(hono@4.12.7)
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
content-type: 1.0.5
@@ -20754,7 +19269,7 @@ snapshots:
eventsource-parser: 3.0.6
express: 5.2.1
express-rate-limit: 8.2.1(express@5.2.1)
- hono: 4.12.5
+ hono: 4.12.7
jose: 6.1.3
json-schema-typed: 8.0.2
pkce-challenge: 5.0.1
@@ -20766,7 +19281,7 @@ snapshots:
'@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)':
dependencies:
- '@hono/node-server': 1.19.11(hono@4.12.5)
+ '@hono/node-server': 1.19.11(hono@4.12.7)
ajv: 8.18.0
ajv-formats: 3.0.1(ajv@8.18.0)
content-type: 1.0.5
@@ -20776,7 +19291,7 @@ snapshots:
eventsource-parser: 3.0.6
express: 5.2.1
express-rate-limit: 8.2.1(express@5.2.1)
- hono: 4.12.5
+ hono: 4.12.7
jose: 6.1.3
json-schema-typed: 8.0.2
pkce-challenge: 5.0.1
@@ -20809,72 +19324,6 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
- '@nangohq/node@0.69.38':
- dependencies:
- '@nangohq/types': 0.69.38
- axios: 1.13.5
- transitivePeerDependencies:
- - debug
-
- '@nangohq/types@0.69.38':
- dependencies:
- axios: 1.13.5
- json-schema: 0.4.0
- type-fest: 4.41.0
- transitivePeerDependencies:
- - debug
-
- '@napi-rs/keyring-darwin-arm64@1.2.0':
- optional: true
-
- '@napi-rs/keyring-darwin-x64@1.2.0':
- optional: true
-
- '@napi-rs/keyring-freebsd-x64@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-arm-gnueabihf@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-arm64-gnu@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-arm64-musl@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-riscv64-gnu@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-x64-gnu@1.2.0':
- optional: true
-
- '@napi-rs/keyring-linux-x64-musl@1.2.0':
- optional: true
-
- '@napi-rs/keyring-win32-arm64-msvc@1.2.0':
- optional: true
-
- '@napi-rs/keyring-win32-ia32-msvc@1.2.0':
- optional: true
-
- '@napi-rs/keyring-win32-x64-msvc@1.2.0':
- optional: true
-
- '@napi-rs/keyring@1.2.0':
- optionalDependencies:
- '@napi-rs/keyring-darwin-arm64': 1.2.0
- '@napi-rs/keyring-darwin-x64': 1.2.0
- '@napi-rs/keyring-freebsd-x64': 1.2.0
- '@napi-rs/keyring-linux-arm-gnueabihf': 1.2.0
- '@napi-rs/keyring-linux-arm64-gnu': 1.2.0
- '@napi-rs/keyring-linux-arm64-musl': 1.2.0
- '@napi-rs/keyring-linux-riscv64-gnu': 1.2.0
- '@napi-rs/keyring-linux-x64-gnu': 1.2.0
- '@napi-rs/keyring-linux-x64-musl': 1.2.0
- '@napi-rs/keyring-win32-arm64-msvc': 1.2.0
- '@napi-rs/keyring-win32-ia32-msvc': 1.2.0
- '@napi-rs/keyring-win32-x64-msvc': 1.2.0
-
'@napi-rs/wasm-runtime@1.1.1':
dependencies:
'@emnapi/core': 1.8.1
@@ -20888,7 +19337,7 @@ snapshots:
'@netlify/blobs@10.5.0':
dependencies:
'@netlify/dev-utils': 4.3.3
- '@netlify/otel': 5.1.1
+ '@netlify/otel': 5.1.3
'@netlify/runtime-utils': 2.2.1
transitivePeerDependencies:
- supports-color
@@ -20913,7 +19362,7 @@ snapshots:
write-file-atomic: 5.0.1
optional: true
- '@netlify/otel@5.1.1':
+ '@netlify/otel@5.1.3':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
@@ -20927,30 +19376,30 @@ snapshots:
'@netlify/runtime-utils@2.2.1':
optional: true
- '@next/env@16.1.6': {}
+ '@next/env@16.2.0': {}
- '@next/swc-darwin-arm64@16.1.6':
+ '@next/swc-darwin-arm64@16.2.0':
optional: true
- '@next/swc-darwin-x64@16.1.6':
+ '@next/swc-darwin-x64@16.2.0':
optional: true
- '@next/swc-linux-arm64-gnu@16.1.6':
+ '@next/swc-linux-arm64-gnu@16.2.0':
optional: true
- '@next/swc-linux-arm64-musl@16.1.6':
+ '@next/swc-linux-arm64-musl@16.2.0':
optional: true
- '@next/swc-linux-x64-gnu@16.1.6':
+ '@next/swc-linux-x64-gnu@16.2.0':
optional: true
- '@next/swc-linux-x64-musl@16.1.6':
+ '@next/swc-linux-x64-musl@16.2.0':
optional: true
- '@next/swc-win32-arm64-msvc@16.1.6':
+ '@next/swc-win32-arm64-msvc@16.2.0':
optional: true
- '@next/swc-win32-x64-msvc@16.1.6':
+ '@next/swc-win32-x64-msvc@16.2.0':
optional: true
'@noble/ciphers@2.1.1': {}
@@ -21054,9 +19503,9 @@ snapshots:
'@open-draft/until@2.1.0': {}
- '@openrouter/ai-sdk-provider@2.2.3(ai@6.0.14(zod@4.3.6))(zod@4.3.6)':
+ '@openrouter/ai-sdk-provider@2.2.5(ai@6.0.116(zod@4.3.6))(zod@4.3.6)':
dependencies:
- ai: 6.0.14(zod@4.3.6)
+ ai: 6.0.116(zod@4.3.6)
zod: 4.3.6
'@opentelemetry/api-logs@0.203.0':
@@ -21066,607 +19515,17 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
- '@opentelemetry/auto-instrumentations-node@0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-amqplib': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-aws-lambda': 0.54.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-aws-sdk': 0.58.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-bunyan': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-cassandra-driver': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-connect': 0.47.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-cucumber': 0.19.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-dataloader': 0.21.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-dns': 0.47.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-express': 0.52.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-fastify': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-fs': 0.23.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-generic-pool': 0.47.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-graphql': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-grpc': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-hapi': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-ioredis': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-kafkajs': 0.13.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-knex': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-koa': 0.51.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-lru-memoizer': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-memcached': 0.47.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mongodb': 0.56.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mongoose': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mysql': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-mysql2': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-nestjs-core': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-net': 0.47.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-oracledb': 0.29.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-pg': 0.56.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-pino': 0.50.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-redis': 0.52.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-restify': 0.49.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-router': 0.48.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-runtime-node': 0.17.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-socket.io': 0.50.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-tedious': 0.22.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-undici': 0.14.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation-winston': 0.48.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resource-detector-alibaba-cloud': 0.31.11(@opentelemetry/api@1.9.0)
- '@opentelemetry/resource-detector-aws': 2.12.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resource-detector-azure': 0.10.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resource-detector-container': 0.7.11(@opentelemetry/api@1.9.0)
- '@opentelemetry/resource-detector-gcp': 0.37.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
- '@opentelemetry/baggage-span-processor@0.4.2(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
'@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
optional: true
- '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- optional: true
-
- '@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- optional: true
-
'@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.28.0
optional: true
- '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/exporter-jaeger@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- jaeger-client: 3.19.0
- optional: true
-
- '@opentelemetry/exporter-logs-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@grpc/grpc-js': 1.14.3
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-logs-otlp-http@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-logs-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@grpc/grpc-js': 1.14.3
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-metrics-otlp-http@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-metrics-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-prometheus@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-trace-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@grpc/grpc-js': 1.14.3
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/exporter-zipkin@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/instrumentation-amqplib@0.50.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-aws-lambda@0.54.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/aws-lambda': 8.10.152
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-aws-sdk@0.58.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-bunyan@0.49.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@types/bunyan': 1.8.11
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-cassandra-driver@0.49.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-connect@0.47.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/connect': 3.4.38
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-cucumber@0.19.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-dataloader@0.21.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-dns@0.47.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-express@0.52.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-fastify@0.48.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-fs@0.23.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-generic-pool@0.47.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-graphql@0.51.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-grpc@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-hapi@0.50.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-http@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- forwarded-parse: 2.1.2
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-ioredis@0.51.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/redis-common': 0.38.2
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-kafkajs@0.13.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-knex@0.48.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-koa@0.51.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-lru-memoizer@0.48.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-memcached@0.47.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/memcached': 2.2.10
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-mongodb@0.56.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-mongoose@0.50.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-mysql2@0.50.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-mysql@0.49.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/mysql': 2.15.27
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-nestjs-core@0.49.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-net@0.47.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-oracledb@0.29.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/oracledb': 6.5.2
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-pg@0.56.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
- '@types/pg': 8.15.5
- '@types/pg-pool': 2.0.6
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-pino@0.50.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-redis@0.52.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/redis-common': 0.38.2
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-restify@0.49.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-router@0.48.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-runtime-node@0.17.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-socket.io@0.50.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-tedious@0.22.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- '@types/tedious': 4.0.14
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-undici@0.14.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@opentelemetry/instrumentation-winston@0.48.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -21677,103 +19536,18 @@ snapshots:
- supports-color
optional: true
- '@opentelemetry/otlp-exporter-base@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/otlp-grpc-exporter-base@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@grpc/grpc-js': 1.14.3
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/otlp-transformer@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- protobufjs: 7.5.4
- optional: true
-
'@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
optional: true
- '@opentelemetry/propagator-b3@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
'@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
optional: true
- '@opentelemetry/propagator-jaeger@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/redis-common@0.38.2':
- optional: true
-
- '@opentelemetry/resource-detector-alibaba-cloud@0.31.11(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/resource-detector-aws@2.12.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/resource-detector-azure@0.10.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/resource-detector-container@0.7.11(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/resource-detector-gcp@0.37.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- gcp-metadata: 6.1.1(encoding@0.1.13)
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
'@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -21781,71 +19555,6 @@ snapshots:
'@opentelemetry/semantic-conventions': 1.28.0
optional: true
- '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/sdk-logs@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/sdk-metrics@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/sdk-node@0.203.0(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/api-logs': 0.203.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-logs-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-logs-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-metrics-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-metrics-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-prometheus': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/exporter-zipkin': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/propagator-b3': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/propagator-jaeger': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- transitivePeerDependencies:
- - supports-color
- optional: true
-
'@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -21854,22 +19563,6 @@ snapshots:
'@opentelemetry/semantic-conventions': 1.28.0
optional: true
- '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
- '@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.40.0
- optional: true
-
'@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -21881,34 +19574,9 @@ snapshots:
semver: 7.7.4
optional: true
- '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0)
- optional: true
-
- '@opentelemetry/sdk-trace-node@2.5.1(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
'@opentelemetry/semantic-conventions@1.28.0':
optional: true
- '@opentelemetry/semantic-conventions@1.40.0':
- optional: true
-
- '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)':
- dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
- optional: true
-
'@orama/cuid2@2.2.3':
dependencies:
'@noble/hashes': 1.8.0
@@ -21925,6 +19593,8 @@ snapshots:
'@oxc-project/types@0.114.0': {}
+ '@oxc-project/types@0.115.0': {}
+
'@oxc-resolver/binding-android-arm-eabi@11.19.0':
optional: true
@@ -22155,8 +19825,6 @@ snapshots:
'@petamoriken/float16@3.9.3': {}
- '@pinojs/redact@0.4.0': {}
-
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -22305,35 +19973,6 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- '@protobuf-ts/runtime-rpc@2.11.1':
- dependencies:
- '@protobuf-ts/runtime': 2.11.1
-
- '@protobuf-ts/runtime@2.11.1': {}
-
- '@protobufjs/aspromise@1.1.2': {}
-
- '@protobufjs/base64@1.1.2': {}
-
- '@protobufjs/codegen@2.0.4': {}
-
- '@protobufjs/eventemitter@1.1.0': {}
-
- '@protobufjs/fetch@1.1.0':
- dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/inquire': 1.1.0
-
- '@protobufjs/float@1.0.2': {}
-
- '@protobufjs/inquire@1.1.0': {}
-
- '@protobufjs/path@1.1.2': {}
-
- '@protobufjs/pool@1.1.0': {}
-
- '@protobufjs/utf8@1.1.0': {}
-
'@publint/pack@0.1.4': {}
'@quansync/fs@1.0.0':
@@ -23455,7 +21094,7 @@ snapshots:
'@react-native/codegen@0.81.5(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
glob: 7.2.3
hermes-parser: 0.29.1
invariant: 2.2.4
@@ -23465,7 +21104,7 @@ snapshots:
'@react-native/codegen@0.83.1(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
glob: 7.2.3
hermes-parser: 0.32.0
invariant: 2.2.4
@@ -23476,7 +21115,7 @@ snapshots:
'@react-native/codegen@0.84.1(@babel/core@7.29.0)':
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
hermes-parser: 0.32.0
invariant: 2.2.4
nullthrows: 1.1.1
@@ -23579,9 +21218,6 @@ snapshots:
- utf-8-validate
optional: true
- '@react-native/normalize-colors@0.74.89':
- optional: true
-
'@react-native/normalize-colors@0.81.5': {}
'@react-native/normalize-colors@0.84.1': {}
@@ -23595,15 +21231,15 @@ snapshots:
optionalDependencies:
'@types/react': 19.2.14
- '@react-navigation/bottom-tabs@7.15.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/bottom-tabs@7.15.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
dependencies:
- '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
'@react-navigation/native': 7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
react-native: 0.84.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.14)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-safe-area-context: 5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
sf-symbols-typescript: 2.2.0
transitivePeerDependencies:
- '@react-native-masked-view/masked-view'
@@ -23622,26 +21258,26 @@ snapshots:
use-sync-external-store: 1.6.0(react@19.2.4)
optional: true
- '@react-navigation/elements@2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/elements@2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
dependencies:
'@react-navigation/native': 7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
react-native: 0.84.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.14)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-safe-area-context: 5.7.0(react-native@0.84.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.14)(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
- '@react-navigation/native-stack@7.14.4(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
+ '@react-navigation/native-stack@7.14.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)':
dependencies:
- '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/elements': 2.9.10(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
'@react-navigation/native': 7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
color: 4.2.3
react: 19.2.4
react-native: 0.84.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.14)(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-safe-area-context: 5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
sf-symbols-typescript: 2.2.0
warn-once: 0.1.1
transitivePeerDependencies:
@@ -23767,48 +21403,97 @@ snapshots:
'@rolldown/binding-android-arm64@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-android-arm64@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-darwin-arm64@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-darwin-x64@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-darwin-x64@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-freebsd-x64@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.8':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.8':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.8':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
'@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.8':
+ optional: true
+
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
optional: true
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.8':
+ optional: true
+
'@rolldown/pluginutils@1.0.0-beta.40': {}
'@rolldown/pluginutils@1.0.0-rc.5': {}
+ '@rolldown/pluginutils@1.0.0-rc.8': {}
+
'@rollup/plugin-alias@5.1.1(rollup@4.59.0)':
optionalDependencies:
rollup: 4.59.0
@@ -23969,10 +21654,10 @@ snapshots:
'@scalar/helpers@0.2.16': {}
- '@scalar/nextjs-api-reference@0.9.24(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)':
+ '@scalar/nextjs-api-reference@0.9.24(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)':
dependencies:
'@scalar/core': 0.3.43
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
'@scalar/types@0.6.8':
@@ -24258,11 +21943,11 @@ snapshots:
dependencies:
solid-js: 1.9.11
- '@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@solidjs/start@1.3.2(solid-js@1.9.11)(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))
- '@vinxi/server-components': 0.5.1(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))
+ '@tanstack/server-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))
+ '@vinxi/server-components': 0.5.1(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))
cookie-es: 2.0.0
defu: 6.1.4
error-stack-parser: 2.1.4
@@ -24274,8 +21959,8 @@ snapshots:
source-map-js: 1.2.1
terracotta: 1.1.0(solid-js@1.9.11)
tinyglobby: 0.2.15
- vinxi: 0.5.11(ea2978ce6718d4cf7fba8416fff7f771)
- vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vinxi: 0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b)
+ vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@testing-library/jest-dom'
- solid-js
@@ -24294,11 +21979,11 @@ snapshots:
dependencies:
acorn: 8.16.0
- '@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@standard-schema/spec': 1.1.0
'@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
- '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@types/cookie': 0.6.0
acorn: 8.16.0
cookie: 0.6.0
@@ -24310,17 +21995,17 @@ snapshots:
set-cookie-parser: 3.0.1
sirv: 3.0.2
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
optionalDependencies:
'@opentelemetry/api': 1.9.0
typescript: 5.9.3
optional: true
- '@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@standard-schema/spec': 1.1.0
'@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
- '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@types/cookie': 0.6.0
acorn: 8.16.0
cookie: 0.6.0
@@ -24332,48 +22017,48 @@ snapshots:
set-cookie-parser: 3.0.1
sirv: 3.0.2
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
optionalDependencies:
'@opentelemetry/api': 1.9.0
typescript: 5.9.3
- '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
obug: 2.1.1
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
optional: true
- '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
obug: 2.1.1
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
debug: 4.4.3
deepmerge: 4.3.1
magic-string: 0.30.21
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- supports-color
optional: true
- '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
debug: 4.4.3
deepmerge: 4.3.1
magic-string: 0.30.21
svelte: 5.53.5
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- supports-color
@@ -24454,7 +22139,7 @@ snapshots:
postcss: 8.5.6
tailwindcss: 4.2.1
- '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/directive-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/core': 7.29.0
@@ -24463,7 +22148,7 @@ snapshots:
'@tanstack/router-utils': 1.161.4
babel-dead-code-elimination: 1.0.12
tiny-invariant: 1.3.3
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -24502,40 +22187,19 @@ snapshots:
transitivePeerDependencies:
- crossws
- '@tanstack/react-start@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
- dependencies:
- '@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-start-client': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-start-server': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-utils': 1.161.4
- '@tanstack/start-client-core': 1.163.2
- '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/start-server-core': 1.163.2
- pathe: 2.0.3
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- transitivePeerDependencies:
- - '@rsbuild/core'
- - crossws
- - supports-color
- - vite-plugin-solid
- - webpack
- optional: true
-
- '@tanstack/react-start@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/react-start@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/react-start-client': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/react-start-server': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/router-utils': 1.161.4
'@tanstack/start-client-core': 1.163.2
- '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/start-server-core': 1.163.2
pathe: 2.0.3
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@rsbuild/core'
- crossws
@@ -24579,7 +22243,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/router-plugin@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/router-plugin@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
@@ -24596,31 +22260,8 @@ snapshots:
zod: 3.25.76
optionalDependencies:
'@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- '@tanstack/router-plugin@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
- '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
- '@babel/template': 7.28.6
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@tanstack/router-core': 1.163.2
- '@tanstack/router-generator': 1.163.2
- '@tanstack/router-utils': 1.161.4
- '@tanstack/virtual-file-routes': 1.161.4
- chokidar: 3.6.0
- unplugin: 2.3.11
- zod: 3.25.76
- optionalDependencies:
- '@tanstack/react-router': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ vite-plugin-solid: 2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- supports-color
@@ -24628,7 +22269,7 @@ snapshots:
dependencies:
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
ansis: 4.2.0
babel-dead-code-elimination: 1.0.12
@@ -24638,7 +22279,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/server-functions-plugin@1.121.21(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/core': 7.29.0
@@ -24647,7 +22288,7 @@ snapshots:
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
- '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@tanstack/directive-functions-plugin': 1.121.21(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
babel-dead-code-elimination: 1.0.12
tiny-invariant: 1.3.3
transitivePeerDependencies:
@@ -24688,37 +22329,17 @@ snapshots:
transitivePeerDependencies:
- crossws
- '@tanstack/solid-start@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/solid-start@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@tanstack/solid-router': 1.163.2(solid-js@1.9.11)
'@tanstack/solid-start-client': 1.163.2(solid-js@1.9.11)
'@tanstack/solid-start-server': 1.163.2(solid-js@1.9.11)
'@tanstack/start-client-core': 1.163.2
- '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/start-server-core': 1.163.2
pathe: 2.0.3
solid-js: 1.9.11
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- transitivePeerDependencies:
- - '@rsbuild/core'
- - '@tanstack/react-router'
- - crossws
- - supports-color
- - vite-plugin-solid
- - webpack
- optional: true
-
- '@tanstack/solid-start@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
- dependencies:
- '@tanstack/solid-router': 1.163.2(solid-js@1.9.11)
- '@tanstack/solid-start-client': 1.163.2(solid-js@1.9.11)
- '@tanstack/solid-start-server': 1.163.2(solid-js@1.9.11)
- '@tanstack/start-client-core': 1.163.2
- '@tanstack/start-plugin-core': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/start-server-core': 1.163.2
- pathe: 2.0.3
- solid-js: 1.9.11
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@rsbuild/core'
- '@tanstack/react-router'
@@ -24743,7 +22364,7 @@ snapshots:
'@tanstack/start-fn-stubs@1.161.4': {}
- '@tanstack/start-plugin-core@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@tanstack/start-plugin-core@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@babel/code-frame': 7.27.1
'@babel/core': 7.29.0
@@ -24751,7 +22372,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.40
'@tanstack/router-core': 1.163.2
'@tanstack/router-generator': 1.163.2
- '@tanstack/router-plugin': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@tanstack/router-plugin': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@tanstack/router-utils': 1.161.4
'@tanstack/start-client-core': 1.163.2
'@tanstack/start-server-core': 1.163.2
@@ -24763,41 +22384,8 @@ snapshots:
srvx: 0.11.8
tinyglobby: 0.2.15
ufo: 1.6.3
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- xmlbuilder2: 4.0.3
- zod: 3.25.76
- transitivePeerDependencies:
- - '@rsbuild/core'
- - '@tanstack/react-router'
- - crossws
- - supports-color
- - vite-plugin-solid
- - webpack
- optional: true
-
- '@tanstack/start-plugin-core@1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/core': 7.29.0
- '@babel/types': 7.29.0
- '@rolldown/pluginutils': 1.0.0-beta.40
- '@tanstack/router-core': 1.163.2
- '@tanstack/router-generator': 1.163.2
- '@tanstack/router-plugin': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/router-utils': 1.161.4
- '@tanstack/start-client-core': 1.163.2
- '@tanstack/start-server-core': 1.163.2
- cheerio: 1.2.0
- exsolve: 1.0.8
- pathe: 2.0.3
- picomatch: 4.0.3
- source-map: 0.7.6
- srvx: 0.11.8
- tinyglobby: 0.2.15
- ufo: 1.6.3
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
xmlbuilder2: 4.0.3
zod: 3.25.76
transitivePeerDependencies:
@@ -25025,12 +22613,9 @@ snapshots:
tslib: 2.8.1
optional: true
- '@types/aws-lambda@8.10.152':
- optional: true
-
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
@@ -25042,7 +22627,7 @@ snapshots:
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@types/babel__traverse@7.28.0':
@@ -25056,7 +22641,7 @@ snapshots:
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/braces@3.0.5': {}
@@ -25064,16 +22649,11 @@ snapshots:
dependencies:
bun-types: 1.3.9
- '@types/bunyan@1.8.11':
- dependencies:
- '@types/node': 25.3.3
- optional: true
-
'@types/cacheable-request@6.0.3':
dependencies:
'@types/http-cache-semantics': 4.2.0
'@types/keyv': 3.1.4
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/responselike': 1.0.3
'@types/chai@5.2.3':
@@ -25083,11 +22663,11 @@ snapshots:
'@types/concat-stream@2.0.3':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/connect@3.4.38':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/cookie@0.6.0': {}
@@ -25224,7 +22804,7 @@ snapshots:
'@types/express-serve-static-core@5.1.1':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/qs': 6.14.0
'@types/range-parser': 1.2.7
'@types/send': 1.2.1
@@ -25241,10 +22821,7 @@ snapshots:
'@types/graceful-fs@4.1.9':
dependencies:
- '@types/node': 25.3.3
-
- '@types/hammerjs@2.0.46':
- optional: true
+ '@types/node': 25.5.0
'@types/hast@3.0.4':
dependencies:
@@ -25272,13 +22849,11 @@ snapshots:
'@types/jsesc@2.5.1': {}
- '@types/json-schema@7.0.15': {}
-
'@types/jsrsasign@10.5.15': {}
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/mdast@4.0.4':
dependencies:
@@ -25286,22 +22861,12 @@ snapshots:
'@types/mdx@2.0.13': {}
- '@types/memcached@2.2.10':
- dependencies:
- '@types/node': 25.3.3
- optional: true
-
'@types/micromatch@4.0.10':
dependencies:
'@types/braces': 3.0.5
'@types/ms@2.1.0': {}
- '@types/mysql@2.15.27':
- dependencies:
- '@types/node': 25.3.3
- optional: true
-
'@types/nlcst@2.0.3':
dependencies:
'@types/unist': 3.0.3
@@ -25322,29 +22887,12 @@ snapshots:
dependencies:
undici-types: 7.18.2
- '@types/node@25.3.3':
+ '@types/node@25.5.0':
dependencies:
undici-types: 7.18.2
'@types/offscreencanvas@2019.7.3': {}
- '@types/oracledb@6.5.2':
- dependencies:
- '@types/node': 25.3.3
- optional: true
-
- '@types/pg-pool@2.0.6':
- dependencies:
- '@types/pg': 8.16.0
- optional: true
-
- '@types/pg@8.15.5':
- dependencies:
- '@types/node': 25.3.3
- pg-protocol: 1.12.0
- pg-types: 2.2.0
- optional: true
-
'@types/pg@8.16.0':
dependencies:
'@types/node': 25.3.2
@@ -25357,7 +22905,7 @@ snapshots:
'@types/prompts@2.4.9':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
kleur: 3.0.3
'@types/qs@6.14.0': {}
@@ -25378,24 +22926,24 @@ snapshots:
'@types/readable-stream@4.0.23':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/resolve@1.20.2': {}
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/semver@7.7.1': {}
'@types/send@1.2.1':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/serve-static@2.2.0':
dependencies:
'@types/http-errors': 2.0.5
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/stack-utils@2.0.3': {}
@@ -25405,11 +22953,6 @@ snapshots:
'@types/supports-color@8.1.3': {}
- '@types/tedious@4.0.14':
- dependencies:
- '@types/node': 25.3.3
- optional: true
-
'@types/text-table@0.2.5': {}
'@types/three@0.183.1':
@@ -25448,7 +22991,7 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
'@types/yargs-parser@21.0.3': {}
@@ -25458,7 +23001,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
optional: true
'@typespec/ts-http-runtime@0.3.3':
@@ -25471,6 +23014,19 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
+ '@upstash/core-analytics@0.0.10':
+ dependencies:
+ '@upstash/redis': 1.36.4
+
+ '@upstash/ratelimit@2.0.8(@upstash/redis@1.36.4)':
+ dependencies:
+ '@upstash/core-analytics': 0.0.10
+ '@upstash/redis': 1.36.4
+
+ '@upstash/redis@1.36.4':
+ dependencies:
+ uncrypto: 0.1.3
+
'@urql/core@5.2.0(graphql@16.13.0)':
dependencies:
'@0no-co/graphql.web': 1.2.0(graphql@16.13.0)
@@ -25490,28 +23046,26 @@ snapshots:
'@use-gesture/core': 10.3.1
react: 19.2.4
- '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
+ '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
optionalDependencies:
'@remix-run/react': 2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- '@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ '@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
svelte: 5.53.5
vue: 3.5.29(typescript@5.9.3)
vue-router: 4.6.4(vue@3.5.29(typescript@5.9.3))
- '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
+ '@vercel/analytics@1.6.1(@remix-run/react@2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@sveltejs/kit@2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(svelte@5.53.5)(vue-router@4.6.4(vue@3.5.29(typescript@5.9.3)))(vue@3.5.29(typescript@5.9.3))':
optionalDependencies:
'@remix-run/react': 2.17.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- '@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ '@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
svelte: 5.53.5
vue: 3.5.29(typescript@5.9.3)
vue-router: 4.6.4(vue@3.5.29(typescript@5.9.3))
- '@vercel/functions@1.6.0': {}
-
'@vercel/nft@1.3.2(encoding@0.1.13)(rollup@4.59.0)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.3(encoding@0.1.13)
@@ -25565,9 +23119,9 @@ snapshots:
untun: 0.1.3
uqr: 0.1.2
- '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))':
+ '@vinxi/plugin-directives@0.5.1(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
acorn: 8.16.0
acorn-jsx: 5.3.2(acorn@8.16.0)
acorn-loose: 8.5.2
@@ -25576,18 +23130,18 @@ snapshots:
magicast: 0.2.11
recast: 0.23.11
tslib: 2.8.1
- vinxi: 0.5.11(ea2978ce6718d4cf7fba8416fff7f771)
+ vinxi: 0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b)
- '@vinxi/server-components@0.5.1(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))':
+ '@vinxi/server-components@0.5.1(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))':
dependencies:
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b))
acorn: 8.16.0
acorn-loose: 8.5.2
acorn-typescript: 1.4.13(acorn@8.16.0)
astring: 1.9.0
magicast: 0.2.11
recast: 0.23.11
- vinxi: 0.5.11(ea2978ce6718d4cf7fba8416fff7f771)
+ vinxi: 0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b)
'@vitest/coverage-istanbul@4.0.18(vitest@4.0.18)':
dependencies:
@@ -25601,7 +23155,7 @@ snapshots:
magicast: 0.5.2
obug: 2.1.1
tinyrainbow: 3.0.3
- vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
@@ -25612,52 +23166,88 @@ snapshots:
'@vitest/spy': 4.0.18
'@vitest/utils': 4.0.18
chai: 6.2.2
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
+
+ '@vitest/expect@4.1.0':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.1.0
+ '@vitest/utils': 4.1.0
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
- '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.18
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.12.10(@types/node@20.19.37)(typescript@5.9.3)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ msw: 2.12.10(@types/node@25.3.2)(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
'@vitest/spy': 4.0.18
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.12.10(@types/node@25.3.2)(typescript@5.9.3)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ msw: 2.12.10(@types/node@25.5.0)(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- '@vitest/mocker@4.0.18(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))':
+ '@vitest/mocker@4.1.0(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
dependencies:
- '@vitest/spy': 4.0.18
+ '@vitest/spy': 4.1.0
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- msw: 2.12.10(@types/node@25.3.3)(typescript@5.9.3)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ msw: 2.12.10(@types/node@20.19.37)(typescript@5.9.3)
+ vite: 7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+
+ '@vitest/mocker@4.1.0(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))':
+ dependencies:
+ '@vitest/spy': 4.1.0
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ msw: 2.12.10(@types/node@25.5.0)(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/pretty-format@4.0.18':
dependencies:
- tinyrainbow: 3.0.3
+ tinyrainbow: 3.1.0
+
+ '@vitest/pretty-format@4.1.0':
+ dependencies:
+ tinyrainbow: 3.1.0
'@vitest/runner@4.0.18':
dependencies:
'@vitest/utils': 4.0.18
pathe: 2.0.3
+ '@vitest/runner@4.1.0':
+ dependencies:
+ '@vitest/utils': 4.1.0
+ pathe: 2.0.3
+
'@vitest/snapshot@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
magic-string: 0.30.21
pathe: 2.0.3
+ '@vitest/snapshot@4.1.0':
+ dependencies:
+ '@vitest/pretty-format': 4.1.0
+ '@vitest/utils': 4.1.0
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
'@vitest/spy@4.0.18': {}
+ '@vitest/spy@4.1.0': {}
+
'@vitest/ui@4.0.18(vitest@4.0.18)':
dependencies:
'@vitest/utils': 4.0.18
@@ -25667,19 +23257,25 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
'@vitest/utils@4.0.18':
dependencies:
'@vitest/pretty-format': 4.0.18
tinyrainbow: 3.0.3
+ '@vitest/utils@4.1.0':
+ dependencies:
+ '@vitest/pretty-format': 4.1.0
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
+
'@vscode/sudo-prompt@9.3.2':
optional: true
'@vue/compiler-core@3.5.29':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@vue/shared': 3.5.29
entities: 7.0.1
estree-walker: 2.0.2
@@ -25692,7 +23288,7 @@ snapshots:
'@vue/compiler-sfc@3.5.29':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@vue/compiler-core': 3.5.29
'@vue/compiler-dom': 3.5.29
'@vue/compiler-ssr': 3.5.29
@@ -25833,11 +23429,11 @@ snapshots:
'@opentelemetry/api': 1.9.0
zod: 4.3.6
- ai@6.0.14(zod@4.3.6):
+ ai@6.0.116(zod@4.3.6):
dependencies:
- '@ai-sdk/gateway': 3.0.9(zod@4.3.6)
- '@ai-sdk/provider': 3.0.2
- '@ai-sdk/provider-utils': 4.0.4(zod@4.3.6)
+ '@ai-sdk/gateway': 3.0.66(zod@4.3.6)
+ '@ai-sdk/provider': 3.0.8
+ '@ai-sdk/provider-utils': 4.0.19(zod@4.3.6)
'@opentelemetry/api': 1.9.0
zod: 4.3.6
@@ -25876,9 +23472,6 @@ snapshots:
dependencies:
string-width: 4.2.3
- ansi-color@0.2.2:
- optional: true
-
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
@@ -25969,25 +23562,10 @@ snapshots:
aria-query@5.3.1: {}
- array-buffer-byte-length@1.0.2:
- dependencies:
- call-bound: 1.0.4
- is-array-buffer: 3.0.5
-
array-iterate@2.0.1: {}
array-timsort@1.0.3: {}
- arraybuffer.prototype.slice@1.0.4:
- dependencies:
- array-buffer-byte-length: 1.0.2
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- is-array-buffer: 3.0.5
-
asap@2.0.6: {}
asn1@0.2.6:
@@ -26004,7 +23582,7 @@ snapshots:
ast-kit@3.0.0-beta.1:
dependencies:
- '@babel/parser': 8.0.0-rc.1
+ '@babel/parser': 8.0.0-rc.2
estree-walker: 3.0.3
pathe: 2.0.3
@@ -26017,8 +23595,6 @@ snapshots:
astring@1.9.0: {}
- async-function@1.0.0: {}
-
async-limiter@1.0.1: {}
async-sema@3.1.1: {}
@@ -26027,8 +23603,6 @@ snapshots:
asynckit@0.4.0: {}
- atomic-sleep@1.0.0: {}
-
atomically@2.1.1:
dependencies:
stubborn-fs: 2.0.0
@@ -26043,10 +23617,6 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- available-typed-arrays@1.0.7:
- dependencies:
- possible-typed-array-names: 1.1.0
-
aws-ssl-profiles@1.1.2: {}
axios@1.13.5:
@@ -26064,7 +23634,7 @@ snapshots:
babel-dead-code-elimination@1.0.12:
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
transitivePeerDependencies:
@@ -26109,11 +23679,11 @@ snapshots:
html-entities: 2.3.3
parse5: 7.3.0
- babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0):
+ babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0):
dependencies:
'@babel/compat-data': 7.29.0
'@babel/core': 7.29.0
- '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -26121,15 +23691,15 @@ snapshots:
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
+ '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0)
+ core-js-compat: 3.49.0
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0):
+ babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0):
dependencies:
'@babel/core': 7.29.0
- '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)
+ '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0)
transitivePeerDependencies:
- supports-color
@@ -26172,7 +23742,7 @@ snapshots:
'@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.29.0)(@babel/runtime@7.28.6)(expo@54.0.33)(react-refresh@0.14.2):
+ babel-preset-expo@54.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@54.0.33)(react-refresh@0.14.2):
dependencies:
'@babel/helper-module-imports': 7.28.6
'@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0)
@@ -26198,7 +23768,7 @@ snapshots:
react-refresh: 0.14.2
resolve-from: 5.0.0
optionalDependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.13.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
transitivePeerDependencies:
- '@babel/core'
@@ -26242,50 +23812,6 @@ snapshots:
mailchecker: 6.0.19
validator: 13.15.26
- better-auth@1.4.19(11628ebdb451ccbc3bb58323a9d36bac):
- dependencies:
- '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1)
- '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.1))
- '@better-auth/utils': 0.3.0
- '@better-fetch/fetch': 1.1.21
- '@noble/ciphers': 2.1.1
- '@noble/hashes': 2.0.1
- better-call: 1.1.8(zod@4.3.6)
- defu: 6.1.4
- jose: 6.1.3
- kysely: 0.28.11
- nanostores: 1.1.1
- zod: 4.3.6
- optionalDependencies:
- '@lynx-js/react': 0.116.3(@types/react@19.2.14)
- '@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
- '@sveltejs/kit': 2.53.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/react-start': 1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@tanstack/solid-start': 1.163.2(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(solid-js@1.9.11)(vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- better-sqlite3: 12.6.2
- drizzle-kit: 0.31.9
- drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
- mongodb: 7.1.0(socks@2.8.7)
- mysql2: 3.18.2(@types/node@25.3.2)
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
- pg: 8.19.0
- prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- solid-js: 1.9.11
- svelte: 5.53.5
- vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vue: 3.5.29(typescript@5.9.3)
-
- better-call@1.1.8(zod@4.3.6):
- dependencies:
- '@better-auth/utils': 0.3.1
- '@better-fetch/fetch': 1.1.21
- rou3: 0.7.12
- set-cookie-parser: 2.7.2
- optionalDependencies:
- zod: 4.3.6
-
better-call@1.3.2(zod@4.3.6):
dependencies:
'@better-auth/utils': 0.3.1
@@ -26310,9 +23836,6 @@ snapshots:
big-integer@1.6.52: {}
- bignumber.js@9.3.1:
- optional: true
-
binary-extensions@2.3.0: {}
bindings@1.5.0:
@@ -26454,14 +23977,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- bufrw@1.4.0:
- dependencies:
- ansi-color: 0.2.2
- error: 7.0.2
- hexer: 1.5.0
- xtend: 4.0.2
- optional: true
-
bumpp@10.4.1(magicast@0.5.2):
dependencies:
ansis: 4.2.0
@@ -26480,7 +23995,7 @@ snapshots:
bun-types@1.3.9:
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
bundle-name@4.1.0:
dependencies:
@@ -26566,13 +24081,6 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- call-bind@1.0.8:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- get-intrinsic: 1.3.0
- set-function-length: 1.2.2
-
call-bound@1.0.4:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -26655,7 +24163,7 @@ snapshots:
parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
- undici: 7.22.0
+ undici: 7.24.1
whatwg-mimetype: 4.0.0
chevrotain-allstar@0.3.1(chevrotain@11.1.2):
@@ -26707,7 +24215,7 @@ snapshots:
chrome-launcher@0.15.2:
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
escape-string-regexp: 4.0.0
is-wsl: 2.2.0
lighthouse-logger: 1.4.2
@@ -26716,7 +24224,7 @@ snapshots:
chromium-edge-launcher@0.2.0:
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
escape-string-regexp: 4.0.0
is-wsl: 2.2.0
lighthouse-logger: 1.4.2
@@ -26865,8 +24373,6 @@ snapshots:
colorette@1.4.0:
optional: true
- colorette@2.0.20: {}
-
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
@@ -26997,7 +24503,7 @@ snapshots:
is-what: 3.14.1
optional: true
- core-js-compat@3.48.0:
+ core-js-compat@3.49.0:
dependencies:
browserslist: 4.28.1
@@ -27039,13 +24545,6 @@ snapshots:
dependencies:
cross-spawn: 7.0.6
- cross-fetch@3.2.0(encoding@0.1.13):
- dependencies:
- node-fetch: 2.7.0(encoding@0.1.13)
- transitivePeerDependencies:
- - encoding
- optional: true
-
cross-fetch@4.1.0(encoding@0.1.13):
dependencies:
node-fetch: 2.7.0(encoding@0.1.13)
@@ -27168,11 +24667,6 @@ snapshots:
css-gradient-parser@0.0.17: {}
- css-in-js-utils@3.1.0:
- dependencies:
- hyphenate-style-name: 1.1.0
- optional: true
-
css-select@5.2.2:
dependencies:
boolbase: 1.0.0
@@ -27442,30 +24936,10 @@ snapshots:
data-uri-to-buffer@4.0.1:
optional: true
- data-view-buffer@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
- data-view-byte-length@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
- data-view-byte-offset@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
date-fns-jalali@4.1.0-0: {}
date-fns@4.1.0: {}
- dateformat@4.6.3: {}
-
dax-sh@0.43.2:
dependencies:
'@deno/shim-deno': 0.19.2
@@ -27473,13 +24947,16 @@ snapshots:
dayjs@1.11.19: {}
- db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)):
+ dayjs@1.11.20:
+ optional: true
+
+ db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0)):
optionalDependencies:
'@electric-sql/pglite': 0.3.15
'@libsql/client': 0.17.0(encoding@0.1.13)
better-sqlite3: 12.6.2
- drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
- mysql2: 3.18.2(@types/node@25.3.3)
+ drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
+ mysql2: 3.18.2(@types/node@25.5.0)
debounce-fn@6.0.0:
dependencies:
@@ -27545,6 +25022,7 @@ snapshots:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
+ optional: true
define-lazy-prop@2.0.0: {}
@@ -27555,6 +25033,7 @@ snapshots:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ optional: true
defu@6.1.4: {}
@@ -27634,10 +25113,6 @@ snapshots:
dependencies:
dotenv: 16.6.1
- dotenv-expand@12.0.3:
- dependencies:
- dotenv: 16.6.1
-
dotenv@16.4.7: {}
dotenv@16.6.1: {}
@@ -27684,7 +25159,7 @@ snapshots:
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
react: 19.2.4
- drizzle-orm@0.38.4(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/react@19.2.14)(better-sqlite3@12.6.2)(bun-types@1.3.9)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react@19.2.4):
+ drizzle-orm@0.38.4(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/react@19.2.14)(better-sqlite3@12.6.2)(bun-types@1.3.9)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react@19.2.4):
optionalDependencies:
'@cloudflare/workers-types': 4.20260226.1
'@electric-sql/pglite': 0.3.15
@@ -27697,13 +25172,13 @@ snapshots:
better-sqlite3: 12.6.2
bun-types: 1.3.9
kysely: 0.28.11
- mysql2: 3.18.2(@types/node@25.3.3)
+ mysql2: 3.18.2(@types/node@25.5.0)
pg: 8.19.0
postgres: 3.4.8
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
react: 19.2.4
- drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
+ drizzle-orm@0.41.0(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
optionalDependencies:
'@cloudflare/workers-types': 4.20260226.1
'@electric-sql/pglite': 0.3.15
@@ -27716,12 +25191,12 @@ snapshots:
bun-types: 1.3.9
gel: 2.2.0
kysely: 0.28.11
- mysql2: 3.18.2(@types/node@25.3.3)
+ mysql2: 3.18.2(@types/node@25.5.0)
pg: 8.19.0
postgres: 3.4.8
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
+ drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
optionalDependencies:
'@cloudflare/workers-types': 4.20260226.1
'@electric-sql/pglite': 0.3.15
@@ -27730,34 +25205,17 @@ snapshots:
'@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
'@types/better-sqlite3': 7.6.13
'@types/pg': 8.16.0
+ '@upstash/redis': 1.36.4
better-sqlite3: 12.6.2
bun-types: 1.3.9
gel: 2.2.0
kysely: 0.28.11
- mysql2: 3.18.2(@types/node@25.3.2)
+ mysql2: 3.18.2(@types/node@25.5.0)
pg: 8.19.0
postgres: 3.4.8
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
- drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
- optionalDependencies:
- '@cloudflare/workers-types': 4.20260226.1
- '@electric-sql/pglite': 0.3.15
- '@libsql/client': 0.17.0(encoding@0.1.13)
- '@opentelemetry/api': 1.9.0
- '@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
- '@types/better-sqlite3': 7.6.13
- '@types/pg': 8.16.0
- better-sqlite3: 12.6.2
- bun-types: 1.3.9
- gel: 2.2.0
- kysely: 0.28.11
- mysql2: 3.18.2(@types/node@25.3.3)
- pg: 8.19.0
- postgres: 3.4.8
- prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
-
- drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
+ drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)):
optionalDependencies:
'@cloudflare/workers-types': 4.20260226.1
'@electric-sql/pglite': 0.3.15
@@ -27766,21 +25224,17 @@ snapshots:
'@prisma/client': 7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)
'@types/better-sqlite3': 7.6.13
'@types/pg': 8.16.0
+ '@upstash/redis': 1.36.4
better-sqlite3: 12.6.2
bun-types: 1.3.9
gel: 2.2.0
kysely: 0.28.11
- mysql2: 3.18.2(@types/node@25.3.3)
+ mysql2: 3.18.2(@types/node@25.5.0)
pg: 8.19.0
postgres: 3.4.8
prisma: 7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)
optional: true
- drizzle-zod@0.8.3(drizzle-orm@0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(zod@4.3.6):
- dependencies:
- drizzle-orm: 0.44.7(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.2))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.3.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))
- zod: 4.3.6
-
dts-resolver@2.1.3(oxc-resolver@11.19.0):
optionalDependencies:
oxc-resolver: 11.19.0
@@ -27910,81 +25364,20 @@ snapshots:
dependencies:
stackframe: 1.3.4
- error@7.0.2:
- dependencies:
- string-template: 0.2.1
- xtend: 4.0.2
- optional: true
-
errorhandler@1.5.2:
dependencies:
accepts: 1.3.8
escape-html: 1.0.3
optional: true
- es-abstract@1.24.1:
- dependencies:
- array-buffer-byte-length: 1.0.2
- arraybuffer.prototype.slice: 1.0.4
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- call-bound: 1.0.4
- data-view-buffer: 1.0.2
- data-view-byte-length: 1.0.2
- data-view-byte-offset: 1.0.1
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- es-set-tostringtag: 2.1.0
- es-to-primitive: 1.3.0
- function.prototype.name: 1.1.8
- get-intrinsic: 1.3.0
- get-proto: 1.0.1
- get-symbol-description: 1.1.0
- globalthis: 1.0.4
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
- has-proto: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- internal-slot: 1.1.0
- is-array-buffer: 3.0.5
- is-callable: 1.2.7
- is-data-view: 1.0.2
- is-negative-zero: 2.0.3
- is-regex: 1.2.1
- is-set: 2.0.3
- is-shared-array-buffer: 1.0.4
- is-string: 1.1.1
- is-typed-array: 1.1.15
- is-weakref: 1.1.1
- math-intrinsics: 1.1.0
- object-inspect: 1.13.4
- object-keys: 1.1.1
- object.assign: 4.1.7
- own-keys: 1.0.1
- regexp.prototype.flags: 1.5.4
- safe-array-concat: 1.1.3
- safe-push-apply: 1.0.0
- safe-regex-test: 1.1.0
- set-proto: 1.0.0
- stop-iteration-iterator: 1.1.0
- string.prototype.trim: 1.2.10
- string.prototype.trimend: 1.0.9
- string.prototype.trimstart: 1.0.8
- typed-array-buffer: 1.0.3
- typed-array-byte-length: 1.0.3
- typed-array-byte-offset: 1.0.4
- typed-array-length: 1.0.7
- unbox-primitive: 1.1.0
- which-typed-array: 1.1.20
-
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
es-module-lexer@1.7.0: {}
+ es-module-lexer@2.0.0: {}
+
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
@@ -27996,12 +25389,6 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- es-to-primitive@1.3.0:
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.1.0
- is-symbol: 1.1.1
-
es-toolkit@1.44.0: {}
es6-error@4.1.1: {}
@@ -28300,8 +25687,6 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
- exit-hook@4.0.0: {}
-
expand-template@2.0.3: {}
expect-type@1.3.0: {}
@@ -28382,15 +25767,15 @@ snapshots:
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.13.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
react: 19.2.4
- expo-router@6.0.23(7b33e59f9d12d11b9d33eb703d0a2b18):
+ expo-router@6.0.23(@expo/metro-runtime@6.1.2)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(expo-constants@55.0.7)(expo-linking@55.0.7)(expo@54.0.33)(react-dom@19.2.4(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
dependencies:
'@expo/metro-runtime': 6.1.2(expo@54.0.33)(react-dom@19.2.4(react@19.2.4))(react-native@0.84.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.14)(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.14)(react@19.2.4)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@react-navigation/bottom-tabs': 7.15.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/bottom-tabs': 7.15.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
'@react-navigation/native': 7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- '@react-navigation/native-stack': 7.14.4(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ '@react-navigation/native-stack': 7.14.5(@react-navigation/native@7.1.33(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
client-only: 0.0.1
debug: 4.4.3
escape-string-regexp: 4.0.0
@@ -28406,8 +25791,8 @@ snapshots:
react-fast-compare: 3.2.2
react-native: 0.84.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.14)(react@19.2.4)
react-native-is-edge-to-edge: 1.3.1(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-safe-area-context: 5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-screens: 4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-safe-area-context: 5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
+ react-native-screens: 4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
semver: 7.6.3
server-only: 0.0.1
sf-symbols-typescript: 2.2.0
@@ -28416,9 +25801,6 @@ snapshots:
vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
optionalDependencies:
react-dom: 19.2.4(react@19.2.4)
- react-native-gesture-handler: 2.30.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-reanimated: 4.2.1(react-native-worklets@0.5.2(@babel/core@7.29.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(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'
@@ -28435,7 +25817,7 @@ snapshots:
expo@54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.13.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
'@expo/cli': 54.0.23(expo-router@6.0.23)(expo@54.0.33)(graphql@16.13.0)(react-native@0.84.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.14)(react@19.2.4))
'@expo/config': 12.0.13
'@expo/config-plugins': 54.0.4
@@ -28445,7 +25827,7 @@ snapshots:
'@expo/metro-config': 54.0.14(expo@54.0.33)
'@expo/vector-icons': 15.1.1(expo-font@14.0.11(expo@54.0.33)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
'@ungap/structured-clone': 1.3.0
- babel-preset-expo: 54.0.10(@babel/core@7.29.0)(@babel/runtime@7.28.6)(expo@54.0.33)(react-refresh@0.14.2)
+ babel-preset-expo: 54.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.2)(expo@54.0.33)(react-refresh@0.14.2)
expo-asset: 12.0.12(expo@54.0.33)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
expo-constants: 18.0.13(expo@54.0.33)(react-native@0.84.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.14)(react@19.2.4))
expo-file-system: 19.0.21(expo@54.0.33)(react-native@0.84.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.14)(react@19.2.4))
@@ -28530,8 +25912,6 @@ snapshots:
dependencies:
pure-rand: 6.1.0
- fast-copy@4.0.2: {}
-
fast-deep-equal@3.1.3: {}
fast-equals@6.0.0: {}
@@ -28548,23 +25928,24 @@ snapshots:
fast-json-stable-stringify@2.1.0: {}
- fast-safe-stringify@2.1.1: {}
-
fast-sha256@1.3.0: {}
fast-uri@3.1.0: {}
- fast-xml-builder@1.0.0: {}
+ fast-xml-builder@1.1.4:
+ dependencies:
+ path-expression-matcher: 1.1.3
fast-xml-parser@4.5.4:
dependencies:
strnum: 1.1.2
optional: true
- fast-xml-parser@5.4.1:
+ fast-xml-parser@5.5.6:
dependencies:
- fast-xml-builder: 1.0.0
- strnum: 2.1.2
+ fast-xml-builder: 1.1.4
+ path-expression-matcher: 1.1.3
+ strnum: 2.2.0
fastq@1.20.1:
dependencies:
@@ -28576,22 +25957,6 @@ snapshots:
dependencies:
bser: 2.1.1
- fbjs-css-vars@1.0.2:
- optional: true
-
- fbjs@3.0.5(encoding@0.1.13):
- dependencies:
- 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
- promise: 7.3.1
- setimmediate: 1.0.5
- ua-parser-js: 1.0.41
- transitivePeerDependencies:
- - encoding
- optional: true
-
fd-package-json@2.0.0:
dependencies:
walk-up-path: 4.0.0
@@ -28669,12 +26034,6 @@ snapshots:
path-exists: 4.0.0
optional: true
- find-up@7.0.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
- unicorn-magic: 0.1.0
-
fix-dts-default-cjs-exports@1.0.1:
dependencies:
magic-string: 0.30.21
@@ -28698,10 +26057,6 @@ snapshots:
fontfaceobserver@2.3.0: {}
- for-each@0.3.5:
- dependencies:
- is-callable: 1.2.7
-
foreground-child@2.0.0:
dependencies:
cross-spawn: 7.0.6
@@ -28729,9 +26084,6 @@ snapshots:
fetch-blob: 3.2.0
optional: true
- forwarded-parse@2.1.2:
- optional: true
-
forwarded@0.2.0: {}
foxact@0.2.53(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
@@ -28779,7 +26131,7 @@ snapshots:
fsevents@2.3.3:
optional: true
- fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
+ fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
dependencies:
'@formatjs/intl-localematcher': 0.8.1
'@orama/orama': 3.1.18
@@ -28813,14 +26165,14 @@ snapshots:
algoliasearch: 5.46.2
lucide-react: 0.563.0(react@19.2.4)
mdast-util-mdx-jsx: 3.2.0
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
zod: 4.3.6
transitivePeerDependencies:
- supports-color
- fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
+ fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
dependencies:
'@formatjs/intl-localematcher': 0.8.1
'@orama/orama': 3.1.18
@@ -28855,21 +26207,21 @@ snapshots:
'@types/react': 19.2.14
algoliasearch: 5.46.2
lucide-react: 0.575.0(react@19.2.4)
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
zod: 4.3.6
transitivePeerDependencies:
- supports-color
- fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.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.3
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
js-yaml: 4.1.1
mdast-util-to-markdown: 2.1.2
picocolors: 1.1.1
@@ -28888,20 +26240,20 @@ snapshots:
'@types/react': 19.2.14
mdast-util-directive: 3.1.0
mdast-util-mdx-jsx: 3.2.0
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
- fumadocs-mdx@14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ fumadocs-mdx@14.2.9(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-directive@3.1.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react@19.2.4)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.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.3
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
js-yaml: 4.1.1
mdast-util-mdx: 3.0.0
mdast-util-to-markdown: 2.1.2
@@ -28919,16 +26271,16 @@ snapshots:
'@types/mdx': 2.0.13
'@types/react': 19.2.14
mdast-util-directive: 3.1.0
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
react: 19.2.4
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
transitivePeerDependencies:
- supports-color
- fumadocs-typescript@5.1.4(3749dc07ba6aad1af5ecb0ad432fe651):
+ fumadocs-typescript@5.1.4(6f1717d56d58a3cff48f6e7a0874b43c):
dependencies:
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
react: 19.2.4
@@ -28943,14 +26295,14 @@ snapshots:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/react': 19.2.14
- fumadocs-ui: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ fumadocs-ui: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
transitivePeerDependencies:
- supports-color
- fumadocs-typescript@5.1.4(f245ce4745497b47498caec764b8c0fe):
+ fumadocs-typescript@5.1.4(9b4153ee01e9e4517d024462946a1b90):
dependencies:
estree-util-value-to-estree: 3.5.0
- fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
hast-util-to-estree: 3.1.3
hast-util-to-jsx-runtime: 2.3.6
react: 19.2.4
@@ -28965,11 +26317,11 @@ snapshots:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/react': 19.2.14
- fumadocs-ui: 16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ fumadocs-ui: 16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
transitivePeerDependencies:
- supports-color
- fumadocs-ui@16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1):
+ fumadocs-ui@16.5.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1):
dependencies:
'@fumadocs/tailwind': 0.0.2(tailwindcss@4.2.1)
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -28983,7 +26335,7 @@ snapshots:
'@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
class-variance-authority: 0.7.1
- fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
lucide-react: 0.563.0(react@19.2.4)
motion: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -28995,13 +26347,13 @@ snapshots:
tailwind-merge: 3.5.0
optionalDependencies:
'@types/react': 19.2.14
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
tailwindcss: 4.2.1
transitivePeerDependencies:
- '@emotion/is-prop-valid'
- '@types/react-dom'
- fumadocs-ui@16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1):
+ fumadocs-ui@16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1):
dependencies:
'@fumadocs/tailwind': 0.0.2(tailwindcss@4.2.1)
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -29015,7 +26367,7 @@ snapshots:
'@radix-ui/react-slot': 1.2.4(@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
class-variance-authority: 0.7.1
- fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
lucide-react: 0.575.0(react@19.2.4)
motion: 12.34.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -29029,7 +26381,7 @@ snapshots:
unist-util-visit: 5.1.0
optionalDependencies:
'@types/react': 19.2.14
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
transitivePeerDependencies:
- '@emotion/is-prop-valid'
- '@types/react-dom'
@@ -29037,42 +26389,9 @@ snapshots:
function-bind@1.1.2: {}
- function.prototype.name@1.1.8:
+ geist@1.7.0(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)):
dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- functions-have-names: 1.2.3
- hasown: 2.0.2
- is-callable: 1.2.7
-
- functions-have-names@1.2.3: {}
-
- gaxios@6.7.1(encoding@0.1.13):
- dependencies:
- extend: 3.0.2
- https-proxy-agent: 7.0.6
- is-stream: 2.0.1
- node-fetch: 2.7.0(encoding@0.1.13)
- uuid: 9.0.1
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
- gcp-metadata@6.1.1(encoding@0.1.13):
- dependencies:
- gaxios: 6.7.1(encoding@0.1.13)
- google-logging-utils: 0.0.2
- json-bigint: 1.0.0
- transitivePeerDependencies:
- - encoding
- - supports-color
- optional: true
-
- geist@1.7.0(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)):
- dependencies:
- next: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
+ next: 16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1)
gel@2.2.0:
dependencies:
@@ -29089,8 +26408,6 @@ snapshots:
dependencies:
is-property: 1.0.2
- generator-function@2.0.1: {}
-
gensequence@8.0.8: {}
gensync@1.0.0-beta.2: {}
@@ -29131,12 +26448,6 @@ snapshots:
get-stream@8.0.1: {}
- get-symbol-description@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
-
get-tsconfig@4.13.6:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -29206,6 +26517,7 @@ snapshots:
dependencies:
define-properties: 1.2.1
gopd: 1.2.0
+ optional: true
globby@16.1.1:
dependencies:
@@ -29218,11 +26530,6 @@ snapshots:
glsl-noise@0.0.0: {}
- google-logging-utils@0.0.2:
- optional: true
-
- google-protobuf@4.0.2: {}
-
gopd@1.2.0: {}
got@11.8.6:
@@ -29285,7 +26592,7 @@ snapshots:
h3@2.0.1-rc.14:
dependencies:
rou3: 0.7.12
- srvx: 0.11.8
+ srvx: 0.11.12
hachure-fill@0.5.2: {}
@@ -29301,8 +26608,6 @@ snapshots:
- bufferutil
- utf-8-validate
- has-bigints@1.1.0: {}
-
has-flag@3.0.0: {}
has-flag@4.0.0: {}
@@ -29310,10 +26615,7 @@ snapshots:
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.1
-
- has-proto@1.2.0:
- dependencies:
- dunder-proto: 1.0.1
+ optional: true
has-symbols@1.1.0: {}
@@ -29455,8 +26757,6 @@ snapshots:
headers-polyfill@4.0.3: {}
- help-me@5.0.0: {}
-
hermes-compiler@250829098.0.9: {}
hermes-estree@0.29.1: {}
@@ -29479,28 +26779,15 @@ snapshots:
hex-rgb@4.3.0: {}
- hexer@1.5.0:
- dependencies:
- ansi-color: 0.2.2
- minimist: 1.2.8
- process: 0.10.1
- xtend: 4.0.2
- optional: true
-
highlight.js@10.7.3: {}
highlight.js@11.11.1: {}
hls.js@1.6.15: {}
- hoist-non-react-statics@3.3.2:
- dependencies:
- react-is: 16.13.1
- optional: true
-
hono@4.11.4: {}
- hono@4.12.5: {}
+ hono@4.12.7: {}
hookable@5.5.3: {}
@@ -29596,9 +26883,6 @@ snapshots:
hyperdyperid@1.2.0: {}
- hyphenate-style-name@1.1.0:
- optional: true
-
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -29676,22 +26960,11 @@ snapshots:
inline-style-parser@0.2.7: {}
- inline-style-prefixer@7.0.1:
- dependencies:
- css-in-js-utils: 3.1.0
- optional: true
-
input-otp@1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- internal-slot@1.1.0:
- dependencies:
- es-errors: 1.3.0
- hasown: 2.0.2
- side-channel: 1.1.0
-
internmap@1.0.1: {}
internmap@2.0.3: {}
@@ -29730,55 +27003,19 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
- is-array-buffer@3.0.5:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
-
is-arrayish@0.2.1: {}
is-arrayish@0.3.4:
optional: true
- is-async-function@2.1.1:
- dependencies:
- async-function: 1.0.0
- call-bound: 1.0.4
- get-proto: 1.0.1
- has-tostringtag: 1.0.2
- safe-regex-test: 1.1.0
-
- is-bigint@1.1.0:
- dependencies:
- has-bigints: 1.1.0
-
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
- is-boolean-object@1.2.2:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
- is-callable@1.2.7: {}
-
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
- is-data-view@1.0.2:
- dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
- is-typed-array: 1.1.15
-
- is-date-object@1.1.0:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
is-decimal@2.0.1: {}
is-docker@2.2.1: {}
@@ -29791,23 +27028,11 @@ snapshots:
is-extglob@2.1.1: {}
- is-finalizationregistry@1.1.1:
- dependencies:
- call-bound: 1.0.4
-
is-fullwidth-code-point@2.0.0:
optional: true
is-fullwidth-code-point@3.0.0: {}
- is-generator-function@1.1.2:
- dependencies:
- call-bound: 1.0.4
- generator-function: 2.0.1
- get-proto: 1.0.1
- has-tostringtag: 1.0.2
- safe-regex-test: 1.1.0
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@@ -29821,19 +27046,10 @@ snapshots:
is-interactive@1.0.0:
optional: true
- is-map@2.0.3: {}
-
is-module@1.0.0: {}
- is-negative-zero@2.0.3: {}
-
is-node-process@1.2.0: {}
- is-number-object@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
is-number@7.0.0: {}
is-path-inside@4.0.0: {}
@@ -29854,56 +27070,17 @@ snapshots:
dependencies:
'@types/estree': 1.0.8
- is-regex@1.2.1:
- dependencies:
- call-bound: 1.0.4
- gopd: 1.2.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
-
is-safe-filename@0.1.1: {}
- is-set@2.0.3: {}
-
- is-shared-array-buffer@1.0.4:
- dependencies:
- call-bound: 1.0.4
-
is-stream@2.0.1: {}
is-stream@3.0.0: {}
- is-string@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
-
- is-symbol@1.1.1:
- dependencies:
- call-bound: 1.0.4
- has-symbols: 1.1.0
- safe-regex-test: 1.1.0
-
- is-typed-array@1.1.15:
- dependencies:
- which-typed-array: 1.1.20
-
is-typedarray@1.0.0: {}
is-unicode-supported@0.1.0:
optional: true
- is-weakmap@2.0.2: {}
-
- is-weakref@1.1.1:
- dependencies:
- call-bound: 1.0.4
-
- is-weakset@2.0.4:
- dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
-
is-what@3.14.1:
optional: true
@@ -29928,8 +27105,6 @@ snapshots:
isarray@1.0.0: {}
- isarray@2.0.5: {}
-
isbot@5.1.35: {}
isexe@2.0.0: {}
@@ -29945,7 +27120,7 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -29955,7 +27130,7 @@ snapshots:
istanbul-lib-instrument@6.0.3:
dependencies:
'@babel/core': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.7.4
@@ -29997,31 +27172,18 @@ snapshots:
transitivePeerDependencies:
- '@types/react'
- iwanthue@2.0.0:
- dependencies:
- obliterator: 2.0.5
-
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jaeger-client@3.19.0:
- dependencies:
- node-int64: 0.4.0
- opentracing: 0.14.7
- thriftrw: 3.11.4
- uuid: 8.3.2
- xorshift: 1.2.0
- optional: true
-
jest-environment-node@29.7.0:
dependencies:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
jest-mock: 29.7.0
jest-util: 29.7.0
@@ -30031,7 +27193,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -30058,7 +27220,7 @@ snapshots:
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
jest-util: 29.7.0
jest-regex-util@29.6.3: {}
@@ -30066,7 +27228,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -30083,7 +27245,7 @@ snapshots:
jest-worker@29.7.0:
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -30094,8 +27256,6 @@ snapshots:
jiti@2.6.1: {}
- jmespath@0.16.0: {}
-
joi@17.13.3:
dependencies:
'@hapi/hoek': 9.3.0
@@ -30114,8 +27274,6 @@ snapshots:
'@types/react': 19.2.14
react: 19.2.4
- joycon@3.1.1: {}
-
jpeg-js@0.4.4:
optional: true
@@ -30156,11 +27314,6 @@ snapshots:
jsesc@3.1.0: {}
- json-bigint@1.0.0:
- dependencies:
- bignumber.js: 9.3.1
- optional: true
-
json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1:
@@ -30294,7 +27447,7 @@ snapshots:
image-size: 0.5.5
make-dir: 2.1.0
mime: 1.6.0
- needle: 3.3.1
+ needle: 3.5.0
source-map: 0.6.1
optional: true
@@ -30334,36 +27487,69 @@ snapshots:
lightningcss-android-arm64@1.31.1:
optional: true
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
lightningcss-darwin-arm64@1.31.1:
optional: true
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
lightningcss-darwin-x64@1.31.1:
optional: true
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
lightningcss-freebsd-x64@1.31.1:
optional: true
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
lightningcss-linux-arm-gnueabihf@1.31.1:
optional: true
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
lightningcss-linux-arm64-gnu@1.31.1:
optional: true
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
lightningcss-linux-arm64-musl@1.31.1:
optional: true
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
lightningcss-linux-x64-gnu@1.31.1:
optional: true
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
lightningcss-linux-x64-musl@1.31.1:
optional: true
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
lightningcss-win32-arm64-msvc@1.31.1:
optional: true
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
lightningcss-win32-x64-msvc@1.31.1:
optional: true
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
lightningcss@1.31.1:
dependencies:
detect-libc: 2.1.2
@@ -30380,6 +27566,22 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.31.1
lightningcss-win32-x64-msvc: 1.31.1
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
lilconfig@2.1.0: {}
lilconfig@3.1.3: {}
@@ -30438,14 +27640,8 @@ snapshots:
p-locate: 5.0.0
optional: true
- locate-path@7.2.0:
- dependencies:
- p-locate: 6.0.0
-
lodash-es@4.17.23: {}
- lodash.camelcase@4.3.0: {}
-
lodash.debounce@4.0.8: {}
lodash.defaults@4.2.0: {}
@@ -30491,15 +27687,12 @@ snapshots:
logkitty@0.7.1:
dependencies:
ansi-fragments: 0.2.1
- dayjs: 1.11.19
+ dayjs: 1.11.20
yargs: 15.4.1
optional: true
loglevel@1.9.2: {}
- long@2.4.0:
- optional: true
-
long@5.3.2: {}
longest-streak@3.1.0: {}
@@ -30553,20 +27746,20 @@ snapshots:
magicast@0.2.11:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
recast: 0.23.11
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
optional: true
magicast@0.5.2:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
@@ -30878,9 +28071,6 @@ snapshots:
memoize-one@5.2.1: {}
- memoize-one@6.0.0:
- optional: true
-
memory-pager@1.5.0: {}
merge-anything@5.1.7:
@@ -31102,7 +28292,7 @@ snapshots:
metro-minify-terser@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
- terser: 5.46.0
+ terser: 5.46.1
metro-minify-terser@0.83.4:
dependencies:
@@ -31112,7 +28302,7 @@ snapshots:
metro-minify-terser@0.83.5:
dependencies:
flow-enums-runtime: 0.0.6
- terser: 5.46.0
+ terser: 5.46.1
optional: true
metro-resolver@0.83.3:
@@ -31130,7 +28320,7 @@ snapshots:
metro-runtime@0.83.3:
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
flow-enums-runtime: 0.0.6
metro-runtime@0.83.4:
@@ -31140,7 +28330,7 @@ snapshots:
metro-runtime@0.83.5:
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
flow-enums-runtime: 0.0.6
optional: true
@@ -31260,7 +28450,7 @@ snapshots:
dependencies:
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
flow-enums-runtime: 0.0.6
metro: 0.83.3
@@ -31280,7 +28470,7 @@ snapshots:
dependencies:
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
flow-enums-runtime: 0.0.6
metro: 0.83.4
@@ -31300,7 +28490,7 @@ snapshots:
dependencies:
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
flow-enums-runtime: 0.0.6
metro: 0.83.5
@@ -31322,7 +28512,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
@@ -31369,7 +28559,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
@@ -31416,7 +28606,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/core': 7.29.0
'@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
@@ -31950,9 +29140,9 @@ snapshots:
- '@types/node'
optional: true
- msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3):
+ msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3):
dependencies:
- '@inquirer/confirm': 5.1.21(@types/node@25.3.3)
+ '@inquirer/confirm': 5.1.21(@types/node@25.5.0)
'@mswjs/interceptors': 0.41.3
'@open-draft/deferred-promise': 2.2.0
'@types/statuses': 2.0.6
@@ -32002,22 +29192,9 @@ snapshots:
sql-escaper: 1.3.3
optional: true
- mysql2@3.18.2(@types/node@25.3.2):
- dependencies:
- '@types/node': 25.3.2
- aws-ssl-profiles: 1.1.2
- denque: 2.1.0
- generate-function: 2.3.1
- iconv-lite: 0.7.2
- long: 5.3.2
- lru.min: 1.1.4
- named-placeholders: 1.1.6
- sql-escaper: 1.3.3
- optional: true
-
- mysql2@3.18.2(@types/node@25.3.3):
+ mysql2@3.18.2(@types/node@25.5.0):
dependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
aws-ssl-profiles: 1.1.2
denque: 2.1.0
generate-function: 2.3.1
@@ -32047,10 +29224,10 @@ snapshots:
native-duplexpair@1.0.0: {}
- needle@3.3.1:
+ needle@3.5.0:
dependencies:
iconv-lite: 0.6.3
- sax: 1.5.0
+ sax: 1.6.0
optional: true
negotiator@0.6.3: {}
@@ -32066,9 +29243,9 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1):
+ next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1):
dependencies:
- '@next/env': 16.1.6
+ '@next/env': 16.2.0
'@swc/helpers': 0.5.15
baseline-browser-mapping: 2.10.0
caniuse-lite: 1.0.30001774
@@ -32077,14 +29254,14 @@ snapshots:
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
+ '@next/swc-darwin-arm64': 16.2.0
+ '@next/swc-darwin-x64': 16.2.0
+ '@next/swc-linux-arm64-gnu': 16.2.0
+ '@next/swc-linux-arm64-musl': 16.2.0
+ '@next/swc-linux-x64-gnu': 16.2.0
+ '@next/swc-linux-x64-musl': 16.2.0
+ '@next/swc-win32-arm64-msvc': 16.2.0
+ '@next/swc-win32-x64-msvc': 16.2.0
'@opentelemetry/api': 1.9.0
'@playwright/test': 1.58.2
babel-plugin-react-compiler: 1.0.0
@@ -32094,7 +29271,7 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- nitropack@2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.3.3))(rolldown@1.0.0-rc.5):
+ nitropack@2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.5.0))(rolldown@1.0.0-rc.8):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
'@rollup/plugin-alias': 6.0.0(rollup@4.59.0)
@@ -32115,7 +29292,7 @@ snapshots:
cookie-es: 2.0.0
croner: 9.1.0
crossws: 0.3.5
- db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3))
+ db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0))
defu: 6.1.4
destr: 2.0.5
dot-prop: 10.1.0
@@ -32147,7 +29324,7 @@ snapshots:
pretty-bytes: 7.1.0
radix3: 1.1.2
rollup: 4.59.0
- rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.5)(rollup@4.59.0)
+ rollup-plugin-visualizer: 6.0.5(rolldown@1.0.0-rc.8)(rollup@4.59.0)
scule: 1.3.0
semver: 7.7.4
serve-placeholder: 2.0.2
@@ -32161,7 +29338,7 @@ snapshots:
unenv: 2.0.0-rc.24
unimport: 5.7.0
unplugin-utils: 0.3.1
- unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3)
+ unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(@upstash/redis@1.36.4)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0)))(ioredis@5.9.3)
untyped: 2.0.0
unwasm: 0.5.3
youch: 4.1.0
@@ -32366,7 +29543,7 @@ snapshots:
dependencies:
citty: 0.2.1
pathe: 2.0.3
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
oauth2-mock-server@8.2.2:
dependencies:
@@ -32397,18 +29574,8 @@ snapshots:
object-inspect@1.13.4: {}
- object-keys@1.1.1: {}
-
- object.assign@4.1.7:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
- has-symbols: 1.1.0
- object-keys: 1.1.1
-
- obliterator@2.0.5: {}
+ object-keys@1.1.1:
+ optional: true
obug@2.1.1: {}
@@ -32420,8 +29587,6 @@ snapshots:
ohash@2.0.11: {}
- on-exit-leak-free@2.1.2: {}
-
on-finished@2.3.0:
dependencies:
ee-first: 1.1.1
@@ -32486,23 +29651,11 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
- openai@5.23.2(ws@8.19.0)(zod@4.3.6):
- optionalDependencies:
- ws: 8.19.0
- zod: 4.3.6
-
- openapi3-ts@4.5.0:
- dependencies:
- yaml: 2.8.2
-
openid-client@6.8.2:
dependencies:
jose: 6.1.3
oauth4webapi: 3.8.5
- opentracing@0.14.7:
- optional: true
-
ora@3.4.0:
dependencies:
chalk: 2.4.2
@@ -32527,12 +29680,6 @@ snapshots:
outvariant@1.4.3: {}
- own-keys@1.0.1:
- dependencies:
- get-intrinsic: 1.3.0
- object-keys: 1.1.1
- safe-push-apply: 1.0.0
-
oxc-resolver@11.19.0:
optionalDependencies:
'@oxc-resolver/binding-android-arm-eabi': 11.19.0
@@ -32566,10 +29713,6 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.2.2
-
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -32579,10 +29722,6 @@ snapshots:
p-limit: 3.1.0
optional: true
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
p-map@3.0.0:
dependencies:
aggregate-error: 3.1.0
@@ -32705,7 +29844,7 @@ snapshots:
path-exists@4.0.0: {}
- path-exists@5.0.0: {}
+ path-expression-matcher@1.1.3: {}
path-is-absolute@1.0.1: {}
@@ -32796,46 +29935,6 @@ snapshots:
pify@4.0.1:
optional: true
- pino-abstract-transport@2.0.0:
- dependencies:
- split2: 4.2.0
-
- pino-abstract-transport@3.0.0:
- dependencies:
- split2: 4.2.0
-
- pino-pretty@13.1.3:
- dependencies:
- colorette: 2.0.20
- dateformat: 4.6.3
- fast-copy: 4.0.2
- fast-safe-stringify: 2.1.1
- help-me: 5.0.0
- joycon: 3.1.1
- minimist: 1.2.8
- on-exit-leak-free: 2.1.2
- pino-abstract-transport: 3.0.0
- pump: 3.0.3
- secure-json-parse: 4.1.0
- sonic-boom: 4.2.1
- strip-json-comments: 5.0.3
-
- pino-std-serializers@7.1.0: {}
-
- pino@9.14.0:
- dependencies:
- '@pinojs/redact': 0.4.0
- atomic-sleep: 1.0.0
- on-exit-leak-free: 2.1.2
- pino-abstract-transport: 2.0.0
- pino-std-serializers: 7.1.0
- process-warning: 5.0.0
- quick-format-unescaped: 4.0.4
- real-require: 0.2.0
- safe-stable-stringify: 2.5.0
- sonic-boom: 4.2.1
- thread-stream: 3.1.0
-
pirates@4.0.7: {}
pkce-challenge@5.0.1: {}
@@ -32881,8 +29980,6 @@ snapshots:
path-data-parser: 0.1.0
points-on-curve: 0.2.0
- possible-typed-array-names@1.1.0: {}
-
postal-mime@2.7.3: {}
postcss-calc@10.1.1(postcss@8.5.6):
@@ -33162,11 +30259,6 @@ snapshots:
dependencies:
fromentries: 1.3.2
- process-warning@5.0.0: {}
-
- process@0.10.1:
- optional: true
-
process@0.11.10: {}
progress@2.0.3: {}
@@ -33186,11 +30278,6 @@ snapshots:
is-promise: 2.2.2
lie: 3.3.0
- promise@7.3.1:
- dependencies:
- asap: 2.0.6
- optional: true
-
promise@8.3.0:
dependencies:
asap: 2.0.6
@@ -33214,21 +30301,6 @@ snapshots:
proto-list@1.2.4: {}
- protobufjs@7.5.4:
- dependencies:
- '@protobufjs/aspromise': 1.1.2
- '@protobufjs/base64': 1.1.2
- '@protobufjs/codegen': 2.0.4
- '@protobufjs/eventemitter': 1.1.0
- '@protobufjs/fetch': 1.1.0
- '@protobufjs/float': 1.0.2
- '@protobufjs/inquire': 1.1.0
- '@protobufjs/path': 1.1.2
- '@protobufjs/pool': 1.1.0
- '@protobufjs/utf8': 1.1.0
- '@types/node': 25.3.3
- long: 5.3.2
-
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
@@ -33261,10 +30333,6 @@ snapshots:
pure-rand@6.1.0: {}
- pusher-js@8.4.0:
- dependencies:
- tweetnacl: 1.0.3
-
pvtsutils@1.3.6:
dependencies:
tslib: 2.8.1
@@ -33300,8 +30368,6 @@ snapshots:
dependencies:
inherits: 2.0.4
- quick-format-unescaped@4.0.4: {}
-
quick-lru@5.1.1: {}
quotation@2.0.3: {}
@@ -33451,9 +30517,6 @@ snapshots:
dependencies:
react: 19.2.4
- react-is@16.13.1:
- optional: true
-
react-is@18.3.1: {}
react-is@19.2.4: {}
@@ -33481,43 +30544,19 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
- react-native-gesture-handler@2.30.0(react-native@0.84.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.14)(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.84.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.14)(react@19.2.4)
- optional: true
-
- react-native-is-edge-to-edge@1.2.1(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
- dependencies:
- react: 19.2.4
- react-native: 0.84.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.14)(react@19.2.4)
- optional: true
-
react-native-is-edge-to-edge@1.3.1(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-native: 0.84.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.14)(react@19.2.4)
optional: true
- react-native-reanimated@4.2.1(react-native-worklets@0.5.2(@babel/core@7.29.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4))(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
+ react-native-safe-area-context@5.7.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-native: 0.84.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.14)(react@19.2.4)
- react-native-is-edge-to-edge: 1.2.1(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- react-native-worklets: 0.5.2(@babel/core@7.29.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4)
- semver: 7.7.3
optional: true
- react-native-safe-area-context@5.6.2(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
- dependencies:
- react: 19.2.4
- react-native: 0.84.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.14)(react@19.2.4)
- optional: true
-
- react-native-screens@4.20.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
+ react-native-screens@4.24.0(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-freeze: 1.0.4(react@19.2.4)
@@ -33525,42 +30564,6 @@ snapshots:
warn-once: 0.1.1
optional: true
- 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(encoding@0.1.13)
- inline-style-prefixer: 7.0.1
- memoize-one: 6.0.0
- nullthrows: 1.1.1
- postcss-value-parser: 4.2.0
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- styleq: 0.1.3
- transitivePeerDependencies:
- - encoding
- optional: true
-
- react-native-worklets@0.5.2(@babel/core@7.29.0)(react-native@0.84.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.14)(react@19.2.4))(react@19.2.4):
- dependencies:
- '@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.84.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.14)(react@19.2.4)
- semver: 7.7.2
- transitivePeerDependencies:
- - supports-color
- optional: true
-
react-native@0.84.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.14)(react@19.2.4):
dependencies:
'@jest/create-cache-key-function': 29.7.0
@@ -33729,8 +30732,6 @@ snapshots:
readdirp@5.0.0: {}
- real-require@0.2.0: {}
-
recast@0.23.11:
dependencies:
ast-types: 0.16.1
@@ -33802,17 +30803,6 @@ snapshots:
reflect-metadata@0.2.2: {}
- reflect.getprototypeof@1.0.10:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- get-intrinsic: 1.3.0
- get-proto: 1.0.1
- which-builtin-type: 1.2.1
-
regenerate-unicode-properties@10.2.2:
dependencies:
regenerate: 1.4.2
@@ -33842,15 +30832,6 @@ snapshots:
regexp-to-ast@0.5.0: {}
- regexp.prototype.flags@1.5.4:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-errors: 1.3.0
- get-proto: 1.0.1
- gopd: 1.2.0
- set-function-name: 2.0.2
-
regexpu-core@6.4.0:
dependencies:
regenerate: 1.4.2
@@ -34882,12 +31863,12 @@ snapshots:
robust-predicates@3.0.2: {}
- rolldown-plugin-dts@0.22.2(oxc-resolver@11.19.0)(rolldown@1.0.0-rc.5)(typescript@5.9.3):
+ rolldown-plugin-dts@0.22.4(oxc-resolver@11.19.0)(rolldown@1.0.0-rc.5)(typescript@5.9.3):
dependencies:
- '@babel/generator': 8.0.0-rc.1
- '@babel/helper-validator-identifier': 8.0.0-rc.1
- '@babel/parser': 8.0.0-rc.1
- '@babel/types': 8.0.0-rc.1
+ '@babel/generator': 8.0.0-rc.2
+ '@babel/helper-validator-identifier': 8.0.0-rc.2
+ '@babel/parser': 8.0.0-rc.2
+ '@babel/types': 8.0.0-rc.2
ast-kit: 3.0.0-beta.1
birpc: 4.0.0
dts-resolver: 2.1.3(oxc-resolver@11.19.0)
@@ -34918,22 +31899,46 @@ snapshots:
'@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5
'@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5
- rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@5.9.3):
+ rolldown@1.0.0-rc.8:
+ dependencies:
+ '@oxc-project/types': 0.115.0
+ '@rolldown/pluginutils': 1.0.0-rc.8
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.8
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.8
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.8
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.8
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.8
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.8
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.8
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.8
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.8
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.8
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.8
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.8
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.8
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.8
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.8
+
+ rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@5.9.3):
dependencies:
+ '@jridgewell/remapping': 2.3.5
+ '@jridgewell/sourcemap-codec': 1.5.5
+ convert-source-map: 2.0.0
magic-string: 0.30.21
rollup: 4.59.0
typescript: 5.9.3
optionalDependencies:
'@babel/code-frame': 7.29.0
- rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.5)(rollup@4.59.0):
+ rollup-plugin-visualizer@6.0.5(rolldown@1.0.0-rc.8)(rollup@4.59.0):
dependencies:
open: 8.4.2
picomatch: 4.0.3
source-map: 0.7.6
yargs: 17.7.2
optionalDependencies:
- rolldown: 1.0.0-rc.5
+ rolldown: 1.0.0-rc.8
rollup: 4.59.0
rollup@4.59.0:
@@ -34998,31 +32003,10 @@ snapshots:
dependencies:
mri: 1.2.0
- safe-array-concat@1.1.3:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
- has-symbols: 1.1.0
- isarray: 2.0.5
-
safe-buffer@5.1.2: {}
safe-buffer@5.2.1: {}
- safe-push-apply@1.0.0:
- dependencies:
- es-errors: 1.3.0
- isarray: 2.0.5
-
- safe-regex-test@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-regex: 1.2.1
-
- safe-stable-stringify@2.5.0: {}
-
safer-buffer@2.1.2: {}
samlify@2.10.2:
@@ -35078,7 +32062,7 @@ snapshots:
sax@1.4.4: {}
- sax@1.5.0: {}
+ sax@1.6.0: {}
scheduler@0.27.0: {}
@@ -35093,8 +32077,6 @@ snapshots:
extend-shallow: 2.0.1
kind-of: 6.0.3
- secure-json-parse@4.1.0: {}
-
selderee@0.11.0:
dependencies:
parseley: 0.12.1
@@ -35111,12 +32093,6 @@ snapshots:
semver@7.6.3:
optional: true
- semver@7.7.2:
- optional: true
-
- semver@7.7.3:
- optional: true
-
semver@7.7.4: {}
send@0.19.2:
@@ -35198,35 +32174,11 @@ snapshots:
set-blocking@2.0.0: {}
- set-cookie-parser@2.7.2: {}
+ set-cookie-parser@2.7.2:
+ optional: true
set-cookie-parser@3.0.1: {}
- set-function-length@1.2.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- function-bind: 1.1.2
- get-intrinsic: 1.3.0
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
-
- set-function-name@2.0.2:
- dependencies:
- define-data-property: 1.1.4
- es-errors: 1.3.0
- functions-have-names: 1.2.3
- has-property-descriptors: 1.0.2
-
- set-proto@1.0.0:
- dependencies:
- dunder-proto: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
-
- setimmediate@1.0.5:
- optional: true
-
setprototypeof@1.2.0: {}
sf-symbols-typescript@2.2.0:
@@ -35385,6 +32337,8 @@ snapshots:
slugify@1.6.6: {}
+ slugify@1.6.8: {}
+
smart-buffer@4.2.0:
optional: true
@@ -35417,10 +32371,6 @@ snapshots:
dependencies:
solid-js: 1.9.11
- sonic-boom@4.2.1:
- dependencies:
- atomic-sleep: 1.0.0
-
sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
@@ -35485,6 +32435,8 @@ snapshots:
sqlstring@2.3.3: {}
+ srvx@0.11.12: {}
+
srvx@0.11.8: {}
stack-utils@2.0.6:
@@ -35519,10 +32471,7 @@ snapshots:
std-env@3.10.0: {}
- stop-iteration-iterator@1.1.0:
- dependencies:
- es-errors: 1.3.0
- internal-slot: 1.1.0
+ std-env@4.0.0: {}
stream-buffers@2.2.0: {}
@@ -35544,9 +32493,6 @@ snapshots:
strict-uri-encode@2.0.0:
optional: true
- string-template@0.2.1:
- optional: true
-
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -35573,29 +32519,6 @@ snapshots:
string.prototype.codepointat@0.2.1: {}
- string.prototype.trim@1.2.10:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-data-property: 1.1.4
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-object-atoms: 1.1.1
- has-property-descriptors: 1.0.2
-
- string.prototype.trimend@1.0.9:
- dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
-
- string.prototype.trimstart@1.0.8:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
-
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
@@ -35638,14 +32561,14 @@ snapshots:
dependencies:
js-tokens: 9.0.1
- stripe@20.4.0(@types/node@25.3.3):
+ stripe@20.4.0(@types/node@25.5.0):
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
strnum@1.1.2:
optional: true
- strnum@2.1.2: {}
+ strnum@2.2.0: {}
structured-headers@0.4.1: {}
@@ -35676,9 +32599,6 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 7.1.1
- styleq@0.1.3:
- optional: true
-
stylis@4.3.6: {}
sucrase@3.35.1:
@@ -35756,7 +32676,7 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.5.0
+ sax: 1.6.0
svix@1.84.1:
dependencies:
@@ -35812,7 +32732,7 @@ snapshots:
- bare-abort-controller
- react-native-b4a
- tar@7.5.10:
+ tar@7.5.11:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
@@ -35871,6 +32791,13 @@ snapshots:
commander: 2.20.3
source-map-support: 0.5.21
+ terser@5.46.1:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.16.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
test-exclude@6.0.0:
dependencies:
'@istanbuljs/schema': 0.1.3
@@ -35897,10 +32824,6 @@ snapshots:
dependencies:
tslib: 2.8.1
- thread-stream@3.1.0:
- dependencies:
- real-require: 0.2.0
-
three-mesh-bvh@0.8.3(three@0.183.2):
dependencies:
three: 0.183.2
@@ -35917,13 +32840,6 @@ snapshots:
three@0.183.2: {}
- thriftrw@3.11.4:
- dependencies:
- bufrw: 1.4.0
- error: 7.0.2
- long: 2.4.0
- optional: true
-
throat@5.0.0: {}
throttleit@2.1.0: {}
@@ -35940,6 +32856,8 @@ snapshots:
tinyexec@1.0.2: {}
+ tinyexec@1.0.4: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -35947,6 +32865,8 @@ snapshots:
tinyrainbow@3.0.3: {}
+ tinyrainbow@3.1.0: {}
+
tldts-core@6.1.86: {}
tldts-core@7.0.23: {}
@@ -35991,12 +32911,6 @@ snapshots:
dependencies:
punycode: 2.3.1
- traverse@0.6.11:
- dependencies:
- gopd: 1.2.0
- typedarray.prototype.slice: 1.0.5
- which-typed-array: 1.1.20
-
tree-dump@1.1.0(tslib@2.8.1):
dependencies:
tslib: 2.8.1
@@ -36030,8 +32944,6 @@ snapshots:
'@ts-morph/common': 0.28.1
code-block-writer: 13.0.3
- ts-pattern@5.9.0: {}
-
tsdown@0.21.0-beta.2(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.0)(publint@0.3.17)(synckit@0.11.11)(typescript@5.9.3):
dependencies:
ansis: 4.2.0
@@ -36043,13 +32955,13 @@ snapshots:
obug: 2.1.1
picomatch: 4.0.3
rolldown: 1.0.0-rc.5
- rolldown-plugin-dts: 0.22.2(oxc-resolver@11.19.0)(rolldown@1.0.0-rc.5)(typescript@5.9.3)
+ rolldown-plugin-dts: 0.22.4(oxc-resolver@11.19.0)(rolldown@1.0.0-rc.5)(typescript@5.9.3)
semver: 7.7.4
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
tinyglobby: 0.2.15
tree-kill: 1.2.2
unconfig-core: 7.5.0
- unrun: 0.2.28(synckit@0.11.11)
+ unrun: 0.2.31(synckit@0.11.11)
optionalDependencies:
'@arethetypeswrong/core': 0.18.2
publint: 0.3.17
@@ -36120,8 +33032,6 @@ snapshots:
tw-animate-css@1.4.0: {}
- tweetnacl@1.0.3: {}
-
type-detect@4.0.8: {}
type-fest@0.13.1:
@@ -36153,94 +33063,40 @@ snapshots:
media-typer: 1.1.0
mime-types: 3.0.2
- typed-array-buffer@1.0.3:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-typed-array: 1.1.15
-
- typed-array-byte-length@1.0.3:
- dependencies:
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- has-proto: 1.2.0
- is-typed-array: 1.1.15
-
- typed-array-byte-offset@1.0.4:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- has-proto: 1.2.0
- is-typed-array: 1.1.15
- reflect.getprototypeof: 1.0.10
-
- typed-array-length@1.0.7:
- dependencies:
- call-bind: 1.0.8
- for-each: 0.3.5
- gopd: 1.2.0
- is-typed-array: 1.1.15
- possible-typed-array-names: 1.1.0
- reflect.getprototypeof: 1.0.10
-
typedarray-to-buffer@3.1.5:
dependencies:
is-typedarray: 1.0.0
- typedarray.prototype.slice@1.0.5:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.1
- es-errors: 1.3.0
- get-proto: 1.0.1
- math-intrinsics: 1.1.0
- typed-array-buffer: 1.0.3
- typed-array-byte-offset: 1.0.4
-
typedarray@0.0.6: {}
typescript@5.6.1-rc: {}
typescript@5.9.3: {}
- typesense-fumadocs-adapter@0.3.0(315bbd73201b0530b183e3c1250d4415):
+ typesense-fumadocs-adapter@0.3.0(588ddc5beb77b81f1d770f6df2e4097f):
dependencies:
- fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
- fumadocs-ui: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
+ fumadocs-core: 16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-ui: 16.6.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(fumadocs-core@16.6.7(@mdx-js/mdx@3.1.1)(@oramacloud/client@2.1.4)(@tanstack/react-router@1.163.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(algoliasearch@5.46.2)(lucide-react@0.575.0(react@19.2.4))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.2.0(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.97.1))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.2.1)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
typescript: 5.9.3
- typesense: 3.0.2(@babel/runtime@7.28.6)
+ typesense: 3.0.2(@babel/runtime@7.29.2)
- typesense@3.0.2(@babel/runtime@7.28.6):
+ typesense@3.0.2(@babel/runtime@7.29.2):
dependencies:
- '@babel/runtime': 7.28.6
+ '@babel/runtime': 7.29.2
axios: 1.13.5
loglevel: 1.9.2
tslib: 2.8.1
transitivePeerDependencies:
- debug
- ua-parser-js@1.0.41:
- optional: true
-
ufo@1.6.3: {}
uint8array-extras@1.5.0: {}
ultrahtml@1.6.0: {}
- unbox-primitive@1.1.0:
- dependencies:
- call-bound: 1.0.4
- has-bigints: 1.1.0
- has-symbols: 1.1.0
- which-boxed-primitive: 1.1.1
-
unbuild@3.6.1(sass@1.97.1)(typescript@5.9.3)(vue@3.5.29(typescript@5.9.3)):
dependencies:
'@rollup/plugin-alias': 5.1.1(rollup@4.59.0)
@@ -36263,7 +33119,7 @@ snapshots:
pkg-types: 2.3.0
pretty-bytes: 7.1.0
rollup: 4.59.0
- rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@5.9.3)
+ rollup-plugin-dts: 6.4.0(rollup@4.59.0)(typescript@5.9.3)
scule: 1.3.0
tinyglobby: 0.2.15
untyped: 2.0.0
@@ -36297,11 +33153,11 @@ snapshots:
undici-types@7.18.2: {}
- undici@6.23.0: {}
+ undici@6.24.1: {}
undici@7.18.2: {}
- undici@7.22.0: {}
+ undici@7.24.1: {}
unenv@1.10.0:
dependencies:
@@ -36333,8 +33189,6 @@ snapshots:
pako: 0.2.9
tiny-inflate: 1.0.3
- unicorn-magic@0.1.0: {}
-
unicorn-magic@0.4.0: {}
unified-args@11.0.1:
@@ -36490,13 +33344,13 @@ snapshots:
picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
- unrun@0.2.28(synckit@0.11.11):
+ unrun@0.2.31(synckit@0.11.11):
dependencies:
- rolldown: 1.0.0-rc.5
+ rolldown: 1.0.0-rc.8
optionalDependencies:
synckit: 0.11.11
- unstorage@1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3):
+ unstorage@1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(@upstash/redis@1.36.4)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0)))(ioredis@5.9.3):
dependencies:
anymatch: 3.1.3
chokidar: 5.0.0
@@ -36509,7 +33363,8 @@ snapshots:
optionalDependencies:
'@azure/identity': 4.13.0
'@netlify/blobs': 10.5.0
- db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3))
+ '@upstash/redis': 1.36.4
+ db0: 0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0))
ioredis: 5.9.3
until-async@3.0.2: {}
@@ -36582,15 +33437,13 @@ snapshots:
uuid@11.1.0: {}
- uuid@13.0.0: {}
+ uuid@13.0.0:
+ optional: true
uuid@7.0.3: {}
uuid@8.3.2: {}
- uuid@9.0.1:
- optional: true
-
valibot@1.2.0(typescript@5.9.3):
optionalDependencies:
typescript: 5.9.3
@@ -36668,7 +33521,7 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
- vinxi@0.5.11(ea2978ce6718d4cf7fba8416fff7f771):
+ vinxi@0.5.11(d9da12c5b87bf5fe7d8447a0cc903c3b):
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
@@ -36689,7 +33542,7 @@ snapshots:
hookable: 5.5.3
http-proxy: 1.18.1
micromatch: 4.0.8
- nitropack: 2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.3.3))(rolldown@1.0.0-rc.5)
+ nitropack: 2.13.1(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@netlify/blobs@10.5.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(encoding@0.1.13)(mysql2@3.18.2(@types/node@25.5.0))(rolldown@1.0.0-rc.8)
node-fetch-native: 1.6.7
path-to-regexp: 6.3.0
pathe: 1.1.2
@@ -36701,8 +33554,8 @@ snapshots:
ufo: 1.6.3
unctx: 2.5.0
unenv: 1.10.0
- unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.3.3))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.3.3)))(ioredis@5.9.3)
- vite: 6.4.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ unstorage: 1.17.4(@azure/identity@4.13.0)(@netlify/blobs@10.5.0)(@upstash/redis@1.36.4)(db0@0.3.4(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(better-sqlite3@12.6.2)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260226.1)(@electric-sql/pglite@0.3.15)(@libsql/client@0.17.0(encoding@0.1.13))(@opentelemetry/api@1.9.0)(@prisma/client@7.4.1(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@upstash/redis@1.36.4)(better-sqlite3@12.6.2)(bun-types@1.3.9)(gel@2.2.0)(kysely@0.28.11)(mysql2@3.18.2(@types/node@25.5.0))(pg@8.19.0)(postgres@3.4.8)(prisma@7.4.1(@types/react@19.2.14)(better-sqlite3@12.6.2)(magicast@0.5.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)))(mysql2@3.18.2(@types/node@25.5.0)))(ioredis@5.9.3)
+ vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
zod: 4.3.6
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -36749,21 +33602,7 @@ snapshots:
- xml2js
- yaml
- vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
- dependencies:
- '@babel/core': 7.29.0
- '@types/babel__core': 7.20.5
- babel-preset-solid: 1.9.10(@babel/core@7.29.0)(solid-js@1.9.11)
- merge-anything: 5.1.7
- solid-js: 1.9.11
- solid-refresh: 0.6.3(solid-js@1.9.11)
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- transitivePeerDependencies:
- - supports-color
- optional: true
-
- vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vite-plugin-solid@2.11.10(solid-js@1.9.11)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.29.0
'@types/babel__core': 7.20.5
@@ -36771,12 +33610,12 @@ snapshots:
merge-anything: 5.1.7
solid-js: 1.9.11
solid-refresh: 0.6.3(solid-js@1.9.11)
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
- vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ vitefu: 1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- supports-color
- vite@6.4.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
@@ -36785,17 +33624,17 @@ snapshots:
rollup: 4.59.0
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
fsevents: 2.3.3
jiti: 2.6.1
less: 4.5.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
sass: 1.97.1
- terser: 5.46.0
+ terser: 5.46.1
tsx: 4.21.0
yaml: 2.8.2
- vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
@@ -36808,13 +33647,13 @@ snapshots:
fsevents: 2.3.3
jiti: 2.6.1
less: 4.5.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
sass: 1.97.1
- terser: 5.46.0
+ terser: 5.46.1
tsx: 4.21.0
yaml: 2.8.2
- vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
@@ -36827,13 +33666,13 @@ snapshots:
fsevents: 2.3.3
jiti: 2.6.1
less: 4.5.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
sass: 1.97.1
- terser: 5.46.0
+ terser: 5.46.1
tsx: 4.21.0
yaml: 2.8.2
- vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
@@ -36842,29 +33681,29 @@ snapshots:
rollup: 4.59.0
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 25.3.3
+ '@types/node': 25.5.0
fsevents: 2.3.3
jiti: 2.6.1
less: 4.5.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
sass: 1.97.1
- terser: 5.46.0
+ terser: 5.46.1
tsx: 4.21.0
yaml: 2.8.2
- vitefu@1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vitefu@1.1.2(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
optionalDependencies:
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
optional: true
- vitefu@1.1.2(vite@7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)):
+ vitefu@1.1.2(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
optionalDependencies:
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
- vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.37)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/pretty-format': 4.0.18
'@vitest/runner': 4.0.18
'@vitest/snapshot': 4.0.18
@@ -36881,11 +33720,11 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.0
- '@types/node': 20.19.37
+ '@types/node': 25.3.2
'@vitest/ui': 4.0.18(vitest@4.0.18)
happy-dom: 20.7.0
transitivePeerDependencies:
@@ -36901,10 +33740,10 @@ snapshots:
- tsx
- yaml
- vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.2)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
'@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.2)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
'@vitest/pretty-format': 4.0.18
'@vitest/runner': 4.0.18
'@vitest/snapshot': 4.0.18
@@ -36921,11 +33760,11 @@ snapshots:
tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.0
- '@types/node': 25.3.2
+ '@types/node': 25.5.0
'@vitest/ui': 4.0.18(vitest@4.0.18)
happy-dom: 20.7.0
transitivePeerDependencies:
@@ -36941,45 +33780,65 @@ snapshots:
- tsx
- yaml
- vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(@vitest/ui@4.0.18)(happy-dom@20.7.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2):
+ vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@20.19.37)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
- '@vitest/expect': 4.0.18
- '@vitest/mocker': 4.0.18(msw@2.12.10(@types/node@25.3.3)(typescript@5.9.3))(vite@7.3.1(@types/node@25.3.2)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))
- '@vitest/pretty-format': 4.0.18
- '@vitest/runner': 4.0.18
- '@vitest/snapshot': 4.0.18
- '@vitest/spy': 4.0.18
- '@vitest/utils': 4.0.18
- es-module-lexer: 1.7.0
+ '@vitest/expect': 4.1.0
+ '@vitest/mocker': 4.1.0(msw@2.12.10(@types/node@20.19.37)(typescript@5.9.3))(vite@7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/pretty-format': 4.1.0
+ '@vitest/runner': 4.1.0
+ '@vitest/snapshot': 4.1.0
+ '@vitest/spy': 4.1.0
+ '@vitest/utils': 4.1.0
+ es-module-lexer: 2.0.0
expect-type: 1.3.0
magic-string: 0.30.21
obug: 2.1.1
pathe: 2.0.3
picomatch: 4.0.3
- std-env: 3.10.0
+ std-env: 4.0.0
tinybench: 2.9.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
tinyglobby: 0.2.15
- tinyrainbow: 3.0.3
- vite: 7.3.1(@types/node@25.3.3)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass@1.97.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)
+ tinyrainbow: 3.1.0
+ vite: 7.3.1(@types/node@20.19.37)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.0
- '@types/node': 25.3.3
+ '@types/node': 20.19.37
+ '@vitest/ui': 4.0.18(vitest@4.0.18)
+ happy-dom: 20.7.0
+ transitivePeerDependencies:
+ - msw
+
+ vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(@vitest/ui@4.0.18(vitest@4.0.18))(happy-dom@20.7.0)(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)):
+ dependencies:
+ '@vitest/expect': 4.1.0
+ '@vitest/mocker': 4.1.0(msw@2.12.10(@types/node@25.5.0)(typescript@5.9.3))(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))
+ '@vitest/pretty-format': 4.1.0
+ '@vitest/runner': 4.1.0
+ '@vitest/snapshot': 4.1.0
+ '@vitest/spy': 4.1.0
+ '@vitest/utils': 4.1.0
+ es-module-lexer: 2.0.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.1
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ std-env: 4.0.0
+ tinybench: 2.9.0
+ tinyexec: 1.0.4
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.1.0
+ vite: 7.3.1(@types/node@25.5.0)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.32.0)(sass@1.97.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@opentelemetry/api': 1.9.0
+ '@types/node': 25.5.0
'@vitest/ui': 4.0.18(vitest@4.0.18)
happy-dom: 20.7.0
transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - terser
- - tsx
- - yaml
vlq@1.0.1: {}
@@ -37076,49 +33935,8 @@ snapshots:
when-exit@2.1.5: {}
- which-boxed-primitive@1.1.1:
- dependencies:
- is-bigint: 1.1.0
- is-boolean-object: 1.2.2
- is-number-object: 1.1.1
- is-string: 1.1.1
- is-symbol: 1.1.1
-
- which-builtin-type@1.2.1:
- dependencies:
- call-bound: 1.0.4
- function.prototype.name: 1.1.8
- has-tostringtag: 1.0.2
- is-async-function: 2.1.1
- is-date-object: 1.1.0
- is-finalizationregistry: 1.1.1
- is-generator-function: 1.1.2
- is-regex: 1.2.1
- is-weakref: 1.1.1
- isarray: 2.0.5
- which-boxed-primitive: 1.1.1
- which-collection: 1.0.2
- which-typed-array: 1.1.20
-
- which-collection@1.0.2:
- dependencies:
- is-map: 2.0.3
- is-set: 2.0.3
- is-weakmap: 2.0.2
- is-weakset: 2.0.4
-
which-module@2.0.1: {}
- which-typed-array@1.1.20:
- dependencies:
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- call-bound: 1.0.4
- for-each: 0.3.5
- get-proto: 1.0.1
- gopd: 1.2.0
- has-tostringtag: 1.0.2
-
which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -37267,7 +34085,7 @@ snapshots:
xml2js@0.6.0:
dependencies:
- sax: 1.4.4
+ sax: 1.6.0
xmlbuilder: 11.0.1
xml@1.0.1: {}
@@ -37283,9 +34101,6 @@ snapshots:
xmlbuilder@15.1.1: {}
- xorshift@1.2.0:
- optional: true
-
xpath@0.0.32: {}
xpath@0.0.33: {}
@@ -37352,8 +34167,6 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-queue@1.2.2: {}
-
yocto-spinner@0.2.3:
dependencies:
yoctocolors: 2.1.2
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 7a003e5f5be..224597f778c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -7,6 +7,8 @@ packages:
blockExoticSubdeps: true
+enableGlobalVirtualStore: true
+
catalog:
'@better-auth/utils': 0.3.1
'@better-fetch/fetch': 1.1.21
@@ -43,8 +45,6 @@ onlyBuiltDependencies:
- '@swc/core'
- '@tsparticles/engine'
- better-sqlite3
- - electron
- - electron-winstaller
- esbuild
- less
- msw
diff --git a/turbo.json b/turbo.json
index 69cb9e1c5a2..2dd4c862f51 100644
--- a/turbo.json
+++ b/turbo.json
@@ -22,8 +22,10 @@
"outputs": [".next/**", "!.next/cache/**"],
"passThroughEnv": [
"TYPESENSE_ADMIN_API_KEY",
- "INKEEP_API_KEY",
- "GITHUB_TOKEN"
+ "GITHUB_TOKEN",
+ "OPENROUTER_API_KEY",
+ "UPSTASH_REDIS_REST_URL",
+ "UPSTASH_REDIS_REST_TOKEN"
]
},
"clean": {},