From b6d08e57da3e32e7068a536c24a42af854bd6c19 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 1 Jan 2025 22:19:51 +0300 Subject: [PATCH 01/12] feat: :sparkles: adding sign up support for new users --- apps/web/package.json | 6 +- package.json | 16 +- packages/db/src/schema/schema.prisma | 53 +- packages/logger/package.json | 2 +- packages/supabase/package.json | 28 + packages/supabase/src/client.ts | 8 + packages/supabase/src/middleware.ts | 53 ++ packages/supabase/src/server.ts | 29 + packages/supabase/tsconfig.json | 11 + packages/ui/package.json | 4 +- packages/utils/package.json | 4 +- pnpm-lock.yaml | 891 +++++++++++++++++++++------ 12 files changed, 891 insertions(+), 214 deletions(-) create mode 100644 packages/supabase/package.json create mode 100644 packages/supabase/src/client.ts create mode 100644 packages/supabase/src/middleware.ts create mode 100644 packages/supabase/src/server.ts create mode 100644 packages/supabase/tsconfig.json diff --git a/apps/web/package.json b/apps/web/package.json index 86a3e2b..784def6 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -14,14 +14,16 @@ "react-dom": "^19.0" }, "dependencies": { - "@next/third-parties": "^15.1.2", + "@next/third-parties": "^15.1.3", "@tanstack/react-table": "^8.20.6", "@ultra-reporter/analytics": "workspace:*", "@ultra-reporter/feature-toggle": "workspace:*", + "@ultra-reporter/logger": "workspace:*", + "@ultra-reporter/supabase": "workspace:*", "@ultra-reporter/ui": "workspace:*", "@ultra-reporter/utils": "workspace:*", "lucide-react": "^0.469.0", - "next": "15.1.2" + "next": "15.1.3" }, "devDependencies": { "@types/react": "^19.0.2", diff --git a/package.json b/package.json index aecb8eb..03c37aa 100644 --- a/package.json +++ b/package.json @@ -26,16 +26,16 @@ }, "devDependencies": { "@eslint/compat": "^1.2.4", - "@next/eslint-plugin-next": "^15.1.2", + "@next/eslint-plugin-next": "^15.1.3", "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-js": "^2.12.1", "@stylistic/eslint-plugin-ts": "^2.12.1", - "@types/node": "^22.10.2", - "@typescript-eslint/eslint-plugin": "^8.18.1", - "@typescript-eslint/parser": "^8.18.1", + "@types/node": "^22.10.3", + "@typescript-eslint/eslint-plugin": "^8.19.0", + "@typescript-eslint/parser": "^8.19.0", "@vercel/style-guide": "^6.0.0", "eslint": "^9.17.0", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.3", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "2.3.3", "eslint-plugin-only-warn": "^1.1.0", @@ -43,15 +43,15 @@ "globals": "^15.14.0", "husky": "^9.1.7", "lerna-changelog": "^2.2.0", - "lint-staged": "^15.2.11", + "lint-staged": "^15.3.0", "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-tailwindcss": "^0.6.9", - "release-it": "^17.10.0", + "release-it": "^17.11.0", "release-it-pnpm": "^4.6.3", "turbo": "^2.3.3", "typescript": "^5.7.2", - "typescript-eslint": "^8.18.1" + "typescript-eslint": "^8.19.0" }, "lint-staged": { "**/*.{ts,tsx}": [ diff --git a/packages/db/src/schema/schema.prisma b/packages/db/src/schema/schema.prisma index 988c585..0e2e8b7 100644 --- a/packages/db/src/schema/schema.prisma +++ b/packages/db/src/schema/schema.prisma @@ -4,30 +4,45 @@ generator client { } datasource db { - provider = "postgresql" - url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") + relationMode = "prisma" } -model User { - id String @id @default(cuid()) - user_name String - email String - provider String +model TestResultData { + id String @id @default(cuid()) + suite_name String + test_name String + class_name String + method_name String + is_config Boolean + tags String[] + parameters String[] + status String + exception_id String + attachment_id String + started_at DateTime + finished_at DateTime + duration Float - created_at DateTime @default(now()) - updated_at DateTime @updatedAt + exception TestException? @relation(fields: [exception_id], references: [id]) - LoginSession LoginSession[] -} + attachment TestLog? @relation(fields: [attachment_id], references: [id]) -model LoginSession { - id String @id @default(cuid()) - user_id String - last_login_at DateTime @default(now()) - created_at DateTime @default(now()) - updated_at DateTime @updatedAt + @@index([exception_id]) + @@index([attachment_id]) +} - user User @relation(fields: [user_id], references: [id]) +model TestLog { + id String @id @default(cuid()) + line String + TestResultData TestResultData[] +} - @@index([user_id]) +model TestException { + id String @id @default(cuid()) + class_name String + message String + stack_trace String[] + TestResultData TestResultData[] } diff --git a/packages/logger/package.json b/packages/logger/package.json index 821d94e..c70d2a0 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -8,7 +8,7 @@ "lint": "eslint . --max-warnings 0" }, "dependencies": { - "pino": "^9.5.0" + "pino": "^9.6.0" }, "devDependencies": { "@ultra-reporter/typescript-config": "workspace:*" diff --git a/packages/supabase/package.json b/packages/supabase/package.json new file mode 100644 index 0000000..93ec8a8 --- /dev/null +++ b/packages/supabase/package.json @@ -0,0 +1,28 @@ +{ + "name": "@ultra-reporter/supabase", + "description": "Ultra Reporter Supabase integration", + "version": "0.6.0", + "private": true, + "scripts": { + "lint": "eslint . --max-warnings 0" + }, + "exports": { + "./client": "./src/client.ts", + "./server": "./src/server.ts", + "./middleware": "./src/middleware.ts" + }, + "devDependencies": { + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "@ultra-reporter/typescript-config": "workspace:*" + }, + "peerDependencies": { + "react": "^19.0", + "react-dom": "^19.0" + }, + "dependencies": { + "@supabase/ssr": "latest", + "@supabase/supabase-js": "latest", + "next": "15.1.3" + } +} diff --git a/packages/supabase/src/client.ts b/packages/supabase/src/client.ts new file mode 100644 index 0000000..e6db2a1 --- /dev/null +++ b/packages/supabase/src/client.ts @@ -0,0 +1,8 @@ +import { createBrowserClient } from '@supabase/ssr'; + +export function createClient() { + return createBrowserClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! + ); +} diff --git a/packages/supabase/src/middleware.ts b/packages/supabase/src/middleware.ts new file mode 100644 index 0000000..56bfee4 --- /dev/null +++ b/packages/supabase/src/middleware.ts @@ -0,0 +1,53 @@ +import { createServerClient } from '@supabase/ssr'; +import { type NextRequest, NextResponse } from 'next/server'; + +export const updateSession = async (request: NextRequest) => { + try { + let response = NextResponse.next({ + request: { + headers: request.headers, + }, + }); + + const supabase = createServerClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { + cookies: { + getAll() { + return request.cookies.getAll(); + }, + setAll(cookiesToSet) { + cookiesToSet.forEach(({ name, value }) => + request.cookies.set(name, value) + ); + response = NextResponse.next({ + request, + }); + cookiesToSet.forEach(({ name, value, options }) => + response.cookies.set(name, value, options) + ); + }, + }, + } + ); + + const user = await supabase.auth.getUser(); + + if (request.nextUrl.pathname.startsWith('/protected') && user.error) { + return NextResponse.redirect(new URL('/sign-in', request.url)); + } + + if (request.nextUrl.pathname === '/' && !user.error) { + return NextResponse.redirect(new URL('/protected', request.url)); + } + + return response; + } catch (e) { + return NextResponse.next({ + request: { + headers: request.headers, + }, + }); + } +}; diff --git a/packages/supabase/src/server.ts b/packages/supabase/src/server.ts new file mode 100644 index 0000000..6d51e53 --- /dev/null +++ b/packages/supabase/src/server.ts @@ -0,0 +1,29 @@ +import { createServerClient } from '@supabase/ssr'; +import { cookies } from 'next/headers'; + +export const createClient = async () => { + const cookieStore = await cookies(); + + return createServerClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { + cookies: { + getAll() { + return cookieStore.getAll(); + }, + setAll(cookiesToSet) { + try { + cookiesToSet.forEach(({ name, value, options }) => { + cookieStore.set(name, value, options); + }); + } catch (error) { + // The `set` method was called from a Server Component. + // This can be ignored if you have middleware refreshing + // user sessions. + } + }, + }, + } + ); +}; diff --git a/packages/supabase/tsconfig.json b/packages/supabase/tsconfig.json new file mode 100644 index 0000000..33aa6d1 --- /dev/null +++ b/packages/supabase/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@ultra-reporter/typescript-config/nextjs.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/ui/package.json b/packages/ui/package.json index 9e33bb7..d394dc8 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -48,7 +48,7 @@ "cmdk": "1.0.4", "embla-carousel-react": "^8.5.1", "lucide-react": "^0.469.0", - "next": "15.1.2", + "next": "15.1.3", "next-themes": "^0.4.4", "react-code-blocks": "^0.1.6", "react-hook-form": "^7.54.2", @@ -63,7 +63,7 @@ "@ultra-reporter/typescript-config": "workspace:*", "@ultra-reporter/utils": "workspace:*", "autoprefixer": "^10.4.20", - "daisyui": "^4.12.22", + "daisyui": "^4.12.23", "postcss": "^8.4.49", "postcss-load-config": "^6.0.1", "tailwindcss": "^3.4.17" diff --git a/packages/utils/package.json b/packages/utils/package.json index 26a1e2c..15d0ce9 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -23,9 +23,9 @@ "clsx": "^2.1.1", "date-fns": "^4.1.0", "luxon": "^3.5.0", - "next": "15.1.2", + "next": "15.1.3", "react": "^19.0.0", - "tailwind-merge": "^2.5.5", + "tailwind-merge": "^2.6.0", "xml2js": "^0.6.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc59a6d..bc1117f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,11 +12,11 @@ importers: specifier: ^1.2.4 version: 1.2.4(eslint@9.17.0(jiti@2.4.2)) '@next/eslint-plugin-next': - specifier: ^15.1.2 - version: 15.1.2 + specifier: ^15.1.3 + version: 15.1.3 '@release-it-plugins/lerna-changelog': specifier: ^7.0.0 - version: 7.0.0(release-it@17.10.0(typescript@5.7.2)) + version: 7.0.0(release-it@17.11.0(typescript@5.7.2)) '@stylistic/eslint-plugin-js': specifier: ^2.12.1 version: 2.12.1(eslint@9.17.0(jiti@2.4.2)) @@ -24,23 +24,23 @@ importers: specifier: ^2.12.1 version: 2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@types/node': - specifier: ^22.10.2 - version: 22.10.2 + specifier: ^22.10.3 + version: 22.10.3 '@typescript-eslint/eslint-plugin': - specifier: ^8.18.1 - version: 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + specifier: ^8.19.0 + version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/parser': - specifier: ^8.18.1 - version: 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + specifier: ^8.19.0 + version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@vercel/style-guide': specifier: ^6.0.0 - version: 6.0.0(@next/eslint-plugin-next@15.1.2)(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.2) + version: 6.0.0(@next/eslint-plugin-next@15.1.3)(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.2) eslint: specifier: ^9.17.0 version: 9.17.0(jiti@2.4.2) eslint-config-next: - specifier: 15.1.2 - version: 15.1.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + specifier: 15.1.3 + version: 15.1.3(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@9.17.0(jiti@2.4.2)) @@ -63,8 +63,8 @@ importers: specifier: ^2.2.0 version: 2.2.0 lint-staged: - specifier: ^15.2.11 - version: 15.2.11 + specifier: ^15.3.0 + version: 15.3.0 prettier: specifier: ^3.4.2 version: 3.4.2 @@ -75,11 +75,11 @@ importers: specifier: ^0.6.9 version: 0.6.9(prettier-plugin-organize-imports@4.1.0(prettier@3.4.2)(typescript@5.7.2))(prettier@3.4.2) release-it: - specifier: ^17.10.0 - version: 17.10.0(typescript@5.7.2) + specifier: ^17.11.0 + version: 17.11.0(typescript@5.7.2) release-it-pnpm: specifier: ^4.6.3 - version: 4.6.3(release-it@17.10.0(typescript@5.7.2)) + version: 4.6.3(release-it@17.11.0(typescript@5.7.2)) turbo: specifier: ^2.3.3 version: 2.3.3 @@ -87,14 +87,14 @@ importers: specifier: ^5.7.2 version: 5.7.2 typescript-eslint: - specifier: ^8.18.1 - version: 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + specifier: ^8.19.0 + version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) apps/web: dependencies: '@next/third-parties': - specifier: ^15.1.2 - version: 15.1.2(next@15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) + specifier: ^15.1.3 + version: 15.1.3(next@15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) '@tanstack/react-table': specifier: ^8.20.6 version: 8.20.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -104,6 +104,12 @@ importers: '@ultra-reporter/feature-toggle': specifier: workspace:* version: link:../../packages/feature-toggle + '@ultra-reporter/logger': + specifier: workspace:* + version: link:../../packages/logger + '@ultra-reporter/supabase': + specifier: workspace:* + version: link:../../packages/supabase '@ultra-reporter/ui': specifier: workspace:* version: link:../../packages/ui @@ -114,8 +120,8 @@ importers: specifier: ^0.469.0 version: 0.469.0(react@19.0.0) next: - specifier: 15.1.2 - version: 15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0 version: 19.0.0 @@ -143,7 +149,7 @@ importers: dependencies: '@openpanel/nextjs': specifier: ^1.0.7 - version: 1.0.7(next@15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 1.0.7(next@15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@ultra-reporter/utils': specifier: workspace:* version: link:../utils @@ -199,13 +205,41 @@ importers: packages/logger: dependencies: pino: - specifier: ^9.5.0 - version: 9.5.0 + specifier: ^9.6.0 + version: 9.6.0 devDependencies: '@ultra-reporter/typescript-config': specifier: workspace:* version: link:../typescript-config + packages/supabase: + dependencies: + '@supabase/ssr': + specifier: latest + version: 0.5.2(@supabase/supabase-js@2.47.10) + '@supabase/supabase-js': + specifier: latest + version: 2.47.10 + next: + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: + specifier: ^19.0 + version: 19.0.0 + react-dom: + specifier: ^19.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@types/react': + specifier: ^19.0.2 + version: 19.0.2 + '@types/react-dom': + specifier: ^19.0.2 + version: 19.0.2(@types/react@19.0.2) + '@ultra-reporter/typescript-config': + specifier: workspace:* + version: link:../typescript-config + packages/typescript-config: {} packages/ui: @@ -271,8 +305,8 @@ importers: specifier: ^0.469.0 version: 0.469.0(react@19.0.0) next: - specifier: 15.1.2 - version: 15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next-themes: specifier: ^0.4.4 version: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -317,14 +351,14 @@ importers: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) daisyui: - specifier: ^4.12.22 - version: 4.12.22(postcss@8.4.49) + specifier: ^4.12.23 + version: 4.12.23(postcss@8.4.49) postcss: specifier: ^8.4.49 version: 8.4.49 postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(yaml@2.6.1) + version: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) tailwindcss: specifier: ^3.4.17 version: 3.4.17 @@ -341,14 +375,14 @@ importers: specifier: ^3.5.0 version: 3.5.0 next: - specifier: 15.1.2 - version: 15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 tailwind-merge: - specifier: ^2.5.5 - version: 2.5.5 + specifier: ^2.6.0 + version: 2.6.0 xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -474,6 +508,150 @@ packages: '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -699,62 +877,62 @@ packages: '@microsoft/tsdoc@0.14.2': resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - '@next/env@15.1.2': - resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} + '@next/env@15.1.3': + resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} - '@next/eslint-plugin-next@15.1.2': - resolution: {integrity: sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==} + '@next/eslint-plugin-next@15.1.3': + resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==} - '@next/swc-darwin-arm64@15.1.2': - resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} + '@next/swc-darwin-arm64@15.1.3': + resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.2': - resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==} + '@next/swc-darwin-x64@15.1.3': + resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.2': - resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} + '@next/swc-linux-arm64-gnu@15.1.3': + resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.2': - resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==} + '@next/swc-linux-arm64-musl@15.1.3': + resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.2': - resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==} + '@next/swc-linux-x64-gnu@15.1.3': + resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.2': - resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==} + '@next/swc-linux-x64-musl@15.1.3': + resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.2': - resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} + '@next/swc-win32-arm64-msvc@15.1.3': + resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.2': - resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} + '@next/swc-win32-x64-msvc@15.1.3': + resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@next/third-parties@15.1.2': - resolution: {integrity: sha512-orv0nicbRg+opfOVyQSn45AJoTFSLycYJSljHvqaUd2i5KAFzMcxjrxBjtjNGB9PRdLcIyqZCiDGeK+a34nNOw==} + '@next/third-parties@15.1.3': + resolution: {integrity: sha512-nz2mthh08xMRgNKRA+Z7lM1BqHqukGcFyu5z0nXFo3/KXsBgaPJkfnkfebw/YTqkxryV+aEttf/iAWDB6dUO6A==} peerDependencies: next: ^13.0.0 || ^14.0.0 || ^15.0.0 react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -1386,6 +1564,33 @@ packages: peerDependencies: eslint: '>=8.40.0' + '@supabase/auth-js@2.67.3': + resolution: {integrity: sha512-NJDaW8yXs49xMvWVOkSIr8j46jf+tYHV0wHhrwOaLLMZSFO4g6kKAf+MfzQ2RaD06OCUkUHIzctLAxjTgEVpzw==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.17.7': + resolution: {integrity: sha512-aOzOYaTADm/dVTNksyqv9KsbhVa1gHz1Hoxb2ZEF2Ed9H7qlWOfptECQWmkEmrrFjtNaiPrgiSaPECvzI/seDA==} + + '@supabase/realtime-js@2.11.2': + resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + + '@supabase/ssr@0.5.2': + resolution: {integrity: sha512-n3plRhr2Bs8Xun1o4S3k1CDv17iH5QY9YcoEvXX3bxV1/5XSasA0mNXYycFmADIdtdE6BG9MRjP5CGIs8qxC8A==} + peerDependencies: + '@supabase/supabase-js': ^2.43.4 + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.47.10': + resolution: {integrity: sha512-vJfPF820Ho5WILYHfKiBykDQ1SB9odTHrRZ0JxHfuLMC8GRvv21YLkUZQK7/rSVCkLvD6/ZwMWaOAfdUd//guw==} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -1410,6 +1615,9 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -1464,9 +1672,15 @@ packages: '@types/node@22.10.2': resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.3': + resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/react-dom@19.0.2': resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==} peerDependencies: @@ -1484,6 +1698,9 @@ packages: '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/xml2js@0.4.14': resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} @@ -1498,8 +1715,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.18.1': - resolution: {integrity: sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==} + '@typescript-eslint/eslint-plugin@8.19.0': + resolution: {integrity: sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1516,8 +1733,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.18.1': - resolution: {integrity: sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==} + '@typescript-eslint/parser@8.19.0': + resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1535,6 +1752,10 @@ packages: resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.19.0': + resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1545,8 +1766,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.18.1': - resolution: {integrity: sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==} + '@typescript-eslint/type-utils@8.19.0': + resolution: {integrity: sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1564,6 +1785,10 @@ packages: resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.19.0': + resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1588,6 +1813,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/typescript-estree@8.19.0': + resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1607,6 +1838,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@8.19.0': + resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1619,6 +1857,10 @@ packages: resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.19.0': + resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vercel/functions@1.5.2': resolution: {integrity: sha512-9XuynFoM/J1X+LSahgjhuAZCbZ96vm9mpXapCkSS1MX890U7zLh7n2RW/2KLNuxsXt8u8h2dOCw+Njtg+7pXgQ==} engines: {node: '>= 16'} @@ -1927,8 +2169,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} changelogen@0.5.5: @@ -2114,6 +2356,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + core-js-compat@3.39.0: resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} @@ -2196,8 +2442,8 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - daisyui@4.12.22: - resolution: {integrity: sha512-HDLWbmTnXxhE1MrMgSWjVgdRt+bVYHvfNbW3GTsyIokRSqTHonUTrxV3RhpPDjGIWaHt+ELtDCTYCtUFgL2/Nw==} + daisyui@4.12.23: + resolution: {integrity: sha512-EM38duvxutJ5PD65lO/AFMpcw+9qEy6XAZrTpzp7WyaPeO/l+F/Qiq0ECHHmFNcFXh5aVoALY4MGrrxtCiaQCQ==} engines: {node: '>=16.9.0'} damerau-levenshtein@1.0.8: @@ -2436,6 +2682,11 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2457,8 +2708,8 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-next@15.1.2: - resolution: {integrity: sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==} + eslint-config-next@15.1.3: + resolution: {integrity: sha512-wGYlNuWnh4ujuKtZvH+7B2Z2vy9nONZE6ztd+DKF7hAsIabkrxmD4TzYHzASHENo42lmz2tnT2B+zN2sOHvpJg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -2601,6 +2852,12 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-react@7.37.3: + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-testing-library@6.5.0: resolution: {integrity: sha512-Ls5TUfLm5/snocMAOlofSOJxNN0aKqwTlco7CrNtMjkTdQlkpSMaeTCDHCuXfzrI97xcx2rSCNeKeJjtpkNC1w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} @@ -3159,6 +3416,10 @@ packages: resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} engines: {node: '>= 0.4'} @@ -3455,8 +3716,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.11: - resolution: {integrity: sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==} + lint-staged@15.3.0: + resolution: {integrity: sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==} engines: {node: '>=18.12.0'} hasBin: true @@ -3749,8 +4010,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.1.2: - resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} + next@15.1.3: + resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3881,8 +4142,8 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} - ora@8.1.0: - resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} + ora@8.1.1: + resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} engines: {node: '>=18'} os-name@5.1.0: @@ -4037,8 +4298,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.5.0: - resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} + pino@9.6.0: + resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} hasBin: true pirates@4.0.6: @@ -4261,8 +4522,8 @@ packages: protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} - proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} proxy-from-env@1.1.0: @@ -4439,8 +4700,8 @@ packages: peerDependencies: release-it: ^17.0.0 - release-it@17.10.0: - resolution: {integrity: sha512-00cXYEl7RFD5NnjXpwaH9JFjpwe8w3NcfUd4XPxrKQkszp1xppPo42zK9eSbxStKyPA5CVk2KmKPDPDiAKVJTA==} + release-it@17.11.0: + resolution: {integrity: sha512-qQGgfMbUZ3/vpXUPmngsgjFObOLjlkwtiozHUYen9fo9AEGciXjG1ZpGr+FNmuBT8R7TOSY+x/s84wOCRKJjbA==} engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} hasBin: true @@ -4829,8 +5090,8 @@ packages: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} - tailwind-merge@2.5.5: - resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} @@ -4889,6 +5150,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -4916,6 +5180,11 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + turbo-darwin-64@2.3.3: resolution: {integrity: sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==} cpu: [x64] @@ -4994,8 +5263,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.18.1: - resolution: {integrity: sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==} + typescript-eslint@8.19.0: + resolution: {integrity: sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5103,6 +5372,12 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + when-exit@2.1.3: resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} @@ -5131,8 +5406,8 @@ packages: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} - wildcard-match@5.1.3: - resolution: {integrity: sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==} + wildcard-match@5.1.4: + resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} windows-release@5.1.1: resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} @@ -5161,6 +5436,18 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -5365,6 +5652,78 @@ snapshots: '@emotion/unitless@0.8.1': {} + '@esbuild/aix-ppc64@0.23.1': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + + '@esbuild/openbsd-arm64@0.23.1': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))': dependencies: eslint: 9.17.0(jiti@2.4.2) @@ -5570,39 +5929,39 @@ snapshots: '@microsoft/tsdoc@0.14.2': {} - '@next/env@15.1.2': {} + '@next/env@15.1.3': {} - '@next/eslint-plugin-next@15.1.2': + '@next/eslint-plugin-next@15.1.3': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.1.2': + '@next/swc-darwin-arm64@15.1.3': optional: true - '@next/swc-darwin-x64@15.1.2': + '@next/swc-darwin-x64@15.1.3': optional: true - '@next/swc-linux-arm64-gnu@15.1.2': + '@next/swc-linux-arm64-gnu@15.1.3': optional: true - '@next/swc-linux-arm64-musl@15.1.2': + '@next/swc-linux-arm64-musl@15.1.3': optional: true - '@next/swc-linux-x64-gnu@15.1.2': + '@next/swc-linux-x64-gnu@15.1.3': optional: true - '@next/swc-linux-x64-musl@15.1.2': + '@next/swc-linux-x64-musl@15.1.3': optional: true - '@next/swc-win32-arm64-msvc@15.1.2': + '@next/swc-win32-arm64-msvc@15.1.3': optional: true - '@next/swc-win32-x64-msvc@15.1.2': + '@next/swc-win32-x64-msvc@15.1.3': optional: true - '@next/third-parties@15.1.2(next@15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': + '@next/third-parties@15.1.3(next@15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': dependencies: - next: 15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 third-party-capital: 1.0.20 @@ -5697,10 +6056,10 @@ snapshots: dependencies: '@octokit/openapi-types': 22.2.0 - '@openpanel/nextjs@1.0.7(next@15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@openpanel/nextjs@1.0.7(next@15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@openpanel/web': 1.0.1 - next: 15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -6224,13 +6583,13 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@release-it-plugins/lerna-changelog@7.0.0(release-it@17.10.0(typescript@5.7.2))': + '@release-it-plugins/lerna-changelog@7.0.0(release-it@17.11.0(typescript@5.7.2))': dependencies: execa: 5.1.1 lerna-changelog: 2.2.0 lodash: 4.17.21 mdast-util-from-markdown: 1.3.1 - release-it: 17.10.0(typescript@5.7.2) + release-it: 17.11.0(typescript@5.7.2) tmp: 0.2.3 validate-peer-dependencies: 2.2.0 which: 2.0.2 @@ -6264,6 +6623,54 @@ snapshots: - supports-color - typescript + '@supabase/auth-js@2.67.3': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.17.7': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.5.13 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/ssr@0.5.2(@supabase/supabase-js@2.47.10)': + dependencies: + '@supabase/supabase-js': 2.47.10 + '@types/cookie': 0.6.0 + cookie: 0.7.2 + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.47.10': + dependencies: + '@supabase/auth-js': 2.67.3 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.17.7 + '@supabase/realtime-js': 2.11.2 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': @@ -6282,6 +6689,8 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} + '@types/cookie@0.6.0': {} + '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -6332,8 +6741,14 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/node@22.10.3': + dependencies: + undici-types: 6.20.0 + '@types/normalize-package-data@2.4.4': {} + '@types/phoenix@1.6.6': {} + '@types/react-dom@19.0.2(@types/react@19.0.2)': dependencies: '@types/react': 19.0.2 @@ -6348,6 +6763,10 @@ snapshots: '@types/unist@2.0.11': {} + '@types/ws@8.5.13': + dependencies: + '@types/node': 22.10.3 + '@types/xml2js@0.4.14': dependencies: '@types/node': 22.10.2 @@ -6370,14 +6789,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/type-utils': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.0 eslint: 9.17.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 @@ -6400,12 +6819,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + '@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.18.1 - '@typescript-eslint/types': 8.18.1 - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.0 debug: 4.4.0 eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 @@ -6427,6 +6846,11 @@ snapshots: '@typescript-eslint/types': 8.18.1 '@typescript-eslint/visitor-keys': 8.18.1 + '@typescript-eslint/scope-manager@8.19.0': + dependencies: + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/visitor-keys': 8.19.0 + '@typescript-eslint/type-utils@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) @@ -6439,10 +6863,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) debug: 4.4.0 eslint: 9.17.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.2) @@ -6456,6 +6880,8 @@ snapshots: '@typescript-eslint/types@8.18.1': {} + '@typescript-eslint/types@8.19.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -6499,6 +6925,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)': + dependencies: + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/visitor-keys': 8.19.0 + debug: 4.4.0 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.3(typescript@5.7.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.62.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) @@ -6536,6 +6976,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + typescript: 5.7.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -6551,9 +7002,14 @@ snapshots: '@typescript-eslint/types': 8.18.1 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.19.0': + dependencies: + '@typescript-eslint/types': 8.19.0 + eslint-visitor-keys: 4.2.0 + '@vercel/functions@1.5.2': {} - '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@15.1.2)(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.2)': + '@vercel/style-guide@6.0.0(@next/eslint-plugin-next@15.1.3)(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2)(typescript@5.7.2)': dependencies: '@babel/core': 7.26.0 '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@9.17.0(jiti@2.4.2)) @@ -6564,8 +7020,8 @@ snapshots: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0) eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-eslint-comments: 3.2.0(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-playwright: 1.8.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-react: 7.37.2(eslint@9.17.0(jiti@2.4.2)) @@ -6576,7 +7032,7 @@ snapshots: eslint-plugin-vitest: 0.3.26(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) prettier-plugin-packagejson: 2.5.6(prettier@3.4.2) optionalDependencies: - '@next/eslint-plugin-next': 15.1.2 + '@next/eslint-plugin-next': 15.1.3 eslint: 9.17.0(jiti@2.4.2) prettier: 3.4.2 typescript: 5.7.2 @@ -6781,7 +7237,7 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 - chalk: 5.3.0 + chalk: 5.4.1 cli-boxes: 3.0.0 string-width: 7.2.0 type-fest: 4.30.2 @@ -6932,7 +7388,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} + chalk@5.4.1: {} changelogen@0.5.5: dependencies: @@ -7143,6 +7599,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie@0.7.2: {} + core-js-compat@3.39.0: dependencies: browserslist: 4.24.3 @@ -7219,7 +7677,7 @@ snapshots: d3-timer@3.0.1: {} - daisyui@4.12.22(postcss@8.4.49): + daisyui@4.12.23(postcss@8.4.49): dependencies: css-selector-tokenizer: 0.8.0 culori: 3.3.0 @@ -7502,6 +7960,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + optional: true + escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -7518,18 +8004,18 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@15.1.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): + eslint-config-next@15.1.3(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@next/eslint-plugin-next': 15.1.2 + '@next/eslint-plugin-next': 15.1.3 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.2(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.3(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.17.0(jiti@2.4.2)) optionalDependencies: typescript: 5.7.2 @@ -7549,12 +8035,12 @@ snapshots: eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.16.0 + is-core-module: 2.16.1 resolve: 1.22.10 transitivePeerDependencies: - supports-color @@ -7571,29 +8057,28 @@ snapshots: is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -7603,7 +8088,7 @@ snapshots: eslint: 9.17.0(jiti@2.4.2) ignore: 5.3.2 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7614,7 +8099,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.0 is-glob: 4.0.3 @@ -7626,13 +8111,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7643,7 +8128,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.0 is-glob: 4.0.3 @@ -7655,18 +8140,18 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - supports-color - typescript @@ -7697,7 +8182,7 @@ snapshots: eslint: 9.17.0(jiti@2.4.2) globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))(prettier@3.4.2): dependencies: @@ -7738,6 +8223,28 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 + eslint-plugin-react@7.37.3(eslint@9.17.0(jiti@2.4.2)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.17.0(jiti@2.4.2) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + eslint-plugin-testing-library@6.5.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) @@ -8398,6 +8905,10 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-data-view@1.0.2: dependencies: call-bound: 1.0.3 @@ -8649,9 +9160,9 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@15.2.11: + lint-staged@15.3.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 debug: 4.4.0 execa: 8.0.1 @@ -8702,7 +9213,7 @@ snapshots: log-symbols@6.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 log-update@6.1.0: @@ -9030,9 +9541,9 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - next@15.1.2(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.1.3(@babel/core@7.26.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.1.2 + '@next/env': 15.1.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -9042,14 +9553,14 @@ snapshots: react-dom: 19.0.0(react@19.0.0) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.2 - '@next/swc-darwin-x64': 15.1.2 - '@next/swc-linux-arm64-gnu': 15.1.2 - '@next/swc-linux-arm64-musl': 15.1.2 - '@next/swc-linux-x64-gnu': 15.1.2 - '@next/swc-linux-x64-musl': 15.1.2 - '@next/swc-win32-arm64-msvc': 15.1.2 - '@next/swc-win32-x64-msvc': 15.1.2 + '@next/swc-darwin-arm64': 15.1.3 + '@next/swc-darwin-x64': 15.1.3 + '@next/swc-linux-arm64-gnu': 15.1.3 + '@next/swc-linux-arm64-musl': 15.1.3 + '@next/swc-linux-x64-gnu': 15.1.3 + '@next/swc-linux-x64-musl': 15.1.3 + '@next/swc-win32-arm64-msvc': 15.1.3 + '@next/swc-win32-x64-msvc': 15.1.3 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -9196,9 +9707,9 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 - ora@8.1.0: + ora@8.1.1: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -9351,7 +9862,7 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@9.5.0: + pino@9.6.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -9396,12 +9907,13 @@ snapshots: optionalDependencies: postcss: 8.4.49 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(yaml@2.6.1): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.4.2 postcss: 8.4.49 + tsx: 4.19.2 yaml: 2.6.1 postcss-nested@6.2.0(postcss@8.4.49): @@ -9504,7 +10016,7 @@ snapshots: protocols@2.0.1: {} - proxy-agent@6.4.0: + proxy-agent@6.5.0: dependencies: agent-base: 7.1.3 debug: 4.4.0 @@ -9712,24 +10224,24 @@ snapshots: dependencies: jsesc: 0.5.0 - release-it-pnpm@4.6.3(release-it@17.10.0(typescript@5.7.2)): + release-it-pnpm@4.6.3(release-it@17.11.0(typescript@5.7.2)): dependencies: bumpp: 9.9.1 changelogithub: 0.13.11 conventional-changelog-conventionalcommits: 8.0.0 conventional-recommended-bump: 10.0.0 kolorist: 1.8.0 - release-it: 17.10.0(typescript@5.7.2) + release-it: 17.11.0(typescript@5.7.2) semver: 7.6.3 transitivePeerDependencies: - magicast - release-it@17.10.0(typescript@5.7.2): + release-it@17.11.0(typescript@5.7.2): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 20.1.1 async-retry: 1.3.3 - chalk: 5.3.0 + chalk: 5.4.1 ci-info: 4.1.0 cosmiconfig: 9.0.0(typescript@5.7.2) execa: 8.0.0 @@ -9741,14 +10253,14 @@ snapshots: mime-types: 2.1.35 new-github-release-url: 2.0.0 open: 10.1.0 - ora: 8.1.0 + ora: 8.1.1 os-name: 5.1.0 - proxy-agent: 6.4.0 + proxy-agent: 6.5.0 semver: 7.6.3 shelljs: 0.8.5 update-notifier: 7.3.1 url-join: 5.0.0 - wildcard-match: 5.1.3 + wildcard-match: 5.1.4 yargs-parser: 21.1.1 transitivePeerDependencies: - supports-color @@ -9766,7 +10278,7 @@ snapshots: resolve@1.19.0: dependencies: - is-core-module: 2.16.0 + is-core-module: 2.16.1 path-parse: 1.0.7 resolve@1.22.10: @@ -10186,7 +10698,7 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.8.1 - tailwind-merge@2.5.5: {} + tailwind-merge@2.6.0: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.17): dependencies: @@ -10265,6 +10777,8 @@ snapshots: dependencies: is-number: 7.0.0 + tr46@0.0.3: {} + ts-api-utils@1.4.3(typescript@5.7.2): dependencies: typescript: 5.7.2 @@ -10289,6 +10803,14 @@ snapshots: tslib: 1.14.1 typescript: 5.7.2 + tsx@4.19.2: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + optional: true + turbo-darwin-64@2.3.3: optional: true @@ -10365,11 +10887,11 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.9 - typescript-eslint@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): + typescript-eslint@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: @@ -10417,7 +10939,7 @@ snapshots: update-notifier@7.3.1: dependencies: boxen: 8.0.1 - chalk: 5.3.0 + chalk: 5.4.1 configstore: 7.0.0 is-in-ci: 1.0.0 is-installed-globally: 1.0.0 @@ -10492,6 +11014,13 @@ snapshots: dependencies: defaults: 1.0.4 + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + when-exit@2.1.3: {} which-boxed-primitive@1.1.1: @@ -10542,7 +11071,7 @@ snapshots: dependencies: string-width: 7.2.0 - wildcard-match@5.1.3: {} + wildcard-match@5.1.4: {} windows-release@5.1.1: dependencies: @@ -10576,6 +11105,8 @@ snapshots: wrappy@1.0.2: {} + ws@8.18.0: {} + xdg-basedir@5.1.0: {} xml2js@0.6.2: From fd8cc6ba7a7154546112c47680f8f595e1934b50 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Thu, 2 Jan 2025 21:57:24 +0300 Subject: [PATCH 02/12] fix: :bug: fixed issue with sign up api --- apps/web/app/(auth)/auth/callback/route.ts | 29 +++++++++++++++ apps/web/app/api/auth/sign-up/route.ts | 40 +++++++++++++++++++++ package.json | 2 +- packages/feature-toggle/package.json | 2 +- pnpm-lock.yaml | 41 +++++++++++----------- 5 files changed, 92 insertions(+), 22 deletions(-) create mode 100644 apps/web/app/(auth)/auth/callback/route.ts create mode 100644 apps/web/app/api/auth/sign-up/route.ts diff --git a/apps/web/app/(auth)/auth/callback/route.ts b/apps/web/app/(auth)/auth/callback/route.ts new file mode 100644 index 0000000..6aaa860 --- /dev/null +++ b/apps/web/app/(auth)/auth/callback/route.ts @@ -0,0 +1,29 @@ +import { createClient } from '@ultra-reporter/supabase/server'; +import { NextResponse } from 'next/server'; + +export async function GET(request: Request) { + const { searchParams, origin } = new URL(request.url); + const code = searchParams.get('code'); + // if "next" is in param, use it as the redirect URL + const next = searchParams.get('next') ?? '/'; + + if (code) { + const supabase = await createClient(); + const { error } = await supabase.auth.exchangeCodeForSession(code); + if (!error) { + const forwardedHost = request.headers.get('x-forwarded-host'); // original origin before load balancer + const isLocalEnv = process.env.NODE_ENV === 'development'; + if (isLocalEnv) { + // we can be sure that there is no load balancer in between, so no need to watch for X-Forwarded-Host + return NextResponse.redirect(`${origin}${next}`); + } else if (forwardedHost) { + return NextResponse.redirect(`https://${forwardedHost}${next}`); + } else { + return NextResponse.redirect(`${origin}${next}`); + } + } + } + + // return the user to an error page with instructions + return NextResponse.redirect(`${origin}/auth/auth-code-error`); +} diff --git a/apps/web/app/api/auth/sign-up/route.ts b/apps/web/app/api/auth/sign-up/route.ts new file mode 100644 index 0000000..fb1581b --- /dev/null +++ b/apps/web/app/api/auth/sign-up/route.ts @@ -0,0 +1,40 @@ +import { logger } from '@ultra-reporter/logger'; +import { createClient } from '@ultra-reporter/supabase/server'; +import { NextResponse } from 'next/server'; + +export async function POST(req: Request) { + const supabase = await createClient(); + + const origin = req.headers.get('origin'); + + const { provider } = await req.json(); + const { error, data } = await supabase.auth.signInWithOAuth({ + provider, + options: { + redirectTo: `${origin}/auth/callback`, + }, + }); + + if (error) { + logger.error('Sign up failed', error); + return new NextResponse('Error while signing up', { + status: 500, + }); + } + + const { + data: { user }, + } = await supabase.auth.getUser(); + + if (!user) { + logger.error('User not found'); + return new NextResponse('Error while signing up', { + status: 500, + }); + } + + logger.info('Sign up successful', data); + return NextResponse.json(user, { + status: 201, + }); +} diff --git a/package.json b/package.json index 03c37aa..7f050f1 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-js": "^2.12.1", "@stylistic/eslint-plugin-ts": "^2.12.1", - "@types/node": "^22.10.3", + "@types/node": "^22.10.4", "@typescript-eslint/eslint-plugin": "^8.19.0", "@typescript-eslint/parser": "^8.19.0", "@vercel/style-guide": "^6.0.0", diff --git a/packages/feature-toggle/package.json b/packages/feature-toggle/package.json index d2a5cdb..d94a7e6 100644 --- a/packages/feature-toggle/package.json +++ b/packages/feature-toggle/package.json @@ -20,6 +20,6 @@ "react-dom": "^19.0" }, "dependencies": { - "flagsmith": "^8.0.1" + "flagsmith": "^8.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc1117f..75e992b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^2.12.1 version: 2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@types/node': - specifier: ^22.10.3 - version: 22.10.3 + specifier: ^22.10.4 + version: 22.10.4 '@typescript-eslint/eslint-plugin': specifier: ^8.19.0 version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) @@ -183,8 +183,8 @@ importers: packages/feature-toggle: dependencies: flagsmith: - specifier: ^8.0.1 - version: 8.0.1 + specifier: ^8.0.2 + version: 8.0.2 react: specifier: ^19.0 version: 19.0.0 @@ -1672,8 +1672,8 @@ packages: '@types/node@22.10.2': resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} - '@types/node@22.10.3': - resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} + '@types/node@22.10.4': + resolution: {integrity: sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3049,8 +3049,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flagsmith@8.0.1: - resolution: {integrity: sha512-cwW5v1EzwpEitQRPDRofSE+1q1fedxxCnfQwesHrRu4i62Erm2bvkuXfHvrTzB1k+6XA9GQmiNNb9br+8+iW5w==} + flagsmith@8.0.2: + resolution: {integrity: sha512-7NtsJuNAL1hGcezcWOpwfQOZWMwlFBEGRpKwbA8JMEUnx5zsm99LU8psVa3ne72uIVgDABcpdZnp7ep0fhRHRA==} flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} @@ -6741,7 +6741,7 @@ snapshots: dependencies: undici-types: 6.20.0 - '@types/node@22.10.3': + '@types/node@22.10.4': dependencies: undici-types: 6.20.0 @@ -6765,7 +6765,7 @@ snapshots: '@types/ws@8.5.13': dependencies: - '@types/node': 22.10.3 + '@types/node': 22.10.4 '@types/xml2js@0.4.14': dependencies: @@ -7020,7 +7020,7 @@ snapshots: eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0) eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-eslint-comments: 3.2.0(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-playwright: 1.8.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) @@ -8013,7 +8013,7 @@ snapshots: eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-react: 7.37.3(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.17.0(jiti@2.4.2)) @@ -8061,24 +8061,25 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color @@ -8088,7 +8089,7 @@ snapshots: eslint: 9.17.0(jiti@2.4.2) ignore: 5.3.2 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -8099,7 +8100,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.17.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.0 is-glob: 4.0.3 @@ -8111,7 +8112,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -8128,7 +8129,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.0 is-glob: 4.0.3 @@ -8517,7 +8518,7 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flagsmith@8.0.1: {} + flagsmith@8.0.2: {} flat-cache@4.0.1: dependencies: From dcb148ad5941bf20e26b324bcfb932619786b4db Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 5 Jan 2025 22:01:24 +0300 Subject: [PATCH 03/12] feat: :sparkles: adding sign in feature for new users --- apps/web/app/(app)/dashboard/page.tsx | 9 ++ apps/web/app/(auth)/layout.tsx | 14 +++ apps/web/app/(auth)/login/page.tsx | 97 ++++++++++++++++++++ apps/web/app/api/auth/login/route.ts | 48 ++++++++++ apps/web/app/api/auth/sign-up/route.ts | 40 -------- apps/web/middleware.ts | 20 ++++ package.json | 2 +- packages/supabase/src/middleware.ts | 8 +- packages/ui/package.json | 5 +- packages/ui/src/components/button.tsx | 3 +- packages/ui/src/components/card.tsx | 15 ++- packages/ui/src/components/demo-carousel.tsx | 75 +++++++++++++++ packages/ui/src/components/icons.tsx | 42 +++++++++ packages/ui/src/components/input.tsx | 7 +- packages/ui/src/components/tabs.tsx | 54 +++++++++++ packages/ui/src/home/hero.tsx | 11 +++ packages/ui/src/home/nav-bar.tsx | 18 ++++ pnpm-lock.yaml | 60 ++++++++++-- 18 files changed, 461 insertions(+), 67 deletions(-) create mode 100644 apps/web/app/(app)/dashboard/page.tsx create mode 100644 apps/web/app/(auth)/layout.tsx create mode 100644 apps/web/app/(auth)/login/page.tsx create mode 100644 apps/web/app/api/auth/login/route.ts delete mode 100644 apps/web/app/api/auth/sign-up/route.ts create mode 100644 apps/web/middleware.ts create mode 100644 packages/ui/src/components/demo-carousel.tsx create mode 100644 packages/ui/src/components/icons.tsx create mode 100644 packages/ui/src/components/tabs.tsx diff --git a/apps/web/app/(app)/dashboard/page.tsx b/apps/web/app/(app)/dashboard/page.tsx new file mode 100644 index 0000000..4efd7cd --- /dev/null +++ b/apps/web/app/(app)/dashboard/page.tsx @@ -0,0 +1,9 @@ +'use client'; + +export default function DashboardPage() { + return ( +
+

Dashboard

+
+ ); +} diff --git a/apps/web/app/(auth)/layout.tsx b/apps/web/app/(auth)/layout.tsx new file mode 100644 index 0000000..49098a5 --- /dev/null +++ b/apps/web/app/(auth)/layout.tsx @@ -0,0 +1,14 @@ +import { NavBar } from '@ultra-reporter/ui/home/nav-bar'; + +export default function AuthLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + + {children} + + ); +} diff --git a/apps/web/app/(auth)/login/page.tsx b/apps/web/app/(auth)/login/page.tsx new file mode 100644 index 0000000..2697a32 --- /dev/null +++ b/apps/web/app/(auth)/login/page.tsx @@ -0,0 +1,97 @@ +'use client'; + +import { Button } from '@ultra-reporter/ui/components/button'; +import { DemoCarousel } from '@ultra-reporter/ui/components/demo-carousel'; +import { Icons } from '@ultra-reporter/ui/components/icons'; +import { useState } from 'react'; + +export default function AuthPage() { + const [isLoading, setIsLoading] = useState(false); + + const handleAuth = async () => { + setIsLoading(true); + try { + const response = await fetch('/api/auth/login', { + method: 'POST', + }); + + if (!response.ok) { + throw new Error('Authentication failed'); + } + + const data = await response.json(); + + if (data.url) { + window.location.href = data.url; + } else { + throw new Error('No OAuth URL received'); + } + } catch (error) { + console.error('Authentication error:', error); + // You might want to show an error message to the user here + } finally { + setIsLoading(false); + } + }; + + return ( +
+
+ {/* Demo Carousel Section */} +
+ +
+ + {/* Auth Section */} +
+
+

