From 2b8e0b9cb515b183b61c7a867e9382680b701394 Mon Sep 17 00:00:00 2001 From: javayhu Date: Fri, 25 Jul 2025 23:18:42 +0800 Subject: [PATCH 01/11] feat: add checks for Stripe environment variables in getActiveSubscriptionAction --- src/actions/get-active-subscription.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/actions/get-active-subscription.ts b/src/actions/get-active-subscription.ts index ecab486..30978de 100644 --- a/src/actions/get-active-subscription.ts +++ b/src/actions/get-active-subscription.ts @@ -47,6 +47,18 @@ export const getActiveSubscriptionAction = actionClient }; } + // Check if Stripe environment variables are configured + const stripeSecretKey = process.env.STRIPE_SECRET_KEY; + const stripeWebhookSecret = process.env.STRIPE_WEBHOOK_SECRET; + + if (!stripeSecretKey || !stripeWebhookSecret) { + console.log('Stripe environment variables not configured, return'); + return { + success: true, + data: null, // No subscription = free plan + }; + } + try { // Find the user's most recent active subscription const subscriptions = await getSubscriptions({ From ba2a2b5fb0edb3beab2c18ce945d2eaeb48e742f Mon Sep 17 00:00:00 2001 From: javayhu Date: Sat, 26 Jul 2025 22:50:53 +0800 Subject: [PATCH 02/11] feat: support disable update avatar in settings --- .../[locale]/(protected)/settings/profile/page.tsx | 11 ++++++++--- src/config/website.tsx | 1 + src/types/index.d.ts | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/app/[locale]/(protected)/settings/profile/page.tsx b/src/app/[locale]/(protected)/settings/profile/page.tsx index 9fafa5f..3b14e97 100644 --- a/src/app/[locale]/(protected)/settings/profile/page.tsx +++ b/src/app/[locale]/(protected)/settings/profile/page.tsx @@ -1,12 +1,17 @@ import { UpdateAvatarCard } from '@/components/settings/profile/update-avatar-card'; import { UpdateNameCard } from '@/components/settings/profile/update-name-card'; +import { websiteConfig } from '@/config/website'; export default function ProfilePage() { + const enableUpdateAvatar = websiteConfig.features.enableUpdateAvatar; + return (
-
- -
+ {enableUpdateAvatar && ( +
+ +
+ )}
diff --git a/src/config/website.tsx b/src/config/website.tsx index 1b16d83..f0586cb 100644 --- a/src/config/website.tsx +++ b/src/config/website.tsx @@ -36,6 +36,7 @@ export const websiteConfig: WebsiteConfig = { enableDiscordWidget: false, enableCrispChat: process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true', enableUpgradeCard: true, + enableUpdateAvatar: false, enableAffonsoAffiliate: false, enablePromotekitAffiliate: false, enableDatafastRevenueTrack: false, diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 7e1c6eb..8fe2967 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -71,6 +71,7 @@ export interface FeaturesConfig { enableDiscordWidget?: boolean; // Whether to enable the discord widget, deprecated enableCrispChat?: boolean; // Whether to enable the crisp chat enableUpgradeCard?: boolean; // Whether to enable the upgrade card in the sidebar + enableUpdateAvatar?: boolean; // Whether to enable the update avatar in settings enableAffonsoAffiliate?: boolean; // Whether to enable affonso affiliate enablePromotekitAffiliate?: boolean; // Whether to enable promotekit affiliate enableDatafastRevenueTrack?: boolean; // Whether to enable datafast revenue tracking From abb15de848b8000a72cb73159e8bd62b24c95db0 Mon Sep 17 00:00:00 2001 From: javayhu Date: Sat, 26 Jul 2025 22:52:34 +0800 Subject: [PATCH 03/11] fix: reset enable update avatar by default --- src/config/website.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/website.tsx b/src/config/website.tsx index f0586cb..c37715b 100644 --- a/src/config/website.tsx +++ b/src/config/website.tsx @@ -36,7 +36,7 @@ export const websiteConfig: WebsiteConfig = { enableDiscordWidget: false, enableCrispChat: process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true', enableUpgradeCard: true, - enableUpdateAvatar: false, + enableUpdateAvatar: true, enableAffonsoAffiliate: false, enablePromotekitAffiliate: false, enableDatafastRevenueTrack: false, From 46ec614fd3b2fd3b62652391f3a5706fd4cb61e2 Mon Sep 17 00:00:00 2001 From: javayhu Date: Mon, 28 Jul 2025 22:53:31 +0800 Subject: [PATCH 04/11] refactor: move CreditsProvider --- src/app/[locale]/providers.tsx | 2 +- src/{providers => components/layout}/credits-provider.tsx | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{providers => components/layout}/credits-provider.tsx (100%) diff --git a/src/app/[locale]/providers.tsx b/src/app/[locale]/providers.tsx index 40f290e..5e85838 100644 --- a/src/app/[locale]/providers.tsx +++ b/src/app/[locale]/providers.tsx @@ -1,10 +1,10 @@ 'use client'; import { ActiveThemeProvider } from '@/components/layout/active-theme-provider'; +import { CreditsProvider } from '@/components/layout/credits-provider'; import { PaymentProvider } from '@/components/layout/payment-provider'; import { TooltipProvider } from '@/components/ui/tooltip'; import { websiteConfig } from '@/config/website'; -import { CreditsProvider } from '@/providers/credits-provider'; import type { Translations } from 'fumadocs-ui/i18n'; import { RootProvider } from 'fumadocs-ui/provider'; import { useTranslations } from 'next-intl'; diff --git a/src/providers/credits-provider.tsx b/src/components/layout/credits-provider.tsx similarity index 100% rename from src/providers/credits-provider.tsx rename to src/components/layout/credits-provider.tsx From 7a61aa3dffa31fa69167001dee55ebcb6b3fce29 Mon Sep 17 00:00:00 2001 From: javayhu Date: Fri, 1 Aug 2025 21:39:20 +0800 Subject: [PATCH 05/11] chore: update google api key var name --- env.example | 2 +- src/app/api/analyze-content/route.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/env.example b/env.example index 8a680de..df9dcfc 100644 --- a/env.example +++ b/env.example @@ -181,7 +181,7 @@ FAL_API_KEY="" FIREWORKS_API_KEY="" OPENAI_API_KEY="" REPLICATE_API_TOKEN="" -GOOGLE_API_KEY="" +GOOGLE_GENERATIVE_AI_API_KEY="" DEEPSEEK_API_KEY="" # ----------------------------------------------------------------------------- diff --git a/src/app/api/analyze-content/route.ts b/src/app/api/analyze-content/route.ts index 26bfddf..576040e 100644 --- a/src/app/api/analyze-content/route.ts +++ b/src/app/api/analyze-content/route.ts @@ -218,7 +218,7 @@ async function analyzeContent( break; case 'gemini': model = createGoogleGenerativeAI({ - apiKey: process.env.GOOGLE_API_KEY, + apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY, }).chat(webContentAnalyzerConfig.gemini.model); temperature = webContentAnalyzerConfig.gemini.temperature; maxTokens = webContentAnalyzerConfig.gemini.maxTokens; From 6d4d316564095c1d981d70a99fcf136035489c78 Mon Sep 17 00:00:00 2001 From: javayhu Date: Sat, 2 Aug 2025 00:22:02 +0800 Subject: [PATCH 06/11] chore: remove google vertex ai --- package.json | 1 - pnpm-lock.yaml | 102 -------------------- src/ai/image/components/ImagePlayground.tsx | 1 - src/ai/image/components/ModelSelect.tsx | 3 - src/ai/image/lib/logos.tsx | 49 ---------- src/ai/image/lib/provider-config.ts | 16 +-- 6 files changed, 1 insertion(+), 171 deletions(-) diff --git a/package.json b/package.json index fc277c2..72cf2d5 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@ai-sdk/fal": "^0.1.12", "@ai-sdk/fireworks": "^0.2.14", "@ai-sdk/google": "^1.2.22", - "@ai-sdk/google-vertex": "^2.2.24", "@ai-sdk/openai": "^1.1.13", "@ai-sdk/replicate": "^0.2.8", "@base-ui-components/react": "1.0.0-beta.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 267f4d4..5c91689 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,6 @@ importers: '@ai-sdk/google': specifier: ^1.2.22 version: 1.2.22(zod@3.25.64) - '@ai-sdk/google-vertex': - specifier: ^2.2.24 - version: 2.2.24(zod@3.25.64) '@ai-sdk/openai': specifier: ^1.1.13 version: 1.1.13(zod@3.25.64) @@ -381,12 +378,6 @@ importers: packages: - '@ai-sdk/anthropic@1.2.12': - resolution: {integrity: sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - '@ai-sdk/deepseek@0.2.16': resolution: {integrity: sha512-pIlwtjNehCpDr1wqxtSbXshynW4CiwS6S3yAKHzHi73QtmS2Hg9kE1DB0zgENKaZLmbsc4UgigGM6FzuUd4M8Q==} engines: {node: '>=18'} @@ -405,18 +396,6 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/google-vertex@2.2.24': - resolution: {integrity: sha512-zi1ZN6jQEBRke/WMbZv0YkeqQ3nOs8ihxjVh/8z1tUn+S1xgRaYXf4+r6+Izh2YqVHIMNwjhUYryQRBGq20cgQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/google@1.2.19': - resolution: {integrity: sha512-Xgl6eftIRQ4srUdCzxM112JuewVMij5q4JLcNmHcB68Bxn9dpr3MVUSPlJwmameuiQuISIA8lMB+iRiRbFsaqA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - '@ai-sdk/google@1.2.22': resolution: {integrity: sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==} engines: {node: '>=18'} @@ -4261,9 +4240,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -4652,9 +4628,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.5.113: resolution: {integrity: sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==} @@ -4966,10 +4939,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - google-logging-utils@0.0.2: resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} engines: {node: '>=14'} @@ -4981,10 +4950,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -5201,12 +5166,6 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - knip@5.61.2: resolution: {integrity: sha512-ZBv37zDvZj0/Xwk0e93xSjM3+5bjxgqJ0PH2GlB5tnWV0ktXtmatWLm+dLRUCT/vpO3SdGz2nNAfvVhuItUNcQ==} engines: {node: '>=18.18.0'} @@ -6602,12 +6561,6 @@ packages: snapshots: - '@ai-sdk/anthropic@1.2.12(zod@3.25.64)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 - '@ai-sdk/deepseek@0.2.16(zod@3.25.64)': dependencies: '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.64) @@ -6628,24 +6581,6 @@ snapshots: '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) zod: 3.25.64 - '@ai-sdk/google-vertex@2.2.24(zod@3.25.64)': - dependencies: - '@ai-sdk/anthropic': 1.2.12(zod@3.25.64) - '@ai-sdk/google': 1.2.19(zod@3.25.64) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - google-auth-library: 9.15.1 - zod: 3.25.64 - transitivePeerDependencies: - - encoding - - supports-color - - '@ai-sdk/google@1.2.19(zod@3.25.64)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 - '@ai-sdk/google@1.2.22(zod@3.25.64)': dependencies: '@ai-sdk/provider': 1.1.3 @@ -10431,8 +10366,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) - buffer-equal-constant-time@1.0.1: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -10720,10 +10653,6 @@ snapshots: eastasianwidth@0.2.0: {} - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - electron-to-chromium@1.5.113: {} embla-carousel-react@8.5.2(react@19.0.0): @@ -11194,32 +11123,12 @@ snapshots: globals@11.12.0: {} - google-auth-library@9.15.1: - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1 - gcp-metadata: 6.1.1 - gtoken: 7.1.0 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - google-logging-utils@0.0.2: {} gopd@1.2.0: {} graceful-fs@4.2.11: {} - gtoken@7.1.0: - dependencies: - gaxios: 6.7.1 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -11497,17 +11406,6 @@ snapshots: chalk: 5.4.1 diff-match-patch: 1.0.5 - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - knip@5.61.2(@types/node@20.19.0)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 diff --git a/src/ai/image/components/ImagePlayground.tsx b/src/ai/image/components/ImagePlayground.tsx index bf85603..a88887d 100644 --- a/src/ai/image/components/ImagePlayground.tsx +++ b/src/ai/image/components/ImagePlayground.tsx @@ -61,7 +61,6 @@ export function ImagePlayground({ const providerToModel = { replicate: selectedModels.replicate, - // vertex: selectedModels.vertex, openai: selectedModels.openai, fireworks: selectedModels.fireworks, fal: selectedModels.fal, diff --git a/src/ai/image/components/ModelSelect.tsx b/src/ai/image/components/ModelSelect.tsx index a1724a0..7829fe3 100644 --- a/src/ai/image/components/ModelSelect.tsx +++ b/src/ai/image/components/ModelSelect.tsx @@ -15,7 +15,6 @@ import { FireworksIcon, OpenAIIcon, ReplicateIcon, - // VertexIcon, falAILogo, } from '../lib/logos'; import type { ProviderKey } from '../lib/provider-config'; @@ -40,7 +39,6 @@ interface ModelSelectProps { const PROVIDER_ICONS = { openai: OpenAIIcon, replicate: ReplicateIcon, - // vertex: VertexIcon, fireworks: FireworksIcon, fal: falAILogo, } as const; @@ -48,7 +46,6 @@ const PROVIDER_ICONS = { const PROVIDER_LINKS = { openai: 'openai', replicate: 'replicate', - // vertex: 'google-vertex', fireworks: 'fireworks', fal: 'fal', } as const; diff --git a/src/ai/image/lib/logos.tsx b/src/ai/image/lib/logos.tsx index c8e3c35..6949a20 100644 --- a/src/ai/image/lib/logos.tsx +++ b/src/ai/image/lib/logos.tsx @@ -62,55 +62,6 @@ export const ReplicateIcon = ({ size = 16 }) => { ); }; -export const VertexIcon = ({ size = 16 }) => { - return ( - - - - - - - - - - - - - - - - - - - - - ); -}; - export const falAILogo = ({ size = 16 }: { size: number }) => { return ( > = { performance: { replicate: 'black-forest-labs/flux-1.1-pro', - // vertex: 'imagen-3.0-fast-generate-001', openai: 'dall-e-3', fireworks: 'accounts/fireworks/models/flux-1-schnell-fp8', fal: 'fal-ai/flux/dev', }, quality: { replicate: 'stability-ai/stable-diffusion-3.5-large', - // vertex: 'imagen-3.0-generate-001', openai: 'dall-e-3', fireworks: 'accounts/fireworks/models/flux-1-dev-fp8', fal: 'fal-ai/flux-pro/v1.1-ultra', @@ -108,7 +95,6 @@ export const MODEL_CONFIGS: Record> = { export const PROVIDER_ORDER: ProviderKey[] = [ 'replicate', - // 'vertex', 'openai', 'fireworks', 'fal', From d0ddc2b1b0d381e9912fc01b0d283c21caad348a Mon Sep 17 00:00:00 2001 From: javayhu Date: Sat, 2 Aug 2025 00:54:34 +0800 Subject: [PATCH 07/11] feat: upgrade ai sdk to v5 https://v5.ai-sdk.dev/docs/migration-guides/migration-guide-5-0 --- package.json | 16 +- pnpm-lock.yaml | 400 +++++++++++---------------- src/app/api/analyze-content/route.ts | 2 +- 3 files changed, 178 insertions(+), 240 deletions(-) diff --git a/package.json b/package.json index 72cf2d5..d4067a1 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,12 @@ "knip": "knip" }, "dependencies": { - "@ai-sdk/deepseek": "^0.2.16", - "@ai-sdk/fal": "^0.1.12", - "@ai-sdk/fireworks": "^0.2.14", - "@ai-sdk/google": "^1.2.22", - "@ai-sdk/openai": "^1.1.13", - "@ai-sdk/replicate": "^0.2.8", + "@ai-sdk/deepseek": "^1.0.0", + "@ai-sdk/fal": "^1.0.0", + "@ai-sdk/fireworks": "^1.0.0", + "@ai-sdk/google": "^2.0.0", + "@ai-sdk/openai": "^2.0.0", + "@ai-sdk/replicate": "^1.0.0", "@base-ui-components/react": "1.0.0-beta.0", "@better-fetch/fetch": "^1.1.18", "@dnd-kit/core": "^6.3.1", @@ -81,7 +81,7 @@ "@vercel/analytics": "^1.5.0", "@vercel/speed-insights": "^1.2.0", "@widgetbot/react-embed": "^1.9.0", - "ai": "^4.1.45", + "ai": "^5.0.0", "better-auth": "^1.1.19", "canvas-confetti": "^1.9.3", "class-variance-authority": "^0.7.1", @@ -130,7 +130,7 @@ "use-intl": "^3.26.5", "use-media": "^1.5.0", "vaul": "^1.1.2", - "zod": "^3.24.2", + "zod": "^4.0.14", "zustand": "^5.0.3" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c91689..eff0cbc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,23 +9,23 @@ importers: .: dependencies: '@ai-sdk/deepseek': - specifier: ^0.2.16 - version: 0.2.16(zod@3.25.64) + specifier: ^1.0.0 + version: 1.0.0(zod@4.0.14) '@ai-sdk/fal': - specifier: ^0.1.12 - version: 0.1.12(zod@3.25.64) + specifier: ^1.0.0 + version: 1.0.0(zod@4.0.14) '@ai-sdk/fireworks': - specifier: ^0.2.14 - version: 0.2.14(zod@3.25.64) + specifier: ^1.0.0 + version: 1.0.0(zod@4.0.14) '@ai-sdk/google': - specifier: ^1.2.22 - version: 1.2.22(zod@3.25.64) + specifier: ^2.0.0 + version: 2.0.0(zod@4.0.14) '@ai-sdk/openai': - specifier: ^1.1.13 - version: 1.1.13(zod@3.25.64) + specifier: ^2.0.0 + version: 2.0.0(zod@4.0.14) '@ai-sdk/replicate': - specifier: ^0.2.8 - version: 0.2.8(zod@3.25.64) + specifier: ^1.0.0 + version: 1.0.0(zod@4.0.14) '@base-ui-components/react': specifier: 1.0.0-beta.0 version: 1.0.0-beta.0(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -180,8 +180,8 @@ importers: specifier: ^1.9.0 version: 1.9.0(react@19.0.0) ai: - specifier: ^4.1.45 - version: 4.1.45(react@19.0.0)(zod@3.25.64) + specifier: ^5.0.0 + version: 5.0.0(zod@4.0.14) better-auth: specifier: ^1.1.19 version: 1.1.19 @@ -253,7 +253,7 @@ importers: version: 4.0.0(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(typescript@5.8.3) next-safe-action: specifier: ^7.10.4 - version: 7.10.4(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(zod@3.25.64) + version: 7.10.4(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(zod@4.0.14) next-themes: specifier: ^0.4.4 version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -327,8 +327,8 @@ importers: specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) zod: - specifier: ^3.24.2 - version: 3.25.64 + specifier: ^4.0.14 + version: 4.0.14 zustand: specifier: ^5.0.3 version: 5.0.3(@types/react@19.0.9)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)) @@ -378,97 +378,63 @@ importers: packages: - '@ai-sdk/deepseek@0.2.16': - resolution: {integrity: sha512-pIlwtjNehCpDr1wqxtSbXshynW4CiwS6S3yAKHzHi73QtmS2Hg9kE1DB0zgENKaZLmbsc4UgigGM6FzuUd4M8Q==} + '@ai-sdk/deepseek@1.0.0': + resolution: {integrity: sha512-5rumr8Gn41MT+mYD6PxPt2vMTh8h4S1KOcJDL1s8+qFaPSqgGal58BzwrVKUS/ycMM61XR6ymX25x09QLAteYw==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/fal@0.1.12': - resolution: {integrity: sha512-Z0pUUR3qwLTj4HXgGJSes5fwjUbSowsMiKbpYKGl6V51sQeUk2EjZctdN4+a+GBuDNCP6Y32Wi8ejM54OMee+w==} + '@ai-sdk/fal@1.0.0': + resolution: {integrity: sha512-iU6U8LXjnrycoGtFKT09o4uDomMyu9W8vCDfJKlrcOvgzOSoG/1D/b/x6wKPbVcVQcsxFEoI9m8YtVtgg1cGsA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/fireworks@0.2.14': - resolution: {integrity: sha512-0xlh95Y+L9ccc7hwrjdFKi4u8dirx24FLc70ySXA53u1zZP6R1W35TBYGaLzFpTVhhBhDTOca0mE+/EjJihcxw==} + '@ai-sdk/fireworks@1.0.0': + resolution: {integrity: sha512-zc4iGsZ4G4zyTfIvL2bKyFjkz4/j2+wKyYeeNtdz5st1KD4vpAXDjsf0uTeyqXSisrVMrgEBPPkwSRxWQpmPIA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/google@1.2.22': - resolution: {integrity: sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==} + '@ai-sdk/gateway@1.0.0': + resolution: {integrity: sha512-VEm87DyRx1yIPywbTy8ntoyh4jEDv1rJ88m+2I7zOm08jJI5BhFtAWh0OF6YzZu1Vu4NxhOWO4ssGdsqydDQ3A==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/openai-compatible@0.2.14': - resolution: {integrity: sha512-icjObfMCHKSIbywijaoLdZ1nSnuRnWgMEMLgwoxPJgxsUHMx0aVORnsLUid4SPtdhHI3X2masrt6iaEQLvOSFw==} + '@ai-sdk/google@2.0.0': + resolution: {integrity: sha512-35uWKG+aWm0QClJV/kNhcyR9IVrDkZoI1UlWvUCjwoqbCxj4/L/1LKKbpM3JSRa9u74ghHzBB0UjLHdgcIoanw==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/openai-compatible@0.2.16': - resolution: {integrity: sha512-LkvfcM8slJedRyJa/MiMiaOzcMjV1zNDwzTHEGz7aAsgsQV0maLfmJRi/nuSwf5jmp0EouC+JXXDUj2l94HgQw==} + '@ai-sdk/openai-compatible@1.0.0': + resolution: {integrity: sha512-I5d29iB82ty/e0jqpH4iiWCkFtG1oANzK2WwY3WNF1vWjzqVzvPT+YXR0y43caiq0lIWwMyhJu+bMizmzigrwA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/openai@1.1.13': - resolution: {integrity: sha512-IdChK1pJTW3NQis02PG/hHTG0gZSyQIMOLPt7f7ES56C0xH2yaKOU1Tp2aib7pZzWGwDlzTOW2h5TtAB8+V6CQ==} + '@ai-sdk/openai@2.0.0': + resolution: {integrity: sha512-G0WY5K81JwGpuX9HEmP2VTdt3N9m43qPnGT4fWkXcpu6Y2B05nnjs8k1r/csCJd8+TkYC6esjBABQYHxdMOejQ==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4 - '@ai-sdk/provider-utils@2.1.9': - resolution: {integrity: sha512-NerKjTuuUUs6glJGaentaXEBH52jRM0pR+cRCzc7aWke/K5jYBD6Frv1JYBpcxS7gnnCqSQZR9woiyS+6jrdjw==} + '@ai-sdk/provider-utils@3.0.0': + resolution: {integrity: sha512-BoQZtGcBxkeSH1zK+SRYNDtJPIPpacTeiMZqnG4Rv6xXjEwM0FH4MGs9c+PlhyEWmQCzjRM2HAotEydFhD4dYw==} engines: {node: '>=18'} peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true + zod: ^3.25.76 || ^4 - '@ai-sdk/provider-utils@2.2.8': - resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} + '@ai-sdk/provider@2.0.0': + resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} + engines: {node: '>=18'} + + '@ai-sdk/replicate@1.0.0': + resolution: {integrity: sha512-whCL8u2aKXJcD8LmxK9oZOL3I/XkLgY7PqNsqLzemP5AlchjZTn8LLvwx5LBc2W3nkEXOz4Kt1oJGv1rQRxbnA==} engines: {node: '>=18'} peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/provider@1.0.8': - resolution: {integrity: sha512-f9jSYwKMdXvm44Dmab1vUBnfCDSFfI5rOtvV1W9oKB7WYHR5dGvCC6x68Mk3NUfrdmNoMVHGoh6JT9HCVMlMow==} - engines: {node: '>=18'} - - '@ai-sdk/provider@1.1.3': - resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} - engines: {node: '>=18'} - - '@ai-sdk/react@1.1.17': - resolution: {integrity: sha512-NAuEflFvjw1uh1AOmpyi7rBF4xasWsiWUb86JQ8ScjDGxoGDYEdBnaHOxUpooLna0dGNbSPkvDMnVRhoLKoxPQ==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true - - '@ai-sdk/replicate@0.2.8': - resolution: {integrity: sha512-l9t4+RzbAn8osstkbWs6l++Nava+4LO4dsaddnE0GQM5E0BEIgMTJ14hoyfE02Ep0rJZ0M2HlXGqv5heW47P8A==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/ui-utils@1.1.15': - resolution: {integrity: sha512-NsV/3CMmjc4m53snzRdtZM6teTQUXIKi8u0Kf7GBruSzaMSuZ4DWaAAlUshhR3p2FpZgtsogW+vYG1/rXsGu+Q==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true + zod: ^3.25.76 || ^4 '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} @@ -3999,9 +3965,6 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/diff-match-patch@1.0.36': - resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} - '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -4029,6 +3992,9 @@ packages: '@types/node@20.19.0': resolution: {integrity: sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==} + '@types/node@20.19.9': + resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} + '@types/node@22.16.3': resolution: {integrity: sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==} @@ -4147,17 +4113,11 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} - ai@4.1.45: - resolution: {integrity: sha512-nQkxQ2zCD+O/h8zJ+PxmBv9coyMaG1uP9kGJvhNaGAA25hbZRQWL0NbTsSJ/QMOUraXKLa+6fBm3VF1NkJK9Kg==} + ai@5.0.0: + resolution: {integrity: sha512-F4jOhOSeiZD8lXpF4l1hRqyM1jbqoLKGVZNxAP467wmQCsWUtElMa3Ki5PrDMq6qvUNC3deUKfERDAsfj7IDlg==} engines: {node: '>=18'} peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.0.0 - peerDependenciesMeta: - react: - optional: true - zod: - optional: true + zod: ^3.25.76 || ^4 ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} @@ -4274,10 +4234,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -4505,9 +4461,6 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff-match-patch@1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -4756,9 +4709,9 @@ packages: eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - eventsource-parser@3.0.0: - resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==} - engines: {node: '>=18.0.0'} + eventsource-parser@3.0.3: + resolution: {integrity: sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==} + engines: {node: '>=20.0.0'} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -5161,11 +5114,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsondiffpatch@0.6.0: - resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - knip@5.61.2: resolution: {integrity: sha512-ZBv37zDvZj0/Xwk0e93xSjM3+5bjxgqJ0PH2GlB5tnWV0ktXtmatWLm+dLRUCT/vpO3SdGz2nNAfvVhuItUNcQ==} engines: {node: '>=18.18.0'} @@ -5695,11 +5643,11 @@ packages: peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} - pg-cloudflare@1.2.5: - resolution: {integrity: sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==} + pg-cloudflare@1.2.7: + resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} - pg-connection-string@2.8.5: - resolution: {integrity: sha512-Ni8FuZ8yAF+sWZzojvtLE2b03cqjO5jNULcHFfM9ZZ0/JXrgom5pBREbtnAw7oxsxJqHw9Nz/XWORUEL3/IFow==} + pg-connection-string@2.9.1: + resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -5712,11 +5660,14 @@ packages: resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} engines: {node: '>=4'} - pg-pool@3.9.6: - resolution: {integrity: sha512-rFen0G7adh1YmgvrmE5IPIqbb+IgEzENUm+tzm6MLLDSlPRoZVhzU1WdML9PV2W5GOdRA9qBKURlbt1OsXOsPw==} + pg-pool@3.10.1: + resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==} peerDependencies: pg: '>=8.0' + pg-protocol@1.10.3: + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} + pg-protocol@1.7.1: resolution: {integrity: sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==} @@ -5731,6 +5682,10 @@ packages: resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} engines: {node: '>=10'} + pg-types@4.1.0: + resolution: {integrity: sha512-o2XFanIMy/3+mThw69O8d4n1E5zsLhdO+OPqswezu7Z5ekP4hYDqlDjlmOpYMbzY2Br0ufCwJLdDIXeNVwcWFg==} + engines: {node: '>=10'} + pg@8.15.6: resolution: {integrity: sha512-yvao7YI3GdmmrslNVsZgx9PfntfWrnXwtR+K/DjI0I/sTKif4Z623um+sjVZ1hk5670B+ODjvHDAckKdjmPTsg==} engines: {node: '>= 8.0.0'} @@ -5777,6 +5732,10 @@ packages: resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} engines: {node: '>=12'} + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} @@ -6095,9 +6054,6 @@ packages: scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -6308,10 +6264,6 @@ packages: third-party-capital@1.0.20: resolution: {integrity: sha512-oB7yIimd8SuGptespDAZnNkzIz+NWaJCu2RMsbs4Wmp9zSDUM8Nhi3s2OOcqYuv3mN4hitXc8DVx+LyUmbUDiA==} - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -6526,6 +6478,11 @@ packages: peerDependencies: zod: ^3.24.1 + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + zod-validation-error@3.5.2: resolution: {integrity: sha512-mdi7YOLtram5dzJ5aDtm1AG9+mxRma1iaMrZdYIpFO7epdKBUwLHIxTF8CPDeCQ828zAXYtizrKlEJAtzgfgrw==} engines: {node: '>=18.0.0'} @@ -6538,6 +6495,9 @@ packages: zod@3.25.64: resolution: {integrity: sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==} + zod@4.0.14: + resolution: {integrity: sha512-nGFJTnJN6cM2v9kXL+SOBq3AtjQby3Mv5ySGFof5UGRHrRioSJ5iG680cYNjE/yWk671nROcpPj4hAS8nyLhSw==} + zustand@5.0.3: resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} engines: {node: '>=12.20.0'} @@ -6561,97 +6521,67 @@ packages: snapshots: - '@ai-sdk/deepseek@0.2.16(zod@3.25.64)': + '@ai-sdk/deepseek@1.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.64) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/openai-compatible': 1.0.0(zod@4.0.14) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/fal@0.1.12(zod@3.25.64)': + '@ai-sdk/fal@1.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/fireworks@0.2.14(zod@3.25.64)': + '@ai-sdk/fireworks@1.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/openai-compatible': 0.2.14(zod@3.25.64) - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/openai-compatible': 1.0.0(zod@4.0.14) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/google@1.2.22(zod@3.25.64)': + '@ai-sdk/gateway@1.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/openai-compatible@0.2.14(zod@3.25.64)': + '@ai-sdk/google@2.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/openai-compatible@0.2.16(zod@3.25.64)': + '@ai-sdk/openai-compatible@1.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/openai@1.1.13(zod@3.25.64)': + '@ai-sdk/openai@2.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.0.8 - '@ai-sdk/provider-utils': 2.1.9(zod@3.25.64) - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 - '@ai-sdk/provider-utils@2.1.9(zod@3.25.64)': + '@ai-sdk/provider-utils@3.0.0(zod@4.0.14)': dependencies: - '@ai-sdk/provider': 1.0.8 - eventsource-parser: 3.0.0 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - optionalDependencies: - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@standard-schema/spec': 1.0.0 + eventsource-parser: 3.0.3 + zod: 4.0.14 + zod-to-json-schema: 3.24.6(zod@4.0.14) - '@ai-sdk/provider-utils@2.2.8(zod@3.25.64)': - dependencies: - '@ai-sdk/provider': 1.1.3 - nanoid: 3.3.8 - secure-json-parse: 2.7.0 - zod: 3.25.64 - - '@ai-sdk/provider@1.0.8': + '@ai-sdk/provider@2.0.0': dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@1.1.3': + '@ai-sdk/replicate@1.0.0(zod@4.0.14)': dependencies: - json-schema: 0.4.0 - - '@ai-sdk/react@1.1.17(react@19.0.0)(zod@3.25.64)': - dependencies: - '@ai-sdk/provider-utils': 2.1.9(zod@3.25.64) - '@ai-sdk/ui-utils': 1.1.15(zod@3.25.64) - swr: 2.3.2(react@19.0.0) - throttleit: 2.1.0 - optionalDependencies: - react: 19.0.0 - zod: 3.25.64 - - '@ai-sdk/replicate@0.2.8(zod@3.25.64)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.64) - zod: 3.25.64 - - '@ai-sdk/ui-utils@1.1.15(zod@3.25.64)': - dependencies: - '@ai-sdk/provider': 1.0.8 - '@ai-sdk/provider-utils': 2.1.9(zod@3.25.64) - zod-to-json-schema: 3.24.2(zod@3.25.64) - optionalDependencies: - zod: 3.25.64 + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) + zod: 4.0.14 '@alloc/quick-lru@5.2.0': {} @@ -10145,8 +10075,6 @@ snapshots: dependencies: '@types/ms': 2.1.0 - '@types/diff-match-patch@1.0.36': {} - '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -10177,6 +10105,11 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@20.19.9': + dependencies: + undici-types: 6.21.0 + optional: true + '@types/node@22.16.3': dependencies: undici-types: 6.21.0 @@ -10193,9 +10126,9 @@ snapshots: '@types/pg@8.11.6': dependencies: - '@types/node': 20.19.0 - pg-protocol: 1.9.5 - pg-types: 4.0.2 + '@types/node': 20.19.9 + pg-protocol: 1.10.3 + pg-types: 4.1.0 optional: true '@types/pg@8.6.1': @@ -10260,17 +10193,13 @@ snapshots: agent-base@7.1.3: {} - ai@4.1.45(react@19.0.0)(zod@3.25.64): + ai@5.0.0(zod@4.0.14): dependencies: - '@ai-sdk/provider': 1.0.8 - '@ai-sdk/provider-utils': 2.1.9(zod@3.25.64) - '@ai-sdk/react': 1.1.17(react@19.0.0)(zod@3.25.64) - '@ai-sdk/ui-utils': 1.1.15(zod@3.25.64) + '@ai-sdk/gateway': 1.0.0(zod@4.0.14) + '@ai-sdk/provider': 2.0.0 + '@ai-sdk/provider-utils': 3.0.0(zod@4.0.14) '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - optionalDependencies: - react: 19.0.0 - zod: 3.25.64 + zod: 4.0.14 ansi-regex@4.1.1: {} @@ -10400,8 +10329,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} - character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -10595,8 +10522,6 @@ snapshots: dependencies: dequal: 2.0.3 - diff-match-patch@1.0.5: {} - dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.26.10 @@ -10911,7 +10836,7 @@ snapshots: eventemitter3@4.0.7: {} - eventsource-parser@3.0.0: {} + eventsource-parser@3.0.3: {} extend@3.0.2: {} @@ -11400,12 +11325,6 @@ snapshots: json5@2.2.3: {} - jsondiffpatch@0.6.0: - dependencies: - '@types/diff-match-patch': 1.0.36 - chalk: 5.4.1 - diff-match-patch: 1.0.5 - knip@5.61.2(@types/node@20.19.0)(typescript@5.8.3): dependencies: '@nodelib/fs.walk': 1.2.8 @@ -12018,13 +11937,13 @@ snapshots: optionalDependencies: typescript: 5.8.3 - next-safe-action@7.10.4(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(zod@3.25.64): + next-safe-action@7.10.4(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(zod@4.0.14): dependencies: next: 15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) optionalDependencies: - zod: 3.25.64 + zod: 4.0.14 next-themes@0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: @@ -12174,10 +12093,10 @@ snapshots: peberminta@0.9.0: {} - pg-cloudflare@1.2.5: + pg-cloudflare@1.2.7: optional: true - pg-connection-string@2.8.5: + pg-connection-string@2.9.1: optional: true pg-int8@1.0.1: {} @@ -12190,11 +12109,14 @@ snapshots: pg-numeric@1.0.2: {} - pg-pool@3.9.6(pg@8.15.6(pg-native@3.4.5)): + pg-pool@3.10.1(pg@8.15.6(pg-native@3.4.5)): dependencies: pg: 8.15.6(pg-native@3.4.5) optional: true + pg-protocol@1.10.3: + optional: true + pg-protocol@1.7.1: {} pg-protocol@1.9.5: {} @@ -12217,15 +12139,26 @@ snapshots: postgres-interval: 3.0.0 postgres-range: 1.1.4 + pg-types@4.1.0: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.4 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + optional: true + pg@8.15.6(pg-native@3.4.5): dependencies: - pg-connection-string: 2.8.5 - pg-pool: 3.9.6(pg@8.15.6(pg-native@3.4.5)) - pg-protocol: 1.9.5 + pg-connection-string: 2.9.1 + pg-pool: 3.10.1(pg@8.15.6(pg-native@3.4.5)) + pg-protocol: 1.10.3 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: - pg-cloudflare: 1.2.5 + pg-cloudflare: 1.2.7 pg-native: 3.4.5 optional: true @@ -12267,6 +12200,9 @@ snapshots: postgres-array@3.0.2: {} + postgres-array@3.0.4: + optional: true + postgres-bytea@1.0.0: {} postgres-bytea@3.0.0: @@ -12712,8 +12648,6 @@ snapshots: dependencies: compute-scroll-into-view: 3.1.1 - secure-json-parse@2.7.0: {} - selderee@0.11.0: dependencies: parseley: 0.12.1 @@ -12964,8 +12898,6 @@ snapshots: third-party-capital@1.0.20: {} - throttleit@2.1.0: {} - tiny-invariant@1.3.3: {} tinyexec@1.0.1: {} @@ -13186,6 +13118,10 @@ snapshots: dependencies: zod: 3.25.64 + zod-to-json-schema@3.24.6(zod@4.0.14): + dependencies: + zod: 4.0.14 + zod-validation-error@3.5.2(zod@3.25.64): dependencies: zod: 3.25.64 @@ -13194,6 +13130,8 @@ snapshots: zod@3.25.64: {} + zod@4.0.14: {} + zustand@5.0.3(@types/react@19.0.9)(react@19.0.0)(use-sync-external-store@1.5.0(react@19.0.0)): optionalDependencies: '@types/react': 19.0.9 diff --git a/src/app/api/analyze-content/route.ts b/src/app/api/analyze-content/route.ts index 576040e..8c4a461 100644 --- a/src/app/api/analyze-content/route.ts +++ b/src/app/api/analyze-content/route.ts @@ -254,7 +254,7 @@ async function analyzeContent( - Ensure the title and description are meaningful and based on the actual content `, temperature, - maxTokens, + maxOutputTokens: maxTokens, }); return { From 8b2f1848a841f330bde9bd98a291be5f2d21c00b Mon Sep 17 00:00:00 2001 From: javayhu Date: Sat, 2 Aug 2025 01:00:15 +0800 Subject: [PATCH 08/11] feat: upgrade zod to v4 --- package.json | 6 +- pnpm-lock.yaml | 462 ++++++++---------- src/actions/create-checkout-session.ts | 2 +- src/actions/create-credit-checkout-session.ts | 2 +- src/app/api/analyze-content/route.ts | 2 +- 5 files changed, 221 insertions(+), 253 deletions(-) diff --git a/package.json b/package.json index d4067a1..8bdc6a0 100644 --- a/package.json +++ b/package.json @@ -96,9 +96,9 @@ "drizzle-orm": "^0.39.3", "embla-carousel-react": "^8.5.2", "framer-motion": "^12.4.7", - "fumadocs-core": "^15.5.3", - "fumadocs-mdx": "^11.6.8", - "fumadocs-ui": "^15.5.3", + "fumadocs-core": "^15.6.7", + "fumadocs-mdx": "^11.7.3", + "fumadocs-ui": "^15.6.7", "inngest": "^3.40.1", "input-otp": "^1.4.2", "lucide-react": "^0.483.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eff0cbc..217c320 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,14 +225,14 @@ importers: specifier: ^12.4.7 version: 12.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fumadocs-core: - specifier: ^15.5.3 - version: 15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^15.6.7 + version: 15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fumadocs-mdx: - specifier: ^11.6.8 - version: 11.6.8(acorn@8.14.0)(fumadocs-core@15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + specifier: ^11.7.3 + version: 11.7.3(acorn@8.14.0)(fumadocs-core@15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) fumadocs-ui: - specifier: ^15.5.3 - version: 15.5.3(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@4.0.14) + specifier: ^15.6.7 + version: 15.6.7(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@4.0.14) inngest: specifier: ^3.40.1 version: 3.40.1(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(typescript@5.8.3) @@ -665,8 +665,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -695,8 +695,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -725,8 +725,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -755,8 +755,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -785,8 +785,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -815,8 +815,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -845,8 +845,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -875,8 +875,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -905,8 +905,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -935,8 +935,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -965,8 +965,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -995,8 +995,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1025,8 +1025,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1055,8 +1055,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1085,8 +1085,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1115,8 +1115,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1145,8 +1145,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1157,8 +1157,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1187,8 +1187,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1205,8 +1205,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1235,12 +1235,18 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -1265,8 +1271,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1295,8 +1301,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1325,8 +1331,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1355,8 +1361,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2176,14 +2182,14 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@orama/orama@3.1.11': + resolution: {integrity: sha512-Szki0cgFiXE5F9RLx2lUyEtJllnuCSQ4B8RLDwIjXkVit6qZjoDAxH+xhJs29MjKLDz0tbPLdKFa6QrQ/qoGGA==} + engines: {node: '>= 20.0.0'} + '@orama/orama@3.1.4': resolution: {integrity: sha512-7tTuIdkzgRscJ7sGHVsoK9GtXSpwbfrj3WYnuSu/SepXHhshYiQaOeXc/aeLh4MfgIre6tEs/caIop8wrhMi3g==} engines: {node: '>= 16.0.0'} - '@orama/orama@3.1.7': - resolution: {integrity: sha512-6yB0117ZjsgNevZw3LP+bkrZa9mU/POPVaXgzMPOBbBc35w2P3R+1vMMhEfC06kYCpd5bf0jodBaTkYQW5TVeQ==} - engines: {node: '>= 20.0.0'} - '@orama/tokenizers@3.1.4': resolution: {integrity: sha512-OKyw/uKDZqlS4Vwwyp2l+d1ISGtBt3qMORbTp3jyfeGjXllTLJrH/erzlVYKWdNp5bPrWGVrQbtgWgE5nLV1Ng==} engines: {node: '>= 18.0.0'} @@ -3745,44 +3751,44 @@ packages: '@shikijs/core@2.5.0': resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} - '@shikijs/core@3.6.0': - resolution: {integrity: sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==} + '@shikijs/core@3.9.1': + resolution: {integrity: sha512-W5Vwen0KJCtR7KFRo+3JLGAqLUPsfW7e+wZ4yaRBGIogwI9ZlnkpRm9ZV8JtfzMxOkIwZwMmmN0hNErLtm3AYg==} '@shikijs/engine-javascript@2.5.0': resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} - '@shikijs/engine-javascript@3.6.0': - resolution: {integrity: sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==} + '@shikijs/engine-javascript@3.9.1': + resolution: {integrity: sha512-4hGenxYpAmtALryKsdli2K58F0s7RBYpj/RSDcAAGfRM6eTEGI5cZnt86mr+d9/4BaZ5sH5s4p3VU5irIdhj9Q==} '@shikijs/engine-oniguruma@2.5.0': resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} - '@shikijs/engine-oniguruma@3.6.0': - resolution: {integrity: sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==} + '@shikijs/engine-oniguruma@3.9.1': + resolution: {integrity: sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==} '@shikijs/langs@2.5.0': resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} - '@shikijs/langs@3.6.0': - resolution: {integrity: sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==} + '@shikijs/langs@3.9.1': + resolution: {integrity: sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==} - '@shikijs/rehype@3.6.0': - resolution: {integrity: sha512-r0Rr2hvXXqLl5DJ1Lx7RImU81XsK2bjThaym/lujl2A0r7SId0u1s+bcWYfFKb+7mCLH7MXF+jdzCtdWGOcYCQ==} + '@shikijs/rehype@3.9.1': + resolution: {integrity: sha512-zkwzC92w2MdmwIkT0E8lKYD4dPJxCmm7HNHBwyWgJN4P6wcxZKJDvgCgAOXjOtLfXuZl3hZjO1Q/9lIyjarD/g==} '@shikijs/themes@2.5.0': resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} - '@shikijs/themes@3.6.0': - resolution: {integrity: sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==} + '@shikijs/themes@3.9.1': + resolution: {integrity: sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==} - '@shikijs/transformers@3.6.0': - resolution: {integrity: sha512-PYkU54lYV0RCaUG8n2FNTF+YWiU3uPhcjLGq2x/C8lIrUX9GVnRb3bK+R5xtdFHbuctntATKm7ondp/H/dux9Q==} + '@shikijs/transformers@3.9.1': + resolution: {integrity: sha512-QI4Bh565EhKGaefiDAyn5o7S8rQIUGXcOjZANSiQHa/KSGCyJTZP9UUiRbvdovVpaI/nagODX6mspFk/vcYOQQ==} '@shikijs/types@2.5.0': resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} - '@shikijs/types@3.6.0': - resolution: {integrity: sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==} + '@shikijs/types@3.9.1': + resolution: {integrity: sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -4669,8 +4675,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} hasBin: true @@ -4792,9 +4798,10 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - fumadocs-core@15.5.3: - resolution: {integrity: sha512-FGOrPqUpovSkc25s7EzNvYO0Oi1mlAJz9GxJ3jb8W1v5rmtWgjVhpjs5vBNMQtKDpQuO0GjkHN5iMQVbW0DvjQ==} + fumadocs-core@15.6.7: + resolution: {integrity: sha512-+tAnCFoE2NZOZxaqwKc1HFbCoOOa/E6sJpXlviCE6JYDl6vvpmhC7CWjrzVzxmtLb5Y3wm89MdRR3opfPR79Uw==} peerDependencies: + '@mixedbread/sdk': ^0.19.0 '@oramacloud/client': 1.x.x || 2.x.x '@types/react': '*' algoliasearch: 5.x.x @@ -4802,6 +4809,8 @@ packages: react: 18.x.x || 19.x.x react-dom: 18.x.x || 19.x.x peerDependenciesMeta: + '@mixedbread/sdk': + optional: true '@oramacloud/client': optional: true '@types/react': @@ -4815,19 +4824,27 @@ packages: react-dom: optional: true - fumadocs-mdx@11.6.8: - resolution: {integrity: sha512-hn+KGXNXRJLAYxTFfBI2dokiV3UCp8hBkB3CUA/pWdMzLg06Vee4UHoVlQm0hKs05XT6syHRbAxaOZvaOviGfQ==} + fumadocs-mdx@11.7.3: + resolution: {integrity: sha512-EMuISWaUeImpd2KI9LdWfc1rMWv9qfIoJSAXsI3TDXph8v4FyQ7Nz+NRpeoNgv59gzwKbkMRcnZnrKXI/ybnoA==} hasBin: true peerDependencies: - '@fumadocs/mdx-remote': ^1.2.0 + '@fumadocs/mdx-remote': ^1.4.0 fumadocs-core: ^14.0.0 || ^15.0.0 next: ^15.3.0 + react: '*' + vite: 6.x.x || 7.x.x peerDependenciesMeta: '@fumadocs/mdx-remote': optional: true + next: + optional: true + react: + optional: true + vite: + optional: true - fumadocs-ui@15.5.3: - resolution: {integrity: sha512-5SmN1j7HBQ9XuboAicfFqoNLPpN37Iwz0+cCLt6cOOequurTjfPfYCjvlKzP5q0GxDjrpU2vEQX/9JMa25bC6w==} + fumadocs-ui@15.6.7: + resolution: {integrity: sha512-raj2iyglEj3Hi6pjZH6y7HJtizJ8yZVtEQNMxyrwpKrqOUHzAZ2lRvT3gCETBVbnF+Oa6PSLRJgL30XqO7LkBg==} peerDependencies: '@types/react': '*' next: 14.x.x || 15.x.x @@ -4922,18 +4939,12 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-estree@3.1.1: - resolution: {integrity: sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==} - hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} hast-util-to-html@9.0.5: resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - hast-util-to-jsx-runtime@2.3.2: - resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} - hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} @@ -5592,6 +5603,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -5787,9 +5802,6 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} @@ -5855,8 +5867,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-medium-image-zoom@5.2.14: - resolution: {integrity: sha512-nfTVYcAUnBzXQpPDcZL+cG/e6UceYUIG+zDcnemL7jtAqbJjVVkA85RgneGtJeni12dTyiRPZVM6Szkmwd/o8w==} + react-medium-image-zoom@5.3.0: + resolution: {integrity: sha512-RCIzVlsKqy3BYgGgYbolUfuvx0aSKC7YhX/IJGEp+WJxsqdIVYJHkBdj++FAj6VD7RiWj6VVmdCfa/9vJE9hZg==} peerDependencies: 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 @@ -5995,9 +6007,6 @@ packages: remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} - remark-rehype@11.1.2: resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} @@ -6085,8 +6094,8 @@ packages: shiki@2.5.0: resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} - shiki@3.6.0: - resolution: {integrity: sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==} + shiki@3.9.1: + resolution: {integrity: sha512-HogZ8nMnv9VAQMrG+P7BleJFhrKHm3fi6CYyHRbUu61gJ0lpqLr6ecYEui31IYG1Cn9Bad7N2vf332iXHnn0bQ==} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -6828,7 +6837,7 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/aix-ppc64@0.25.5': + '@esbuild/aix-ppc64@0.25.8': optional: true '@esbuild/android-arm64@0.18.20': @@ -6843,7 +6852,7 @@ snapshots: '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/android-arm64@0.25.8': optional: true '@esbuild/android-arm@0.18.20': @@ -6858,7 +6867,7 @@ snapshots: '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-arm@0.25.8': optional: true '@esbuild/android-x64@0.18.20': @@ -6873,7 +6882,7 @@ snapshots: '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/android-x64@0.25.8': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -6888,7 +6897,7 @@ snapshots: '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/darwin-arm64@0.25.8': optional: true '@esbuild/darwin-x64@0.18.20': @@ -6903,7 +6912,7 @@ snapshots: '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/darwin-x64@0.25.8': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -6918,7 +6927,7 @@ snapshots: '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/freebsd-arm64@0.25.8': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -6933,7 +6942,7 @@ snapshots: '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/freebsd-x64@0.25.8': optional: true '@esbuild/linux-arm64@0.18.20': @@ -6948,7 +6957,7 @@ snapshots: '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/linux-arm64@0.25.8': optional: true '@esbuild/linux-arm@0.18.20': @@ -6963,7 +6972,7 @@ snapshots: '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/linux-arm@0.25.8': optional: true '@esbuild/linux-ia32@0.18.20': @@ -6978,7 +6987,7 @@ snapshots: '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/linux-ia32@0.25.8': optional: true '@esbuild/linux-loong64@0.18.20': @@ -6993,7 +7002,7 @@ snapshots: '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/linux-loong64@0.25.8': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -7008,7 +7017,7 @@ snapshots: '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/linux-mips64el@0.25.8': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -7023,7 +7032,7 @@ snapshots: '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/linux-ppc64@0.25.8': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -7038,7 +7047,7 @@ snapshots: '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/linux-riscv64@0.25.8': optional: true '@esbuild/linux-s390x@0.18.20': @@ -7053,7 +7062,7 @@ snapshots: '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/linux-s390x@0.25.8': optional: true '@esbuild/linux-x64@0.18.20': @@ -7068,13 +7077,13 @@ snapshots: '@esbuild/linux-x64@0.25.0': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/linux-x64@0.25.8': optional: true '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/netbsd-arm64@0.25.8': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -7089,7 +7098,7 @@ snapshots: '@esbuild/netbsd-x64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/netbsd-x64@0.25.8': optional: true '@esbuild/openbsd-arm64@0.23.0': @@ -7098,7 +7107,7 @@ snapshots: '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/openbsd-arm64@0.25.8': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -7113,7 +7122,10 @@ snapshots: '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/openbsd-x64@0.25.8': + optional: true + + '@esbuild/openharmony-arm64@0.25.8': optional: true '@esbuild/sunos-x64@0.18.20': @@ -7128,7 +7140,7 @@ snapshots: '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/sunos-x64@0.25.8': optional: true '@esbuild/win32-arm64@0.18.20': @@ -7143,7 +7155,7 @@ snapshots: '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/win32-arm64@0.25.8': optional: true '@esbuild/win32-ia32@0.18.20': @@ -7158,7 +7170,7 @@ snapshots: '@esbuild/win32-ia32@0.25.0': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/win32-ia32@0.25.8': optional: true '@esbuild/win32-x64@0.18.20': @@ -7173,7 +7185,7 @@ snapshots: '@esbuild/win32-x64@0.25.0': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/win32-x64@0.25.8': optional: true '@floating-ui/core@1.6.9': @@ -7388,7 +7400,7 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.2 + hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 recma-jsx: 1.0.0(acorn@8.14.0) @@ -7396,7 +7408,7 @@ snapshots: rehype-recma: 1.0.0 remark-mdx: 3.1.0 remark-parse: 11.0.0 - remark-rehype: 11.1.1 + remark-rehype: 11.1.2 source-map: 0.7.4 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -8187,9 +8199,9 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@orama/orama@3.1.4': {} + '@orama/orama@3.1.11': {} - '@orama/orama@3.1.7': {} + '@orama/orama@3.1.4': {} '@orama/tokenizers@3.1.4': dependencies: @@ -9839,9 +9851,9 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.6.0': + '@shikijs/core@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -9852,9 +9864,9 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 3.1.1 - '@shikijs/engine-javascript@3.6.0': + '@shikijs/engine-javascript@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 @@ -9863,25 +9875,25 @@ snapshots: '@shikijs/types': 2.5.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.6.0': + '@shikijs/engine-oniguruma@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@2.5.0': dependencies: '@shikijs/types': 2.5.0 - '@shikijs/langs@3.6.0': + '@shikijs/langs@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 - '@shikijs/rehype@3.6.0': + '@shikijs/rehype@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 3.6.0 + shiki: 3.9.1 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -9889,21 +9901,21 @@ snapshots: dependencies: '@shikijs/types': 2.5.0 - '@shikijs/themes@3.6.0': + '@shikijs/themes@3.9.1': dependencies: - '@shikijs/types': 3.6.0 + '@shikijs/types': 3.9.1 - '@shikijs/transformers@3.6.0': + '@shikijs/transformers@3.9.1': dependencies: - '@shikijs/core': 3.6.0 - '@shikijs/types': 3.6.0 + '@shikijs/core': 3.9.1 + '@shikijs/types': 3.9.1 '@shikijs/types@2.5.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.6.0': + '@shikijs/types@3.9.1': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -10765,33 +10777,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 - esbuild@0.25.5: + esbuild@0.25.8: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 escalade@3.2.0: {} @@ -10904,23 +10917,24 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + fumadocs-core@15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@formatjs/intl-localematcher': 0.6.1 - '@orama/orama': 3.1.7 - '@shikijs/rehype': 3.6.0 - '@shikijs/transformers': 3.6.0 + '@orama/orama': 3.1.11 + '@shikijs/rehype': 3.9.1 + '@shikijs/transformers': 3.9.1 github-slugger: 2.0.0 hast-util-to-estree: 3.1.3 hast-util-to-jsx-runtime: 2.3.6 image-size: 2.0.2 negotiator: 1.0.0 + npm-to-yarn: 3.0.1 react-remove-scroll: 2.7.1(@types/react@19.0.9)(react@19.0.0) remark: 15.0.1 remark-gfm: 4.0.1 remark-rehype: 11.1.2 scroll-into-view-if-needed: 3.1.0 - shiki: 3.6.0 + shiki: 3.9.1 unist-util-visit: 5.0.0 optionalDependencies: '@types/react': 19.0.9 @@ -10930,27 +10944,29 @@ snapshots: transitivePeerDependencies: - supports-color - fumadocs-mdx@11.6.8(acorn@8.14.0)(fumadocs-core@15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): + fumadocs-mdx@11.7.3(acorn@8.14.0)(fumadocs-core@15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@standard-schema/spec': 1.0.0 chokidar: 4.0.3 - esbuild: 0.25.5 + esbuild: 0.25.8 estree-util-value-to-estree: 3.4.0 - fumadocs-core: 15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + fumadocs-core: 15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) js-yaml: 4.1.0 lru-cache: 11.1.0 - next: 15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) picocolors: 1.1.1 tinyexec: 1.0.1 tinyglobby: 0.2.14 unist-util-visit: 5.0.0 - zod: 3.25.64 + zod: 4.0.14 + optionalDependencies: + next: 15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 transitivePeerDependencies: - acorn - supports-color - fumadocs-ui@15.5.3(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@4.0.14): + fumadocs-ui@15.6.7(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@4.0.14): dependencies: '@radix-ui/react-accordion': 1.2.11(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-collapsible': 1.1.11(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -10963,20 +10979,21 @@ snapshots: '@radix-ui/react-slot': 1.2.3(@types/react@19.0.9)(react@19.0.0) '@radix-ui/react-tabs': 1.1.12(@types/react-dom@19.0.3(@types/react@19.0.9))(@types/react@19.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) class-variance-authority: 0.7.1 - fumadocs-core: 15.5.3(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + fumadocs-core: 15.6.7(@types/react@19.0.9)(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) lodash.merge: 4.6.2 next-themes: 0.4.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) postcss-selector-parser: 7.1.0 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-medium-image-zoom: 5.2.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react-remove-scroll: 2.7.1(@types/react@19.0.9)(react@19.0.0) + react-medium-image-zoom: 5.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + scroll-into-view-if-needed: 3.1.0 tailwind-merge: 3.3.1 optionalDependencies: '@types/react': 19.0.9 next: 15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tailwindcss: 4.0.14 transitivePeerDependencies: + - '@mixedbread/sdk' - '@oramacloud/client' - '@types/react-dom' - algoliasearch @@ -11071,27 +11088,6 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-estree@3.1.1: - dependencies: - '@types/estree': 1.0.6 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 1.0.8 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - hast-util-to-estree@3.1.3: dependencies: '@types/estree': 1.0.6 @@ -11127,26 +11123,6 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.2: - dependencies: - '@types/estree': 1.0.6 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - style-to-object: 1.0.8 - unist-util-position: 5.0.0 - vfile-message: 4.0.2 - transitivePeerDependencies: - - supports-color - hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.6 @@ -12015,6 +11991,8 @@ snapshots: normalize-path@3.0.0: {} + npm-to-yarn@3.0.1: {} + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -12240,8 +12218,6 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - property-information@6.5.0: {} - property-information@7.0.0: {} protobufjs@7.5.3: @@ -12382,7 +12358,7 @@ snapshots: react-is@18.3.1: {} - react-medium-image-zoom@5.2.14(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-medium-image-zoom@5.3.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -12538,7 +12514,7 @@ snapshots: dependencies: '@types/estree': 1.0.6 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.1 + hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color @@ -12569,14 +12545,6 @@ snapshots: transitivePeerDependencies: - supports-color - remark-rehype@11.1.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - vfile: 6.0.3 - remark-rehype@11.1.2: dependencies: '@types/hast': 3.0.4 @@ -12702,14 +12670,14 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.6.0: + shiki@3.9.1: dependencies: - '@shikijs/core': 3.6.0 - '@shikijs/engine-javascript': 3.6.0 - '@shikijs/engine-oniguruma': 3.6.0 - '@shikijs/langs': 3.6.0 - '@shikijs/themes': 3.6.0 - '@shikijs/types': 3.6.0 + '@shikijs/core': 3.9.1 + '@shikijs/engine-javascript': 3.9.1 + '@shikijs/engine-oniguruma': 3.9.1 + '@shikijs/langs': 3.9.1 + '@shikijs/themes': 3.9.1 + '@shikijs/types': 3.9.1 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 diff --git a/src/actions/create-checkout-session.ts b/src/actions/create-checkout-session.ts index 4c5fd62..b69c048 100644 --- a/src/actions/create-checkout-session.ts +++ b/src/actions/create-checkout-session.ts @@ -21,7 +21,7 @@ const checkoutSchema = z.object({ userId: z.string().min(1, { message: 'User ID is required' }), planId: z.string().min(1, { message: 'Plan ID is required' }), priceId: z.string().min(1, { message: 'Price ID is required' }), - metadata: z.record(z.string()).optional(), + metadata: z.record(z.string(), z.string()).optional(), }); /** diff --git a/src/actions/create-credit-checkout-session.ts b/src/actions/create-credit-checkout-session.ts index d648f2f..93df7fb 100644 --- a/src/actions/create-credit-checkout-session.ts +++ b/src/actions/create-credit-checkout-session.ts @@ -21,7 +21,7 @@ const creditCheckoutSchema = z.object({ userId: z.string().min(1, { message: 'User ID is required' }), packageId: z.string().min(1, { message: 'Package ID is required' }), priceId: z.string().min(1, { message: 'Price ID is required' }), - metadata: z.record(z.string()).optional(), + metadata: z.record(z.string(), z.string()).optional(), }); /** diff --git a/src/app/api/analyze-content/route.ts b/src/app/api/analyze-content/route.ts index 8c4a461..094d365 100644 --- a/src/app/api/analyze-content/route.ts +++ b/src/app/api/analyze-content/route.ts @@ -336,7 +336,7 @@ export async function POST(req: NextRequest) { if (!urlValidation.success) { const urlError = new WebContentAnalyzerError( ErrorType.VALIDATION, - urlValidation.error.errors[0]?.message || 'Invalid URL', + urlValidation.error.issues[0]?.message || 'Invalid URL', 'Please enter a valid URL starting with http:// or https://', ErrorSeverity.MEDIUM, false From 89fd7193ac01563b1d354a62d183d100511d0ffb Mon Sep 17 00:00:00 2001 From: javayhu Date: Sun, 3 Aug 2025 00:32:44 +0800 Subject: [PATCH 09/11] feat: upgrade to zod v4 & fix z.url() and z.email() https://zod.dev/v4/changelog?id=zstring-updates --- src/actions/check-newsletter-status.ts | 2 +- src/actions/send-message.ts | 2 +- src/actions/subscribe-newsletter.ts | 2 +- src/actions/unsubscribe-newsletter.ts | 2 +- src/ai/text/components/url-input-form.tsx | 2 +- src/components/auth/forgot-password-form.tsx | 2 +- src/components/auth/login-form.tsx | 2 +- src/components/auth/register-form.tsx | 2 +- src/components/contact/contact-form-card.tsx | 2 +- src/components/newsletter/newsletter-form.tsx | 2 +- src/components/waitlist/waitlist-form-card.tsx | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/actions/check-newsletter-status.ts b/src/actions/check-newsletter-status.ts index 2daca00..249e4e1 100644 --- a/src/actions/check-newsletter-status.ts +++ b/src/actions/check-newsletter-status.ts @@ -9,7 +9,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.string().email({ message: 'Please enter a valid email address' }), + email: z.email({ message: 'Please enter a valid email address' }), }); // Create a safe action to check if a user is subscribed to the newsletter diff --git a/src/actions/send-message.ts b/src/actions/send-message.ts index dc9bf46..5bc5e79 100644 --- a/src/actions/send-message.ts +++ b/src/actions/send-message.ts @@ -19,7 +19,7 @@ const contactFormSchema = z.object({ .string() .min(3, { message: 'Name must be at least 3 characters' }) .max(30, { message: 'Name must not exceed 30 characters' }), - email: z.string().email({ message: 'Please enter a valid email address' }), + email: z.email({ message: 'Please enter a valid email address' }), message: z .string() .min(10, { message: 'Message must be at least 10 characters' }) diff --git a/src/actions/subscribe-newsletter.ts b/src/actions/subscribe-newsletter.ts index 3d7018a..eb88022 100644 --- a/src/actions/subscribe-newsletter.ts +++ b/src/actions/subscribe-newsletter.ts @@ -11,7 +11,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.string().email({ message: 'Please enter a valid email address' }), + email: z.email({ message: 'Please enter a valid email address' }), }); // Create a safe action for newsletter subscription diff --git a/src/actions/unsubscribe-newsletter.ts b/src/actions/unsubscribe-newsletter.ts index 332623a..d0759a9 100644 --- a/src/actions/unsubscribe-newsletter.ts +++ b/src/actions/unsubscribe-newsletter.ts @@ -10,7 +10,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.string().email({ message: 'Please enter a valid email address' }), + email: z.email({ message: 'Please enter a valid email address' }), }); // Create a safe action for newsletter unsubscription diff --git a/src/ai/text/components/url-input-form.tsx b/src/ai/text/components/url-input-form.tsx index 4592d5d..208b436 100644 --- a/src/ai/text/components/url-input-form.tsx +++ b/src/ai/text/components/url-input-form.tsx @@ -40,7 +40,7 @@ import { useDebounce } from '../utils/performance'; // Form schema for URL input const urlFormSchema = z.object({ - url: z.string().url().optional(), // Allow empty string for initial state + url: z.url().optional(), // Allow empty string for initial state }); type UrlFormData = z.infer; diff --git a/src/components/auth/forgot-password-form.tsx b/src/components/auth/forgot-password-form.tsx index ed4c93f..66f6758 100644 --- a/src/components/auth/forgot-password-form.tsx +++ b/src/components/auth/forgot-password-form.tsx @@ -32,7 +32,7 @@ export const ForgotPasswordForm = ({ className }: { className?: string }) => { const searchParams = useSearchParams(); const ForgotPasswordSchema = z.object({ - email: z.string().email({ + email: z.email({ message: t('emailRequired'), }), }); diff --git a/src/components/auth/login-form.tsx b/src/components/auth/login-form.tsx index 4f29a7c..60145a0 100644 --- a/src/components/auth/login-form.tsx +++ b/src/components/auth/login-form.tsx @@ -69,7 +69,7 @@ export const LoginForm = ({ : z.string().optional(); const LoginSchema = z.object({ - email: z.string().email({ + email: z.email({ message: t('emailRequired'), }), password: z.string().min(1, { diff --git a/src/components/auth/register-form.tsx b/src/components/auth/register-form.tsx index 9ed63b7..ea0dbba 100644 --- a/src/components/auth/register-form.tsx +++ b/src/components/auth/register-form.tsx @@ -64,7 +64,7 @@ export const RegisterForm = ({ : z.string().optional(); const RegisterSchema = z.object({ - email: z.string().email({ + email: z.email({ message: t('emailRequired'), }), password: z.string().min(1, { diff --git a/src/components/contact/contact-form-card.tsx b/src/components/contact/contact-form-card.tsx index b084d62..2914884 100644 --- a/src/components/contact/contact-form-card.tsx +++ b/src/components/contact/contact-form-card.tsx @@ -40,7 +40,7 @@ export function ContactFormCard() { // Create a schema for contact form validation const formSchema = z.object({ name: z.string().min(3, t('nameMinLength')).max(30, t('nameMaxLength')), - email: z.string().email(t('emailValidation')), + email: z.email(t('emailValidation')), message: z .string() .min(10, t('messageMinLength')) diff --git a/src/components/newsletter/newsletter-form.tsx b/src/components/newsletter/newsletter-form.tsx index 489cf8c..0dbc6fe 100644 --- a/src/components/newsletter/newsletter-form.tsx +++ b/src/components/newsletter/newsletter-form.tsx @@ -29,7 +29,7 @@ export function NewsletterForm() { // newsletter schema const NewsletterFormSchema = z.object({ - email: z.string().email({ + email: z.email({ message: t('emailValidation'), }), }); diff --git a/src/components/waitlist/waitlist-form-card.tsx b/src/components/waitlist/waitlist-form-card.tsx index 36fd911..ea0d1b9 100644 --- a/src/components/waitlist/waitlist-form-card.tsx +++ b/src/components/waitlist/waitlist-form-card.tsx @@ -38,7 +38,7 @@ export function WaitlistFormCard() { // Create a schema for waitlist form validation const formSchema = z.object({ - email: z.string().email({ message: t('emailValidation') }), + email: z.email({ message: t('emailValidation') }), }); // Initialize the form From 3c3dcd5d2a2ac7cb205603fed18fd836541b7b32 Mon Sep 17 00:00:00 2001 From: javayhu Date: Sun, 3 Aug 2025 00:35:22 +0800 Subject: [PATCH 10/11] feat: upgrade zod v4 & use error instead of message https://zod.dev/v4/changelog?id=deprecates-message --- src/actions/check-newsletter-status.ts | 2 +- src/actions/create-checkout-session.ts | 6 +++--- src/actions/create-credit-checkout-session.ts | 6 +++--- src/actions/create-customer-portal-session.ts | 4 ++-- src/actions/get-active-subscription.ts | 2 +- src/actions/get-lifetime-status.ts | 2 +- src/actions/send-message.ts | 10 +++++----- src/actions/subscribe-newsletter.ts | 2 +- src/actions/unsubscribe-newsletter.ts | 2 +- src/actions/validate-captcha.ts | 2 +- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/actions/check-newsletter-status.ts b/src/actions/check-newsletter-status.ts index 249e4e1..d40952d 100644 --- a/src/actions/check-newsletter-status.ts +++ b/src/actions/check-newsletter-status.ts @@ -9,7 +9,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.email({ message: 'Please enter a valid email address' }), + email: z.email({ error: 'Please enter a valid email address' }), }); // Create a safe action to check if a user is subscribed to the newsletter diff --git a/src/actions/create-checkout-session.ts b/src/actions/create-checkout-session.ts index b69c048..5c0ac29 100644 --- a/src/actions/create-checkout-session.ts +++ b/src/actions/create-checkout-session.ts @@ -18,9 +18,9 @@ const actionClient = createSafeActionClient(); // Checkout schema for validation // metadata is optional, and may contain referral information if you need const checkoutSchema = z.object({ - userId: z.string().min(1, { message: 'User ID is required' }), - planId: z.string().min(1, { message: 'Plan ID is required' }), - priceId: z.string().min(1, { message: 'Price ID is required' }), + userId: z.string().min(1, { error: 'User ID is required' }), + planId: z.string().min(1, { error: 'Plan ID is required' }), + priceId: z.string().min(1, { error: 'Price ID is required' }), metadata: z.record(z.string(), z.string()).optional(), }); diff --git a/src/actions/create-credit-checkout-session.ts b/src/actions/create-credit-checkout-session.ts index 93df7fb..9e8ff7f 100644 --- a/src/actions/create-credit-checkout-session.ts +++ b/src/actions/create-credit-checkout-session.ts @@ -18,9 +18,9 @@ const actionClient = createSafeActionClient(); // Credit checkout schema for validation // metadata is optional, and may contain referral information if you need const creditCheckoutSchema = z.object({ - userId: z.string().min(1, { message: 'User ID is required' }), - packageId: z.string().min(1, { message: 'Package ID is required' }), - priceId: z.string().min(1, { message: 'Price ID is required' }), + userId: z.string().min(1, { error: 'User ID is required' }), + packageId: z.string().min(1, { error: 'Package ID is required' }), + priceId: z.string().min(1, { error: 'Price ID is required' }), metadata: z.record(z.string(), z.string()).optional(), }); diff --git a/src/actions/create-customer-portal-session.ts b/src/actions/create-customer-portal-session.ts index a10962f..feeb7f3 100644 --- a/src/actions/create-customer-portal-session.ts +++ b/src/actions/create-customer-portal-session.ts @@ -16,10 +16,10 @@ const actionClient = createSafeActionClient(); // Portal schema for validation const portalSchema = z.object({ - userId: z.string().min(1, { message: 'User ID is required' }), + userId: z.string().min(1, { error: 'User ID is required' }), returnUrl: z .string() - .url({ message: 'Return URL must be a valid URL' }) + .url({ error: 'Return URL must be a valid URL' }) .optional(), }); diff --git a/src/actions/get-active-subscription.ts b/src/actions/get-active-subscription.ts index 30978de..c1d87dc 100644 --- a/src/actions/get-active-subscription.ts +++ b/src/actions/get-active-subscription.ts @@ -10,7 +10,7 @@ const actionClient = createSafeActionClient(); // Input schema const schema = z.object({ - userId: z.string().min(1, { message: 'User ID is required' }), + userId: z.string().min(1, { error: 'User ID is required' }), }); /** diff --git a/src/actions/get-lifetime-status.ts b/src/actions/get-lifetime-status.ts index 1fe9937..baa6753 100644 --- a/src/actions/get-lifetime-status.ts +++ b/src/actions/get-lifetime-status.ts @@ -14,7 +14,7 @@ const actionClient = createSafeActionClient(); // Input schema const schema = z.object({ - userId: z.string().min(1, { message: 'User ID is required' }), + userId: z.string().min(1, { error: 'User ID is required' }), }); /** diff --git a/src/actions/send-message.ts b/src/actions/send-message.ts index 5bc5e79..2dae548 100644 --- a/src/actions/send-message.ts +++ b/src/actions/send-message.ts @@ -17,13 +17,13 @@ const actionClient = createSafeActionClient(); const contactFormSchema = z.object({ name: z .string() - .min(3, { message: 'Name must be at least 3 characters' }) - .max(30, { message: 'Name must not exceed 30 characters' }), - email: z.email({ message: 'Please enter a valid email address' }), + .min(3, { error: 'Name must be at least 3 characters' }) + .max(30, { error: 'Name must not exceed 30 characters' }), + email: z.email({ error: 'Please enter a valid email address' }), message: z .string() - .min(10, { message: 'Message must be at least 10 characters' }) - .max(500, { message: 'Message must not exceed 500 characters' }), + .min(10, { error: 'Message must be at least 10 characters' }) + .max(500, { error: 'Message must not exceed 500 characters' }), }); // Create a safe action for contact form submission diff --git a/src/actions/subscribe-newsletter.ts b/src/actions/subscribe-newsletter.ts index eb88022..e3e3037 100644 --- a/src/actions/subscribe-newsletter.ts +++ b/src/actions/subscribe-newsletter.ts @@ -11,7 +11,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.email({ message: 'Please enter a valid email address' }), + email: z.email({ error: 'Please enter a valid email address' }), }); // Create a safe action for newsletter subscription diff --git a/src/actions/unsubscribe-newsletter.ts b/src/actions/unsubscribe-newsletter.ts index d0759a9..32dfe4d 100644 --- a/src/actions/unsubscribe-newsletter.ts +++ b/src/actions/unsubscribe-newsletter.ts @@ -10,7 +10,7 @@ const actionClient = createSafeActionClient(); // Newsletter schema for validation const newsletterSchema = z.object({ - email: z.email({ message: 'Please enter a valid email address' }), + email: z.email({ error: 'Please enter a valid email address' }), }); // Create a safe action for newsletter unsubscription diff --git a/src/actions/validate-captcha.ts b/src/actions/validate-captcha.ts index 691f3f5..1dc85df 100644 --- a/src/actions/validate-captcha.ts +++ b/src/actions/validate-captcha.ts @@ -9,7 +9,7 @@ const actionClient = createSafeActionClient(); // Captcha validation schema const captchaSchema = z.object({ - captchaToken: z.string().min(1, { message: 'Captcha token is required' }), + captchaToken: z.string().min(1, { error: 'Captcha token is required' }), }); // Create a safe action for captcha validation From 2b72570784dc8ce54557f4693fee76efeff178fe Mon Sep 17 00:00:00 2001 From: javayhu Date: Sun, 3 Aug 2025 11:17:39 +0800 Subject: [PATCH 11/11] feat: support openrouter in ai text (not stable for now) --- env.example | 1 + package.json | 1 + pnpm-lock.yaml | 15 +++++++++++++++ src/ai/text/components/url-input-form.tsx | 1 + src/ai/text/utils/web-content-analyzer-config.ts | 7 +++++++ src/ai/text/utils/web-content-analyzer.ts | 7 +++---- src/app/api/analyze-content/route.ts | 8 ++++++++ 7 files changed, 36 insertions(+), 4 deletions(-) diff --git a/env.example b/env.example index df9dcfc..81edc13 100644 --- a/env.example +++ b/env.example @@ -183,6 +183,7 @@ OPENAI_API_KEY="" REPLICATE_API_TOKEN="" GOOGLE_GENERATIVE_AI_API_KEY="" DEEPSEEK_API_KEY="" +OPENROUTER_API_KEY="" # ----------------------------------------------------------------------------- # Web Content Analyzer (Firecrawl) diff --git a/package.json b/package.json index 8bdc6a0..e65509a 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@mendable/firecrawl-js": "^1.29.1", "@next/third-parties": "^15.3.0", "@openpanel/nextjs": "^1.0.7", + "@openrouter/ai-sdk-provider": "^1.0.0-beta.6", "@orama/orama": "^3.1.4", "@orama/tokenizers": "^3.1.4", "@radix-ui/react-accordion": "^1.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 217c320..5b817ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,6 +59,9 @@ importers: '@openpanel/nextjs': specifier: ^1.0.7 version: 1.0.7(next@15.2.1(@babel/core@7.24.5)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@openrouter/ai-sdk-provider': + specifier: ^1.0.0-beta.6 + version: 1.0.0-beta.6(ai@5.0.0(zod@4.0.14))(zod@4.0.14) '@orama/orama': specifier: ^3.1.4 version: 3.1.4 @@ -1730,6 +1733,13 @@ packages: '@openpanel/web@1.0.1': resolution: {integrity: sha512-cVZ7Kr9SicczJ/RDIfEtZs8+1iGDzwkabVA/j3NqSl8VSucsC8m1+LVbjmCDzCJNnK4yVn6tEcc9PJRi2rtllw==} + '@openrouter/ai-sdk-provider@1.0.0-beta.6': + resolution: {integrity: sha512-1cj8yUek4ib10MqZ+9fw1p1a3SR0Zhx3HH1J3+WQIXXuH/rUhiAkwovgPi1ADuC1QECPSPiwfhK2GecnDm8hGg==} + engines: {node: '>=18'} + peerDependencies: + ai: ^5.0.0-beta.12 + zod: ^3.24.1 || ^v4 + '@opentelemetry/api-logs@0.57.2': resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} engines: {node: '>=14'} @@ -7527,6 +7537,11 @@ snapshots: dependencies: '@openpanel/sdk': 1.0.0 + '@openrouter/ai-sdk-provider@1.0.0-beta.6(ai@5.0.0(zod@4.0.14))(zod@4.0.14)': + dependencies: + ai: 5.0.0(zod@4.0.14) + zod: 4.0.14 + '@opentelemetry/api-logs@0.57.2': dependencies: '@opentelemetry/api': 1.9.0 diff --git a/src/ai/text/components/url-input-form.tsx b/src/ai/text/components/url-input-form.tsx index 208b436..504d7de 100644 --- a/src/ai/text/components/url-input-form.tsx +++ b/src/ai/text/components/url-input-form.tsx @@ -164,6 +164,7 @@ export function UrlInputForm({ OpenAI GPT-4o Google Gemini DeepSeek + OpenRouter
diff --git a/src/ai/text/utils/web-content-analyzer-config.ts b/src/ai/text/utils/web-content-analyzer-config.ts index 221e1b2..83b183c 100644 --- a/src/ai/text/utils/web-content-analyzer-config.ts +++ b/src/ai/text/utils/web-content-analyzer-config.ts @@ -117,6 +117,13 @@ export const webContentAnalyzerConfig = { temperature: 0.1, maxTokens: 2000, }, + openrouter: { + model: 'openrouter/horizon-beta', + // model: 'x-ai/grok-3-beta', + // model: 'openai/gpt-4o-mini', + temperature: 0.1, + maxTokens: 2000, + }, } as const; /** diff --git a/src/ai/text/utils/web-content-analyzer.ts b/src/ai/text/utils/web-content-analyzer.ts index 72d2b7d..9e9e07b 100644 --- a/src/ai/text/utils/web-content-analyzer.ts +++ b/src/ai/text/utils/web-content-analyzer.ts @@ -97,9 +97,8 @@ export interface LoadingStatesProps { // URL Validation Schema export const urlSchema = z - .string() + .url() .min(1, 'URL is required') - .url('Please enter a valid URL') .refine( (url) => url.startsWith('http://') || url.startsWith('https://'), 'URL must start with http:// or https://' @@ -114,13 +113,13 @@ export const analysisResultsSchema = z.object({ pricing: z.string().default('Not specified'), useCases: z.array(z.string()).default([]), url: urlSchema, - analyzedAt: z.string().datetime(), + analyzedAt: z.iso.datetime(), }); // API Request Schema export const analyzeContentRequestSchema = z.object({ url: urlSchema, - modelProvider: z.enum(['openai', 'gemini', 'deepseek']), + modelProvider: z.enum(['openai', 'gemini', 'deepseek', 'openrouter']), }); // API Response Schema diff --git a/src/app/api/analyze-content/route.ts b/src/app/api/analyze-content/route.ts index 094d365..91db24e 100644 --- a/src/app/api/analyze-content/route.ts +++ b/src/app/api/analyze-content/route.ts @@ -23,6 +23,7 @@ import { createDeepSeek } from '@ai-sdk/deepseek'; import { createGoogleGenerativeAI } from '@ai-sdk/google'; import { createOpenAI } from '@ai-sdk/openai'; import FirecrawlApp from '@mendable/firecrawl-js'; +import { createOpenRouter } from '@openrouter/ai-sdk-provider'; import { generateObject } from 'ai'; import { type NextRequest, NextResponse } from 'next/server'; import { z } from 'zod'; @@ -230,6 +231,13 @@ async function analyzeContent( temperature = webContentAnalyzerConfig.deepseek.temperature; maxTokens = webContentAnalyzerConfig.deepseek.maxTokens; break; + case 'openrouter': + model = createOpenRouter({ + apiKey: process.env.OPENROUTER_API_KEY, + }).chat(webContentAnalyzerConfig.openrouter.model); + temperature = webContentAnalyzerConfig.openrouter.temperature; + maxTokens = webContentAnalyzerConfig.openrouter.maxTokens; + break; default: throw new WebContentAnalyzerError( ErrorType.VALIDATION,