From bb42817abb3db1ea4e66b464e472776bd8f8d916 Mon Sep 17 00:00:00 2001 From: Arpit Gupta Date: Fri, 3 Apr 2026 22:54:42 +0530 Subject: [PATCH] feat: elysia youtube poc with api-key docs and simplified typed client --- app/api/[...slug]/route.ts | 18 ++ app/api/agent-templates/favorites/route.ts | 32 -- app/api/youtube/channel-info/route.ts | 72 ----- components/Agents/useAgentToggleFavorite.ts | 5 +- .../ChannelInfo.tsx | 2 +- .../ChatInputYoutubeButtonPopover/index.tsx | 2 +- hooks/useYouTubeLoginSuccess.ts | 12 +- hooks/useYoutubeChannel.tsx | 5 +- hooks/useYoutubeStatus.ts | 8 +- lib/api/elysia/app.ts | 32 ++ lib/api/elysia/client.ts | 10 + lib/api/elysia/plugins/auth.ts | 45 +++ .../elysia/routes/agentTemplates/favorites.ts | 44 +++ lib/api/elysia/routes/agentTemplates/index.ts | 5 + lib/api/elysia/routes/index.ts | 5 + lib/api/elysia/routes/youtube/channelInfo.ts | 57 ++++ lib/api/elysia/routes/youtube/index.ts | 6 + lib/auth/getAccountIdFromPrivyToken.ts | 40 +++ .../getAccountIdFromApiKey.ts | 36 +++ lib/youtube/fetchYouTubeChannel.ts | 14 +- package.json | 4 + pnpm-lock.yaml | 295 ++++++++++++++---- types/AgentTemplates.ts | 2 - types/youtube.ts | 10 +- 24 files changed, 563 insertions(+), 198 deletions(-) create mode 100644 app/api/[...slug]/route.ts delete mode 100644 app/api/agent-templates/favorites/route.ts delete mode 100644 app/api/youtube/channel-info/route.ts create mode 100644 lib/api/elysia/app.ts create mode 100644 lib/api/elysia/client.ts create mode 100644 lib/api/elysia/plugins/auth.ts create mode 100644 lib/api/elysia/routes/agentTemplates/favorites.ts create mode 100644 lib/api/elysia/routes/agentTemplates/index.ts create mode 100644 lib/api/elysia/routes/index.ts create mode 100644 lib/api/elysia/routes/youtube/channelInfo.ts create mode 100644 lib/api/elysia/routes/youtube/index.ts create mode 100644 lib/auth/getAccountIdFromPrivyToken.ts create mode 100644 lib/supabase/account_api_keys/getAccountIdFromApiKey.ts diff --git a/app/api/[...slug]/route.ts b/app/api/[...slug]/route.ts new file mode 100644 index 000000000..9eaf367c3 --- /dev/null +++ b/app/api/[...slug]/route.ts @@ -0,0 +1,18 @@ +import { NextRequest } from "next/server"; +import { elysiaApi } from "@/lib/api/elysia/app"; + +async function handle(request: NextRequest): Promise { + return elysiaApi.handle(request); +} + +export const GET = handle; +export const POST = handle; +export const PUT = handle; +export const PATCH = handle; +export const DELETE = handle; +export const HEAD = handle; +export const OPTIONS = handle; + +export const dynamic = "force-dynamic"; +export const fetchCache = "force-no-store"; +export const revalidate = 0; diff --git a/app/api/agent-templates/favorites/route.ts b/app/api/agent-templates/favorites/route.ts deleted file mode 100644 index d1fb81729..000000000 --- a/app/api/agent-templates/favorites/route.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { NextResponse } from "next/server"; -import { addAgentTemplateFavorite } from "@/lib/supabase/agent_templates/addAgentTemplateFavorite"; -import { removeAgentTemplateFavorite } from "@/lib/supabase/agent_templates/removeAgentTemplateFavorite"; -import type { ToggleFavoriteRequest, ToggleFavoriteResponse } from "@/types/AgentTemplates"; - -export const runtime = "edge"; - -export async function POST(request: Request) { - try { - const { templateId, userId, isFavourite }: ToggleFavoriteRequest = await request.json(); - - if (!templateId || !userId) { - return NextResponse.json({ error: "Missing templateId or userId" }, { status: 400 }); - } - - if (isFavourite) { - await addAgentTemplateFavorite(templateId, userId); - } else { - await removeAgentTemplateFavorite(templateId, userId); - } - - return NextResponse.json({ success: true } as ToggleFavoriteResponse); - } catch (error) { - console.error("Error toggling favourite:", error); - return NextResponse.json({ error: "Failed to toggle favourite" } as ToggleFavoriteResponse, { status: 500 }); - } -} - -export const dynamic = "force-dynamic"; -export const revalidate = 0; - - diff --git a/app/api/youtube/channel-info/route.ts b/app/api/youtube/channel-info/route.ts deleted file mode 100644 index f6402a448..000000000 --- a/app/api/youtube/channel-info/route.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { validateYouTubeTokens } from "@/lib/youtube/token-validator"; -import { fetchYouTubeChannelInfo } from "@/lib/youtube/channel-fetcher"; - -export async function GET(request: NextRequest) { - try { - const { searchParams } = new URL(request.url); - const artistAccountId = searchParams.get("artist_account_id"); - - if (!artistAccountId) { - return NextResponse.json( - { - success: false, - error: "Missing artist_account_id parameter", - tokenStatus: "missing_param" - }, - { status: 400 } - ); - } - - const tokenValidation = await validateYouTubeTokens(artistAccountId); - if (!tokenValidation.success) { - return NextResponse.json( - { - success: false, - error: "YouTube authentication required", - tokenStatus: "invalid", - channels: null - }, - { status: 200 } - ); - } - - // Fetch channel information - const channelResult = await fetchYouTubeChannelInfo({ - accessToken: tokenValidation.tokens!.access_token, - refreshToken: tokenValidation.tokens!.refresh_token || "", - includeBranding: true, - }); - - if (!channelResult.success) { - return NextResponse.json( - { - success: false, - error: channelResult.error!.message, - tokenStatus: "api_error", - channels: null - }, - { status: 200 } - ); - } - - return NextResponse.json({ - success: true, - channels: channelResult.channelData, - tokenStatus: "valid" - }); - } catch (error) { - console.error("❌ Error in YouTube channel info API:", error); - - return NextResponse.json( - { - success: false, - error: "Failed to fetch YouTube channel information", - details: error instanceof Error ? error.message : "Unknown error", - tokenStatus: "error", - channels: null - }, - { status: 200 } // Return 200 so frontend can parse the response - ); - } -} diff --git a/components/Agents/useAgentToggleFavorite.ts b/components/Agents/useAgentToggleFavorite.ts index 0d87717b1..ebab8b6cb 100644 --- a/components/Agents/useAgentToggleFavorite.ts +++ b/components/Agents/useAgentToggleFavorite.ts @@ -1,22 +1,19 @@ -import { useUserProvider } from "@/providers/UserProvder"; import { useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import type { ToggleFavoriteRequest } from "@/types/AgentTemplates"; export function useAgentToggleFavorite() { - const { userData } = useUserProvider(); const queryClient = useQueryClient(); const handleToggleFavorite = async ( templateId: string, nextFavourite: boolean ) => { - if (!userData?.id || !templateId) return; + if (!templateId) return; try { const body: ToggleFavoriteRequest = { templateId, - userId: userData.id, isFavourite: nextFavourite, }; const res = await fetch("/api/agent-templates/favorites", { diff --git a/components/ArtistSetting/StandaloneYoutubeComponent/ChannelInfo.tsx b/components/ArtistSetting/StandaloneYoutubeComponent/ChannelInfo.tsx index 21c09eedd..e21248904 100644 --- a/components/ArtistSetting/StandaloneYoutubeComponent/ChannelInfo.tsx +++ b/components/ArtistSetting/StandaloneYoutubeComponent/ChannelInfo.tsx @@ -6,7 +6,7 @@ import { Youtube } from "lucide-react"; const ChannelInfo = ({ dense, artistAccountId }: { dense?: boolean; artistAccountId: string }) => { const { data, isLoading } = useYoutubeChannel(artistAccountId); - const channel = data?.channels?.[0]; + const channel = data?.[0]; return (
diff --git a/components/YouTube/ChatInputYoutubeButtonPopover/index.tsx b/components/YouTube/ChatInputYoutubeButtonPopover/index.tsx index d35f034ad..fa383af78 100644 --- a/components/YouTube/ChatInputYoutubeButtonPopover/index.tsx +++ b/components/YouTube/ChatInputYoutubeButtonPopover/index.tsx @@ -14,7 +14,7 @@ const ChatInputYoutubeButtonPopover = ({ children, artistAccountId }: { children const { data: channelInfo, isLoading: isChannelInfoLoading } = useYoutubeChannel(artistAccountId); const isMobile = useIsMobile(); const [isOpen, setIsOpen] = useState(false); - const channel = channelInfo?.channels?.[0]; + const channel = channelInfo?.[0]; if (youtubeStatus?.status === "invalid" || isLoading || isChannelInfoLoading) { return children; diff --git a/hooks/useYouTubeLoginSuccess.ts b/hooks/useYouTubeLoginSuccess.ts index 9be2098f5..5ecbe9269 100644 --- a/hooks/useYouTubeLoginSuccess.ts +++ b/hooks/useYouTubeLoginSuccess.ts @@ -45,8 +45,10 @@ export function useYouTubeLoginSuccess() { hasCheckedOAuth.current = true; if (selectedArtist?.account_id) { - fetchYouTubeChannel(selectedArtist.account_id).then((youtubeChannel) => { - if (youtubeChannel.success) { + const checkYouTubeConnection = async () => { + try { + await fetchYouTubeChannel(selectedArtist.account_id); + const successMessage = { id: generateUUID(), role: "user" as const, @@ -59,8 +61,12 @@ export function useYouTubeLoginSuccess() { } as UIMessage; append(successMessage); + } catch { + // Ignore auth/check errors here; normal flow continues. } - }); + }; + + void checkYouTubeConnection(); } }, [messages, append, selectedArtist?.account_id]); } diff --git a/hooks/useYoutubeChannel.tsx b/hooks/useYoutubeChannel.tsx index 36d8426cb..09af921d1 100644 --- a/hooks/useYoutubeChannel.tsx +++ b/hooks/useYoutubeChannel.tsx @@ -1,9 +1,8 @@ -import fetchYouTubeChannel from "@/lib/youtube/fetchYouTubeChannel"; -import { YouTubeChannelResponse } from "@/types/youtube"; import { useQuery } from "@tanstack/react-query"; +import fetchYouTubeChannel from "@/lib/youtube/fetchYouTubeChannel"; const useYoutubeChannel = (artistAccountId: string) => { - return useQuery({ + return useQuery({ queryKey: ["youtube-channel-info", artistAccountId], queryFn: () => fetchYouTubeChannel(artistAccountId), enabled: !!artistAccountId, // Only run query if artistAccountId is provided diff --git a/hooks/useYoutubeStatus.ts b/hooks/useYoutubeStatus.ts index 0299f29da..65bd8b9fe 100644 --- a/hooks/useYoutubeStatus.ts +++ b/hooks/useYoutubeStatus.ts @@ -13,10 +13,8 @@ const useYoutubeStatus = (artistAccountId?: string) => { status: (() => { if (error) return "error"; if (isLoading) return "invalid"; - if (channelResponse) { - return channelResponse.tokenStatus === "valid" - ? "valid" - : "invalid"; + if (Array.isArray(channelResponse) && channelResponse.length > 0) { + return "valid"; } return "invalid"; })(), @@ -27,7 +25,7 @@ const useYoutubeStatus = (artistAccountId?: string) => { return { data, isLoading, - error: null, + error: error ?? null, } as YoutubeStatus; }; diff --git a/lib/api/elysia/app.ts b/lib/api/elysia/app.ts new file mode 100644 index 000000000..310c06de3 --- /dev/null +++ b/lib/api/elysia/app.ts @@ -0,0 +1,32 @@ +import { Elysia } from "elysia"; +import { openapi } from "@elysiajs/openapi"; +import { authPlugin } from "@/lib/api/elysia/plugins/auth"; +import { elysiaRoutes } from "@/lib/api/elysia/routes"; + +export const elysiaApi = new Elysia({ prefix: "/api" }) + .use( + openapi({ + path: "/openapi", + specPath: "/openapi/json", + provider: "scalar", + documentation: { + info: { + title: "Recoupable Chat API (Elysia POC)", + version: "0.1.0", + }, + components: { + securitySchemes: { + apiKeyAuth: { + type: "apiKey", + in: "header", + name: "x-api-key", + }, + }, + }, + }, + }), + ) + .use(authPlugin) + .use(elysiaRoutes); + +export type ElysiaApi = typeof elysiaApi; diff --git a/lib/api/elysia/client.ts b/lib/api/elysia/client.ts new file mode 100644 index 000000000..22b9e1780 --- /dev/null +++ b/lib/api/elysia/client.ts @@ -0,0 +1,10 @@ +import { treaty } from "@elysiajs/eden"; +import type { ElysiaApi } from "@/lib/api/elysia/app"; + +const client = treaty("", { + fetch: { + credentials: "include", + }, +}); + +export const api = client.api; diff --git a/lib/api/elysia/plugins/auth.ts b/lib/api/elysia/plugins/auth.ts new file mode 100644 index 000000000..0db180eb1 --- /dev/null +++ b/lib/api/elysia/plugins/auth.ts @@ -0,0 +1,45 @@ +import { Elysia } from "elysia"; +import { getAccountIdFromPrivyToken } from "@/lib/auth/getAccountIdFromPrivyToken"; +import { getAccountIdFromApiKey } from "@/lib/supabase/account_api_keys/getAccountIdFromApiKey"; + +export const authPlugin = new Elysia({ name: "auth-plugin" }) + .derive({as: "global"}, async ({ cookie, request }) => { + const apiKey = request.headers.get("x-api-key"); + const privyToken = cookie["privy-token"].value as string; + + let user: { userId: string; identifier: string } | null = null; + + if (apiKey) { + try { + user = { + userId: await getAccountIdFromApiKey(apiKey), + identifier: apiKey, + }; + } catch (error) { + console.error("Elysia auth apiKey validation failed:", error); + } + } else if (privyToken) { + try { + const accountId = await getAccountIdFromPrivyToken(privyToken); + if (accountId) { + user = { + userId: accountId, + identifier: privyToken, + }; + } + } catch (error) { + console.error("Elysia auth privyToken validation failed:", error); + } + } + + return { user }; + }) + .macro({ + auth: { + beforeHandle({ user, status }) { + if (!user) { + return status(401, "Authentication required"); + } + }, + }, + }); diff --git a/lib/api/elysia/routes/agentTemplates/favorites.ts b/lib/api/elysia/routes/agentTemplates/favorites.ts new file mode 100644 index 000000000..ef433dd8f --- /dev/null +++ b/lib/api/elysia/routes/agentTemplates/favorites.ts @@ -0,0 +1,44 @@ +import { Elysia, t } from "elysia"; +import { addAgentTemplateFavorite } from "@/lib/supabase/agent_templates/addAgentTemplateFavorite"; +import { removeAgentTemplateFavorite } from "@/lib/supabase/agent_templates/removeAgentTemplateFavorite"; + +const errorResponseSchema = t.String(); + +export const agentTemplateFavoritesRoute = new Elysia().post( + "/favorites", + async ({body, status, user}) => { + try { + if (body.isFavourite) { + await addAgentTemplateFavorite(body.templateId, user.userId); + } else { + await removeAgentTemplateFavorite(body.templateId, user.userId); + } + + return { success: true as const }; + } catch (error) { + console.error("Error toggling favourite:", error); + return status(500, "Failed to toggle favourite"); + } + }, + { + auth: true, + body: t.Object({ + templateId: t.String(), + isFavourite: t.Boolean(), + }), + response: { + 200: t.Object({ + success: t.Literal(true), + }), + 401: errorResponseSchema, + 500: errorResponseSchema, + }, + detail: { + summary: "Toggle agent template favorite", + description: + "Adds or removes a template favorite for the authenticated user.", + tags: ["agent-templates"], + security: [{ apiKeyAuth: [] }], + }, + }, +); diff --git a/lib/api/elysia/routes/agentTemplates/index.ts b/lib/api/elysia/routes/agentTemplates/index.ts new file mode 100644 index 000000000..637dd0e54 --- /dev/null +++ b/lib/api/elysia/routes/agentTemplates/index.ts @@ -0,0 +1,5 @@ +import { Elysia } from "elysia"; +import { agentTemplateFavoritesRoute } from "@/lib/api/elysia/routes/agentTemplates/favorites"; + +export const agentTemplateRoutes = new Elysia({ prefix: "/agent-templates" }) + .use(agentTemplateFavoritesRoute); diff --git a/lib/api/elysia/routes/index.ts b/lib/api/elysia/routes/index.ts new file mode 100644 index 000000000..586e06253 --- /dev/null +++ b/lib/api/elysia/routes/index.ts @@ -0,0 +1,5 @@ +import { Elysia } from "elysia"; +import { agentTemplateRoutes } from "@/lib/api/elysia/routes/agentTemplates"; +import { youtubeRoutes } from "@/lib/api/elysia/routes/youtube"; + +export const elysiaRoutes = new Elysia().use(youtubeRoutes).use(agentTemplateRoutes); diff --git a/lib/api/elysia/routes/youtube/channelInfo.ts b/lib/api/elysia/routes/youtube/channelInfo.ts new file mode 100644 index 000000000..d1d90eaa7 --- /dev/null +++ b/lib/api/elysia/routes/youtube/channelInfo.ts @@ -0,0 +1,57 @@ +import { Elysia, t } from "elysia"; +import { fetchYouTubeChannelInfo } from "@/lib/youtube/channel-fetcher"; +import { validateYouTubeTokens } from "@/lib/youtube/token-validator"; + +const errorResponseSchema = t.String(); + +export const youtubeChannelInfoRoute = new Elysia().get( + "/channel-info", + async ({ query, status }) => { + try { + const tokenValidation = await validateYouTubeTokens(query.artist_account_id); + + if (!tokenValidation.success || !tokenValidation.tokens) { + return status(403, "YouTube authentication required"); + } + + const channelResult = await fetchYouTubeChannelInfo({ + accessToken: tokenValidation.tokens.access_token, + refreshToken: tokenValidation.tokens.refresh_token || "", + includeBranding: true, + }); + + if (!channelResult.success) { + return status(502, channelResult.error.message); + } + + return channelResult.channelData; + } catch (e) { + return status( + 500, + e instanceof Error + ? `Failed to fetch YouTube channel information: ${e.message}` + : "Failed to fetch YouTube channel information", + ); + } + }, + { + auth: true, + query: t.Object({ + artist_account_id: t.String(), + }), + response: { + 200: t.Array(t.Any()), + 401: errorResponseSchema, + 403: errorResponseSchema, + 502: errorResponseSchema, + 500: errorResponseSchema, + }, + detail: { + summary: "Get YouTube channel info for an artist account", + description: + "Returns authenticated YouTube channels for an artist account with validated credentials.", + tags: ["youtube"], + security: [{ apiKeyAuth: [] }], + }, + }, +); diff --git a/lib/api/elysia/routes/youtube/index.ts b/lib/api/elysia/routes/youtube/index.ts new file mode 100644 index 000000000..7c6bd9f52 --- /dev/null +++ b/lib/api/elysia/routes/youtube/index.ts @@ -0,0 +1,6 @@ +import { Elysia } from "elysia"; +import { youtubeChannelInfoRoute } from "@/lib/api/elysia/routes/youtube/channelInfo"; + +export const youtubeRoutes = new Elysia({ prefix: "/youtube" }).use( + youtubeChannelInfoRoute, +); diff --git a/lib/auth/getAccountIdFromPrivyToken.ts b/lib/auth/getAccountIdFromPrivyToken.ts new file mode 100644 index 000000000..1be524e67 --- /dev/null +++ b/lib/auth/getAccountIdFromPrivyToken.ts @@ -0,0 +1,40 @@ +import { PrivyClient } from "@privy-io/node"; +import getAccountDetailsByEmails from "@/lib/supabase/account_emails/getAccountDetailsByEmails"; + +const PRIVY_APP_ID = process.env.PRIVY_APP_ID || process.env.NEXT_PUBLIC_PRIVY_APP_ID; +const PRIVY_PROJECT_SECRET = process.env.PRIVY_PROJECT_SECRET; +const PRIVY_JWT_VERIFICATION_KEY = process.env.PRIVY_JWT_VERIFICATION_KEY; + +const privyClient = + PRIVY_APP_ID && PRIVY_PROJECT_SECRET && PRIVY_JWT_VERIFICATION_KEY + ? new PrivyClient({ + appId: PRIVY_APP_ID, + appSecret: PRIVY_PROJECT_SECRET, + jwtVerificationKey: Buffer.from(PRIVY_JWT_VERIFICATION_KEY, "base64").toString("utf8"), + }) + : null; + +export async function getAccountIdFromPrivyToken(privyToken: string): Promise { + if (!privyClient) { + throw new Error("Privy client is not configured"); + } + + const verified = await privyClient.utils().auth().verifyAccessToken(privyToken); + const privyUser = await privyClient.users()._get(verified.user_id); + const email = privyUser.linked_accounts?.find((account) => account.type === "email")?.address; + + if (!email) { + throw new Error("No email found in Privy user"); + } + + const accountDetails = await getAccountDetailsByEmails([email]); + const accountId = accountDetails[0]?.account_id; + + if (!accountId) { + throw new Error("No account found for Privy user email"); + } + + return accountId; +} + +export default getAccountIdFromPrivyToken; diff --git a/lib/supabase/account_api_keys/getAccountIdFromApiKey.ts b/lib/supabase/account_api_keys/getAccountIdFromApiKey.ts new file mode 100644 index 000000000..beb15dbff --- /dev/null +++ b/lib/supabase/account_api_keys/getAccountIdFromApiKey.ts @@ -0,0 +1,36 @@ +import { createHmac } from "crypto"; +import serverClient from "@/lib/supabase/serverClient"; + +const PRIVY_PROJECT_SECRET = process.env.PRIVY_PROJECT_SECRET; + +function hashApiKey(rawKey: string): string { + if (!PRIVY_PROJECT_SECRET) { + throw new Error("Missing PRIVY_PROJECT_SECRET"); + } + + return createHmac("sha256", PRIVY_PROJECT_SECRET).update(rawKey).digest("hex"); +} + +export async function getAccountIdFromApiKey(apiKey: string): Promise { + const keyHash = hashApiKey(apiKey); + + const { data, error } = await serverClient + .from("account_api_keys") + .select("account") + .eq("key_hash", keyHash) + .limit(1) + .maybeSingle(); + + if (error) { + throw new Error(`Failed API key lookup: ${error.message}`); + } + + const accountId = data?.account; + if (!accountId) { + throw new Error("No account found for API key"); + } + + return accountId; +} + +export default getAccountIdFromApiKey; diff --git a/lib/youtube/fetchYouTubeChannel.ts b/lib/youtube/fetchYouTubeChannel.ts index 571774718..3a864b47e 100644 --- a/lib/youtube/fetchYouTubeChannel.ts +++ b/lib/youtube/fetchYouTubeChannel.ts @@ -1,13 +1,15 @@ +import { api } from "@/lib/api/elysia/client"; + const fetchYouTubeChannel = async (artistAccountId: string) => { - const response = await fetch( - `/api/youtube/channel-info?artist_account_id=${artistAccountId}` - ); + const response = await api.youtube["channel-info"].get({ + query: { artist_account_id: artistAccountId }, + }); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); + if (response.error || !response.data) { + throw new Error("Failed to fetch YouTube channel information"); } - return response.json(); + return response.data; }; export default fetchYouTubeChannel; diff --git a/package.json b/package.json index 2fb0bb6c0..397fb45d5 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,15 @@ "@coinbase/onchainkit": "^0.38.8", "@composio/core": "^0.2.4", "@composio/vercel": "^0.2.16", + "@elysiajs/eden": "^1.4.9", + "@elysiajs/openapi": "^1.4.14", "@farcaster/frame-sdk": "^0.0.44", "@farcaster/frame-wagmi-connector": "^0.0.37", "@google/genai": "^1.24.0", "@hookform/resolvers": "^3.9.1", "@icons-pack/react-simple-icons": "^13.8.0", "@modelcontextprotocol/sdk": "^1.24.3", + "@privy-io/node": "^0.12.0", "@privy-io/react-auth": "^1.88.4", "@radix-ui/react-alert-dialog": "^1.1.15", "@radix-ui/react-avatar": "^1.1.3", @@ -64,6 +67,7 @@ "cronstrue": "^3.0.0", "date-fns": "^4.1.0", "dom-to-image": "^2.6.0", + "elysia": "^1.4.28", "embla-carousel-react": "^8.6.0", "export-to-csv": "^1.4.0", "framer-motion": "^11.18.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fb6ff9f9..80b1d997c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,16 +31,22 @@ importers: version: 2.5.4(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(react@19.2.1)(utf-8-validate@5.0.10)(zod@3.25.76) '@coinbase/cdp-sdk': specifier: ^1.4.0 - version: 1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@coinbase/onchainkit': specifier: ^0.38.8 - version: 0.38.19(@farcaster/miniapp-sdk@0.2.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 0.38.19(@farcaster/miniapp-sdk@0.2.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) '@composio/core': specifier: ^0.2.4 - version: 0.2.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 0.2.6(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) '@composio/vercel': specifier: ^0.2.16 - version: 0.2.18(@composio/core@0.2.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ai@6.0.0-beta.99(zod@3.25.76)) + version: 0.2.18(@composio/core@0.2.6(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ai@6.0.0-beta.99(zod@3.25.76)) + '@elysiajs/eden': + specifier: ^1.4.9 + version: 1.4.9(elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3)) + '@elysiajs/openapi': + specifier: ^1.4.14 + version: 1.4.14(elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3)) '@farcaster/frame-sdk': specifier: ^0.0.44 version: 0.0.44(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -59,6 +65,9 @@ importers: '@modelcontextprotocol/sdk': specifier: ^1.24.3 version: 1.24.3(zod@3.25.76) + '@privy-io/node': + specifier: ^0.12.0 + version: 0.12.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@privy-io/react-auth': specifier: ^1.88.4 version: 1.99.1(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bs58@6.0.0)(bufferutil@4.0.9)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(zod@3.25.76) @@ -161,6 +170,9 @@ importers: dom-to-image: specifier: ^2.6.0 version: 2.6.0 + elysia: + specifier: ^1.4.28 + version: 1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3) embla-carousel-react: specifier: ^8.6.0 version: 8.6.0(react@19.2.1) @@ -211,7 +223,7 @@ importers: version: 0.66.0(request@2.88.2) openai: specifier: ^4.67.3 - version: 4.104.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 4.104.0(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) papaparse: specifier: ^5.5.3 version: 5.5.3 @@ -298,10 +310,10 @@ importers: version: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) wagmi: specifier: ^2.15.4 - version: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) x402-mcp: specifier: ^0.1.1 - version: 0.1.1(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(ai@6.0.0-beta.99(zod@3.25.76))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + version: 0.1.1(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(ai@6.0.0-beta.99(zod@3.25.76))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: specifier: ^3.25.0 version: 3.25.76 @@ -1155,6 +1167,16 @@ packages: peerDependencies: '@noble/ciphers': ^1.0.0 + '@elysiajs/eden@1.4.9': + resolution: {integrity: sha512-3CKVD4ycVjB8nCNssfmhnUuq3SzSHkUES3v5PNCFr9LxIrx39/HVRAZ8z2sLxrFqzUs48dCBZaxoZzJ5UUVHDA==} + peerDependencies: + elysia: '>=1.4.19' + + '@elysiajs/openapi@1.4.14': + resolution: {integrity: sha512-kWmJWdvP8/LwHwAJXSpz6xFfYUoyUyEPRimEYABuDU1rOnS27Da1u9T2jyU7frOopxKWV/wDfDxMP8z2xdCPJw==} + peerDependencies: + elysia: '>= 1.4.0' + '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} @@ -1712,6 +1734,18 @@ packages: peerDependencies: react-hook-form: ^7.0.0 + '@hpke/chacha20poly1305@1.8.0': + resolution: {integrity: sha512-FcBfAQ+Y99vMNJP2yrZ9wpL8V0GOwp1+zMyzvc6alasrBygfFjFm1yeUtyADJCu/27C3Lm5mJzx6u7pwg+cX5w==} + engines: {node: '>=16.0.0'} + + '@hpke/common@1.10.1': + resolution: {integrity: sha512-moJwhmtLtuxiUzzNp1jpfBfx8yefKoO9D/RCR9dmwrnc7qjJqId1rEtQz+lSlU5cabX8daToMSx/7HayXOiaFw==} + engines: {node: '>=16.0.0'} + + '@hpke/core@1.9.0': + resolution: {integrity: sha512-pFxWl1nNJeQCSUFs7+GAblHvXBCjn9EPN65vdKlYQil2aURaRxfGMO6vBKGqm1YHTKwiAxJQNEI70PbSowMP9Q==} + engines: {node: '>=16.0.0'} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -2205,6 +2239,26 @@ packages: viem: optional: true + '@privy-io/node@0.12.0': + resolution: {integrity: sha512-s+zIXGQoaAahevWb5xj8NoFwfGJL2/N0rVaSoDTpSWfbzHNS8akZfkqE6iQME6yKCA4vaPZjy+TaGq8w7JaRLg==} + peerDependencies: + '@solana/kit': ^5.1.0 + '@x402/evm': ^2.3.0 + '@x402/fetch': ^2.3.0 + '@x402/svm': ^2.3.0 + viem: ^2.24.1 + peerDependenciesMeta: + '@solana/kit': + optional: true + '@x402/evm': + optional: true + '@x402/fetch': + optional: true + '@x402/svm': + optional: true + viem: + optional: true + '@privy-io/public-api@2.15.10': resolution: {integrity: sha512-MqD/XmHshFRBzchV6t23/mDla2tDAzANs7nlOidpkTyW4vpnIzUfJAVrEAijM6PpQfDiRY4PA0ul8eRiFXw69A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3051,6 +3105,9 @@ packages: resolution: {integrity: sha512-tGSRP1QvsAvsJmnOlRQyw/mvK9gnPtjEc5fg2+m8n+QUa+D7rvrKkOYyfpy42GTs90X3RDOnqJgfHt+qO67/+w==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + '@sinclair/typebox@0.34.49': + resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -3351,6 +3408,9 @@ packages: '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@stablelib/base64@1.0.1': + resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} + '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} @@ -4747,6 +4807,10 @@ packages: caniuse-lite@1.0.30001759: resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==} + canonicalize@2.1.0: + resolution: {integrity: sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==} + hasBin: true + canvg@3.0.11: resolution: {integrity: sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==} engines: {node: '>=10.0.0'} @@ -4928,6 +4992,10 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + core-js-compat@3.47.0: resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} @@ -5383,6 +5451,21 @@ packages: elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + elysia@1.4.28: + resolution: {integrity: sha512-Vrx8sBnvq8squS/3yNBzR1jBXI+SgmnmvwawPjNuEHndUe5l1jV2Gp6JJ4ulDkEB8On6bWmmuyPpA+bq4t+WYg==} + peerDependencies: + '@sinclair/typebox': '>= 0.34.0 < 1' + '@types/bun': '>= 1.2.0' + exact-mirror: '>= 0.0.9' + file-type: '>= 20.0.0' + openapi-types: '>= 12.0.0' + typescript: '>= 5.0.0' + peerDependenciesMeta: + '@types/bun': + optional: true + typescript: + optional: true + embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} peerDependencies: @@ -5727,6 +5810,14 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + exact-mirror@0.2.7: + resolution: {integrity: sha512-+MeEmDcLA4o/vjK2zujgk+1VTxPR4hdp23qLqkWfStbECtAq9gmsvQa3LW6z/0GXZyHJobrCnmy1cdeE7BjsYg==} + peerDependencies: + '@sinclair/typebox': ^0.34.15 + peerDependenciesMeta: + '@sinclair/typebox': + optional: true + expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} @@ -5769,6 +5860,9 @@ packages: fast-copy@4.0.0: resolution: {integrity: sha512-/oA0gx1xyXE9R2YlV4FXwZJXngFdm9Du0zN8FhY38jnLkhp1u35h6bCyKgRhlsA6C9I+1vfXE4KISdt7xc6M9w==} + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -5795,6 +5889,9 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-sha256@1.3.0: + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} @@ -6988,6 +7085,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -7102,6 +7203,9 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} + memoirist@0.4.0: + resolution: {integrity: sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg==} + merge-descriptors@2.0.0: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} @@ -7551,6 +7655,9 @@ packages: openapi-fetch@0.13.8: resolution: {integrity: sha512-yJ4QKRyNxE44baQ9mY5+r/kAzZ8yXMemtNAOFwOzRXJscdjSxxzWSNlyBAr+o5JjkUw9Lc3W7OIoca0cY3PYnQ==} + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + openapi-typescript-helpers@0.0.15: resolution: {integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==} @@ -8579,6 +8686,9 @@ packages: resolution: {integrity: sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==} engines: {node: '>=0.1.14'} + standardwebhooks@1.0.0: + resolution: {integrity: sha512-BbHGOQK9olHPMvQNHWul6MYlrRTAOKn03rOe4A8O3CLWhNf4YHBqq2HJKKC+sfqpxiBY52pNeesD6jIiLDz8jg==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -8762,6 +8872,9 @@ packages: resolution: {integrity: sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==} engines: {node: '>=12.0.0'} + svix@1.89.0: + resolution: {integrity: sha512-Yg/5OtdjN3zjWoQSoX+mkauUtLKiW/+DQWKcG2VaEfWoBBB9NmZoKMw7rQQVU5Nn/Wko3kNbo4cvo/ms48d2KQ==} + swiper@11.2.10: resolution: {integrity: sha512-RMeVUUjTQH+6N3ckimK93oxz6Sn5la4aDlgPzB+rBrG/smPdCTicXyhxa+woIpopz+jewEloiEE3lKo1h9w2YQ==} engines: {node: '>= 4.7.0'} @@ -10737,9 +10850,9 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-org/account@2.4.0(@types/react@18.3.27)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@base-org/account@2.4.0(@types/react@18.3.27)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': dependencies: - '@coinbase/cdp-sdk': 1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@coinbase/cdp-sdk': 1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@noble/hashes': 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 @@ -10834,11 +10947,11 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@coinbase/cdp-sdk@1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@coinbase/cdp-sdk@1.39.0(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: - '@solana-program/system': 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana-program/token': 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana-program/system': 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana-program/token': 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10) abitype: 1.0.6(typescript@5.9.3)(zod@3.25.76) axios: 1.13.2 @@ -10857,7 +10970,7 @@ snapshots: - utf-8-validate - ws - '@coinbase/onchainkit@0.38.19(@farcaster/miniapp-sdk@0.2.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@coinbase/onchainkit@0.38.19(@farcaster/miniapp-sdk@0.2.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': dependencies: '@farcaster/frame-sdk': 0.1.12(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@farcaster/miniapp-wagmi-connector': 1.1.0(@farcaster/miniapp-sdk@0.2.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(@wagmi/core@2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -10871,7 +10984,7 @@ snapshots: react-dom: 19.2.1(react@19.2.1) tailwind-merge: 2.6.0 viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10956,13 +11069,13 @@ snapshots: '@composio/client@0.1.0-alpha.40': {} - '@composio/core@0.2.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': + '@composio/core@0.2.6(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)': dependencies: '@composio/client': 0.1.0-alpha.40 '@composio/json-schema-to-zod': 0.1.19(zod@3.25.76) '@types/json-schema': 7.0.15 chalk: 4.1.2 - openai: 5.23.2(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + openai: 5.23.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) pusher-js: 8.4.0 semver: 7.7.3 uuid: 13.0.0 @@ -10975,9 +11088,9 @@ snapshots: dependencies: zod: 3.25.76 - '@composio/vercel@0.2.18(@composio/core@0.2.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ai@6.0.0-beta.99(zod@3.25.76))': + '@composio/vercel@0.2.18(@composio/core@0.2.6(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ai@6.0.0-beta.99(zod@3.25.76))': dependencies: - '@composio/core': 0.2.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + '@composio/core': 0.2.6(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) ai: 6.0.0-beta.99(zod@3.25.76) '@crawlee/types@3.15.3': @@ -11019,6 +11132,14 @@ snapshots: dependencies: '@noble/ciphers': 1.3.0 + '@elysiajs/eden@1.4.9(elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3))': + dependencies: + elysia: 1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3) + + '@elysiajs/openapi@1.4.14(elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3))': + dependencies: + elysia: 1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3) + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -11656,6 +11777,16 @@ snapshots: dependencies: react-hook-form: 7.68.0(react@19.2.1) + '@hpke/chacha20poly1305@1.8.0': + dependencies: + '@hpke/common': 1.10.1 + + '@hpke/common@1.10.1': {} + + '@hpke/core@1.9.0': + dependencies: + '@hpke/common': 1.10.1 + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -12241,6 +12372,21 @@ snapshots: - bufferutil - utf-8-validate + '@privy-io/node@0.12.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + dependencies: + '@hpke/chacha20poly1305': 1.8.0 + '@hpke/core': 1.9.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + canonicalize: 2.1.0 + jose: 6.1.3 + lru-cache: 11.2.7 + svix: 1.89.0 + optionalDependencies: + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@privy-io/public-api@2.15.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@privy-io/api-base': 1.4.1 @@ -13620,17 +13766,19 @@ snapshots: '@simplewebauthn/types@9.0.1': {} + '@sinclair/typebox@0.34.49': {} + '@sindresorhus/is@4.6.0': {} '@socket.io/component-emitter@3.1.2': {} - '@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + '@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': dependencies: - '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/kit': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/accounts@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)': dependencies: @@ -13760,7 +13908,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/accounts': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -13774,11 +13922,11 @@ snapshots: '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-parsed-types': 3.0.3(typescript@5.9.3) '@solana/rpc-spec-types': 3.0.3(typescript@5.9.3) - '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/signers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/sysvars': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/transaction-confirmation': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/transaction-confirmation': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) typescript: 5.9.3 @@ -13857,14 +14005,14 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 3.0.3(typescript@5.9.3) '@solana/functional': 3.0.3(typescript@5.9.3) '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.9.3) '@solana/subscribable': 3.0.3(typescript@5.9.3) typescript: 5.9.3 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@solana/rpc-subscriptions-spec@3.0.3(typescript@5.9.3)': dependencies: @@ -13874,7 +14022,7 @@ snapshots: '@solana/subscribable': 3.0.3(typescript@5.9.3) typescript: 5.9.3 - '@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/errors': 3.0.3(typescript@5.9.3) '@solana/fast-stable-stringify': 3.0.3(typescript@5.9.3) @@ -13882,7 +14030,7 @@ snapshots: '@solana/promises': 3.0.3(typescript@5.9.3) '@solana/rpc-spec-types': 3.0.3(typescript@5.9.3) '@solana/rpc-subscriptions-api': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-subscriptions-channel-websocket': 3.0.3(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions-channel-websocket': 3.0.3(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-subscriptions-spec': 3.0.3(typescript@5.9.3) '@solana/rpc-transformers': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -13967,7 +14115,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - '@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))': + '@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@solana/addresses': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/codecs-strings': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -13975,7 +14123,7 @@ snapshots: '@solana/keys': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/promises': 3.0.3(typescript@5.9.3) '@solana/rpc': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@solana/rpc-subscriptions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) '@solana/rpc-types': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/transaction-messages': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) '@solana/transactions': 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -14087,6 +14235,8 @@ snapshots: - typescript - utf-8-validate + '@stablelib/base64@1.0.1': {} + '@standard-schema/spec@1.0.0': {} '@storybook/global@5.0.0': {} @@ -14841,9 +14991,9 @@ snapshots: '@vitest/pretty-format': 4.0.15 tinyrainbow: 3.0.3 - '@wagmi/connectors@6.2.0(34c7fdd01b715715548043cbba06572f)': + '@wagmi/connectors@6.2.0(70ad7647487a1cac42bd1bf7644ccd60)': dependencies: - '@base-org/account': 2.4.0(@types/react@18.3.27)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + '@base-org/account': 2.4.0(@types/react@18.3.27)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.27)(bufferutil@4.0.9)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(utf-8-validate@5.0.10)(zod@3.25.76) '@gemini-wallet/core': 0.3.2(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@metamask/sdk': 0.33.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -14852,7 +15002,7 @@ snapshots: '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + porto: 0.2.35(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.3 @@ -16512,6 +16662,8 @@ snapshots: caniuse-lite@1.0.30001759: {} + canonicalize@2.1.0: {} + canvg@3.0.11: dependencies: '@babel/runtime': 7.28.4 @@ -16658,6 +16810,8 @@ snapshots: cookie@0.7.2: {} + cookie@1.1.1: {} + core-js-compat@3.47.0: dependencies: browserslist: 4.28.1 @@ -17122,6 +17276,18 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + elysia@1.4.28(@sinclair/typebox@0.34.49)(exact-mirror@0.2.7(@sinclair/typebox@0.34.49))(file-type@3.9.0)(openapi-types@12.1.3)(typescript@5.9.3): + dependencies: + '@sinclair/typebox': 0.34.49 + cookie: 1.1.1 + exact-mirror: 0.2.7(@sinclair/typebox@0.34.49) + fast-decode-uri-component: 1.0.1 + file-type: 3.9.0 + memoirist: 0.4.0 + openapi-types: 12.1.3 + optionalDependencies: + typescript: 5.9.3 + embla-carousel-react@8.6.0(react@19.2.1): dependencies: embla-carousel: 8.6.0 @@ -17710,6 +17876,10 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + exact-mirror@0.2.7(@sinclair/typebox@0.34.49): + optionalDependencies: + '@sinclair/typebox': 0.34.49 + expect-type@1.2.2: {} export-to-csv@1.4.0: {} @@ -17770,6 +17940,8 @@ snapshots: fast-copy@4.0.0: {} + fast-decode-uri-component@1.0.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -17796,6 +17968,8 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-sha256@1.3.0: {} + fast-stable-stringify@1.0.0: {} fast-uri@3.1.0: {} @@ -19128,6 +19302,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.7: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -19357,6 +19533,8 @@ snapshots: media-typer@1.1.0: {} + memoirist@0.4.0: {} + merge-descriptors@2.0.0: {} merge-stream@2.0.0: {} @@ -19911,21 +20089,6 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - openai@4.104.0(encoding@0.1.13)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): - dependencies: - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0(encoding@0.1.13) - optionalDependencies: - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) - zod: 3.25.76 - transitivePeerDependencies: - - encoding - openai@4.104.0(encoding@0.1.13)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): dependencies: '@types/node': 18.19.130 @@ -19941,15 +20104,17 @@ snapshots: transitivePeerDependencies: - encoding - openai@5.23.2(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): + openai@5.23.2(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): optionalDependencies: - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.76 openapi-fetch@0.13.8: dependencies: openapi-typescript-helpers: 0.0.15 + openapi-types@12.1.3: {} + openapi-typescript-helpers@0.0.15: {} optionator@0.9.4: @@ -20318,7 +20483,7 @@ snapshots: pony-cause@2.1.11: {} - porto@0.2.35(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)): dependencies: '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.10.7 @@ -20332,7 +20497,7 @@ snapshots: '@tanstack/react-query': 5.90.12(react@19.2.1) react: 19.2.1 typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -21248,6 +21413,11 @@ snapshots: stackblur-canvas@2.7.0: optional: true + standardwebhooks@1.0.0: + dependencies: + '@stablelib/base64': 1.0.1 + fast-sha256: 1.3.0 + statuses@2.0.2: {} std-env@3.10.0: {} @@ -21488,6 +21658,11 @@ snapshots: svg-pathdata@6.0.3: optional: true + svix@1.89.0: + dependencies: + standardwebhooks: 1.0.0 + uuid: 10.0.0 + swiper@11.2.10: {} swr@2.3.7(react@19.2.1): @@ -22116,10 +22291,10 @@ snapshots: vscode-uri@3.0.8: {} - wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.90.12(react@19.2.1) - '@wagmi/connectors': 6.2.0(34c7fdd01b715715548043cbba06572f) + '@wagmi/connectors': 6.2.0(70ad7647487a1cac42bd1bf7644ccd60) '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.12)(@types/react@18.3.27)(react@19.2.1)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.2.1))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) react: 19.2.1 use-sync-external-store: 1.4.0(react@19.2.1) @@ -22564,13 +22739,13 @@ snapshots: bufferutil: 4.0.9 utf-8-validate: 5.0.10 - x402-mcp@0.1.1(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(ai@6.0.0-beta.99(zod@3.25.76))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402-mcp@0.1.1(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(ai@6.0.0-beta.99(zod@3.25.76))(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: '@modelcontextprotocol/sdk': 1.24.3(zod@3.25.76) ai: 6.0.0-beta.99(zod@3.25.76) mcp-handler: 1.0.4(@modelcontextprotocol/sdk@1.24.3(zod@3.25.76))(next@16.0.10(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)) viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - x402: 0.5.3(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + x402: 0.5.3(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -22612,10 +22787,10 @@ snapshots: - utf-8-validate - ws - x402@0.5.3(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + x402@0.5.3(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.1))(@types/react@18.3.27)(@vercel/blob@2.3.2)(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.2.1)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' diff --git a/types/AgentTemplates.ts b/types/AgentTemplates.ts index bc082a211..9a6efa798 100644 --- a/types/AgentTemplates.ts +++ b/types/AgentTemplates.ts @@ -1,6 +1,5 @@ export type ToggleFavoriteRequest = { templateId: string; - userId: string; isFavourite: boolean; }; @@ -28,4 +27,3 @@ export type AgentTemplateRow = { shared_emails?: string[]; }; - diff --git a/types/youtube.ts b/types/youtube.ts index 777feb4f9..9ca817594 100644 --- a/types/youtube.ts +++ b/types/youtube.ts @@ -301,14 +301,6 @@ export type YouTubeChannelVideoListResult = { videos: YouTubeVideo[]; }; -export interface YouTubeChannelResponse { - success: boolean; - channels: any[] | null; - tokenStatus: "valid" | "invalid" | "missing_param" | "api_error" | "error"; - error?: string; - details?: string; -} - export interface YoutubeStatus { data: { status: "valid" | "invalid" | "error"; @@ -317,4 +309,4 @@ export interface YoutubeStatus { }; isLoading: boolean; error: Error | null; -} \ No newline at end of file +}