+ Welcome to Ultra Reporter +

+

+ Sign in to your account or create a new one +

+
+ +
+ + +
+
+ +
+
+ + Secure Authentication + +
+
+ +

+ By continuing, you agree to our{' '} + + Terms of Service + {' '} + and{' '} + + Privacy Policy + +

+
+
+
+
+ ); +} diff --git a/apps/web/app/api/auth/login/route.ts b/apps/web/app/api/auth/login/route.ts new file mode 100644 index 0000000..ea3f480 --- /dev/null +++ b/apps/web/app/api/auth/login/route.ts @@ -0,0 +1,48 @@ +import { logger } from '@ultra-reporter/logger'; +import { createClient } from '@ultra-reporter/supabase/server'; +import { NextResponse } from 'next/server'; + +export async function POST(req: Request) { + try { + const supabase = await createClient(); + const origin = req.headers.get('origin') || 'http://localhost:3000'; + + // Get the URL for Google OAuth sign-in + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: 'google', + options: { + redirectTo: `${origin}/auth/callback`, + queryParams: { + access_type: 'offline', + prompt: 'consent', + }, + scopes: 'email profile', + }, + }); + + if (error) { + logger.error('OAuth initialization failed', { error }); + return NextResponse.json( + { error: 'Failed to start OAuth flow' }, + { status: 500 } + ); + } + + if (!data.url) { + logger.error('No OAuth URL returned'); + return NextResponse.json( + { error: 'Invalid OAuth configuration' }, + { status: 500 } + ); + } + + logger.info('OAuth flow initiated', { url: data.url }); + return NextResponse.json({ url: data.url }, { status: 200 }); + } catch (error) { + logger.error('Unexpected error during OAuth initialization', { error }); + return NextResponse.json( + { error: 'Internal server error' }, + { status: 500 } + ); + } +} diff --git a/apps/web/app/api/auth/sign-up/route.ts b/apps/web/app/api/auth/sign-up/route.ts deleted file mode 100644 index fb1581b..0000000 --- a/apps/web/app/api/auth/sign-up/route.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { logger } from '@ultra-reporter/logger'; -import { createClient } from '@ultra-reporter/supabase/server'; -import { NextResponse } from 'next/server'; - -export async function POST(req: Request) { - const supabase = await createClient(); - - const origin = req.headers.get('origin'); - - const { provider } = await req.json(); - const { error, data } = await supabase.auth.signInWithOAuth({ - provider, - options: { - redirectTo: `${origin}/auth/callback`, - }, - }); - - if (error) { - logger.error('Sign up failed', error); - return new NextResponse('Error while signing up', { - status: 500, - }); - } - - const { - data: { user }, - } = await supabase.auth.getUser(); - - if (!user) { - logger.error('User not found'); - return new NextResponse('Error while signing up', { - status: 500, - }); - } - - logger.info('Sign up successful', data); - return NextResponse.json(user, { - status: 201, - }); -} diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts new file mode 100644 index 0000000..7647846 --- /dev/null +++ b/apps/web/middleware.ts @@ -0,0 +1,20 @@ +import { updateSession } from '@ultra-reporter/supabase/middleware'; +import { type NextRequest } from 'next/server'; + +export async function middleware(request: NextRequest) { + return await updateSession(request); +} + +export const config = { + matcher: [ + /* + * Match all request paths except: + * - _next/static (static files) + * - _next/image (image optimization files) + * - favicon.ico (favicon file) + * - images - .svg, .png, .jpg, .jpeg, .gif, .webp + * Feel free to modify this pattern to include more paths. + */ + '/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)', + ], +}; diff --git a/package.json b/package.json index 7f050f1..1c60a48 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-js": "^2.12.1", "@stylistic/eslint-plugin-ts": "^2.12.1", - "@types/node": "^22.10.4", + "@types/node": "^22.10.5", "@typescript-eslint/eslint-plugin": "^8.19.0", "@typescript-eslint/parser": "^8.19.0", "@vercel/style-guide": "^6.0.0", diff --git a/packages/supabase/src/middleware.ts b/packages/supabase/src/middleware.ts index 56bfee4..0566e71 100644 --- a/packages/supabase/src/middleware.ts +++ b/packages/supabase/src/middleware.ts @@ -34,12 +34,12 @@ export const updateSession = async (request: NextRequest) => { const user = await supabase.auth.getUser(); - if (request.nextUrl.pathname.startsWith('/protected') && user.error) { - return NextResponse.redirect(new URL('/sign-in', request.url)); + if (request.nextUrl.pathname.startsWith('/dashboard') && user.error) { + return NextResponse.redirect(new URL('/login', request.url)); } - if (request.nextUrl.pathname === '/' && !user.error) { - return NextResponse.redirect(new URL('/protected', request.url)); + if (request.nextUrl.pathname === '/login' && !user.error) { + return NextResponse.redirect(new URL('/dashboard', request.url)); } return response; diff --git a/packages/ui/package.json b/packages/ui/package.json index d394dc8..6b0db4e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -41,6 +41,7 @@ "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-switch": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-toast": "^1.2.4", "@radix-ui/react-tooltip": "^1.1.6", "@tanstack/react-table": "^8.20.6", @@ -54,11 +55,13 @@ "react-hook-form": "^7.54.2", "recharts": "^2.15.0", "tailwindcss-animate": "^1.0.7", - "zod": "^3.24.1" + "zod": "^3.24.1", + "zxcvbn": "^4.4.2" }, "devDependencies": { "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", + "@types/zxcvbn": "^4.4.5", "@ultra-reporter/feature-toggle": "workspace:*", "@ultra-reporter/typescript-config": "workspace:*", "@ultra-reporter/utils": "workspace:*", diff --git a/packages/ui/src/components/button.tsx b/packages/ui/src/components/button.tsx index 1db727d..f0df5a2 100644 --- a/packages/ui/src/components/button.tsx +++ b/packages/ui/src/components/button.tsx @@ -1,9 +1,8 @@ import { Slot } from '@radix-ui/react-slot'; +import { cn } from '@ultra-reporter/utils/cn'; import { cva, type VariantProps } from 'class-variance-authority'; import * as React from 'react'; -import { cn } from '@ultra-reporter/utils/cn'; - const buttonVariants = cva( 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', { diff --git a/packages/ui/src/components/card.tsx b/packages/ui/src/components/card.tsx index eaa06fb..dfffe12 100644 --- a/packages/ui/src/components/card.tsx +++ b/packages/ui/src/components/card.tsx @@ -1,6 +1,5 @@ -import * as React from 'react'; - import { cn } from '@ultra-reporter/utils/cn'; +import * as React from 'react'; const Card = React.forwardRef< HTMLDivElement, @@ -30,10 +29,10 @@ const CardHeader = React.forwardRef< CardHeader.displayName = 'CardHeader'; const CardTitle = React.forwardRef< - HTMLParagraphElement, - React.HTMLAttributes + HTMLDivElement, + React.HTMLAttributes >(({ className, ...props }, ref) => ( -

+ HTMLDivElement, + React.HTMLAttributes >(({ className, ...props }, ref) => ( -

{ + const timer = setInterval(() => { + setCurrentSlide((prev) => (prev + 1) % demoSlides.length); + }, SLIDE_DURATION); + + return () => clearInterval(timer); + }, []); + + return ( +

+ {demoSlides.map((slide, index) => ( +
+ {slide.alt} +
+

{slide.caption}

+
+
+ ))} + + {/* Slide indicators */} +
+ {demoSlides.map((_, index) => ( +
+
+ ); +} diff --git a/packages/ui/src/components/icons.tsx b/packages/ui/src/components/icons.tsx new file mode 100644 index 0000000..f0b3368 --- /dev/null +++ b/packages/ui/src/components/icons.tsx @@ -0,0 +1,42 @@ +import { + Loader2, + Lock, + LucideProps, + Moon, + SunMedium, + Twitter, +} from 'lucide-react'; + +export const Icons = { + sun: SunMedium, + moon: Moon, + twitter: Twitter, + lock: Lock, + spinner: Loader2, + google: (props: LucideProps) => ( + + + + + + + + ), + gitHub: (props: LucideProps) => ( + + + + ), +}; diff --git a/packages/ui/src/components/input.tsx b/packages/ui/src/components/input.tsx index 926c111..e240e7f 100644 --- a/packages/ui/src/components/input.tsx +++ b/packages/ui/src/components/input.tsx @@ -2,16 +2,13 @@ import * as React from 'react'; import { cn } from '@ultra-reporter/utils/cn'; -export interface InputProps - extends React.InputHTMLAttributes {} - -const Input = React.forwardRef( +const Input = React.forwardRef>( ({ className, type, ...props }, ref) => { return ( , + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsList.displayName = TabsPrimitive.List.displayName; + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsContent.displayName = TabsPrimitive.Content.displayName; + +export { Tabs, TabsContent, TabsList, TabsTrigger }; diff --git a/packages/ui/src/home/hero.tsx b/packages/ui/src/home/hero.tsx index 090846f..76a9914 100644 --- a/packages/ui/src/home/hero.tsx +++ b/packages/ui/src/home/hero.tsx @@ -2,7 +2,9 @@ import { getFlag } from '@ultra-reporter/feature-toggle/provider'; import Image from 'next/image'; +import Link from 'next/link'; import { JSX } from 'react'; +import { Button } from '../components/button'; import { FileUpload } from '../utils/file-upload'; export const Hero = (): JSX.Element => { @@ -23,6 +25,15 @@ export const Hero = (): JSX.Element => { )} + {signInSupport?.enabled && ( +
+ + + +
+ )}
{ + const signInSupport = getFlag('sign_in_support'); + return (