diff --git a/.env.example b/.env.example index 0ad8d96..860db75 100644 --- a/.env.example +++ b/.env.example @@ -1,53 +1,17 @@ -# ================================ -# APPLICATION SETTINGS -# ================================ -NEXT_PUBLIC_APP_URL='http://localhost:3000' -NODE_ENV=development -APP_NAME="Flash Fathom AI" -APP_DESCRIPTION="Your AI-powered flashcard generator" -APP_VERSION="1.0.0" -APP_HOST=localhost -APP_PORT=3000 - -# ================================ -# POSTGRESQL CONFIGURATION -# ================================ -POSTGRES_DB=flashfathom -POSTGRES_USER=postgres -POSTGRES_PASSWORD=your_secure_password_here -POSTGRES_PORT=5432 - -# ================================ -# CLERK AUTHENTICATION -# ================================ -NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="your nextjs publishable key" -CLERK_SECRET_KEY="your clerk secret key" +# Clerk +NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= +CLERK_SECRET_KEY= -# Clerk URLs -NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in -NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up -NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/generate -NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/ +# Razorpay +NEXT_PUBLIC_RAZORPAY_KEY_ID= +RAZORPAY_KEY_ID= +RAZORPAY_KEY_SECRET= -# ================================ -# AI APIS -# ================================ -GEMINI_API_KEY="" +# Database +DATABASE_URL= -# ================================ -# EMAIL CONFIGURATION -# ================================ -EMAIL_USER= -EMAIL_PASS= +# Gemini API +GEMINI_API_KEY= -# ================================ -# DATABASE URL (Updated for Docker) -# ================================ -DATABASE_URL="postgresql://postgres:your_secure_password_here@postgres:5432/flashfathom" - -# ================================ -# RAZORPAY CONFIGURATION -# ================================ -RAZORPAY_KEY_ID="your_razorpay_key_id" -RAZORPAY_KEY_SECRET="your_razorpay_key_secret" -NEXT_PUBLIC_RAZORPAY_KEY_ID="your_razorpay_key_id" +# App Port +APP_PORT=3000 diff --git a/.gitignore b/.gitignore index 011c715..176f698 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# clerk configuration (can include secrets) +/.clerk/ diff --git a/Dockerfile b/Dockerfile index ec88d44..8bf9669 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,8 @@ # ================================ FROM node:18-alpine AS builder -# Install system dependencies -RUN apk add --no-cache openssl libc6-compat postgresql-client +# Install system dependencies, including the required OpenSSL 1.1 library +RUN apk add --no-cache openssl1.1-compat libc6-compat postgresql-client WORKDIR /app @@ -58,8 +58,8 @@ ENV NEXT_TELEMETRY_DISABLED=1 # Enable corepack and install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate -# Install runtime dependencies INCLUDING postgresql-client for pg_isready -RUN apk add --no-cache openssl libc6-compat postgresql-client +# Install runtime dependencies, including the required OpenSSL 1.1 library +RUN apk add --no-cache openssl1.1-compat libc6-compat postgresql-client # Create non-root user RUN addgroup --system --gid 1001 flashfathom \ diff --git a/next.config.js b/next.config.js index 71e244f..3e1e7c2 100644 --- a/next.config.js +++ b/next.config.js @@ -1,9 +1,13 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - output: 'standalone', + // Remove standalone output to avoid Windows symlink permission issues + // output: 'standalone', transpilePackages: ['react-toastify'], // ✅ FIXED: Updated for Next.js 15 stable serverExternalPackages: ['@prisma/client'], // Moved from experimental + // Disable static generation to avoid Clerk issues during build + trailingSlash: false, + generateEtags: false, turbopack: { // ✅ FIXED: Moved from experimental.turbo rules: { diff --git a/package.json b/package.json index 6efbafe..5ba5c7e 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@vercel/analytics": "^1.5.0", "axios": "^1.8.2", "button": "^1.1.1", + "chart.js": "^4.5.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "dotenv": "^16.4.7", @@ -45,6 +46,7 @@ "nodemailer": "^6.10.0", "razorpay": "^2.9.6", "react": "^19.0.0", + "react-chartjs-2": "^5.3.0", "react-dom": "^19.0.0", "react-hook-form": "^7.54.2", "react-toastify": "^11.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbf4b98..060970b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,6 +72,9 @@ importers: button: specifier: ^1.1.1 version: 1.1.1 + chart.js: + specifier: ^4.5.0 + version: 4.5.0 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -108,6 +111,9 @@ importers: react: specifier: ^19.0.0 version: 19.1.1 + react-chartjs-2: + specifier: ^5.3.0 + version: 5.3.0(chart.js@4.5.0)(react@19.1.1) react-dom: specifier: ^19.0.0 version: 19.1.1(react@19.1.1) @@ -138,7 +144,7 @@ importers: devDependencies: '@types/node': specifier: ^20.17.24 - version: 20.19.12 + version: 20.19.13 '@types/react': specifier: 19.1.8 version: 19.1.8 @@ -183,44 +189,44 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-ses@3.879.0': - resolution: {integrity: sha512-6yydcKf01tXAIsya5YBOcznvGN4DN8crLEuYC0jwG+67loCeq2HZMO1rL3ouaIllCSgmO0l7KHDK62BQr3Z3Zg==} + '@aws-sdk/client-ses@3.882.0': + resolution: {integrity: sha512-Ao+AKBOg9kX1EhTefcKTawfg71NMEWkL9EB0gZlfjoLbDCWNNW5SDbSXh9wvCJ9+P2S7ubLbn/9Qe+wugBFQ1A==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.879.0': - resolution: {integrity: sha512-+Pc3OYFpRYpKLKRreovPM63FPPud1/SF9vemwIJfz6KwsBCJdvg7vYD1xLSIp5DVZLeetgf4reCyAA5ImBfZuw==} + '@aws-sdk/client-sso@3.882.0': + resolution: {integrity: sha512-JFWJB+2PZvygDuqb4iWKCro1Tl5L4tGBXMHe94jYMYnfajYGm58bW3RsPj3cKD2+TvIMUSXmNriNv+LbDKZmNw==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.879.0': - resolution: {integrity: sha512-AhNmLCrx980LsK+SfPXGh7YqTyZxsK0Qmy18mWmkfY0TSq7WLaSDB5zdQbgbnQCACCHy8DUYXbi4KsjlIhv3PA==} + '@aws-sdk/core@3.882.0': + resolution: {integrity: sha512-m43/gEDbxqxLT/Mbn/OA21TuFpyocOUzjiSA2HBnLQ3KivA4ez0nsW91vh0Sp3TOfLgiZbRbVhmI6XfsFinwBg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.879.0': - resolution: {integrity: sha512-JgG7A8SSbr5IiCYL8kk39Y9chdSB5GPwBorDW8V8mr19G9L+qd6ohED4fAocoNFaDnYJ5wGAHhCfSJjzcsPBVQ==} + '@aws-sdk/credential-provider-env@3.882.0': + resolution: {integrity: sha512-khhE1k+4XvGm8Mk6vVUbrVvEnx3r8E6dymSKSiAKf0lwsnKWAWd1RLGwLusqVgtGR4Jfsrbg7ox9MczIjgCiTg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.879.0': - resolution: {integrity: sha512-2hM5ByLpyK+qORUexjtYyDZsgxVCCUiJQZRMGkNXFEGz6zTpbjfTIWoh3zRgWHEBiqyPIyfEy50eIF69WshcuA==} + '@aws-sdk/credential-provider-http@3.882.0': + resolution: {integrity: sha512-j3mBF+Q6RU3u8t5O1KOWbQQCi0WNSl47sNIa1RvyN6qK1WIA8BxM1hB25mI9TMPrNZMFthljVec+JcNjRNG34A==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.879.0': - resolution: {integrity: sha512-07M8zfb73KmMBqVO5/V3Ea9kqDspMX0fO0kaI1bsjWI6ngnMye8jCE0/sIhmkVAI0aU709VA0g+Bzlopnw9EoQ==} + '@aws-sdk/credential-provider-ini@3.882.0': + resolution: {integrity: sha512-nUacsSYKyTUmv/Fqe0efihCRCabea5MZtGSZF0l2V8QBo39yJjw0wVmRK6G4bfm5lY7v2EVVIUCpiTvxRRUbHg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.879.0': - resolution: {integrity: sha512-FYaAqJbnSTrVL2iZkNDj2hj5087yMv2RN2GA8DJhe7iOJjzhzRojrtlfpWeJg6IhK0sBKDH+YXbdeexCzUJvtA==} + '@aws-sdk/credential-provider-node@3.882.0': + resolution: {integrity: sha512-sELdV+leCfY+Bw8NQo3H65oIT+9thqZU0RWyv85EfZVvKEwWDt4McA7+Co1VkH+nCY21s5jz4SOqIrYuT0cSQg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.879.0': - resolution: {integrity: sha512-7r360x1VyEt35Sm1JFOzww2WpnfJNBbvvnzoyLt7WRfK0S/AfsuWhu5ltJ80QvJ0R3AiSNbG+q/btG2IHhDYPQ==} + '@aws-sdk/credential-provider-process@3.882.0': + resolution: {integrity: sha512-S3BgGcaR+L7CQAQn3Ysy9KSnck7+hDicAGM/dYvvJ8GwZNIOc0542Y+ntpV1UYa7OuZPWzGy2v2NcJSCbYDXEA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.879.0': - resolution: {integrity: sha512-gd27B0NsgtKlaPNARj4IX7F7US5NuU691rGm0EUSkDsM7TctvJULighKoHzPxDQlrDbVI11PW4WtKS/Zg5zPlQ==} + '@aws-sdk/credential-provider-sso@3.882.0': + resolution: {integrity: sha512-1pZRTKiDl6Oh/jP75lEoSkJrer1YEm8lMconB8dX9bsaWbp9cZeMJMK6pts5VQcveeOLr/8/U9TESboPjHBcyA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.879.0': - resolution: {integrity: sha512-Jy4uPFfGzHk1Mxy+/Wr43vuw9yXsE2yiF4e4598vc3aJfO0YtA2nSfbKD3PNKRORwXbeKqWPfph9SCKQpWoxEg==} + '@aws-sdk/credential-provider-web-identity@3.882.0': + resolution: {integrity: sha512-EvpsD0Vcz5WgXjpC53KAQ2CkeUp0KwwiV6brgQTXl+9yV/M8M0aK5Qk5ep/MPbAn5gtbqXHaCkiExaN4YYOhCg==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-host-header@3.873.0': @@ -235,20 +241,20 @@ packages: resolution: {integrity: sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.879.0': - resolution: {integrity: sha512-DDSV8228lQxeMAFKnigkd0fHzzn5aauZMYC3CSj6e5/qE7+9OwpkUcjHfb7HZ9KWG6L2/70aKZXHqiJ4xKhOZw==} + '@aws-sdk/middleware-user-agent@3.882.0': + resolution: {integrity: sha512-IdLVpV2b0qryxFb/gNPwZoayLUdgmb41fWpLiIf99pyNwR7TGs/9Ri2amS3PnaQHuES947xYSYZ9Ej0kBgjHKg==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.879.0': - resolution: {integrity: sha512-7+n9NpIz9QtKYnxmw1fHi9C8o0GrX8LbBR4D50c7bH6Iq5+XdSuL5AFOWWQ5cMD0JhqYYJhK/fJsVau3nUtC4g==} + '@aws-sdk/nested-clients@3.882.0': + resolution: {integrity: sha512-IQkOtl/DhLV5+tJI7ZwjBDJO1lIoYOcmNQzcg8ly9RTdMoTcEtklevxmAwWB4DEFiIctUk2OSjHqhfWjeYredA==} engines: {node: '>=18.0.0'} '@aws-sdk/region-config-resolver@3.873.0': resolution: {integrity: sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.879.0': - resolution: {integrity: sha512-47J7sCwXdnw9plRZNAGVkNEOlSiLb/kR2slnDIHRK9NB/ECKsoqgz5OZQJ9E2f0yqOs8zSNJjn3T01KxpgW8Qw==} + '@aws-sdk/token-providers@3.882.0': + resolution: {integrity: sha512-/Z6F8Cc+QjBMEPh3ZXy7JM1vMZCS41+Nh9VgdUwvvdJTA7LRXSDBRDL3cQPa7bii9unZ8SqsIC+7Nlw1LKwwJA==} engines: {node: '>=18.0.0'} '@aws-sdk/types@3.862.0': @@ -266,8 +272,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.873.0': resolution: {integrity: sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA==} - '@aws-sdk/util-user-agent-node@3.879.0': - resolution: {integrity: sha512-A5KGc1S+CJRzYnuxJQQmH1BtGsz46AgyHkqReKfGiNQA8ET/9y9LQ5t2ABqnSBHHIh3+MiCcQSkUZ0S3rTodrQ==} + '@aws-sdk/util-user-agent-node@3.882.0': + resolution: {integrity: sha512-7zPtGXeAs6UzKjrrSbMNiFMSLZ/2DWvJ26KBOasS3zQbL534yoNos4HUA3OOXSpKFBAIEcYWu6rzR4ptlvx50w==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -540,6 +546,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@kurkle/color@0.3.4': + resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -991,176 +1000,176 @@ packages: '@rushstack/eslint-patch@1.12.0': resolution: {integrity: sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==} - '@smithy/abort-controller@4.0.5': - resolution: {integrity: sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==} + '@smithy/abort-controller@4.1.0': + resolution: {integrity: sha512-wEhSYznxOmx7EdwK1tYEWJF5+/wmSFsff9BfTOn8oO/+KPl3gsmThrb6MJlWbOC391+Ya31s5JuHiC2RlT80Zg==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.1.5': - resolution: {integrity: sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==} + '@smithy/config-resolver@4.2.0': + resolution: {integrity: sha512-FA10YhPFLy23uxeWu7pOM2ctlw+gzbPMTZQwrZ8FRIfyJ/p8YIVz7AVTB5jjLD+QIerydyKcVMZur8qzzDILAQ==} engines: {node: '>=18.0.0'} - '@smithy/core@3.9.2': - resolution: {integrity: sha512-H7H+dnfyHa/XXmZB3+IcqB1snIvbXaeGbV7//PMY69YKMOfGtuHPg6aukxsD0TyqmIU+bcX5nitR+nf/19nTlQ==} + '@smithy/core@3.10.0': + resolution: {integrity: sha512-bXyD3Ij6b1qDymEYlEcF+QIjwb9gObwZNaRjETJsUEvSIzxFdynSQ3E4ysY7lUFSBzeWBNaFvX+5A0smbC2q6A==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.0.7': - resolution: {integrity: sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==} + '@smithy/credential-provider-imds@4.1.0': + resolution: {integrity: sha512-iVwNhxTsCQTPdp++4C/d9xvaDmuEWhXi55qJobMp9QMaEHRGH3kErU4F8gohtdsawRqnUy/ANylCjKuhcR2mPw==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.1.1': - resolution: {integrity: sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==} + '@smithy/fetch-http-handler@5.2.0': + resolution: {integrity: sha512-VZenjDdVaUGiy3hwQtxm75nhXZrhFG+3xyL93qCQAlYDyhT/jeDWM8/3r5uCFMlTmmyrIjiDyiOynVFchb0BSg==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.0.5': - resolution: {integrity: sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==} + '@smithy/hash-node@4.1.0': + resolution: {integrity: sha512-mXkJQ/6lAXTuoSsEH+d/fHa4ms4qV5LqYoPLYhmhCRTNcMMdg+4Ya8cMgU1W8+OR40eX0kzsExT7fAILqtTl2w==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.0.5': - resolution: {integrity: sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==} + '@smithy/invalid-dependency@4.1.0': + resolution: {integrity: sha512-4/FcV6aCMzgpM4YyA/GRzTtG28G0RQJcWK722MmpIgzOyfSceWcI9T9c8matpHU9qYYLaWtk8pSGNCLn5kzDRw==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + '@smithy/is-array-buffer@4.1.0': + resolution: {integrity: sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.0.5': - resolution: {integrity: sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==} + '@smithy/middleware-content-length@4.1.0': + resolution: {integrity: sha512-x3dgLFubk/ClKVniJu+ELeZGk4mq7Iv0HgCRUlxNUIcerHTLVmq7Q5eGJL0tOnUltY6KFw5YOKaYxwdcMwox/w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.1.21': - resolution: {integrity: sha512-VCFE6LGSbnXs6uxLTdtar6dbkOHa9mrj692pZJx1mQVEzk0gvckAX9WB9BzlONUpv92QBWGezROz/+yEitQjAQ==} + '@smithy/middleware-endpoint@4.2.0': + resolution: {integrity: sha512-J1eCF7pPDwgv7fGwRd2+Y+H9hlIolF3OZ2PjptonzzyOXXGh/1KGJAHpEcY1EX+WLlclKu2yC5k+9jWXdUG4YQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.1.22': - resolution: {integrity: sha512-mb6/wn4ixnSJCkKVLs51AKAyknbSTvwrHCM7cqgwGfYQ7/J6Qvv+49cBHe6Rl8Q0m3fROVYcSvM6bBiQtuhYWg==} + '@smithy/middleware-retry@4.2.0': + resolution: {integrity: sha512-raL5oWYf5ALl3jCJrajE8enKJEnV/2wZkKS6mb3ZRY2tg3nj66ssdWy5Ps8E6Yu8Wqh3Tt+Sb9LozjvwZupq+A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.0.9': - resolution: {integrity: sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==} + '@smithy/middleware-serde@4.1.0': + resolution: {integrity: sha512-CtLFYlHt7c2VcztyVRc+25JLV4aGpmaSv9F1sPB0AGFL6S+RPythkqpGDa2XBQLJQooKkjLA1g7Xe4450knShg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.0.5': - resolution: {integrity: sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==} + '@smithy/middleware-stack@4.1.0': + resolution: {integrity: sha512-91Fuw4IKp0eK8PNhMXrHRcYA1jvbZ9BJGT91wwPy3bTQT8mHTcQNius/EhSQTlT9QUI3Ki1wjHeNXbWK0tO8YQ==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.1.4': - resolution: {integrity: sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==} + '@smithy/node-config-provider@4.2.0': + resolution: {integrity: sha512-8/fpilqKurQ+f8nFvoFkJ0lrymoMJ+5/CQV5IcTv/MyKhk2Q/EFYCAgTSWHD4nMi9ux9NyBBynkyE9SLg2uSLA==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.1.1': - resolution: {integrity: sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==} + '@smithy/node-http-handler@4.2.0': + resolution: {integrity: sha512-G4NV70B4hF9vBrUkkvNfWO6+QR4jYjeO4tc+4XrKCb4nPYj49V9Hu8Ftio7Mb0/0IlFyEOORudHrm+isY29nCA==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.0.5': - resolution: {integrity: sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==} + '@smithy/property-provider@4.1.0': + resolution: {integrity: sha512-eksMjMHUlG5PwOUWO3k+rfLNOPVPJ70mUzyYNKb5lvyIuAwS4zpWGsxGiuT74DFWonW0xRNy+jgzGauUzX7SyA==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.1.3': - resolution: {integrity: sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==} + '@smithy/protocol-http@5.2.0': + resolution: {integrity: sha512-bwjlh5JwdOQnA01be+5UvHK4HQz4iaRKlVG46hHSJuqi0Ribt3K06Z1oQ29i35Np4G9MCDgkOGcHVyLMreMcbg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.0.5': - resolution: {integrity: sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==} + '@smithy/querystring-builder@4.1.0': + resolution: {integrity: sha512-JqTWmVIq4AF8R8OK/2cCCiQo5ZJ0SRPsDkDgLO5/3z8xxuUp1oMIBBjfuueEe+11hGTZ6rRebzYikpKc6yQV9Q==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.0.5': - resolution: {integrity: sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==} + '@smithy/querystring-parser@4.1.0': + resolution: {integrity: sha512-VgdHhr8YTRsjOl4hnKFm7xEMOCRTnKw3FJ1nU+dlWNhdt/7eEtxtkdrJdx7PlRTabdANTmvyjE4umUl9cK4awg==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.0.7': - resolution: {integrity: sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==} + '@smithy/service-error-classification@4.1.0': + resolution: {integrity: sha512-UBpNFzBNmS20jJomuYn++Y+soF8rOK9AvIGjS9yGP6uRXF5rP18h4FDUsoNpWTlSsmiJ87e2DpZo9ywzSMH7PQ==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.0.5': - resolution: {integrity: sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==} + '@smithy/shared-ini-file-loader@4.1.0': + resolution: {integrity: sha512-W0VMlz9yGdQ/0ZAgWICFjFHTVU0YSfGoCVpKaExRM/FDkTeP/yz8OKvjtGjs6oFokCRm0srgj/g4Cg0xuHu8Rw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.1.3': - resolution: {integrity: sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==} + '@smithy/signature-v4@5.2.0': + resolution: {integrity: sha512-ObX1ZqG2DdZQlXx9mLD7yAR8AGb7yXurGm+iWx9x4l1fBZ8CZN2BRT09aSbcXVPZXWGdn5VtMuupjxhOTI2EjA==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.5.2': - resolution: {integrity: sha512-WRdTJ7aNSJY0WuGpxrvVgRaFKGiuvtXX1Txhnu2BdynraSlH2bcP75riQ4SiQfawU1HNEKaPI5gf/ePm+Ro/Cw==} + '@smithy/smithy-client@4.6.0': + resolution: {integrity: sha512-TvlIshqx5PIi0I0AiR+PluCpJ8olVG++xbYkAIGCUkByaMUlfOXLgjQTmYbr46k4wuDe8eHiTIlUflnjK2drPQ==} engines: {node: '>=18.0.0'} - '@smithy/types@4.3.2': - resolution: {integrity: sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==} + '@smithy/types@4.4.0': + resolution: {integrity: sha512-4jY91NgZz+ZnSFcVzWwngOW6VuK3gR/ihTwSU1R/0NENe9Jd8SfWgbhDCAGUWL3bI7DiDSW7XF6Ui6bBBjrqXw==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.0.5': - resolution: {integrity: sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==} + '@smithy/url-parser@4.1.0': + resolution: {integrity: sha512-/LYEIOuO5B2u++tKr1NxNxhZTrr3A63jW8N73YTwVeUyAlbB/YM+hkftsvtKAcMt3ADYo0FsF1GY3anehffSVQ==} engines: {node: '>=18.0.0'} - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + '@smithy/util-base64@4.1.0': + resolution: {integrity: sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + '@smithy/util-body-length-browser@4.1.0': + resolution: {integrity: sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==} engines: {node: '>=18.0.0'} - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + '@smithy/util-body-length-node@4.1.0': + resolution: {integrity: sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + '@smithy/util-buffer-from@4.1.0': + resolution: {integrity: sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==} engines: {node: '>=18.0.0'} - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + '@smithy/util-config-provider@4.1.0': + resolution: {integrity: sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.0.29': - resolution: {integrity: sha512-awrIb21sWml3OMRhqf8e5GPLuZAcH3PRAHXVOPof/rBOKLxc6N01ZRs25154Ww6Ygm9oNP6G0tVvhcy8ktYXtw==} + '@smithy/util-defaults-mode-browser@4.1.0': + resolution: {integrity: sha512-D27cLtJtC4EEeERJXS+JPoogz2tE5zeE3zhWSSu6ER5/wJ5gihUxIzoarDX6K1U27IFTHit5YfHqU4Y9RSGE0w==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.0.29': - resolution: {integrity: sha512-DxBWCC059GwOQXc5nxVudhdGQLZHTDhU4rkK4rvaBQn8IWBw8G+3H2hWk897LaNv6zwwhh7kpfqF0rJ77DvlSg==} + '@smithy/util-defaults-mode-node@4.1.0': + resolution: {integrity: sha512-gnZo3u5dP1o87plKupg39alsbeIY1oFFnCyV2nI/++pL19vTtBLgOyftLEjPjuXmoKn2B2rskX8b7wtC/+3Okg==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.0.7': - resolution: {integrity: sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==} + '@smithy/util-endpoints@3.1.0': + resolution: {integrity: sha512-5LFg48KkunBVGrNs3dnQgLlMXJLVo7k9sdZV5su3rjO3c3DmQ2LwUZI0Zr49p89JWK6sB7KmzyI2fVcDsZkwuw==} engines: {node: '>=18.0.0'} - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + '@smithy/util-hex-encoding@4.1.0': + resolution: {integrity: sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.0.5': - resolution: {integrity: sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==} + '@smithy/util-middleware@4.1.0': + resolution: {integrity: sha512-612onNcKyxhP7/YOTKFTb2F6sPYtMRddlT5mZvYf1zduzaGzkYhpYIPxIeeEwBZFjnvEqe53Ijl2cYEfJ9d6/Q==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.0.7': - resolution: {integrity: sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==} + '@smithy/util-retry@4.1.0': + resolution: {integrity: sha512-5AGoBHb207xAKSVwaUnaER+L55WFY8o2RhlafELZR3mB0J91fpL+Qn+zgRkPzns3kccGaF2vy0HmNVBMWmN6dA==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.2.4': - resolution: {integrity: sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==} + '@smithy/util-stream@4.3.0': + resolution: {integrity: sha512-ZOYS94jksDwvsCJtppHprUhsIscRnCKGr6FXCo3SxgQ31ECbza3wqDBqSy6IsAak+h/oAXb1+UYEBmDdseAjUQ==} engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + '@smithy/util-uri-escape@4.1.0': + resolution: {integrity: sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + '@smithy/util-utf8@4.1.0': + resolution: {integrity: sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==} engines: {node: '>=18.0.0'} - '@smithy/util-waiter@4.0.7': - resolution: {integrity: sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==} + '@smithy/util-waiter@4.1.0': + resolution: {integrity: sha512-IUuj2zpGdeKaY5OdGnU83BUJsv7OA9uw3rNVSOuvzLMXMpBTU+W6V0SsQh6iI32lKUJArlnEU4BIzp83hghR/g==} engines: {node: '>=18.0.0'} '@stablelib/base64@1.0.1': @@ -1186,8 +1195,8 @@ packages: '@supabase/realtime-js@2.15.4': resolution: {integrity: sha512-e/FYIWjvQJHOCNACWehnKvg26zosju3694k0NMUNb+JGLdvHJzEa29ZVVLmawd2kvx4hdbv8mxSqfttRnH3+DA==} - '@supabase/storage-js@2.11.0': - resolution: {integrity: sha512-Y+kx/wDgd4oasAgoAq0bsbQojwQ+ejIif8uczZ9qufRHWFLMU5cODT+ApHsSrDufqUcVKt+eyxtOXSkeh2v9ww==} + '@supabase/storage-js@2.11.1': + resolution: {integrity: sha512-kaKCJZcZrHDCO9L76bEPzNv2caCStOigOUioHw7CvdEzvcSKjVuomRfN2Y9EqXmJH4tEHoBi3tCs/Ye2e3HwDw==} '@supabase/supabase-js@2.57.0': resolution: {integrity: sha512-h9ttcL0MY4h+cGqZl95F/RuqccuRBjHU9B7Qqvw0Da+pPK2sUlU1/UdvyqUGj37UsnSphr9pdGfeXjesYkBcyA==} @@ -1212,8 +1221,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@20.19.12': - resolution: {integrity: sha512-lSOjyS6vdO2G2g2CWrETTV3Jz2zlCXHpu1rcubLKpz9oj+z/1CceHlj+yq53W+9zgb98nSov/wjEKYDNauD+Hw==} + '@types/node@20.19.13': + resolution: {integrity: sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==} '@types/nodemailer@6.4.19': resolution: {integrity: sha512-Fi8DwmuAduTk1/1MpkR9EwS0SsDvYXx5RxivAVII1InDCIxmhj/iQm3W8S3EVb/0arnblr6PK0FK4wYa7bwdLg==} @@ -1575,6 +1584,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chart.js@4.5.0: + resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==} + engines: {pnpm: '>=8'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2589,6 +2602,12 @@ packages: razorpay@2.9.6: resolution: {integrity: sha512-zsHAQzd6e1Cc6BNoCNZQaf65ElL6O6yw0wulxmoG5VQDr363fZC90Mp1V5EktVzG45yPyNomNXWlf4cQ3622gQ==} + react-chartjs-2@5.3.0: + resolution: {integrity: sha512-UfZZFnDsERI3c3CZGxzvNJd02SHjaSJ8kgW1djn65H1KK8rehwTjyrRKOG3VTMG8wtHZ5rgAO5oTHtHi9GCCmw==} + peerDependencies: + chart.js: ^4.1.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom@19.1.1: resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: @@ -3066,197 +3085,197 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-ses@3.879.0': + '@aws-sdk/client-ses@3.882.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.879.0 - '@aws-sdk/credential-provider-node': 3.879.0 + '@aws-sdk/core': 3.882.0 + '@aws-sdk/credential-provider-node': 3.882.0 '@aws-sdk/middleware-host-header': 3.873.0 '@aws-sdk/middleware-logger': 3.876.0 '@aws-sdk/middleware-recursion-detection': 3.873.0 - '@aws-sdk/middleware-user-agent': 3.879.0 + '@aws-sdk/middleware-user-agent': 3.882.0 '@aws-sdk/region-config-resolver': 3.873.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.879.0 '@aws-sdk/util-user-agent-browser': 3.873.0 - '@aws-sdk/util-user-agent-node': 3.879.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.9.2 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.21 - '@smithy/middleware-retry': 4.1.22 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.29 - '@smithy/util-defaults-mode-node': 4.0.29 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.7 + '@aws-sdk/util-user-agent-node': 3.882.0 + '@smithy/config-resolver': 4.2.0 + '@smithy/core': 3.10.0 + '@smithy/fetch-http-handler': 5.2.0 + '@smithy/hash-node': 4.1.0 + '@smithy/invalid-dependency': 4.1.0 + '@smithy/middleware-content-length': 4.1.0 + '@smithy/middleware-endpoint': 4.2.0 + '@smithy/middleware-retry': 4.2.0 + '@smithy/middleware-serde': 4.1.0 + '@smithy/middleware-stack': 4.1.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/node-http-handler': 4.2.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.0 + '@smithy/util-defaults-mode-node': 4.1.0 + '@smithy/util-endpoints': 3.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-retry': 4.1.0 + '@smithy/util-utf8': 4.1.0 + '@smithy/util-waiter': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.879.0': + '@aws-sdk/client-sso@3.882.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/middleware-host-header': 3.873.0 '@aws-sdk/middleware-logger': 3.876.0 '@aws-sdk/middleware-recursion-detection': 3.873.0 - '@aws-sdk/middleware-user-agent': 3.879.0 + '@aws-sdk/middleware-user-agent': 3.882.0 '@aws-sdk/region-config-resolver': 3.873.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.879.0 '@aws-sdk/util-user-agent-browser': 3.873.0 - '@aws-sdk/util-user-agent-node': 3.879.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.9.2 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.21 - '@smithy/middleware-retry': 4.1.22 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.29 - '@smithy/util-defaults-mode-node': 4.0.29 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/util-user-agent-node': 3.882.0 + '@smithy/config-resolver': 4.2.0 + '@smithy/core': 3.10.0 + '@smithy/fetch-http-handler': 5.2.0 + '@smithy/hash-node': 4.1.0 + '@smithy/invalid-dependency': 4.1.0 + '@smithy/middleware-content-length': 4.1.0 + '@smithy/middleware-endpoint': 4.2.0 + '@smithy/middleware-retry': 4.2.0 + '@smithy/middleware-serde': 4.1.0 + '@smithy/middleware-stack': 4.1.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/node-http-handler': 4.2.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.0 + '@smithy/util-defaults-mode-node': 4.1.0 + '@smithy/util-endpoints': 3.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-retry': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.879.0': + '@aws-sdk/core@3.882.0': dependencies: '@aws-sdk/types': 3.862.0 '@aws-sdk/xml-builder': 3.873.0 - '@smithy/core': 3.9.2 - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/signature-v4': 5.1.3 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-utf8': 4.0.0 + '@smithy/core': 3.10.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/property-provider': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/signature-v4': 5.2.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-utf8': 4.1.0 fast-xml-parser: 5.2.5 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.879.0': + '@aws-sdk/credential-provider-env@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.879.0': + '@aws-sdk/credential-provider-http@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/node-http-handler': 4.1.1 - '@smithy/property-provider': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/util-stream': 4.2.4 + '@smithy/fetch-http-handler': 5.2.0 + '@smithy/node-http-handler': 4.2.0 + '@smithy/property-provider': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/util-stream': 4.3.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.879.0': + '@aws-sdk/credential-provider-ini@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 - '@aws-sdk/credential-provider-env': 3.879.0 - '@aws-sdk/credential-provider-http': 3.879.0 - '@aws-sdk/credential-provider-process': 3.879.0 - '@aws-sdk/credential-provider-sso': 3.879.0 - '@aws-sdk/credential-provider-web-identity': 3.879.0 - '@aws-sdk/nested-clients': 3.879.0 + '@aws-sdk/core': 3.882.0 + '@aws-sdk/credential-provider-env': 3.882.0 + '@aws-sdk/credential-provider-http': 3.882.0 + '@aws-sdk/credential-provider-process': 3.882.0 + '@aws-sdk/credential-provider-sso': 3.882.0 + '@aws-sdk/credential-provider-web-identity': 3.882.0 + '@aws-sdk/nested-clients': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/credential-provider-imds': 4.1.0 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.879.0': + '@aws-sdk/credential-provider-node@3.882.0': dependencies: - '@aws-sdk/credential-provider-env': 3.879.0 - '@aws-sdk/credential-provider-http': 3.879.0 - '@aws-sdk/credential-provider-ini': 3.879.0 - '@aws-sdk/credential-provider-process': 3.879.0 - '@aws-sdk/credential-provider-sso': 3.879.0 - '@aws-sdk/credential-provider-web-identity': 3.879.0 + '@aws-sdk/credential-provider-env': 3.882.0 + '@aws-sdk/credential-provider-http': 3.882.0 + '@aws-sdk/credential-provider-ini': 3.882.0 + '@aws-sdk/credential-provider-process': 3.882.0 + '@aws-sdk/credential-provider-sso': 3.882.0 + '@aws-sdk/credential-provider-web-identity': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/credential-provider-imds': 4.1.0 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.879.0': + '@aws-sdk/credential-provider-process@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.879.0': + '@aws-sdk/credential-provider-sso@3.882.0': dependencies: - '@aws-sdk/client-sso': 3.879.0 - '@aws-sdk/core': 3.879.0 - '@aws-sdk/token-providers': 3.879.0 + '@aws-sdk/client-sso': 3.882.0 + '@aws-sdk/core': 3.882.0 + '@aws-sdk/token-providers': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.879.0': + '@aws-sdk/credential-provider-web-identity@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 - '@aws-sdk/nested-clients': 3.879.0 + '@aws-sdk/core': 3.882.0 + '@aws-sdk/nested-clients': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -3264,72 +3283,72 @@ snapshots: '@aws-sdk/middleware-host-header@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@aws-sdk/middleware-logger@3.876.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.879.0': + '@aws-sdk/middleware-user-agent@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.879.0 - '@smithy/core': 3.9.2 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/core': 3.10.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.879.0': + '@aws-sdk/nested-clients@3.882.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.879.0 + '@aws-sdk/core': 3.882.0 '@aws-sdk/middleware-host-header': 3.873.0 '@aws-sdk/middleware-logger': 3.876.0 '@aws-sdk/middleware-recursion-detection': 3.873.0 - '@aws-sdk/middleware-user-agent': 3.879.0 + '@aws-sdk/middleware-user-agent': 3.882.0 '@aws-sdk/region-config-resolver': 3.873.0 '@aws-sdk/types': 3.862.0 '@aws-sdk/util-endpoints': 3.879.0 '@aws-sdk/util-user-agent-browser': 3.873.0 - '@aws-sdk/util-user-agent-node': 3.879.0 - '@smithy/config-resolver': 4.1.5 - '@smithy/core': 3.9.2 - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/hash-node': 4.0.5 - '@smithy/invalid-dependency': 4.0.5 - '@smithy/middleware-content-length': 4.0.5 - '@smithy/middleware-endpoint': 4.1.21 - '@smithy/middleware-retry': 4.1.22 - '@smithy/middleware-serde': 4.0.9 - '@smithy/middleware-stack': 4.0.5 - '@smithy/node-config-provider': 4.1.4 - '@smithy/node-http-handler': 4.1.1 - '@smithy/protocol-http': 5.1.3 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.29 - '@smithy/util-defaults-mode-node': 4.0.29 - '@smithy/util-endpoints': 3.0.7 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 - '@smithy/util-utf8': 4.0.0 + '@aws-sdk/util-user-agent-node': 3.882.0 + '@smithy/config-resolver': 4.2.0 + '@smithy/core': 3.10.0 + '@smithy/fetch-http-handler': 5.2.0 + '@smithy/hash-node': 4.1.0 + '@smithy/invalid-dependency': 4.1.0 + '@smithy/middleware-content-length': 4.1.0 + '@smithy/middleware-endpoint': 4.2.0 + '@smithy/middleware-retry': 4.2.0 + '@smithy/middleware-serde': 4.1.0 + '@smithy/middleware-stack': 4.1.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/node-http-handler': 4.2.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.0 + '@smithy/util-defaults-mode-node': 4.1.0 + '@smithy/util-endpoints': 3.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-retry': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -3337,35 +3356,35 @@ snapshots: '@aws-sdk/region-config-resolver@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.5 + '@smithy/node-config-provider': 4.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-config-provider': 4.1.0 + '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.879.0': + '@aws-sdk/token-providers@3.882.0': dependencies: - '@aws-sdk/core': 3.879.0 - '@aws-sdk/nested-clients': 3.879.0 + '@aws-sdk/core': 3.882.0 + '@aws-sdk/nested-clients': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt '@aws-sdk/types@3.862.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@aws-sdk/util-endpoints@3.879.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-endpoints': 3.0.7 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 + '@smithy/util-endpoints': 3.1.0 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.873.0': @@ -3375,21 +3394,21 @@ snapshots: '@aws-sdk/util-user-agent-browser@3.873.0': dependencies: '@aws-sdk/types': 3.862.0 - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 bowser: 2.12.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.879.0': + '@aws-sdk/util-user-agent-node@3.882.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.879.0 + '@aws-sdk/middleware-user-agent': 3.882.0 '@aws-sdk/types': 3.862.0 - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 + '@smithy/node-config-provider': 4.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@aws-sdk/xml-builder@3.873.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@clerk/backend@2.12.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': @@ -3645,6 +3664,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@kurkle/color@0.3.4': {} + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.5.0 @@ -4058,197 +4079,197 @@ snapshots: '@rushstack/eslint-patch@1.12.0': {} - '@smithy/abort-controller@4.0.5': + '@smithy/abort-controller@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/config-resolver@4.1.5': + '@smithy/config-resolver@4.2.0': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.5 + '@smithy/node-config-provider': 4.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-config-provider': 4.1.0 + '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 - '@smithy/core@3.9.2': + '@smithy/core@3.10.0': dependencies: - '@smithy/middleware-serde': 4.0.9 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-stream': 4.2.4 - '@smithy/util-utf8': 4.0.0 + '@smithy/middleware-serde': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-stream': 4.3.0 + '@smithy/util-utf8': 4.1.0 '@types/uuid': 9.0.8 tslib: 2.8.1 uuid: 9.0.1 - '@smithy/credential-provider-imds@4.0.7': + '@smithy/credential-provider-imds@4.1.0': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 + '@smithy/node-config-provider': 4.2.0 + '@smithy/property-provider': 4.1.0 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.1.1': + '@smithy/fetch-http-handler@5.2.0': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/querystring-builder': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/querystring-builder': 4.1.0 + '@smithy/types': 4.4.0 + '@smithy/util-base64': 4.1.0 tslib: 2.8.1 - '@smithy/hash-node@4.0.5': + '@smithy/hash-node@4.1.0': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/types': 4.4.0 + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.0.5': + '@smithy/invalid-dependency@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 - '@smithy/is-array-buffer@4.0.0': + '@smithy/is-array-buffer@4.1.0': dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.0.5': + '@smithy/middleware-content-length@4.1.0': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.1.21': + '@smithy/middleware-endpoint@4.2.0': dependencies: - '@smithy/core': 3.9.2 - '@smithy/middleware-serde': 4.0.9 - '@smithy/node-config-provider': 4.1.4 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 - '@smithy/url-parser': 4.0.5 - '@smithy/util-middleware': 4.0.5 + '@smithy/core': 3.10.0 + '@smithy/middleware-serde': 4.1.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 + '@smithy/url-parser': 4.1.0 + '@smithy/util-middleware': 4.1.0 tslib: 2.8.1 - '@smithy/middleware-retry@4.1.22': + '@smithy/middleware-retry@4.2.0': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/protocol-http': 5.1.3 - '@smithy/service-error-classification': 4.0.7 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-retry': 4.0.7 + '@smithy/node-config-provider': 4.2.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/service-error-classification': 4.1.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-retry': 4.1.0 '@types/uuid': 9.0.8 tslib: 2.8.1 uuid: 9.0.1 - '@smithy/middleware-serde@4.0.9': + '@smithy/middleware-serde@4.1.0': dependencies: - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.0.5': + '@smithy/middleware-stack@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.1.4': + '@smithy/node-config-provider@4.2.0': dependencies: - '@smithy/property-provider': 4.0.5 - '@smithy/shared-ini-file-loader': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/shared-ini-file-loader': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.1.1': + '@smithy/node-http-handler@4.2.0': dependencies: - '@smithy/abort-controller': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/querystring-builder': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/abort-controller': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/querystring-builder': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/property-provider@4.0.5': + '@smithy/property-provider@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/protocol-http@5.1.3': + '@smithy/protocol-http@5.2.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.0.5': + '@smithy/querystring-builder@4.1.0': dependencies: - '@smithy/types': 4.3.2 - '@smithy/util-uri-escape': 4.0.0 + '@smithy/types': 4.4.0 + '@smithy/util-uri-escape': 4.1.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.0.5': + '@smithy/querystring-parser@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.0.7': + '@smithy/service-error-classification@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 - '@smithy/shared-ini-file-loader@4.0.5': + '@smithy/shared-ini-file-loader@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/signature-v4@5.1.3': + '@smithy/signature-v4@5.2.0': dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.5 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/is-array-buffer': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-hex-encoding': 4.1.0 + '@smithy/util-middleware': 4.1.0 + '@smithy/util-uri-escape': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 - '@smithy/smithy-client@4.5.2': + '@smithy/smithy-client@4.6.0': dependencies: - '@smithy/core': 3.9.2 - '@smithy/middleware-endpoint': 4.1.21 - '@smithy/middleware-stack': 4.0.5 - '@smithy/protocol-http': 5.1.3 - '@smithy/types': 4.3.2 - '@smithy/util-stream': 4.2.4 + '@smithy/core': 3.10.0 + '@smithy/middleware-endpoint': 4.2.0 + '@smithy/middleware-stack': 4.1.0 + '@smithy/protocol-http': 5.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-stream': 4.3.0 tslib: 2.8.1 - '@smithy/types@4.3.2': + '@smithy/types@4.4.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.0.5': + '@smithy/url-parser@4.1.0': dependencies: - '@smithy/querystring-parser': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/querystring-parser': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/util-base64@4.0.0': + '@smithy/util-base64@4.1.0': dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 - '@smithy/util-body-length-browser@4.0.0': + '@smithy/util-body-length-browser@4.1.0': dependencies: tslib: 2.8.1 - '@smithy/util-body-length-node@4.0.0': + '@smithy/util-body-length-node@4.1.0': dependencies: tslib: 2.8.1 @@ -4257,66 +4278,66 @@ snapshots: '@smithy/is-array-buffer': 2.2.0 tslib: 2.8.1 - '@smithy/util-buffer-from@4.0.0': + '@smithy/util-buffer-from@4.1.0': dependencies: - '@smithy/is-array-buffer': 4.0.0 + '@smithy/is-array-buffer': 4.1.0 tslib: 2.8.1 - '@smithy/util-config-provider@4.0.0': + '@smithy/util-config-provider@4.1.0': dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.29': + '@smithy/util-defaults-mode-browser@4.1.0': dependencies: - '@smithy/property-provider': 4.0.5 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 + '@smithy/property-provider': 4.1.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 bowser: 2.12.1 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.29': + '@smithy/util-defaults-mode-node@4.1.0': dependencies: - '@smithy/config-resolver': 4.1.5 - '@smithy/credential-provider-imds': 4.0.7 - '@smithy/node-config-provider': 4.1.4 - '@smithy/property-provider': 4.0.5 - '@smithy/smithy-client': 4.5.2 - '@smithy/types': 4.3.2 + '@smithy/config-resolver': 4.2.0 + '@smithy/credential-provider-imds': 4.1.0 + '@smithy/node-config-provider': 4.2.0 + '@smithy/property-provider': 4.1.0 + '@smithy/smithy-client': 4.6.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.0.7': + '@smithy/util-endpoints@3.1.0': dependencies: - '@smithy/node-config-provider': 4.1.4 - '@smithy/types': 4.3.2 + '@smithy/node-config-provider': 4.2.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/util-hex-encoding@4.0.0': + '@smithy/util-hex-encoding@4.1.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.0.5': + '@smithy/util-middleware@4.1.0': dependencies: - '@smithy/types': 4.3.2 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/util-retry@4.0.7': + '@smithy/util-retry@4.1.0': dependencies: - '@smithy/service-error-classification': 4.0.7 - '@smithy/types': 4.3.2 + '@smithy/service-error-classification': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 - '@smithy/util-stream@4.2.4': + '@smithy/util-stream@4.3.0': dependencies: - '@smithy/fetch-http-handler': 5.1.1 - '@smithy/node-http-handler': 4.1.1 - '@smithy/types': 4.3.2 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 + '@smithy/fetch-http-handler': 5.2.0 + '@smithy/node-http-handler': 4.2.0 + '@smithy/types': 4.4.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-hex-encoding': 4.1.0 + '@smithy/util-utf8': 4.1.0 tslib: 2.8.1 - '@smithy/util-uri-escape@4.0.0': + '@smithy/util-uri-escape@4.1.0': dependencies: tslib: 2.8.1 @@ -4325,15 +4346,15 @@ snapshots: '@smithy/util-buffer-from': 2.2.0 tslib: 2.8.1 - '@smithy/util-utf8@4.0.0': + '@smithy/util-utf8@4.1.0': dependencies: - '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-buffer-from': 4.1.0 tslib: 2.8.1 - '@smithy/util-waiter@4.0.7': + '@smithy/util-waiter@4.1.0': dependencies: - '@smithy/abort-controller': 4.0.5 - '@smithy/types': 4.3.2 + '@smithy/abort-controller': 4.1.0 + '@smithy/types': 4.4.0 tslib: 2.8.1 '@stablelib/base64@1.0.1': {} @@ -4366,7 +4387,7 @@ snapshots: - bufferutil - utf-8-validate - '@supabase/storage-js@2.11.0': + '@supabase/storage-js@2.11.1': dependencies: '@supabase/node-fetch': 2.6.15 @@ -4377,7 +4398,7 @@ snapshots: '@supabase/node-fetch': 2.6.15 '@supabase/postgrest-js': 1.21.3 '@supabase/realtime-js': 2.15.4 - '@supabase/storage-js': 2.11.0 + '@supabase/storage-js': 2.11.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4405,14 +4426,14 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@20.19.12': + '@types/node@20.19.13': dependencies: undici-types: 6.21.0 '@types/nodemailer@6.4.19': dependencies: - '@aws-sdk/client-ses': 3.879.0 - '@types/node': 20.19.12 + '@aws-sdk/client-ses': 3.882.0 + '@types/node': 20.19.13 transitivePeerDependencies: - aws-crt @@ -4430,7 +4451,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.12 + '@types/node': 20.19.13 '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.34.0(jiti@1.21.7))(typescript@5.9.2)': dependencies: @@ -4769,6 +4790,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chart.js@4.5.0: + dependencies: + '@kurkle/color': 0.3.4 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -5912,6 +5937,11 @@ snapshots: transitivePeerDependencies: - debug + react-chartjs-2@5.3.0(chart.js@4.5.0)(react@19.1.1): + dependencies: + chart.js: 4.5.0 + react: 19.1.1 + react-dom@19.1.1(react@19.1.1): dependencies: react: 19.1.1 @@ -6220,7 +6250,7 @@ snapshots: stripe@16.12.0: dependencies: - '@types/node': 20.19.12 + '@types/node': 20.19.13 qs: 6.14.0 strnum@2.1.1: {} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index effa79c..d26f500 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,6 +1,7 @@ // Updated schema.prisma with Payment Gateway Support generator client { provider = "prisma-client-js" + binaryTargets = ["native", "debian-openssl-1.1.x", "debian-openssl-3.0.x"] } datasource db { @@ -49,6 +50,7 @@ model Deck { user User @relation(fields: [userId], references: [clerkUserId]) @@index([userId]) + @@index([name]) } model Flashcard { @@ -82,6 +84,8 @@ model StudySession { // ✅ EXISTING: Relation points to clerkUserId user User @relation(fields: [userId], references: [clerkUserId]) + + @@index([userId, startTime]) } model StudyRecord { @@ -93,6 +97,10 @@ model StudyRecord { createdAt DateTime @default(now()) flashcard Flashcard @relation(fields: [flashcardId], references: [id]) studySession StudySession @relation(fields: [sessionId], references: [id]) + + @@index([flashcardId]) + @@index([sessionId]) + @@index([createdAt]) } // ✅ NEW: Payment tracking model diff --git a/src/app/(dashboard)/analytics/page.tsx b/src/app/(dashboard)/analytics/page.tsx new file mode 100644 index 0000000..5521e0b --- /dev/null +++ b/src/app/(dashboard)/analytics/page.tsx @@ -0,0 +1,131 @@ +import { currentUser } from "@clerk/nextjs/server"; +import { redirect } from "next/navigation"; +import { Filters } from "@/components/analytics/Filters"; +import { Suspense } from "react"; +import { LoadingSpinner } from "@/components/common/LoadingSpinner"; +import { RetentionCurveWrapper } from "@/components/analytics/RetentionCurveWrapper"; +import { SessionHeatmapWrapper } from "@/components/analytics/SessionHeatmapWrapper"; +import { SubjectProgressWrapper } from "@/components/analytics/SubjectProgressWrapper"; +import type { Metadata } from "next"; + +// Disable static generation for this page since it uses Clerk +export const dynamic = 'force-dynamic'; + +export const metadata: Metadata = { + title: "Analytics - Flash Fathom AI", + description: "In-depth performance analytics for your flashcard learning", +}; + +// Helper to build query string from filters +function buildQueryString(filters: { [key: string]: string | string[] | undefined }): string { + const params = new URLSearchParams(); + + Object.entries(filters).forEach(([key, value]) => { + if (value) { + if (Array.isArray(value)) { + // Handle array values - append each valid item + value.forEach((item) => { + const trimmedItem = item.trim(); + if (trimmedItem) { + params.append(key, trimmedItem); + } + }); + } else if (typeof value === 'string') { + // Handle string values - set if not empty + const trimmedValue = value.trim(); + if (trimmedValue) { + params.set(key, trimmedValue); + } + } + } + }); + + return params.toString(); +} + +// Fetch analytics data from API routes +async function fetchAnalyticsData(userId: string, filters: { [key: string]: string | string[] | undefined }) { + // Merge userId into filters for authentication/authorization + const filtersWithUserId = { ...filters, userId }; + const queryString = buildQueryString(filtersWithUserId); + const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'; + + try { + const [subjectProgressRes, retentionCurveRes, sessionHeatmapRes] = await Promise.all([ + fetch(`${baseUrl}/api/analytics/subject-progress?${queryString}`, { + cache: 'no-store', + headers: { 'Content-Type': 'application/json' } + }), + fetch(`${baseUrl}/api/analytics/retention-curve?${queryString}`, { + cache: 'no-store', + headers: { 'Content-Type': 'application/json' } + }), + fetch(`${baseUrl}/api/analytics/session-heatmap?${queryString}`, { + cache: 'no-store', + headers: { 'Content-Type': 'application/json' } + }), + ]); + + const [subjectProgressData, retentionData, sessionData] = await Promise.all([ + subjectProgressRes.ok ? subjectProgressRes.json() : { labels: [], datasets: [] }, + retentionCurveRes.ok ? retentionCurveRes.json() : { labels: [], retention: [] }, + sessionHeatmapRes.ok ? sessionHeatmapRes.json() : Array.from({ length: 7 }, () => Array(24).fill(0)), + ]); + + return { subjectProgressData, retentionData, sessionData }; + } catch (error) { + console.error("Failed to fetch analytics data:", error); + // Return empty data on error + return { + subjectProgressData: { labels: [], datasets: [] }, + retentionData: { labels: [], retention: [] }, + sessionData: Array.from({ length: 7 }, () => Array(24).fill(0)), + }; + } +} + +export default async function AnalyticsPage({ + searchParams +}: { + searchParams: Promise<{ [key: string]: string | string[] | undefined }> +}) { + const user = await currentUser(); + if (!user) { + redirect("/sign-in"); + } + + const resolvedSearchParams = await searchParams; + + // Fetch analytics data with filters + const { subjectProgressData, retentionData, sessionData } = await fetchAnalyticsData( + user.id, + resolvedSearchParams + ); + + return ( +
+ The page you're looking for doesn't exist or has been moved. +
+{formatHour(data.bestTimeToStudy)}
+