From cf6bfbc6ebcd581ce14d9b670cb4c314ac26bb66 Mon Sep 17 00:00:00 2001 From: "Mr. Algorithm" <11aravipratapsingh@gmail.com> Date: Sat, 4 Oct 2025 00:52:13 +0530 Subject: [PATCH] implement auth logic --- app/(auth)/layout.tsx | 12 +- app/(auth)/sign-in/page.tsx | 55 +- app/(auth)/sign-up/page.tsx | 60 +- app/(root)/layout.tsx | 22 +- app/api/inngest/route.ts | 8 + app/globals.css | 26 +- app/layout.tsx | 12 +- components/Header.tsx | 8 +- components/NavItems.tsx | 2 +- components/UserDropdown.tsx | 26 +- components/forms/CountrySelectField.tsx | 2 +- components/ui/sonner.tsx | 25 + database/mongoose.ts | 1 + lib/actions/auth.actions.ts | 43 + lib/better-auth/auth.ts | 41 + lib/inngest/client.ts | 6 + lib/inngest/functions.ts | 48 + lib/inngest/prompts.ts | 230 ++ lib/nodemailer/index.ts | 28 + lib/nodemailer/templates.ts | 1110 ++++++ middleware/index.ts | 19 + package-lock.json | 4108 ++++++++++++++++++++++- package.json | 6 + public/assets/images/logo.png | Bin 2237 -> 41711 bytes 24 files changed, 5782 insertions(+), 116 deletions(-) create mode 100644 app/api/inngest/route.ts create mode 100644 components/ui/sonner.tsx create mode 100644 lib/actions/auth.actions.ts create mode 100644 lib/better-auth/auth.ts create mode 100644 lib/inngest/client.ts create mode 100644 lib/inngest/functions.ts create mode 100644 lib/inngest/prompts.ts create mode 100644 lib/nodemailer/index.ts create mode 100644 lib/nodemailer/templates.ts create mode 100644 middleware/index.ts diff --git a/app/(auth)/layout.tsx b/app/(auth)/layout.tsx index ace22fd..669877e 100644 --- a/app/(auth)/layout.tsx +++ b/app/(auth)/layout.tsx @@ -1,12 +1,20 @@ import Link from "next/link"; import React from "react"; import Image from "next/image"; +import {headers} from "next/headers"; +import {redirect} from "next/navigation"; +import {auth} from "@/lib/better-auth/auth"; -const Layout = ({ children }: { children : React.ReactNode }) => { +const Layout = async ({ children }: { children : React.ReactNode }) => { + + const session = await auth.api.getSession({headers: await headers()}); + + if (session?.user) redirect('/') return (
- + +

OpenStock

diff --git a/app/(auth)/sign-in/page.tsx b/app/(auth)/sign-in/page.tsx index a07693e..26912cc 100644 --- a/app/(auth)/sign-in/page.tsx +++ b/app/(auth)/sign-in/page.tsx @@ -4,68 +4,71 @@ import { useForm } from 'react-hook-form'; import { Button } from '@/components/ui/button'; import InputField from '@/components/forms/InputField'; import FooterLink from '@/components/forms/FooterLink'; +import {signInWithEmail, signUpWithEmail} from "@/lib/actions/auth.actions"; +import {toast} from "sonner"; +import {signInEmail} from "better-auth/api"; +import {useRouter} from "next/navigation"; import OpenDevSocietyBranding from "@/components/OpenDevSocietyBranding"; import React from "react"; const SignIn = () => { + const router = useRouter() const { register, handleSubmit, - formState: {errors, isSubmitting}, + formState: { errors, isSubmitting }, } = useForm({ defaultValues: { email: '', password: '', }, - mode: 'onBlur' + mode: 'onBlur', }); - const onSubmit = async(data: SignInFormData) => { - try{ - console.log(data) - } catch(e){ - console.log(e); + + const onSubmit = async (data: SignInFormData) => { + try { + const result = await signInWithEmail(data); + if(result.success) router.push('/'); + } catch (e) { + console.error(e); + toast.error('Sign in failed', { + description: e instanceof Error ? e.message : 'Failed to sign in.' + }) } } + return ( <> -

Sign In

+

Welcome back

- - - - + + - - - ) -} -export default SignIn + ); +}; +export default SignIn; \ No newline at end of file diff --git a/app/(auth)/sign-up/page.tsx b/app/(auth)/sign-up/page.tsx index 76f3084..741df70 100644 --- a/app/(auth)/sign-up/page.tsx +++ b/app/(auth)/sign-up/page.tsx @@ -1,6 +1,5 @@ 'use client'; -import React from 'react' import {useForm} from "react-hook-form"; import {Button} from "@/components/ui/button"; import InputField from "@/components/forms/InputField"; @@ -8,15 +7,19 @@ import SelectField from "@/components/forms/SelectField"; import {INVESTMENT_GOALS, PREFERRED_INDUSTRIES, RISK_TOLERANCE_OPTIONS} from "@/lib/constants"; import {CountrySelectField} from "@/components/forms/CountrySelectField"; import FooterLink from "@/components/forms/FooterLink"; -import Link from "next/link"; +import {signUpWithEmail} from "@/lib/actions/auth.actions"; +import {useRouter} from "next/navigation"; +import {toast} from "sonner"; import OpenDevSocietyBranding from "@/components/OpenDevSocietyBranding"; +import React from "react"; const SignUp = () => { + const router = useRouter() const { register, handleSubmit, control, - formState: {errors, isSubmitting}, + formState: { errors, isSubmitting }, } = useForm({ defaultValues: { fullName: '', @@ -28,14 +31,20 @@ const SignUp = () => { preferredIndustry: 'Technology' }, mode: 'onBlur' - }); - const onSubmit = async(data: SignUpFormData) => { - try{ - console.log(data) - } catch(e){ - console.log(e); + }, ); + + const onSubmit = async (data: SignUpFormData) => { + try { + const result = await signUpWithEmail(data); + if(result.success) router.push('/'); + } catch (e) { + console.error(e); + toast.error('Sign up failed', { + description: e instanceof Error ? e.message : 'Failed to create an account.' + }) } } + return ( <>

Sign Up & Personalize

@@ -44,29 +53,29 @@ const SignUp = () => { { options={INVESTMENT_GOALS} control={control} error={errors.investmentGoals} + required /> { options={RISK_TOLERANCE_OPTIONS} control={control} error={errors.riskTolerance} + required /> - + + + - - - - ) } -export default SignUp +export default SignUp; \ No newline at end of file diff --git a/app/(root)/layout.tsx b/app/(root)/layout.tsx index 1d16cd7..afffc63 100644 --- a/app/(root)/layout.tsx +++ b/app/(root)/layout.tsx @@ -1,10 +1,22 @@ -import React from 'react' -import Header from "../../components/Header"; +import Header from "@/components/Header"; +import {auth} from "@/lib/better-auth/auth"; +import {headers} from "next/headers"; +import {redirect} from "next/navigation"; + +const Layout = async ({ children }: { children : React.ReactNode }) => { + const session = await auth.api.getSession({ headers: await headers() }); + + if(!session?.user) redirect('/sign-in'); + + const user = { + id: session.user.id, + name: session.user.name, + email: session.user.email, + } -const Layout = ({ children }: { children : React.ReactNode }) => { return (
-
+
{children} @@ -12,4 +24,4 @@ const Layout = ({ children }: { children : React.ReactNode }) => {
) } -export default Layout +export default Layout \ No newline at end of file diff --git a/app/api/inngest/route.ts b/app/api/inngest/route.ts new file mode 100644 index 0000000..466beec --- /dev/null +++ b/app/api/inngest/route.ts @@ -0,0 +1,8 @@ +import {serve} from "inngest/next"; +import {inngest} from "@/lib/inngest/client"; +import {sendSignUpEmail} from "@/lib/inngest/functions"; + +export const {GET, POST, PUT } = serve({ + client: inngest, + functions: [sendSignUpEmail], +}) \ No newline at end of file diff --git a/app/globals.css b/app/globals.css index 74c9b44..d74c257 100644 --- a/app/globals.css +++ b/app/globals.css @@ -146,7 +146,7 @@ @apply mx-auto max-w-screen-2xl px-4 md:px-6 lg:px-8; } .yellow-btn { - @apply h-12 cursor-pointer bg-gradient-to-b from-yellow-400 to-yellow-500 hover:from-yellow-500 hover:to-yellow-400 text-gray-950 font-medium text-base rounded-lg shadow-lg disabled:opacity-50; + @apply h-12 cursor-pointer bg-gradient-to-b from-teal-400 to-teal-500 hover:from-teal-500 hover:to-teal-400 text-gray-800 font-medium text-base rounded-lg shadow-lg disabled:opacity-50; } .home-wrapper { @apply text-gray-400 flex-col gap-4 md:gap-10 items-center sm:items-start; @@ -188,13 +188,13 @@ @apply text-sm font-medium text-gray-400; } .form-input { - @apply h-12 px-3 py-3 text-white text-base placeholder:text-gray-500 border-gray-600 bg-gray-800 rounded-lg focus:!border-yellow-500 focus:ring-0; + @apply h-12 px-3 py-3 text-white text-base placeholder:text-gray-600 border-gray-600 rounded-lg focus:!border-teal-500 focus:ring-0 ; } .select-trigger { - @apply w-full !h-12 px-3 py-3 text-base border-gray-600 bg-gray-800 text-white rounded-lg focus:!border-yellow-500 focus:ring-0; + @apply w-full !h-12 px-3 py-3 text-base border-gray-600 bg-gray-800 text-white rounded-lg focus:!border-teal-500 focus:ring-0; } .country-select-trigger { - @apply h-12 px-3 py-3 text-base w-full justify-between font-normal border-gray-600 bg-gray-800 text-gray-400 rounded-lg focus:!border-yellow-500 focus:ring-0; + @apply h-12 px-3 py-3 text-base w-full justify-between font-normal border-gray-600 bg-gray-800 text-gray-400 rounded-lg focus:!border-teal-500 focus:ring-0; } .country-select-input { @apply !bg-gray-800 text-gray-400 border-0 border-b border-gray-600 rounded-none focus:ring-0 placeholder:text-gray-500; @@ -206,13 +206,13 @@ @apply text-white cursor-pointer px-3 py-2 rounded-sm bg-gray-800 hover:!bg-gray-600; } .footer-link { - @apply text-gray-400 font-medium hover:text-yellow-400 hover:underline transition-colors; + @apply text-gray-400 font-medium hover:text-teal-400 hover:underline transition-colors; } .search-text { - @apply cursor-pointer hover:text-yellow-500; + @apply cursor-pointer hover:text-teal-500; } .search-btn { - @apply cursor-pointer px-4 py-2 w-fit flex items-center gap-2 text-sm md:text-base bg-yellow-500 hover:bg-yellow-500 text-black font-medium rounded; + @apply cursor-pointer px-4 py-2 w-fit flex items-center gap-2 text-sm md:text-base bg-teal-500 hover:bg-teal-500 text-black font-medium rounded; } .search-dialog { @apply !bg-gray-800 lg:min-w-[800px] border-gray-600 fixed top-10 left-1/2 -translate-x-1/2 translate-y-10; @@ -254,7 +254,7 @@ @apply w-full grid-cols-1 gap-6 xl:grid-cols-3 space-y-6 sm:space-y-8; } .watchlist-btn { - @apply bg-yellow-500 text-base hover:bg-yellow-500 text-gray-900 w-full rounded h-11 font-semibold cursor-pointer; + @apply bg-teal-500 text-base hover:bg-teal-500 text-gray-900 w-full rounded h-11 font-semibold cursor-pointer; } .watchlist-remove { @apply bg-red-500! hover:bg-red-500! text-gray-900! @@ -284,10 +284,10 @@ @apply items-start gap-6 h-full flex-col w-full lg:col-span-1; } .watchlist-icon-btn { - @apply w-fit cursor-pointer hover:bg-transparent! text-gray-400 hover:text-yellow-500; + @apply w-fit cursor-pointer hover:bg-transparent! text-gray-400 hover:text-teal-500; } .watchlist-icon-added { - @apply !text-yellow-500 hover:!text-yellow-600; + @apply !text-teal-500 hover:!text-teal-600; } .watchlist-icon { @apply w-8 h-8 rounded-full flex items-center justify-center bg-gray-700/50; @@ -317,7 +317,7 @@ @apply font-medium text-base } .add-alert { - @apply flex text-sm items-center whitespace-nowrap gap-1.5 px-3 w-fit py-2 text-yellow-600 border border-yellow-600/20 rounded font-medium bg-transparent hover:bg-transparent cursor-pointer transition-colors; + @apply flex text-sm items-center whitespace-nowrap gap-1.5 px-3 w-fit py-2 text-teal-600 border border-teal-600/20 rounded font-medium bg-transparent hover:bg-transparent cursor-pointer transition-colors; } .watchlist-news { @apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4; @@ -338,7 +338,7 @@ @apply text-gray-400 flex-1 text-base leading-relaxed mb-3 line-clamp-3; } .news-cta { - @apply text-sm align-bottom text-yellow-500 hover:text-gray-400; + @apply text-sm align-bottom text-teal-500 hover:text-gray-400; } .alert-dialog { @apply bg-gray-800 border-gray-600 text-gray-400 max-w-md; @@ -356,7 +356,7 @@ @apply p-4 rounded-lg bg-gray-700 border border-gray-600; } .alert-name { - @apply mb-2 text-lg text-yellow-500 font-semibold; + @apply mb-2 text-lg text-teal-500 font-semibold; } .alert-details { @apply flex border-b pb-3 items-center justify-between gap-3 mb-2; diff --git a/app/layout.tsx b/app/layout.tsx index 233636e..85b965d 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,5 +1,6 @@ import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; +import {Toaster} from "@/components/ui/sonner"; import "./globals.css"; const geistSans = Geist({ @@ -24,11 +25,12 @@ export default function RootLayout({ }>) { return ( - - {children} - + + {children} + + ); } diff --git a/components/Header.tsx b/components/Header.tsx index 9e8e3db..6255d25 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -1,14 +1,14 @@ -import React from 'react' import Link from "next/link"; import Image from "next/image"; import NavItems from "@/components/NavItems"; import UserDropdown from "@/components/UserDropdown"; -const Header = () => { +const Header = async ({ user }: { user: User }) => { return (
- + +

OpenStock

{/* UserDropDown */} - +
diff --git a/components/NavItems.tsx b/components/NavItems.tsx index fe7489e..ed9020d 100644 --- a/components/NavItems.tsx +++ b/components/NavItems.tsx @@ -18,7 +18,7 @@ const NavItems = () => {
    {NAV_ITEMS.map(({href, label}) => (
  • - + {label}
  • diff --git a/components/UserDropdown.tsx b/components/UserDropdown.tsx index 19cae04..acc9091 100644 --- a/components/UserDropdown.tsx +++ b/components/UserDropdown.tsx @@ -14,44 +14,40 @@ import { import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import {useRouter} from "next/navigation"; import {LogOut} from "lucide-react"; -import {NAV_ITEMS} from "@/lib/constants"; import NavItems from "@/components/NavItems"; +import {signOut} from "@/lib/actions/auth.actions"; -const UserDropdown = () => { +const UserDropdown = ({user} : {user: User}) => { const router = useRouter(); const handleSignOut = async() => { + await signOut(); router.push("/sign-in"); } - const user = { - name: "ODS", - email: "opendevsociety@cc.cc", - } - return ( - - +
    - + {user.name[0]} @@ -66,11 +62,11 @@ const UserDropdown = () => {
    - - + + Logout - + diff --git a/components/forms/CountrySelectField.tsx b/components/forms/CountrySelectField.tsx index 5677b1b..f5d1c92 100644 --- a/components/forms/CountrySelectField.tsx +++ b/components/forms/CountrySelectField.tsx @@ -97,7 +97,7 @@ const CountrySelect = ({ > diff --git a/components/ui/sonner.tsx b/components/ui/sonner.tsx new file mode 100644 index 0000000..957524e --- /dev/null +++ b/components/ui/sonner.tsx @@ -0,0 +1,25 @@ +"use client" + +import { useTheme } from "next-themes" +import { Toaster as Sonner, ToasterProps } from "sonner" + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/database/mongoose.ts b/database/mongoose.ts index 327041f..c1a5102 100644 --- a/database/mongoose.ts +++ b/database/mongoose.ts @@ -35,4 +35,5 @@ export const connectToDatabase = async () => { } console.log(`MongoDB Connected ${MONGODB_URI} in ${process.env.NODE_ENV}`); + return cached.conn; } \ No newline at end of file diff --git a/lib/actions/auth.actions.ts b/lib/actions/auth.actions.ts new file mode 100644 index 0000000..1794300 --- /dev/null +++ b/lib/actions/auth.actions.ts @@ -0,0 +1,43 @@ +'use server'; + +import {auth} from "@/lib/better-auth/auth"; +import {inngest} from "@/lib/inngest/client"; +import {headers} from "next/headers"; + +export const signUpWithEmail = async ({ email, password, fullName, country, investmentGoals, riskTolerance, preferredIndustry }: SignUpFormData) => { + try { + const response = await auth.api.signUpEmail({ body: { email, password, name: fullName } }) + + if(response) { + await inngest.send({ + name: 'app/user.created', + data: { email, name: fullName, country, investmentGoals, riskTolerance, preferredIndustry } + }) + } + + return { success: true, data: response } + } catch (e) { + console.log('Sign up failed', e) + return { success: false, error: 'Sign up failed' } + } +} + +export const signInWithEmail = async ({ email, password }: SignInFormData) => { + try { + const response = await auth.api.signInEmail({ body: { email, password } }) + + return { success: true, data: response } + } catch (e) { + console.log('Sign in failed', e) + return { success: false, error: 'Sign in failed' } + } +} + +export const signOut = async () => { + try { + await auth.api.signOut({ headers: await headers() }); + } catch (e) { + console.log('Sign out failed', e) + return { success: false, error: 'Sign out failed' } + } +} \ No newline at end of file diff --git a/lib/better-auth/auth.ts b/lib/better-auth/auth.ts new file mode 100644 index 0000000..7422f19 --- /dev/null +++ b/lib/better-auth/auth.ts @@ -0,0 +1,41 @@ +import { betterAuth } from "better-auth"; +import {mongodbAdapter} from "better-auth/adapters/mongodb"; +import {connectToDatabase} from "@/database/mongoose"; +import {nextCookies} from "better-auth/next-js"; + + +let authInstance: ReturnType | null = null; + + +export const getAuth = async () => { + if(authInstance) { + return authInstance; + } + + const mongoose = await connectToDatabase(); + const db = mongoose.connection; + + if (!db) { + throw new Error("MongoDB connection not found!"); + } + + authInstance = betterAuth({ + database: mongodbAdapter(db as any), + secret: process.env.BETER_AUTH_SECRET, + baseURL: process.env.BETTER_AUTH_URL, + emailAndPassword: { + enabled: true, + disableSignUp: false, + requireEmailVerification: false, + minPasswordLength: 8, + maxPasswordLength: 128, + autoSignIn: true, + }, + plugins: [nextCookies()], + + }); + + return authInstance; +} + +export const auth = await getAuth(); \ No newline at end of file diff --git a/lib/inngest/client.ts b/lib/inngest/client.ts new file mode 100644 index 0000000..c03b33b --- /dev/null +++ b/lib/inngest/client.ts @@ -0,0 +1,6 @@ +import {Inngest} from "inngest" + +export const inngest = new Inngest({ + id: "openStock", + ai: {gemini: {apiKey: process.env.GEMINI_API_KEY}} +}) \ No newline at end of file diff --git a/lib/inngest/functions.ts b/lib/inngest/functions.ts new file mode 100644 index 0000000..446916f --- /dev/null +++ b/lib/inngest/functions.ts @@ -0,0 +1,48 @@ +import {inngest} from '@/lib/inngest/client'; +import {PERSONALIZED_WELCOME_EMAIL_PROMPT} from "@/lib/inngest/prompts"; +import {sendWelcomeEmail} from "@/lib/nodemailer"; + +export const sendSignUpEmail = inngest.createFunction( + {id: 'sign-up-email'}, + {event: 'app/user.created'}, + async ({event, step}) => { + const userProfile = ` + - Country: ${event.data.country} + - Investment goals: ${event.data.investmentGoals} + - Risk tolerance: ${event.data.riskTolerance} + - Preferred industry: ${event.data.preferredIndustry} + ` + + const prompt = PERSONALIZED_WELCOME_EMAIL_PROMPT.replace('{{userProfile}}', userProfile); + + const response = await step.ai.infer('generate-welcome-intro', { + model: step.ai.models.gemini({model: 'gemini-2.5-flash-lite'}), + body: { + contents: [ + { + role: 'user', + parts: [ + {text: prompt} + ] + } + ] + } + + }) + + await step.run('send-welcome-email', async() => { + const part = response.candidates?.[0]?.content?.parts?.[0]; + const introText = (part && 'text' in part ? part.text : null) || 'Thanks for joining OpenStock and be part of this initiative by Open Dev Society'; + + const {data: {email, name}} = event; + return await sendWelcomeEmail({email, name, intro: introText }); + + + }) + + return { + success: true, + message: 'Welcome email sent successfully!', + } + } +) \ No newline at end of file diff --git a/lib/inngest/prompts.ts b/lib/inngest/prompts.ts new file mode 100644 index 0000000..04e9d3e --- /dev/null +++ b/lib/inngest/prompts.ts @@ -0,0 +1,230 @@ +export const PERSONALIZED_WELCOME_EMAIL_PROMPT = `Generate highly personalized HTML content that will be inserted into an email template at the {{intro}} placeholder. + +User profile data: +{{userProfile}} + +PERSONALIZATION REQUIREMENTS: +You MUST create content that is obviously tailored to THIS specific user by: + +IMPORTANT: Do NOT start the personalized content with "Welcome" since the email header already says "Welcome aboard {{name}}". Use alternative openings like "Thanks for joining", "Great to have you", "You're all set", "Perfect timing", etc. + +1. **Direct Reference to User Details**: Extract and use specific information from their profile: + - Their exact investment goals or objectives + - Their stated risk tolerance level + - Their preferred sectors/industries mentioned + - Their experience level or background + - Any specific stocks/companies they're interested in + - Their investment timeline (short-term, long-term, retirement) + +2. **Contextual Messaging**: Create content that shows you understand their situation: + - New investors → Reference learning/starting their journey + - Experienced traders → Reference advanced tools/strategy enhancement + - Retirement planning → Reference building wealth over time + - Specific sectors → Reference those exact industries by name + - Conservative approach → Reference safety and informed decisions + - Aggressive approach → Reference opportunities and growth potential + +3. **Personal Touch**: Make it feel like it was written specifically for them: + - Use their goals in your messaging + - Reference their interests directly + - Connect features to their specific needs + - Make them feel understood and seen + +CRITICAL FORMATTING REQUIREMENTS: +- Return ONLY clean HTML content with NO markdown, NO code blocks, NO backticks +- Use SINGLE paragraph only:

    content

    +- Write exactly TWO sentences (add one more sentence than current single sentence) +- Keep total content between 35-50 words for readability +- Use for key personalized elements (their goals, sectors, etc.) +- DO NOT include "Here's what you can do right now:" as this is already in the template +- Make every word count toward personalization +- Second sentence should add helpful context or reinforce the personalization + +Example personalized outputs (showing obvious customization with TWO sentences): +

    Thanks for joining Signalist! As someone focused on technology growth stocks, you'll love our real-time alerts for companies like the ones you're tracking. We'll help you spot opportunities before they become mainstream news.

    + +

    Great to have you aboard! Perfect for your conservative retirement strategy — we'll help you monitor dividend stocks without overwhelming you with noise. You can finally track your portfolio progress with confidence and clarity.

    + +

    You're all set! Since you're new to investing, we've designed simple tools to help you build confidence while learning the healthcare sector you're interested in. Our beginner-friendly alerts will guide you without the confusing jargon.

    ` + +export const NEWS_SUMMARY_EMAIL_PROMPT = `Generate HTML content for a market news summary email that will be inserted into the NEWS_SUMMARY_EMAIL_TEMPLATE at the {{newsContent}} placeholder. + +News data to summarize: +{{newsData}} + +CRITICAL FORMATTING REQUIREMENTS: +- Return ONLY clean HTML content with NO markdown, NO code blocks, NO backticks +- Structure content with clear sections using proper HTML headings and paragraphs +- Use these specific CSS classes and styles to match the email template: + +SECTION HEADINGS (for categories like "Market Highlights", "Top Movers", etc.): +

    Section Title

    + +PARAGRAPHS (for news content): +

    Content goes here

    + +STOCK/COMPANY MENTIONS: +Stock Symbol for ticker symbols +Company Name for company names + +PERFORMANCE INDICATORS: +Use 📈 for gains, 📉 for losses, 📊 for neutral/mixed + +NEWS ARTICLE STRUCTURE: +For each individual news item within a section, use this structure: +1. Article container with visual styling and icon +2. Article title as a subheading +3. Key takeaways in bullet points (2-3 actionable insights) +4. "What this means" section for context +5. "Read more" link to the original article +6. Visual divider between articles + +ARTICLE CONTAINER: +Wrap each article in a clean, simple container: +
    + +ARTICLE TITLES: +

    +Article Title Here +

    + +BULLET POINTS (minimum 3 concise insights): +Use this format with clear, concise explanations (no label needed): +
      +
    • + Clear, concise explanation in simple terms that's easy to understand quickly. +
    • +
    • + Brief explanation with key numbers and what they mean in everyday language. +
    • +
    • + Simple takeaway about what this means for regular people's money. +
    • +
    + +INSIGHT SECTION: +Add simple context explanation: +
    +

    💡 Bottom Line: Simple explanation of why this news matters to your money in everyday language.

    +
    + +READ MORE BUTTON: + + +ARTICLE DIVIDER: +Close each article container: +
    + +SECTION DIVIDERS: +Between major sections, use: +
    + +Content guidelines: +- Organize news into logical sections with icons (📊 Market Overview, 📈 Top Gainers, 📉 Top Losers, 🔥 Breaking News, 💼 Earnings Reports, 🏛️ Economic Data, etc.) +- NEVER repeat section headings - use each section type only once per email +- For each news article, include its actual headline/title from the news data +- Provide MINIMUM 3 CONCISE bullet points (NO "Key Takeaways" label - start directly with bullets) +- Each bullet should be SHORT and EASY TO UNDERSTAND - one clear sentence preferred +- Use PLAIN ENGLISH - avoid jargon, complex financial terms, or insider language +- Explain concepts as if talking to someone new to investing +- Include specific numbers but explain what they mean in simple terms +- Add "Bottom Line" context in everyday language anyone can understand +- Use clean, light design with yellow bullets for better readability +- Make each article easy to scan with clear spacing and structure +- Always include simple "Read Full Story" buttons with actual URLs +- Focus on PRACTICAL insights regular people can understand and use +- Explain what the news means for regular investors' money +- Keep language conversational and accessible to everyone +- Prioritize BREVITY and CLARITY over detailed explanations + +Example structure: +

    📊 Market Overview

    + +
    +

    +Stock Market Had Mixed Results Today +

    + +
      +
    • + Tech stocks like Apple went up 1.2% today, which is good news for tech investors. +
    • +
    • + Traditional companies went down 0.3%, showing investors prefer tech right now. +
    • +
    • + High trading volume (12.4 billion shares) shows investors are confident and active. +
    • +
    + +
    +

    💡 Bottom Line: If you own tech stocks, today was good for you. If you're thinking about investing, tech companies might be a smart choice right now.

    +
    + + +
    + +
    + +

    📈 Top Gainers

    + +
    +

    +Apple Stock Jumped After Great Earnings Report +

    + +
      +
    • + Apple stock jumped 5.2% after beating earnings expectations. +
    • +
    • + iPhone sales expected to grow 8% next quarter despite economic uncertainty. +
    • +
    • + App store and services revenue hit $22.3 billion (up 14%), providing steady income. +
    • +
    + +
    +

    💡 Bottom Line: Apple is making money in different ways (phones AND services), so it's a pretty safe stock to own even when the economy gets shaky.

    +
    + + +
    ` + +export const TRADINGVIEW_SYMBOL_MAPPING_PROMPT = `You are an expert in financial markets and trading platforms. Your task is to find the correct TradingView symbol that corresponds to a given Finnhub stock symbol. + +Stock information from Finnhub: +Symbol: {{symbol}} +Company: {{company}} +Exchange: {{exchange}} +Currency: {{currency}} +Country: {{country}} + +IMPORTANT RULES: +1. TradingView uses specific symbol formats that may differ from Finnhub +2. For US stocks: Usually just the symbol (e.g., AAPL for Apple) +3. For international stocks: Often includes exchange prefix (e.g., NASDAQ:AAPL, NYSE:MSFT, LSE:BARC) +4. Some symbols may have suffixes for different share classes +5. ADRs and foreign stocks may have different symbol formats + +RESPONSE FORMAT: +Return ONLY a valid JSON object with this exact structure: +{ + "tradingViewSymbol": "EXCHANGE:SYMBOL", + "confidence": "high|medium|low", + "reasoning": "Brief explanation of why this mapping is correct" +} + +EXAMPLES: +- Apple Inc. (AAPL) from Finnhub → {"tradingViewSymbol": "NASDAQ:AAPL", "confidence": "high", "reasoning": "Apple trades on NASDAQ as AAPL"} +- Microsoft Corp (MSFT) from Finnhub → {"tradingViewSymbol": "NASDAQ:MSFT", "confidence": "high", "reasoning": "Microsoft trades on NASDAQ as MSFT"} +- Barclays PLC (BARC.L) from Finnhub → {"tradingViewSymbol": "LSE:BARC", "confidence": "high", "reasoning": "Barclays trades on London Stock Exchange as BARC"} + +Your response must be valid JSON only. Do not include any other text.` diff --git a/lib/nodemailer/index.ts b/lib/nodemailer/index.ts new file mode 100644 index 0000000..fa23e1e --- /dev/null +++ b/lib/nodemailer/index.ts @@ -0,0 +1,28 @@ +import nodemailer from 'nodemailer' +import {WELCOME_EMAIL_TEMPLATE} from "@/lib/nodemailer/templates"; + + +export const transporter = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: process.env.NODEMAILER_EMAIL, + pass: process.env.NODEMAILER_PASSWORD, + } +}) + +export const sendWelcomeEmail = async ({email, name, intro} : WelcomeEmailData) => { + const htmlTemplate = WELCOME_EMAIL_TEMPLATE + .replace('{{name}}', name) + .replace('{{intro}}', intro); + + + const mailOptions = { + from: `"Openstock" `, + to: email, + subject: 'Welcome to OpenStock - your open-source stock market toolkit', + text: 'Thanks for joining Openstock and believing in this initiative by Open Dev Society', + html: htmlTemplate, + } + + await transporter.sendMail(mailOptions); +} \ No newline at end of file diff --git a/lib/nodemailer/templates.ts b/lib/nodemailer/templates.ts new file mode 100644 index 0000000..3524bfa --- /dev/null +++ b/lib/nodemailer/templates.ts @@ -0,0 +1,1110 @@ +export const WELCOME_EMAIL_TEMPLATE = ` + + + + + + + Welcome to OpenStock + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +`; + +export const NEWS_SUMMARY_EMAIL_TEMPLATE = ` + + + + + + + Market News Summary Today + + + + + + + + +
    + + + + + + + + + + + + + +
    + +`; + +export const STOCK_ALERT_UPPER_EMAIL_TEMPLATE = ` + + + + + + + Price Alert: {{symbol}} Hit Upper Target + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +`; + +export const STOCK_ALERT_LOWER_EMAIL_TEMPLATE = ` + + + + + + + Price Alert: {{symbol}} Hit Lower Target + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +`; + +export const VOLUME_ALERT_EMAIL_TEMPLATE = ` + + + + + + + Volume Alert: {{symbol}} + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    + +`; + +export const INACTIVE_USER_REMINDER_EMAIL_TEMPLATE = ` + + + + + + + We Miss You! Your Market Insights Await + + + + + + + + +
    + + + + + + + + + + + + + +
    + +`; \ No newline at end of file diff --git a/middleware/index.ts b/middleware/index.ts new file mode 100644 index 0000000..bb3be60 --- /dev/null +++ b/middleware/index.ts @@ -0,0 +1,19 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getSessionCookie } from "better-auth/cookies"; + +export async function middleware(request: NextRequest) { + const sessionCookie = getSessionCookie(request); + + // Check cookie presence - prevents obviously unauthorized users + if (!sessionCookie) { + return NextResponse.redirect(new URL('/sign-in', request.url)); + } + + return NextResponse.next(); +} + +export const config = { + matcher: [ + '/((?!api|_next/static|_next/image|favicon.ico|sign-in|sign-up|assets).*)', + ], +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e2074bd..e5afa91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,26 +15,32 @@ "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-slot": "^1.2.3", + "better-auth": "^1.3.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "country-data-list": "^1.5.5", "dotenv": "^17.2.3", + "inngest": "^3.44.0", "lucide-react": "^0.544.0", "mongodb": "^6.20.0", "mongoose": "^8.19.0", "next": "15.5.4", + "next-themes": "^0.4.6", + "nodemailer": "^7.0.6", "react": "19.1.0", "react-circle-flags": "^0.0.23", "react-dom": "19.1.0", "react-hook-form": "^7.63.0", "react-select-country-list": "^2.2.3", + "sonner": "^2.0.7", "tailwind-merge": "^3.3.1" }, "devDependencies": { "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4", "@types/node": "^20", + "@types/nodemailer": "^7.0.2", "@types/react": "^19", "@types/react-dom": "^19", "@types/react-select-country-list": "^2.2.3", @@ -58,6 +64,757 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sesv2": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.901.0.tgz", + "integrity": "sha512-xCS2qZlvgbXKZbJW8XgU8OEAL7BJyVqJ5yODOQxa1TJFZ/+wEhik9XZtULjNnQqa29sJDpPltuSDG1aDG2OUxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.901.0", + "@aws-sdk/credential-provider-node": "3.901.0", + "@aws-sdk/middleware-host-header": "3.901.0", + "@aws-sdk/middleware-logger": "3.901.0", + "@aws-sdk/middleware-recursion-detection": "3.901.0", + "@aws-sdk/middleware-user-agent": "3.901.0", + "@aws-sdk/region-config-resolver": "3.901.0", + "@aws-sdk/signature-v4-multi-region": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@aws-sdk/util-endpoints": "3.901.0", + "@aws-sdk/util-user-agent-browser": "3.901.0", + "@aws-sdk/util-user-agent-node": "3.901.0", + "@smithy/config-resolver": "^4.3.0", + "@smithy/core": "^3.14.0", + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/hash-node": "^4.2.0", + "@smithy/invalid-dependency": "^4.2.0", + "@smithy/middleware-content-length": "^4.2.0", + "@smithy/middleware-endpoint": "^4.3.0", + "@smithy/middleware-retry": "^4.4.0", + "@smithy/middleware-serde": "^4.2.0", + "@smithy/middleware-stack": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.0", + "@smithy/util-defaults-mode-browser": "^4.2.0", + "@smithy/util-defaults-mode-node": "^4.2.0", + "@smithy/util-endpoints": "^3.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-retry": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.901.0.tgz", + "integrity": "sha512-sGyDjjkJ7ppaE+bAKL/Q5IvVCxtoyBIzN+7+hWTS/mUxWJ9EOq9238IqmVIIK6sYNIzEf9yhobfMARasPYVTNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.901.0", + "@aws-sdk/middleware-host-header": "3.901.0", + "@aws-sdk/middleware-logger": "3.901.0", + "@aws-sdk/middleware-recursion-detection": "3.901.0", + "@aws-sdk/middleware-user-agent": "3.901.0", + "@aws-sdk/region-config-resolver": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@aws-sdk/util-endpoints": "3.901.0", + "@aws-sdk/util-user-agent-browser": "3.901.0", + "@aws-sdk/util-user-agent-node": "3.901.0", + "@smithy/config-resolver": "^4.3.0", + "@smithy/core": "^3.14.0", + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/hash-node": "^4.2.0", + "@smithy/invalid-dependency": "^4.2.0", + "@smithy/middleware-content-length": "^4.2.0", + "@smithy/middleware-endpoint": "^4.3.0", + "@smithy/middleware-retry": "^4.4.0", + "@smithy/middleware-serde": "^4.2.0", + "@smithy/middleware-stack": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.0", + "@smithy/util-defaults-mode-browser": "^4.2.0", + "@smithy/util-defaults-mode-node": "^4.2.0", + "@smithy/util-endpoints": "^3.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-retry": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.901.0.tgz", + "integrity": "sha512-brKAc3y64tdhyuEf+OPIUln86bRTqkLgb9xkd6kUdIeA5+qmp/N6amItQz+RN4k4O3kqkCPYnAd3LonTKluobw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@aws-sdk/xml-builder": "3.901.0", + "@smithy/core": "^3.14.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/signature-v4": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.901.0.tgz", + "integrity": "sha512-5hAdVl3tBuARh3zX5MLJ1P/d+Kr5kXtDU3xm1pxUEF4xt2XkEEpwiX5fbkNkz2rbh3BCt2gOHsAbh6b3M7n+DA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.901.0.tgz", + "integrity": "sha512-Ggr7+0M6QZEsrqRkK7iyJLf4LkIAacAxHz9c4dm9hnDdU7vqrlJm6g73IxMJXWN1bIV7IxfpzB11DsRrB/oNjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/util-stream": "^4.4.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.901.0.tgz", + "integrity": "sha512-zxadcDS0hNJgv8n4hFYJNOXyfjaNE1vvqIiF/JzZSQpSSYXzCd+WxXef5bQh+W3giDtRUmkvP5JLbamEFjZKyw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/credential-provider-env": "3.901.0", + "@aws-sdk/credential-provider-http": "3.901.0", + "@aws-sdk/credential-provider-process": "3.901.0", + "@aws-sdk/credential-provider-sso": "3.901.0", + "@aws-sdk/credential-provider-web-identity": "3.901.0", + "@aws-sdk/nested-clients": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/credential-provider-imds": "^4.2.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.901.0.tgz", + "integrity": "sha512-dPuFzMF7L1s/lQyT3wDxqLe82PyTH+5o1jdfseTEln64LJMl0ZMWaKX/C1UFNDxaTd35Cgt1bDbjjAWHMiKSFQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.901.0", + "@aws-sdk/credential-provider-http": "3.901.0", + "@aws-sdk/credential-provider-ini": "3.901.0", + "@aws-sdk/credential-provider-process": "3.901.0", + "@aws-sdk/credential-provider-sso": "3.901.0", + "@aws-sdk/credential-provider-web-identity": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/credential-provider-imds": "^4.2.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.901.0.tgz", + "integrity": "sha512-/IWgmgM3Cl1wTdJA5HqKMAojxLkYchh5kDuphApxKhupLu6Pu0JBOHU8A5GGeFvOycyaVwosod6zDduINZxe+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.901.0.tgz", + "integrity": "sha512-SjmqZQHmqFSET7+6xcZgtH7yEyh5q53LN87GqwYlJZ6KJ5oNw11acUNEhUOL1xTSJEvaWqwTIkS2zqrzLcM9bw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.901.0", + "@aws-sdk/core": "3.901.0", + "@aws-sdk/token-providers": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.901.0.tgz", + "integrity": "sha512-NYjy/6NLxH9m01+pfpB4ql8QgAorJcu8tw69kzHwUd/ql6wUDTbC7HcXqtKlIwWjzjgj2BKL7j6SyFapgCuafA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/nested-clients": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.901.0.tgz", + "integrity": "sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.901.0.tgz", + "integrity": "sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.901.0.tgz", + "integrity": "sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@aws/lambda-invoke-store": "^0.0.1", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.901.0.tgz", + "integrity": "sha512-prgjVC3fDT2VIlmQPiw/cLee8r4frTam9GILRUVQyDdNtshNwV3MiaSCLzzQJjKJlLgnBLNUHJCSmvUVtg+3iA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@aws-sdk/util-arn-parser": "3.893.0", + "@smithy/core": "^3.14.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/signature-v4": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-stream": "^4.4.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.901.0.tgz", + "integrity": "sha512-Zby4F03fvD9xAgXGPywyk4bC1jCbnyubMEYChLYohD+x20ULQCf+AimF/Btn7YL+hBpzh1+RmqmvZcx+RgwgNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@aws-sdk/util-endpoints": "3.901.0", + "@smithy/core": "^3.14.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.901.0.tgz", + "integrity": "sha512-feAAAMsVwctk2Tms40ONybvpfJPLCmSdI+G+OTrNpizkGLNl6ik2Ng2RzxY6UqOfN8abqKP/DOUj1qYDRDG8ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.901.0", + "@aws-sdk/middleware-host-header": "3.901.0", + "@aws-sdk/middleware-logger": "3.901.0", + "@aws-sdk/middleware-recursion-detection": "3.901.0", + "@aws-sdk/middleware-user-agent": "3.901.0", + "@aws-sdk/region-config-resolver": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@aws-sdk/util-endpoints": "3.901.0", + "@aws-sdk/util-user-agent-browser": "3.901.0", + "@aws-sdk/util-user-agent-node": "3.901.0", + "@smithy/config-resolver": "^4.3.0", + "@smithy/core": "^3.14.0", + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/hash-node": "^4.2.0", + "@smithy/invalid-dependency": "^4.2.0", + "@smithy/middleware-content-length": "^4.2.0", + "@smithy/middleware-endpoint": "^4.3.0", + "@smithy/middleware-retry": "^4.4.0", + "@smithy/middleware-serde": "^4.2.0", + "@smithy/middleware-stack": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.0", + "@smithy/util-defaults-mode-browser": "^4.2.0", + "@smithy/util-defaults-mode-node": "^4.2.0", + "@smithy/util-endpoints": "^3.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-retry": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.901.0.tgz", + "integrity": "sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.901.0.tgz", + "integrity": "sha512-2IWxbll/pRucp1WQkHi2W5E2SVPGBvk4Is923H7gpNksbVFws18ItjMM8ZpGm44cJEoy1zR5gjhLFklatpuoOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/signature-v4": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.901.0.tgz", + "integrity": "sha512-pJEr1Ggbc/uVTDqp9IbNu9hdr0eQf3yZix3s4Nnyvmg4xmJSGAlbPC9LrNr5u3CDZoc8Z9CuLrvbP4MwYquNpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.901.0", + "@aws-sdk/nested-clients": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.901.0.tgz", + "integrity": "sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", + "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.901.0.tgz", + "integrity": "sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-endpoints": "^3.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.893.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", + "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.901.0.tgz", + "integrity": "sha512-Ntb6V/WFI21Ed4PDgL/8NSfoZQQf9xzrwNgiwvnxgAl/KvAvRBgQtqj5gHsDX8Nj2YmJuVoHfH9BGjL9VQ4WNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.901.0", + "@smithy/types": "^4.6.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.901.0.tgz", + "integrity": "sha512-l59KQP5TY7vPVUfEURc7P5BJKuNg1RSsAKBQW7LHLECXjLqDUbo2SMLrexLBEoArSt6E8QOrIN0C8z/0Xk0jYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.901.0", + "@aws-sdk/types": "3.901.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.901.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.901.0.tgz", + "integrity": "sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", + "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@better-auth/core": { + "version": "1.3.25", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.3.25.tgz", + "integrity": "sha512-+Z09RkrpufX8+skD05pAoMSNo95Cl6nwfqrcEHfXJPaiSGJNXoo4/0GNtxZAgsW89xfRdsmbVAwwEd1AlCrHZA==", + "dependencies": { + "better-call": "1.0.19", + "zod": "^4.1.5" + } + }, + "node_modules/@better-auth/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==", + "license": "MIT" + }, + "node_modules/@better-fetch/fetch": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.1.18.tgz", + "integrity": "sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==" + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz", + "integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@emnapi/core": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", @@ -270,6 +1027,43 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@hexagon/base64": { + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz", + "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==", + "license": "MIT" + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -750,6 +1544,25 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@inngest/ai": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@inngest/ai/-/ai-0.1.6.tgz", + "integrity": "sha512-4hIvD87LnMFSphkbSToB1EkE9epktyZU2xUj6OFCCj/bn379KfbZbhWcCJEyso0P9Ux4vsNTxiSu9E7JSI9HCQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^22.10.5", + "typescript": "^5.7.3" + } + }, + "node_modules/@inngest/ai/node_modules/@types/node": { + "version": "22.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz", + "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", @@ -763,6 +1576,12 @@ "node": ">=18.0.0" } }, + "node_modules/@jpwilliams/waitgroup": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@jpwilliams/waitgroup/-/waitgroup-2.1.1.tgz", + "integrity": "sha512-0CxRhNfkvFCTLZBKGvKxY2FYtYW1yWhO2McLqBL0X5UWvYjIf9suH8anKW/DNutl369A75Ewyoh2iJMwBZ2tRg==", + "license": "MIT" + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -813,6 +1632,22 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@levischuck/tiny-cbor": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@levischuck/tiny-cbor/-/tiny-cbor-0.2.11.tgz", + "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==", + "license": "MIT" + }, "node_modules/@mongodb-js/saslprep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.1.tgz", @@ -979,6 +1814,30 @@ "node": ">= 10" } }, + "node_modules/@noble/ciphers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.0.1.tgz", + "integrity": "sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1027,6 +1886,1606 @@ "node": ">=12.4.0" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.56.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.56.1.tgz", + "integrity": "sha512-4cK0+unfkXRRbQQg2r9K3ki8JlE0j9Iw8+4DZEkChShAnmviiE+/JMgHGvK+VVcLrSlgV6BBHv4+ZTLukQwhkA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/instrumentation-amqplib": "^0.46.1", + "@opentelemetry/instrumentation-aws-lambda": "^0.50.3", + "@opentelemetry/instrumentation-aws-sdk": "^0.49.1", + "@opentelemetry/instrumentation-bunyan": "^0.45.1", + "@opentelemetry/instrumentation-cassandra-driver": "^0.45.1", + "@opentelemetry/instrumentation-connect": "^0.43.1", + "@opentelemetry/instrumentation-cucumber": "^0.14.1", + "@opentelemetry/instrumentation-dataloader": "^0.16.1", + "@opentelemetry/instrumentation-dns": "^0.43.1", + "@opentelemetry/instrumentation-express": "^0.47.1", + "@opentelemetry/instrumentation-fastify": "^0.44.2", + "@opentelemetry/instrumentation-fs": "^0.19.1", + "@opentelemetry/instrumentation-generic-pool": "^0.43.1", + "@opentelemetry/instrumentation-graphql": "^0.47.1", + "@opentelemetry/instrumentation-grpc": "^0.57.1", + "@opentelemetry/instrumentation-hapi": "^0.45.2", + "@opentelemetry/instrumentation-http": "^0.57.1", + "@opentelemetry/instrumentation-ioredis": "^0.47.1", + "@opentelemetry/instrumentation-kafkajs": "^0.7.1", + "@opentelemetry/instrumentation-knex": "^0.44.1", + "@opentelemetry/instrumentation-koa": "^0.47.1", + "@opentelemetry/instrumentation-lru-memoizer": "^0.44.1", + "@opentelemetry/instrumentation-memcached": "^0.43.1", + "@opentelemetry/instrumentation-mongodb": "^0.52.0", + "@opentelemetry/instrumentation-mongoose": "^0.46.1", + "@opentelemetry/instrumentation-mysql": "^0.45.1", + "@opentelemetry/instrumentation-mysql2": "^0.45.2", + "@opentelemetry/instrumentation-nestjs-core": "^0.44.1", + "@opentelemetry/instrumentation-net": "^0.43.1", + "@opentelemetry/instrumentation-pg": "^0.51.1", + "@opentelemetry/instrumentation-pino": "^0.46.1", + "@opentelemetry/instrumentation-redis": "^0.46.1", + "@opentelemetry/instrumentation-redis-4": "^0.46.1", + "@opentelemetry/instrumentation-restify": "^0.45.1", + "@opentelemetry/instrumentation-router": "^0.44.1", + "@opentelemetry/instrumentation-socket.io": "^0.46.1", + "@opentelemetry/instrumentation-tedious": "^0.18.1", + "@opentelemetry/instrumentation-undici": "^0.10.1", + "@opentelemetry/instrumentation-winston": "^0.44.1", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.30.1", + "@opentelemetry/resource-detector-aws": "^1.12.0", + "@opentelemetry/resource-detector-azure": "^0.6.1", + "@opentelemetry/resource-detector-container": "^0.6.1", + "@opentelemetry/resource-detector-gcp": "^0.33.1", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/sdk-logs": "0.57.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.57.2.tgz", + "integrity": "sha512-0rygmvLcehBRp56NQVLSleJ5ITTduq/QfU7obOkyWgPpFHulwpw2LYTqNIz5TczKZuy5YY+5D3SDnXZL1tXImg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/sdk-logs": "0.57.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.57.2.tgz", + "integrity": "sha512-ta0ithCin0F8lu9eOf4lEz9YAScecezCHkMMyDkvd9S7AnZNX5ikUmC5EQOQADU+oCcgo/qkQIaKcZvQ0TYKDw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-logs": "0.57.2", + "@opentelemetry/sdk-trace-base": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-r70B8yKR41F0EC443b5CGB4rUaOMm99I5N75QQt6sHKxYDzSEc6gm48Diz1CI1biwa5tDPznpylTrywO/pT7qw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-metrics": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.57.2.tgz", + "integrity": "sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-metrics": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.57.2.tgz", + "integrity": "sha512-HX068Q2eNs38uf7RIkNN9Hl4Ynl+3lP0++KELkXMCpsCbFO03+0XNNZ1SkwxPlP9jrhQahsMPMkzNXpq3fKsnw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-metrics": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-prometheus": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.57.2.tgz", + "integrity": "sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-metrics": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.2.tgz", + "integrity": "sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.57.2.tgz", + "integrity": "sha512-sB/gkSYFu+0w2dVQ0PWY9fAMl172PKMZ/JrHkkW8dmjCL0CYkmXeE+ssqIL/yBUTPOvpLIpenX5T9RwXRBW/3g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.57.2.tgz", + "integrity": "sha512-awDdNRMIwDvUtoRYxRhja5QYH6+McBLtoz1q9BeEsskhZcrGmH/V1fWpGx8n+Rc+542e8pJA6y+aullbIzQmlw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz", + "integrity": "sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", + "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz", + "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.50.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.50.3.tgz", + "integrity": "sha512-kotm/mRvSWUauudxcylc5YCDei+G/r+jnOH6q5S99aPLQ/Ms8D2yonMIxEJUILIPlthEmwLYxkw3ualWzMjm/A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/aws-lambda": "8.10.147" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.49.1.tgz", + "integrity": "sha512-Vbj4BYeV/1K4Pbbfk+gQ8gwYL0w+tBeUwG88cOxnF7CLPO1XnskGV8Q3Gzut2Ah/6Dg17dBtlzEqL3UiFP2Z6A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/propagation-utils": "^0.30.16", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.45.1.tgz", + "integrity": "sha512-T9POV9ccS41UjpsjLrJ4i0m8LfplBiN3dMeH9XZ2btiDrjoaWtDrst6tNb1avetBjkeshOuBp1EWKP22EVSr0g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.57.1", + "@opentelemetry/instrumentation": "^0.57.1", + "@types/bunyan": "1.8.11" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.45.1.tgz", + "integrity": "sha512-RqnP0rK2hcKK1AKcmYvedLiL6G5TvFGiSUt2vI9wN0cCBdTt9Y9+wxxY19KoGxq7e9T/aHow6P5SUhCVI1sHvQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz", + "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.38" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.14.1.tgz", + "integrity": "sha512-ybO+tmH85pDO0ywTskmrMtZcccKyQr7Eb7wHy1keR2HFfx46SzZbjHo1AuGAX//Hook3gjM7+w211gJ2bwKe1Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz", + "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.43.1.tgz", + "integrity": "sha512-e/tMZYU1nc+k+J3259CQtqVZIPsPRSLNoAQbGEmSKrjLEY/KJSbpBZ17lu4dFVBzqoF1cZYIZxn9WPQxy4V9ng==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz", + "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.44.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.44.2.tgz", + "integrity": "sha512-arSp97Y4D2NWogoXRb8CzFK3W2ooVdvqRRtQDljFt9uC3zI6OuShgey6CVFC0JxT1iGjkAr1r4PDz23mWrFULQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz", + "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz", + "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz", + "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.57.2.tgz", + "integrity": "sha512-TR6YQA67cLSZzdxbf2SrbADJy2Y8eBW1+9mF15P0VK2MYcpdoUSmQTF1oMkBwa3B9NwqDFA2fq7wYTTutFQqaQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "0.57.2", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz", + "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz", + "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/instrumentation": "0.57.2", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz", + "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz", + "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz", + "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz", + "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz", + "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.43.1.tgz", + "integrity": "sha512-rK5YWC22gmsLp2aEbaPk5F+9r6BFFZuc9GTnW/ErrWpz2XNHUgeFInoPDg4t+Trs8OttIfn8XwkfFkSKqhxanw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz", + "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz", + "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz", + "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz", + "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.44.1.tgz", + "integrity": "sha512-4TXaqJK27QXoMqrt4+hcQ6rKFd8B6V4JfrTJKnqBmWR1cbaqd/uwyl9yxhNH1JEkyo8GaBfdpBC4ZE4FuUhPmg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.43.1.tgz", + "integrity": "sha512-TaMqP6tVx9/SxlY81dHlSyP5bWJIKq+K7vKfk4naB/LX4LBePPY3++1s0edpzH+RfwN+tEGVW9zTb9ci0up/lQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz", + "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.46.1.tgz", + "integrity": "sha512-HB8gD/9CNAKlTV+mdZehnFC4tLUtQ7e+729oGq88e4WipxzZxmMYuRwZ2vzOA9/APtq+MRkERJ9PcoDqSIjZ+g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.57.1", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.46.1.tgz", + "integrity": "sha512-AN7OvlGlXmlvsgbLHs6dS1bggp6Fcki+GxgYZdSrb/DB692TyfjR7sVILaCe0crnP66aJuXsg9cge3hptHs9UA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz", + "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.45.1.tgz", + "integrity": "sha512-Zd6Go9iEa+0zcoA2vDka9r/plYKaT3BhD3ESIy4JNIzFWXeQBGbH3zZxQIsz0jbNTMEtonlymU7eTLeaGWiApA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.44.1.tgz", + "integrity": "sha512-l4T/S7ByjpY5TCUPeDe1GPns02/5BpR0jroSMexyH3ZnXJt9PtYqx1IKAlOjaFEGEOQF2tGDsMi4PY5l+fSniQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.46.1.tgz", + "integrity": "sha512-9AsCVUAHOqvfe2RM/2I0DsDnx2ihw1d5jIN4+Bly1YPFTJIbk4+bXjAkr9+X6PUfhiV5urQHZkiYYPU1Q4yzPA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz", + "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz", + "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.44.1.tgz", + "integrity": "sha512-iexblTsT3fP0hHUz/M1mWr+Ylg3bsYN2En/jvKXZtboW3Qkvt17HrQJYTF9leVIkXAfN97QxAcTE99YGbQW7vQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.57.1", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.2.tgz", + "integrity": "sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-transformer": "0.57.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.2.tgz", + "integrity": "sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/otlp-exporter-base": "0.57.2", + "@opentelemetry/otlp-transformer": "0.57.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.2.tgz", + "integrity": "sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-logs": "0.57.2", + "@opentelemetry/sdk-metrics": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.16", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz", + "integrity": "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz", + "integrity": "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.30.1.tgz", + "integrity": "sha512-9l0FVP3F4+Z6ax27vMzkmhZdNtxAbDqEfy7rduzya3xFLaRiJSvOpw6cru6Edl5LwO+WvgNui+VzHa9ViE8wCg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.6.1.tgz", + "integrity": "sha512-Djr31QCExVfWViaf9cGJnH+bUInD72p0GEfgDGgjCAztyvyji6WJvKjs6qmkpPN+Ig6KLk0ho2VgzT5Kdl4L2Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.6.1.tgz", + "integrity": "sha512-o4sLzx149DQXDmVa8pgjBDEEKOj9SuQnkSLbjUVOpQNnn10v0WNR6wLwh30mFsK26xOJ6SpqZBGKZiT7i5MjlA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.33.1.tgz", + "integrity": "sha512-/aZJXI1rU6Eus04ih2vU0hxXAibXXMzH1WlDZ8bXcTJmhwmTY8cP392+6l7cWeMnTQOibBUz8UKV3nhcCBAefw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/gcp-metadata": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", + "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^6.1.1", + "google-logging-utils": "^0.0.2", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", + "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", + "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.57.2.tgz", + "integrity": "sha512-8BaeqZyN5sTuPBtAoY+UtKwXBdqyuRKmekN5bFzAO40CgbGzAxfTpiL3PBerT7rhZ7p2nBdq7FaMv/tBQgHE4A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/exporter-logs-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-logs-otlp-http": "0.57.2", + "@opentelemetry/exporter-logs-otlp-proto": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", + "@opentelemetry/exporter-metrics-otlp-proto": "0.57.2", + "@opentelemetry/exporter-prometheus": "0.57.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.57.2", + "@opentelemetry/exporter-trace-otlp-http": "0.57.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.57.2", + "@opentelemetry/exporter-zipkin": "1.30.1", + "@opentelemetry/instrumentation": "0.57.2", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/sdk-logs": "0.57.2", + "@opentelemetry/sdk-metrics": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/sdk-trace-node": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz", + "integrity": "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.30.1", + "@opentelemetry/core": "1.30.1", + "@opentelemetry/propagator-b3": "1.30.1", + "@opentelemetry/propagator-jaeger": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@peculiar/asn1-android": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.5.0.tgz", + "integrity": "sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.5.0.tgz", + "integrity": "sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-x509-attr": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.5.0.tgz", + "integrity": "sha512-ioigvA6WSYN9h/YssMmmoIwgl3RvZlAYx4A/9jD2qaqXZwGcNlAxaw54eSx2QG1Yu7YyBC5Rku3nNoHrQ16YsQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz", + "integrity": "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.5.0.tgz", + "integrity": "sha512-Vj0d0wxJZA+Ztqfb7W+/iu8Uasw6hhKtCdLKXLG/P3kEPIQpqGI4P4YXlROfl7gOCqFIbgsj1HzFIFwQ5s20ug==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.5.0", + "@peculiar/asn1-pkcs8": "^2.5.0", + "@peculiar/asn1-rsa": "^2.5.0", + "@peculiar/asn1-schema": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.5.0.tgz", + "integrity": "sha512-L7599HTI2SLlitlpEP8oAPaJgYssByI4eCwQq2C9eC90otFpm8MRn66PpbKviweAlhinWQ3ZjDD2KIVtx7PaVw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.5.0.tgz", + "integrity": "sha512-UgqSMBLNLR5TzEZ5ZzxR45Nk6VJrammxd60WMSkofyNzd3DQLSNycGWSK5Xg3UTYbXcDFyG8pA/7/y/ztVCa6A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.5.0", + "@peculiar/asn1-pfx": "^2.5.0", + "@peculiar/asn1-pkcs8": "^2.5.0", + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-x509-attr": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz", + "integrity": "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz", + "integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz", + "integrity": "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.5.0.tgz", + "integrity": "sha512-9f0hPOxiJDoG/bfNLAFven+Bd4gwz/VzrCIIWc1025LEI4BXO0U5fOCTNDPbbp2ll+UzqKsZ3g61mpBp74gk9A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.0.tgz", + "integrity": "sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.5.0", + "@peculiar/asn1-csr": "^2.5.0", + "@peculiar/asn1-ecc": "^2.5.0", + "@peculiar/asn1-pkcs9": "^2.5.0", + "@peculiar/asn1-rsa": "^2.5.0", + "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-x509": "^2.5.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -1802,6 +4261,657 @@ "dev": true, "license": "MIT" }, + "node_modules/@simplewebauthn/browser": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.2.0.tgz", + "integrity": "sha512-N3fuA1AAnTo5gCStYoIoiasPccC+xPLx2YU88Dv0GeAmPQTWHETlZQq5xZ0DgUq1H9loXMWQH5qqUjcI7BHJ1A==", + "license": "MIT" + }, + "node_modules/@simplewebauthn/server": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@simplewebauthn/server/-/server-13.2.1.tgz", + "integrity": "sha512-Inmfye5opZXe3HI0GaksqBnQiM7glcNySoG6DH1GgkO1Lh9dvuV4XSV9DK02DReUVX39HpcDob9nxHELjECoQw==", + "license": "MIT", + "dependencies": { + "@hexagon/base64": "^1.1.27", + "@levischuck/tiny-cbor": "^0.2.2", + "@peculiar/asn1-android": "^2.3.10", + "@peculiar/asn1-ecc": "^2.3.8", + "@peculiar/asn1-rsa": "^2.3.8", + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/asn1-x509": "^2.3.8", + "@peculiar/x509": "^1.13.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.0.tgz", + "integrity": "sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.0.tgz", + "integrity": "sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.14.0.tgz", + "integrity": "sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-stream": "^4.4.0", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.0.tgz", + "integrity": "sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.0.tgz", + "integrity": "sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/querystring-builder": "^4.2.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.0.tgz", + "integrity": "sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.0.tgz", + "integrity": "sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.0.tgz", + "integrity": "sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.0.tgz", + "integrity": "sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.14.0", + "@smithy/middleware-serde": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/url-parser": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.0.tgz", + "integrity": "sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/service-error-classification": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-retry": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.0.tgz", + "integrity": "sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.0.tgz", + "integrity": "sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.0.tgz", + "integrity": "sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.0", + "@smithy/shared-ini-file-loader": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.3.0.tgz", + "integrity": "sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/querystring-builder": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.0.tgz", + "integrity": "sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.0.tgz", + "integrity": "sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.0.tgz", + "integrity": "sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.0.tgz", + "integrity": "sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.0.tgz", + "integrity": "sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.0.tgz", + "integrity": "sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.0.tgz", + "integrity": "sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.0", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.7.0.tgz", + "integrity": "sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.14.0", + "@smithy/middleware-endpoint": "^4.3.0", + "@smithy/middleware-stack": "^4.2.0", + "@smithy/protocol-http": "^5.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-stream": "^4.4.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.6.0.tgz", + "integrity": "sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.0.tgz", + "integrity": "sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.2.0.tgz", + "integrity": "sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.0.tgz", + "integrity": "sha512-U8q1WsSZFjXijlD7a4wsDQOvOwV+72iHSfq1q7VD+V75xP/pdtm0WIGuaFJ3gcADDOKj2MIBn4+zisi140HEnQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.2.0.tgz", + "integrity": "sha512-qzHp7ZDk1Ba4LDwQVCNp90xPGqSu7kmL7y5toBpccuhi3AH7dcVBIT/pUxYcInK4jOy6FikrcTGq5wxcka8UaQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.0.tgz", + "integrity": "sha512-FxUHS3WXgx3bTWR6yQHNHHkQHZm/XKIi/CchTnKvBulN6obWpcbzJ6lDToXn+Wp0QlVKd7uYAz2/CTw1j7m+Kg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.3.0", + "@smithy/credential-provider-imds": "^4.2.0", + "@smithy/node-config-provider": "^4.3.0", + "@smithy/property-provider": "^4.2.0", + "@smithy/smithy-client": "^4.7.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.0.tgz", + "integrity": "sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.0.tgz", + "integrity": "sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.0.tgz", + "integrity": "sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.0", + "@smithy/types": "^4.6.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.4.0.tgz", + "integrity": "sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.0", + "@smithy/node-http-handler": "^4.3.0", + "@smithy/types": "^4.6.0", + "@smithy/util-base64": "^4.2.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -2098,6 +5208,39 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/aws-lambda": { + "version": "8.10.147", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", + "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", + "license": "MIT" + }, + "node_modules/@types/bunyan": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", + "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -2119,16 +5262,70 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.19.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "node_modules/@types/nodemailer": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.2.tgz", + "integrity": "sha512-Zo6uOA9157WRgBk/ZhMpTQ/iCWLMk7OIs/Q9jvHarMvrzUUP/MDdPHL2U1zpf57HrrWGv4nYQn5uIxna0xY3xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-sesv2": "^3.839.0", + "@types/node": "*" + } + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, "node_modules/@types/react": { "version": "19.1.15", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.15.tgz", @@ -2158,6 +5355,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -2735,7 +5947,6 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, "license": "MIT", "peer": true, "bin": { @@ -2745,6 +5956,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2772,11 +5992,19 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2977,6 +6205,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", @@ -3037,6 +6279,81 @@ "dev": true, "license": "MIT" }, + "node_modules/better-auth": { + "version": "1.3.25", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.3.25.tgz", + "integrity": "sha512-prTPitTvhIbYPeO/M1QrkveT5afbkyV1OAfnSxYe3WfgTdKgRiEO3tMIPzwmKA54zSWw6XBYKtSD9uIuAAfvuQ==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.3.25", + "@better-auth/utils": "0.3.0", + "@better-fetch/fetch": "^1.1.18", + "@noble/ciphers": "^2.0.0", + "@noble/hashes": "^2.0.0", + "@simplewebauthn/browser": "^13.1.2", + "@simplewebauthn/server": "^13.1.2", + "better-call": "1.0.19", + "defu": "^6.1.4", + "jose": "^6.1.0", + "kysely": "^0.28.5", + "nanostores": "^1.0.1", + "zod": "^4.1.5" + }, + "peerDependenciesMeta": { + "@lynx-js/react": { + "optional": true + }, + "@sveltejs/kit": { + "optional": true + }, + "next": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "solid-js": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/better-call": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.0.19.tgz", + "integrity": "sha512-sI3GcA1SCVa3H+CDHl8W8qzhlrckwXOTKhqq3OOPXjgn5aTOMIqGY34zLY/pHA6tRRMjTUC3lz5Mi7EbDA24Kw==", + "dependencies": { + "@better-auth/utils": "^0.3.0", + "@better-fetch/fetch": "^1.1.4", + "rou3": "^0.5.1", + "set-cookie-parser": "^2.7.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bowser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "dev": true, + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -3150,11 +6467,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3177,6 +6499,12 @@ "node": ">=18" } }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, "node_modules/class-variance-authority": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", @@ -3195,6 +6523,41 @@ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -3224,7 +6587,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3237,7 +6599,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/concat-map": { @@ -3253,6 +6614,15 @@ "integrity": "sha512-igoAbJvlD/foOq4+aB3t24Hndvb5y/DasXcrVOtJMZ0UFLgfYq/mPMcCcSjJAIykLcTWOHZehZgNUJyaKMz1iA==", "license": "MIT" }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -3396,6 +6766,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", @@ -3650,6 +7026,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4091,6 +7476,12 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4142,6 +7533,25 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -4232,11 +7642,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "license": "MIT" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4273,6 +7688,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -4395,6 +7819,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/google-logging-utils": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", + "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4439,7 +7872,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4503,11 +7935,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4543,6 +7984,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-in-the-middle": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.4.tgz", + "integrity": "sha512-eWjxh735SJLFJJDs5X82JQ2405OdJeAHDBnaoFCfdr5GVc7AWc9xU7KbrF+3Xd5F2ccP1aQFKtY+65X6EfKZ7A==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4553,6 +8006,91 @@ "node": ">=0.8.19" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inngest": { + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/inngest/-/inngest-3.44.0.tgz", + "integrity": "sha512-FL+ztXhVaQTO5ARxXoXuoZ3FA7xSEPZxwcoYK1gzwJOlIC/wI6XzPcIPkG06eoIxtI9aDeU2p8agsf3GnhMD2w==", + "license": "Apache-2.0", + "dependencies": { + "@bufbuild/protobuf": "^2.2.3", + "@inngest/ai": "^0.1.3", + "@jpwilliams/waitgroup": "^2.1.1", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.56.1", + "@opentelemetry/context-async-hooks": "^1.30.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.57.2", + "@opentelemetry/instrumentation": "^0.57.2", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-trace-base": "^1.30.1", + "@standard-schema/spec": "^1.0.0", + "@types/debug": "^4.1.12", + "canonicalize": "^1.0.8", + "chalk": "^4.1.2", + "cross-fetch": "^4.0.0", + "debug": "^4.3.4", + "hash.js": "^1.1.7", + "json-stringify-safe": "^5.0.1", + "ms": "^2.1.3", + "serialize-error-cjs": "^0.1.3", + "strip-ansi": "^5.2.0", + "temporal-polyfill": "^0.2.5", + "zod": "^4.0.17" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@sveltejs/kit": ">=1.27.3", + "@vercel/node": ">=2.15.9", + "aws-lambda": ">=1.0.7", + "express": ">=4.19.2", + "fastify": ">=4.21.0", + "h3": ">=1.8.1", + "hono": ">=4.2.7", + "koa": ">=2.14.2", + "next": ">=12.0.0", + "typescript": ">=5.8.0", + "zod": ">=3.24.0" + }, + "peerDependenciesMeta": { + "@sveltejs/kit": { + "optional": true + }, + "@vercel/node": { + "optional": true + }, + "aws-lambda": { + "optional": true + }, + "express": { + "optional": true + }, + "fastify": { + "optional": true + }, + "h3": { + "optional": true + }, + "hono": { + "optional": true + }, + "koa": { + "optional": true + }, + "next": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -4666,7 +8204,6 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4739,6 +8276,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", @@ -4872,6 +8418,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -5011,6 +8569,15 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jose": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.0.tgz", + "integrity": "sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5031,6 +8598,15 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -5052,6 +8628,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -5100,6 +8682,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kysely": { + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.7.tgz", + "integrity": "sha512-u/cAuTL4DRIiO2/g4vNGRgklEKNIj5Q3CG7RoUB5DV5SfEC2hMvPxKi0GWPmnzwL2ryIeud2VTcEEmqzTzEPNw==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -5389,6 +8980,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5396,6 +8993,12 @@ "dev": true, "license": "MIT" }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5468,6 +9071,12 @@ "node": ">=8.6" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5514,6 +9123,12 @@ "node": ">= 18" } }, + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "license": "MIT" + }, "node_modules/mongodb": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.20.0.tgz", @@ -5637,6 +9252,21 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanostores": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nanostores/-/nanostores-1.0.1.tgz", + "integrity": "sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, "node_modules/napi-postinstall": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", @@ -5665,6 +9295,7 @@ "resolved": "https://registry.npmjs.org/next/-/next-15.5.4.tgz", "integrity": "sha512-xH4Yjhb82sFYQfY3vbkJfgSDgXvBB6a8xPs9i35k6oZJRoQRihZH+4s9Yo2qsWpzBmZ3lPXaJ2KPXLfkvW4LnA==", "license": "MIT", + "peer": true, "dependencies": { "@next/env": "15.5.4", "@swc/helpers": "0.5.15", @@ -5712,6 +9343,16 @@ } } }, + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -5740,6 +9381,57 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nodemailer": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.6.tgz", + "integrity": "sha512-F44uVzgwo49xboqbFgBGkRaiMgtoBrBEWCVincJPK9+S9Adkzt/wXCLKbf7dxucmxfTI5gHGB+bEmdyzN6QKjw==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5968,9 +9660,39 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6029,6 +9751,45 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6051,6 +9812,30 @@ "react-is": "^16.13.1" } }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6060,6 +9845,24 @@ "node": ">=6" } }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6214,6 +10017,12 @@ } } }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -6258,11 +10067,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", @@ -6310,6 +10141,12 @@ "node": ">=0.10.0" } }, + "node_modules/rou3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.5.1.tgz", + "integrity": "sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==", + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6399,7 +10236,6 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6408,6 +10244,22 @@ "node": ">=10" } }, + "node_modules/serialize-error-cjs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/serialize-error-cjs/-/serialize-error-cjs-0.1.4.tgz", + "integrity": "sha512-6a6dNqipzbCPlTFgztfNP2oG+IGcflMe/01zSzGrQcxGMKbIjOemBBD85pH92klWaJavAUWxAh9Z0aU28zxW6A==", + "deprecated": "Rolling release, please update to 0.2.0", + "license": "MIT-0", + "funding": { + "url": "https://github.com/sponsors/finwo" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6523,6 +10375,12 @@ "node": ">=8" } }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause" + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -6605,6 +10463,16 @@ "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", "license": "MIT" }, + "node_modules/sonner": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz", + "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6644,6 +10512,47 @@ "node": ">= 0.4" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -6757,6 +10666,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -6780,6 +10701,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -6807,7 +10741,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -6820,7 +10753,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6877,6 +10809,21 @@ "node": ">=18" } }, + "node_modules/temporal-polyfill": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.5.tgz", + "integrity": "sha512-ye47xp8Cb0nDguAhrrDS1JT1SzwEV9e26sSsrWzVu+yPZ7LzceEcH0i2gci9jWfOfSCCgM3Qv5nOYShVUUFUXA==", + "license": "MIT", + "dependencies": { + "temporal-spec": "^0.2.4" + } + }, + "node_modules/temporal-spec": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.4.tgz", + "integrity": "sha512-lDMFv4nKQrSjlkHKAlHVqKrBG4DyFfa9F74cmBZ3Iy3ed8yvWnlWSIdi4IKfSqwmazAohBNwiN64qGx4y5Q3IQ==", + "license": "ISC" + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -6983,6 +10930,24 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/tw-animate-css": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", @@ -7088,7 +11053,6 @@ "version": "5.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "dev": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -7118,11 +11082,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, "license": "MIT" }, "node_modules/unrs-resolver": { @@ -7222,6 +11191,19 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -7359,6 +11341,62 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", @@ -7369,6 +11407,33 @@ "node": ">=18" } }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7381,6 +11446,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 8f15524..89d2bc0 100644 --- a/package.json +++ b/package.json @@ -17,26 +17,32 @@ "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-slot": "^1.2.3", + "better-auth": "^1.3.25", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "country-data-list": "^1.5.5", "dotenv": "^17.2.3", + "inngest": "^3.44.0", "lucide-react": "^0.544.0", "mongodb": "^6.20.0", "mongoose": "^8.19.0", "next": "15.5.4", + "next-themes": "^0.4.6", + "nodemailer": "^7.0.6", "react": "19.1.0", "react-circle-flags": "^0.0.23", "react-dom": "19.1.0", "react-hook-form": "^7.63.0", "react-select-country-list": "^2.2.3", + "sonner": "^2.0.7", "tailwind-merge": "^3.3.1" }, "devDependencies": { "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4", "@types/node": "^20", + "@types/nodemailer": "^7.0.2", "@types/react": "^19", "@types/react-dom": "^19", "@types/react-select-country-list": "^2.2.3", diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png index 5c177f17e2a1e048965e90e97dc758ab641dfe38..a1917fa5cf8d06ea009998cda831f75760710423 100644 GIT binary patch literal 41711 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 RNEHA+R1`E3<#J|${{tkGY{CEl delta 2232 zcmV;p2uJtt#R9z%Hi=M9M-2)Z3IG5A4M|8uQUCw|f&c&j9tZ{i007{p#>D^t010qN zS#tmY3ljhU3ljkVnw%JsAs>GTQb|NXRCodHTF-AAMHGHZ5I>{}QUpi{L?#lI5CUR; zN!+?Qrk5svK{l;8H{}e(5jQyCo;aa65}cEAs4EU+djhG2x~N5}N|h~ws;X4g6i|z3 zI=pZ9jXgWw^{$R_d&1^i{BIqAybtmS9-kbGF8e)IP;2|1f2pSS$ z2*JbDC-mt+k=ARS1n;Q#R(+m^*wN^l2m)pOev*dR@#ske-u;{(FG40h^RV>n7gx1>UMivu*hzpPMbhQ`=fX0uYhlw_HxwUpxaF<*rBqktJFs`96*1Z!!$%MfC#=7kL;JF zT*Hl#4SHf@g!)C(3tO-2w_)yLOXCq8Em3SbBh8pe5CwIC*~)r9&*^XxunIQO?guL| zXZ_x`@e~r_lNYYg$z6Zb7Z(&gal1cB!6aDFmb-a~vIU+4R})0GFy!A&Ui2CMdD_Y6 z^Sf1kM|lwQ7;t}>kfci->Xb}y#c4AV>!hsoraZgq$P#hV9*Dh{I%7k=Gn~Ip<RvOEpYR#n2Rm5$xHkX46> zyQbBbBC(5lCQFArR5cZr3aInH6XQ*KaF&pYuN*9{A~o6>*d@x?7bo4Fe-qJ&H#BAKq?^XIP8 ztm5}D~${Wfgz0?6>;*zff5rRP&+K!O8%*6IA?x8nF9BrxDH)x@-6m#Lg= zv1#Lc7~tUo6T9DuFIql2p9Rn*rpMnO0#^H&-vBESlK`uvp^tNY2H zAnY2}#ZE(Kk|DVIwA!GJweyePj^k}Ba!k)lhgG|QTm2t@WH%v@MT%J`o1%{J$-<~p zr`wOd`&9&4eDu?&Ery(q-~wD1WKIWxSk%L13DMRFr*_?<_x40F37QEBparT{-YS2H z0dsFO1IRG*@-IFQTOr;i0SM&r}Ze4q+B;5OZ z%6C5lf$N7$!~FS@guY_o2GJy$5UYb@^eSZ&S#c<>quN9`_|k=Gwg@%}0(oT%qb@SU zo#Kv+koQKL1e!(5RNDt93#91;mBW9i48jE0zZ*g64*n0yhue1G#Aj)XAQNwkIeZ}7 zjfKnmP&PmtO2`a1Fef4uB!kF~ob08>7Q2Sm^g97FqMk{DDG^5vZ7QwWZi34lvaHBL zTy~!~E@c!G!0hOsz&$7q#XH4arLttw^ePP*^(v+KRIb6w}-v=hJHt1X?LhjnW# z>$(`|hqC&+mXRl}Gtmf-@~xZKW?0%1xR{E?T1PX0K-gWHMUc@2jnsctZ`8BC49Hcj z5mr%;tRW?rHHFp&Cj}8$a9a>rb5eGaw(yg?oJi&}>O?wr-lp4=Hc-!Uk8B}zUtwqU zE2%U7dt7&1g67Wd^J-KCSO(klPo;Fhibbr_cL#aU$?ce;jv0+85n-i{eL6YH*(URd z^IgE!MZiqI=kSa+(N}-dZ}c;?`)hWp=WTj!>~@Gc|G^dYD1-dwA}i|j3$EdK$~Ba` z0|yz7vuSIH`N0KJgH27Ro`CKF=)`2F%pnI{z(9yDWxN~2Z|`V$?O!0nW3k%wB_*Q7 zP1JkV@C~zTgW2V=b#&f+?C zL{t23g41ATd@CJ!=QisOwgciKvOXgN80X@HNCLpiOl`FPU96vrmXIJ`?jb9X2T|na zgAdTOHN%4lujku@5I*O^C5VcHP6;*y+}edqfRKjRvG@-=oe=Mh^Y0M=0000