diff --git a/.gitignore b/.gitignore index d25f7cd..22155b7 100644 --- a/.gitignore +++ b/.gitignore @@ -283,7 +283,7 @@ node_modules/ dist/ .env *.tsbuildinfo - +ios # TeamD config build artifacts teamd.config.mjs teamd.config.*.map diff --git a/package.json b/package.json index 9688e90..c564a0b 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "src/web-user", "src/api", "src/mobile", - "src/shared" + "src/shared", + "src/database" ], "packageManager": "pnpm@10.18.0", "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7724ae..9aa8b91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,31 +32,37 @@ importers: version: 10.1.0 '@large-event/api': specifier: ^1.1.0 - version: 1.1.0(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0) + version: 1.1.0(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0) '@large-event/api-types': specifier: ^1.0.3 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/database': specifier: ^1.0.3 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@teamd/database': specifier: workspace:* version: link:../database drizzle-orm: specifier: ^0.30.10 - version: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0) + version: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0) fastify: specifier: ^5.6.2 version: 5.6.2 + fastify-raw-body: + specifier: ^5.0.0 + version: 5.0.0 jsonwebtoken: specifier: ^9.0.2 version: 9.0.2 + stripe: + specifier: ^20.0.0 + version: 20.0.0(@types/node@20.19.25) devDependencies: '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 '@types/node': - specifier: ^20.19.24 + specifier: ^20.19.25 version: 20.19.25 tsx: specifier: ^4.20.6 @@ -74,17 +80,17 @@ importers: src/database: dependencies: '@large-event/database': - specifier: ^1.0.1 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + specifier: ^1.0.3 + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) drizzle-orm: specifier: ^0.30.10 - version: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0) + version: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0) pg: specifier: ^8.16.3 version: 8.16.3 devDependencies: '@types/node': - specifier: ^24.10.0 + specifier: ^24.10.1 version: 24.10.1 '@types/pg': specifier: ^8.15.6 @@ -93,7 +99,7 @@ importers: specifier: ^0.21.4 version: 0.21.4 tsup: - specifier: ^8.3.5 + specifier: ^8.5.1 version: 8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) tsx: specifier: ^4.20.6 @@ -104,41 +110,47 @@ importers: src/mobile: dependencies: + '@expo/metro-runtime': + specifier: ~3.2.3 + version: 3.2.3(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0)) '@expo/vector-icons': - specifier: ^14.0.0 + specifier: ^14.1.0 version: 14.1.0(expo-font@12.0.10(expo@51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) '@react-native-async-storage/async-storage': - specifier: ^1.23.1 + specifier: ^1.24.0 version: 1.24.0(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0)) '@react-navigation/bottom-tabs': - specifier: ^6.5.20 + specifier: ^6.6.1 version: 6.6.1(@react-navigation/native@6.1.18(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.10.5(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native-screens@3.31.1(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) '@react-navigation/native': specifier: ^6.1.18 version: 6.1.18(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) '@react-navigation/native-stack': - specifier: ^6.9.26 + specifier: ^6.11.0 version: 6.11.0(@react-navigation/native@6.1.18(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.10.5(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native-screens@3.31.1(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) + '@stripe/stripe-js': + specifier: ^8.5.3 + version: 8.5.3 '@teamd/mobile-components': specifier: workspace:* version: link:../mobile-components axios: - specifier: ^1.6.8 + specifier: ^1.13.2 version: 1.13.2 expo: - specifier: ~51.0.8 + specifier: ~51.0.39 version: 51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) expo-constants: specifier: ~16.0.2 version: 16.0.2(expo@51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)) expo-font: - specifier: ~12.0.4 + specifier: ~12.0.10 version: 12.0.10(expo@51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)) expo-linking: specifier: ~6.3.1 version: 6.3.1(expo@51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)) expo-splash-screen: - specifier: ~0.27.4 + specifier: ~0.27.7 version: 0.27.7(expo-modules-autolinking@1.11.3)(expo@51.0.39(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)) expo-status-bar: specifier: ~1.12.1 @@ -146,11 +158,14 @@ importers: react: specifier: 18.2.0 version: 18.2.0 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.2.0) react-native: specifier: 0.74.5 version: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0) react-native-gesture-handler: - specifier: ~2.16.1 + specifier: ~2.16.2 version: 2.16.2(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) react-native-reanimated: specifier: ~3.10.1 @@ -161,46 +176,49 @@ importers: react-native-screens: specifier: ~3.31.1 version: 3.31.1(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0) + react-native-web: + specifier: ~0.19.13 + version: 0.19.13(react-dom@18.3.1(react@18.2.0))(react@18.2.0) devDependencies: '@babel/core': - specifier: ^7.20.0 + specifier: ^7.28.5 version: 7.28.5 '@types/react': specifier: ~18.2.79 version: 18.2.79 '@types/react-native': - specifier: ^0.72.0 + specifier: ^0.72.8 version: 0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0)) babel-preset-expo: - specifier: ~11.0.0 + specifier: ~11.0.15 version: 11.0.15(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) typescript: - specifier: ^5.3.3 + specifier: ^5.9.3 version: 5.9.3 src/mobile-components: dependencies: '@react-native-async-storage/async-storage': - specifier: ^1.23.1 - version: 1.24.0(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0)) + specifier: ^1.24.0 + version: 1.24.0(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0)) axios: - specifier: ^1.6.8 + specifier: ^1.13.2 version: 1.13.2 react: specifier: '>=18.0.0' version: 19.2.0 react-native: specifier: '>=0.70.0' - version: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0) + version: 0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0) devDependencies: '@types/react': - specifier: ~18.2.45 + specifier: ~18.2.79 version: 18.2.79 '@types/react-native': - specifier: ^0.72.0 - version: 0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0)) + specifier: ^0.72.8 + version: 0.72.8(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0)) typescript: - specifier: ^5.3.3 + specifier: ^5.9.3 version: 5.9.3 src/web-admin: @@ -213,19 +231,19 @@ importers: version: 10.1.0 '@large-event/api-client': specifier: ^1.0.0 - version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/api-types': specifier: ^1.0.3 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/web-components': specifier: ^1.0.4 - version: 1.0.4(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.0.4(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': - specifier: ^5.90.7 - version: 5.90.8(react@19.2.0) + specifier: ^5.90.11 + version: 5.90.11(react@19.2.0) '@tanstack/react-router': - specifier: ^1.135.0 - version: 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.139.6 + version: 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) fastify: specifier: ^5.6.2 version: 5.6.2 @@ -240,28 +258,28 @@ importers: version: 19.2.0(react@19.2.0) devDependencies: '@tanstack/react-router-devtools': - specifier: ^1.135.0 - version: 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.135.2)(@types/node@20.19.25)(csstype@3.1.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^1.139.6 + version: 1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.139.6)(@types/node@20.19.25)(csstype@3.2.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/router-vite-plugin': - specifier: ^1.135.0 - version: 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) + specifier: ^1.139.6 + version: 1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 '@types/node': - specifier: ^20.19.24 + specifier: ^20.19.25 version: 20.19.25 '@types/react': - specifier: ^19.2.2 - version: 19.2.4 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': - specifier: ^19.2.2 - version: 19.2.3(@types/react@19.2.4) + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react': specifier: ^4.7.0 version: 4.7.0(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) autoprefixer: - specifier: ^10.4.21 + specifier: ^10.4.22 version: 10.4.22(postcss@8.5.6) concurrently: specifier: ^9.2.1 @@ -289,13 +307,13 @@ importers: dependencies: '@large-event/api-client': specifier: ^1.0.0 - version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/api-types': specifier: ^1.0.3 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@tanstack/react-router': specifier: '>=1.58.0' - version: 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: specifier: '>=19.0.0' version: 19.2.0 @@ -304,16 +322,16 @@ importers: version: 19.2.0(react@19.2.0) devDependencies: '@types/react': - specifier: ^19.2.3 - version: 19.2.4 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': - specifier: ^19.1.9 - version: 19.2.3(@types/react@19.2.4) + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) tsup: - specifier: ^8.3.5 + specifier: ^8.5.1 version: 8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) typescript: - specifier: ^5.4.5 + specifier: ^5.9.3 version: 5.9.3 src/web-user: @@ -326,19 +344,19 @@ importers: version: 10.1.0 '@large-event/api-client': specifier: ^1.0.0 - version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.0(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/api-types': specifier: ^1.0.3 - version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + version: 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) '@large-event/web-components': specifier: ^1.0.4 - version: 1.0.4(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 1.0.4(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-query': - specifier: ^5.90.7 - version: 5.90.8(react@19.2.0) + specifier: ^5.90.11 + version: 5.90.11(react@19.2.0) '@tanstack/react-router': - specifier: ^1.135.0 - version: 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: ^1.139.6 + version: 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) axios: specifier: ^1.13.2 version: 1.13.2 @@ -346,8 +364,8 @@ importers: specifier: ^3.0.3 version: 3.0.3 cookie: - specifier: ^1.0.2 - version: 1.0.2 + specifier: ^1.1.0 + version: 1.1.0 date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -368,11 +386,11 @@ importers: version: 6.1.19(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@tanstack/react-router-devtools': - specifier: ^1.135.0 - version: 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.135.2)(@types/node@20.19.25)(csstype@3.1.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: ^1.139.6 + version: 1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.139.6)(@types/node@20.19.25)(csstype@3.2.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/router-vite-plugin': - specifier: ^1.135.0 - version: 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) + specifier: ^1.139.6 + version: 1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) '@types/bcryptjs': specifier: ^3.0.0 version: 3.0.0 @@ -380,22 +398,22 @@ importers: specifier: ^9.0.10 version: 9.0.10 '@types/node': - specifier: ^20.19.24 + specifier: ^20.19.25 version: 20.19.25 '@types/react': - specifier: ^19.2.2 - version: 19.2.4 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': - specifier: ^19.2.2 - version: 19.2.3(@types/react@19.2.4) + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) '@types/styled-components': - specifier: ^5.1.35 - version: 5.1.35 + specifier: ^5.1.36 + version: 5.1.36 '@vitejs/plugin-react': specifier: ^4.7.0 version: 4.7.0(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) autoprefixer: - specifier: ^10.4.21 + specifier: ^10.4.22 version: 10.4.22(postcss@8.5.6) concurrently: specifier: ^9.2.1 @@ -656,6 +674,22 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.27.1': resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==} engines: {node: '>=6.9.0'} @@ -691,6 +725,16 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} @@ -727,6 +771,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.27.1': resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} @@ -1947,6 +2003,11 @@ packages: '@expo/metro-config@0.18.11': resolution: {integrity: sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==} + '@expo/metro-runtime@3.2.3': + resolution: {integrity: sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==} + peerDependencies: + react-native: '*' + '@expo/osascript@2.3.7': resolution: {integrity: sha512-IClSOXxR0YUFxIriUJVqyYki7lLMIHrrzOaP01yxAL1G8pj2DWV5eW1y5jSzIcIfSCNhtGsshGd1tU/AYup5iQ==} engines: {node: '>=12'} @@ -2043,6 +2104,14 @@ packages: resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jest/create-cache-key-function@29.7.0': resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2059,6 +2128,10 @@ packages: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@24.9.0': resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} engines: {node: '>= 6'} @@ -2181,6 +2254,10 @@ packages: resolution: {integrity: sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg==} engines: {node: '>=18'} + '@react-native/assets-registry@0.82.1': + resolution: {integrity: sha512-B1SRwpntaAcckiatxbjzylvNK562Ayza05gdJCjDQHTiDafa1OABmyB5LHt7qWDOpNkaluD+w11vHF7pBmTpzQ==} + engines: {node: '>= 20.19.4'} + '@react-native/babel-plugin-codegen@0.74.87': resolution: {integrity: sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==} engines: {node: '>=18'} @@ -2197,10 +2274,28 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 + '@react-native/codegen@0.82.1': + resolution: {integrity: sha512-ezXTN70ygVm9l2m0i+pAlct0RntoV4afftWMGUIeAWLgaca9qItQ54uOt32I/9dBJvzBibT33luIR/pBG0dQvg==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@babel/core': '*' + '@react-native/community-cli-plugin@0.74.87': resolution: {integrity: sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ==} engines: {node: '>=18'} + '@react-native/community-cli-plugin@0.82.1': + resolution: {integrity: sha512-H/eMdtOy9nEeX7YVeEG1N2vyCoifw3dr9OV8++xfUElNYV7LtSmJ6AqxZUUfxGJRDFPQvaU/8enmJlM/l11VxQ==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@react-native-community/cli': '*' + '@react-native/metro-config': '*' + peerDependenciesMeta: + '@react-native-community/cli': + optional: true + '@react-native/metro-config': + optional: true + '@react-native/debugger-frontend@0.74.85': resolution: {integrity: sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ==} engines: {node: '>=18'} @@ -2209,6 +2304,14 @@ packages: resolution: {integrity: sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ==} engines: {node: '>=18'} + '@react-native/debugger-frontend@0.82.1': + resolution: {integrity: sha512-a2O6M7/OZ2V9rdavOHyCQ+10z54JX8+B+apYKCQ6a9zoEChGTxUMG2YzzJ8zZJVvYf1ByWSNxv9Se0dca1hO9A==} + engines: {node: '>= 20.19.4'} + + '@react-native/debugger-shell@0.82.1': + resolution: {integrity: sha512-fdRHAeqqPT93bSrxfX+JHPpCXHApfDUdrXMXhoxlPgSzgXQXJDykIViKhtpu0M6slX6xU/+duq+AtP/qWJRpBw==} + engines: {node: '>= 20.19.4'} + '@react-native/dev-middleware@0.74.85': resolution: {integrity: sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w==} engines: {node: '>=18'} @@ -2217,14 +2320,26 @@ packages: resolution: {integrity: sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA==} engines: {node: '>=18'} + '@react-native/dev-middleware@0.82.1': + resolution: {integrity: sha512-wuOIzms/Qg5raBV6Ctf2LmgzEOCqdP3p1AYN4zdhMT110c39TVMbunpBaJxm0Kbt2HQ762MQViF9naxk7SBo4w==} + engines: {node: '>= 20.19.4'} + '@react-native/gradle-plugin@0.74.87': resolution: {integrity: sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A==} engines: {node: '>=18'} + '@react-native/gradle-plugin@0.82.1': + resolution: {integrity: sha512-KkF/2T1NSn6EJ5ALNT/gx0MHlrntFHv8YdooH9OOGl9HQn5NM0ZmQSr86o5utJsGc7ME3R6p3SaQuzlsFDrn8Q==} + engines: {node: '>= 20.19.4'} + '@react-native/js-polyfills@0.74.87': resolution: {integrity: sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw==} engines: {node: '>=18'} + '@react-native/js-polyfills@0.82.1': + resolution: {integrity: sha512-tf70X7pUodslOBdLN37J57JmDPB/yiZcNDzS2m+4bbQzo8fhx3eG9QEBv5n4fmzqfGAgSB4BWRHgDMXmmlDSVA==} + engines: {node: '>= 20.19.4'} + '@react-native/metro-babel-transformer@0.74.87': resolution: {integrity: sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A==} engines: {node: '>=18'} @@ -2237,6 +2352,12 @@ packages: '@react-native/normalize-colors@0.74.87': resolution: {integrity: sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA==} + '@react-native/normalize-colors@0.74.89': + resolution: {integrity: sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==} + + '@react-native/normalize-colors@0.82.1': + resolution: {integrity: sha512-CCfTR1uX+Z7zJTdt3DNX9LUXr2zWXsNOyLbwupW2wmRzrxlHRYfmLgTABzRL/cKhh0Ubuwn15o72MQChvCRaHw==} + '@react-native/virtualized-lists@0.72.8': resolution: {integrity: sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==} peerDependencies: @@ -2253,6 +2374,17 @@ packages: '@types/react': optional: true + '@react-native/virtualized-lists@0.82.1': + resolution: {integrity: sha512-f5zpJg9gzh7JtCbsIwV+4kP3eI0QBuA93JGmwFRd4onQ3DnCjV2J5pYqdWtM95sjSKK1dyik59Gj01lLeKqs1Q==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@types/react': ^19.1.1 + react: '*' + react-native: '*' + peerDependenciesMeta: + '@types/react': + optional: true + '@react-navigation/bottom-tabs@6.6.1': resolution: {integrity: sha512-9oD4cypEBjPuaMiu9tevWGiQ4w/d6l3HNhcJ1IjXZ24xvYDSs0mqjUcdt8SWUolCvRrYc/DmNBLlT83bk0bHTw==} peerDependencies: @@ -2300,113 +2432,113 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} - '@rollup/rollup-android-arm-eabi@4.53.2': - resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.2': - resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.2': - resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.2': - resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.2': - resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.2': - resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.2': - resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.2': - resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.2': - resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.2': - resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.2': - resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.2': - resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.2': - resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.2': - resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.2': - resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.2': - resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.2': - resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.2': - resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -2431,28 +2563,36 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@tanstack/history@1.133.28': - resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} + '@stripe/stripe-js@8.5.3': + resolution: {integrity: sha512-UM0GHAxlTN7v0lCK2P6t0VOlvBIdApIQxhnM3yZ2kupQ4PpSrLsK/n/NyYKtw2NJGMaNRRD1IicWS7fSL2sFtA==} + engines: {node: '>=12.16'} + + '@tanstack/history@1.139.0': + resolution: {integrity: sha512-l6wcxwDBeh/7Dhles23U1O8lp9kNJmAb2yNjekR6olZwCRNAVA8TCXlVCrueELyFlYZqvQkh0ofxnzG62A1Kkg==} engines: {node: '>=12'} - '@tanstack/query-core@5.90.8': - resolution: {integrity: sha512-4E0RP/0GJCxSNiRF2kAqE/LQkTJVlL/QNU7gIJSptaseV9HP6kOuA+N11y4bZKZxa3QopK3ZuewwutHx6DqDXQ==} + '@tanstack/query-core@5.90.11': + resolution: {integrity: sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==} - '@tanstack/react-query@5.90.8': - resolution: {integrity: sha512-/3b9QGzkf4rE5/miL6tyhldQRlLXzMHcySOm/2Tm2OLEFE9P1ImkH0+OviDBSvyAvtAOJocar5xhd7vxdLi3aQ==} + '@tanstack/react-query@5.90.11': + resolution: {integrity: sha512-3uyzz01D1fkTLXuxF3JfoJoHQMU2fxsfJwE+6N5hHy0dVNoZOvwKP8Z2k7k1KDeD54N20apcJnG75TBAStIrBA==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.135.2': - resolution: {integrity: sha512-8nG+twPfOvjaknnzLTTvnsXART9s6fQbY+Yj4nnNVOcF0FiUuK7TgJJQMKWHsmNa47X3fV1GZCTQV4cWhqKY0w==} + '@tanstack/react-router-devtools@1.139.6': + resolution: {integrity: sha512-dhiteXt0/oDpg1FCXGP3hA78PPqfoG2mTI0wZ1qtBsjln+YUTDOQP3aX2va42SPp073Gy7bX7XCHS+OuPgeekA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.135.2 + '@tanstack/react-router': ^1.139.6 + '@tanstack/router-core': ^1.139.6 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' + peerDependenciesMeta: + '@tanstack/router-core': + optional: true - '@tanstack/react-router@1.135.2': - resolution: {integrity: sha512-IzvCJ5bZ4dTEh65J1NrILF3Ab+ajRgsHYQYl/3du1sptRfQkUSsRYQGXffQQU3JH++plmO/tJXtRTmgrAp4inA==} + '@tanstack/react-router@1.139.6': + resolution: {integrity: sha512-Orlg9kpFy+tb5P+u7DlqVxAeBTeSBqWxqoDqkRyyrUUxJI3l8lKL6Gc89amXdRnVD6SDR+aT5X0Za4MMLObGDw==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -2464,32 +2604,31 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.135.2': - resolution: {integrity: sha512-fhJSGmbqE78Ou6e+cnJ9exmjCzCZ9IXT2rApiPAgeItKj2yy1qmTEoR11n0x0fiNkkBxHL1us+QyG8JfNELiQA==} + '@tanstack/router-core@1.139.6': + resolution: {integrity: sha512-6SV3bT5JsrGPQicDDRJ5GscwXnp6M7GGgyqv3NRlA6w3h2iD6tB7UFPmRSkbPqeO6pGcMsX3fVH4v5XFyZ78Xw==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.135.2': - resolution: {integrity: sha512-VmLyG7M8rYyA4jleCBpwYc+bjODAfWIQfBZt/16/c8Fg2K6eeMuX5lMGXYWPZT6BNV4ylv+JrSmOX3WUhDRQeQ==} + '@tanstack/router-devtools-core@1.139.6': + resolution: {integrity: sha512-faNJ8bJqEcuvvju6go/t/unxFIkfVN/EPEOvD28JhOl/9YihoU7lNKfoU3duBy7i7JM995Jn+8r8lUXlTM47SA==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.135.2 + '@tanstack/router-core': ^1.139.6 csstype: ^3.0.10 solid-js: '>=1.9.5' - tiny-invariant: ^1.3.3 peerDependenciesMeta: csstype: optional: true - '@tanstack/router-generator@1.135.2': - resolution: {integrity: sha512-YaTr1qrV2ysSllKu9FjCjaSjRFiX6SLKVGkQLJJ+SzoCsMco+zqhmtBjiw3YHC0jWBRs21iQieBzNR/PvT7JkA==} + '@tanstack/router-generator@1.139.6': + resolution: {integrity: sha512-8+3gXwkAkWtQrxEN1ZrxBGsGSnbkYw/5/rMsVuBsBorKNkfHip6x2chKeH28m5E4vvSrLtEuH/a0dsT6A4u7hw==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.135.2': - resolution: {integrity: sha512-iB//HEGIX7Rn4390O4xM3+5LMSmtphRoCPoq3jpE6dGnAIPWEJJ/O1r95OR1LFAe5MhdciJPhsNgYHCIj+PeZw==} + '@tanstack/router-plugin@1.139.6': + resolution: {integrity: sha512-5eftEXfFPaiewnnAljGmRWrnKSHPtpAdeIjInIEOILl77e6MTnajPDzn3PgbKC7kunYY0ZhDbE8cVG8jz/m6fg==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.135.2 + '@tanstack/react-router': ^1.139.6 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -2505,19 +2644,19 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.133.19': - resolution: {integrity: sha512-WEp5D2gPxvlLDRXwD/fV7RXjYtqaqJNXKB/L6OyZEbT+9BG/Ib2d7oG9GSUZNNMGPGYAlhBUOi3xutySsk6rxA==} + '@tanstack/router-utils@1.139.0': + resolution: {integrity: sha512-jT7D6NimWqoFSkid4vCno8gvTyfL1+NHpgm3es0B2UNhKKRV3LngOGilm1m6v8Qvk/gy6Fh/tvB+s+hBl6GhOg==} engines: {node: '>=12'} - '@tanstack/router-vite-plugin@1.135.2': - resolution: {integrity: sha512-ja+b28psOcjKcsNHbt31ArwyoseVJ8gLJgo37X5kdXo2TyNCKPgZ8NlR+v0MFhVGxix4SqYbmYd91H74DfUPew==} + '@tanstack/router-vite-plugin@1.139.6': + resolution: {integrity: sha512-B6cv/XyUCQgGA1oC2UfkbnEg6HS4Nguf7Ejyq6PmC60jb2HHj6/ECJMGde4AMXCdtYjOd+wAkQVhXQ6oOHiYJg==} engines: {node: '>=12'} '@tanstack/store@0.8.0': resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} - '@tanstack/virtual-file-routes@1.133.19': - resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==} + '@tanstack/virtual-file-routes@1.139.0': + resolution: {integrity: sha512-9PImF1d1tovTUIpjFVa0W7Fwj/MHif7BaaczgJJfbv3sDt1Gh+oW9W9uCw9M3ndEJynnp5ZD/TTs0RGubH5ssg==} engines: {node: '>=12'} '@types/babel__core@7.20.5': @@ -2539,6 +2678,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/hammerjs@2.0.46': resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} @@ -2594,14 +2736,14 @@ packages: '@types/react@18.2.79': resolution: {integrity: sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==} - '@types/react@19.2.4': - resolution: {integrity: sha512-tBFxBp9Nfyy5rsmefN+WXc1JeW/j2BpBHFdLZbEVfs9wn3E3NRFxwV0pJg8M1qQAexFpvz73hJXFofV0ZAu92A==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/styled-components@5.1.35': - resolution: {integrity: sha512-JeYII52nSFGXGaw/5Odf0TBUhT3024HduBewrZCQBoUFKBw8V6x1dbnZCpgJuzmiokWAlVo3kkS3k3jrEK1NyA==} + '@types/styled-components@5.1.36': + resolution: {integrity: sha512-pGMRNY5G2rNDKEv2DOiFYa7Ft1r0jrhmgBwHhOMzPTgCjO76bCot0/4uEfqj7K0Jf1KdQmDtAuaDk9EAs9foSw==} '@types/stylis@4.2.5': resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} @@ -2612,11 +2754,11 @@ packages: '@types/yargs@13.0.12': resolution: {integrity: sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==} - '@types/yargs@15.0.19': - resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} + '@types/yargs@15.0.20': + resolution: {integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==} - '@types/yargs@17.0.34': - resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} + '@types/yargs@17.0.35': + resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2671,6 +2813,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2820,6 +2966,20 @@ packages: babel-dead-code-elimination@1.0.10: resolution: {integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==} + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-polyfill-corejs2@0.4.14: resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} peerDependencies: @@ -2841,20 +3001,34 @@ packages: babel-plugin-react-native-web@0.19.13: resolution: {integrity: sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==} + babel-plugin-syntax-hermes-parser@0.32.0: + resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} + babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} + peerDependencies: + '@babel/core': ^7.0.0 || ^8.0.0-0 + babel-preset-expo@11.0.15: resolution: {integrity: sha512-rgiMTYwqIPULaO7iZdqyL7aAff9QLOX6OWUtLZBlOrOTreGY1yHah/5+l8MvI6NVc/8Zj5LY4Y5uMSnJIuzTLw==} + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.28: - resolution: {integrity: sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==} + baseline-browser-mapping@2.8.31: + resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==} hasBin: true bcryptjs@3.0.3: @@ -2990,8 +3164,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001754: - resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} + caniuse-lite@1.0.30001757: + resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -3021,6 +3195,9 @@ packages: engines: {node: '>=12.13.0'} hasBin: true + chromium-edge-launcher@0.2.0: + resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -3101,6 +3278,10 @@ packages: command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3164,12 +3345,12 @@ packages: resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} engines: {node: '>=6.6.0'} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + cookie@1.1.0: + resolution: {integrity: sha512-vXiThu1/rlos7EGu8TuNZQEg2e9TvhH9dmS4T4ZVzB7Ao1agEZ6EG3sn5n+hZRYUgduISd1HpngFzAZiDGm5vQ==} engines: {node: '>=18'} - core-js-compat@3.46.0: - resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} + core-js-compat@3.47.0: + resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3204,6 +3385,9 @@ packages: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + css-in-js-utils@3.1.0: + resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==} + css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} @@ -3215,6 +3399,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + d@1.0.2: resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} engines: {node: '>=0.12'} @@ -3465,8 +3652,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.250: - resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==} + electron-to-chromium@1.5.260: + resolution: {integrity: sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3732,6 +3919,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-loops@1.1.4: + resolution: {integrity: sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==} + fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} @@ -3745,12 +3935,21 @@ packages: fastify-plugin@5.1.0: resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} + fastify-raw-body@5.0.0: + resolution: {integrity: sha512-2qfoaQ3BQDhZ1gtbkKZd6n0kKxJISJGM6u/skD9ljdWItAscjXrtZ1lnjr7PavmXX9j4EyCPmBDiIsLn07d5vA==} + engines: {node: '>= 10'} + fastify@5.6.2: resolution: {integrity: sha512-dPugdGnsvYkBlENLhCgX8yhyGCsCPrpA8lFWbTNU428l+YOnLgYHR69hzV8HWPC79n536EqzqQtvhtdaCE0dKg==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3855,8 +4054,8 @@ packages: resolution: {integrity: sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==} engines: {node: '>= 6'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} fraction.js@5.3.4: @@ -3924,6 +4123,10 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3955,8 +4158,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true glob@7.1.6: @@ -4046,18 +4249,27 @@ packages: heap@0.2.7: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + hermes-compiler@0.0.0: + resolution: {integrity: sha512-boVFutx6ME/Km2mB6vvsQcdnazEYYI/jV1pomx1wcFUG/EVqTkr5CU0CW9bKipOA/8Hyu3NYwW3THg2Q1kNCfA==} + hermes-estree@0.19.1: resolution: {integrity: sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==} hermes-estree@0.23.1: resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} + hermes-estree@0.32.0: + resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + hermes-parser@0.19.1: resolution: {integrity: sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==} hermes-parser@0.23.1: resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} + hermes-parser@0.32.0: + resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + hermes-profile-transformer@0.0.6: resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} engines: {node: '>=8'} @@ -4077,14 +4289,29 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + hyphenate-style-name@1.1.0: + resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==} + + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4123,6 +4350,9 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + inline-style-prefixer@6.0.4: + resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==} + internal-ip@4.3.0: resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} engines: {node: '>=6'} @@ -4352,6 +4582,14 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -4363,6 +4601,10 @@ packages: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4371,6 +4613,10 @@ packages: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4403,8 +4649,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true js-yaml@4.1.1: @@ -4676,6 +4922,9 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + memoizee@0.4.17: resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} engines: {node: '>=0.12'} @@ -4698,60 +4947,118 @@ packages: resolution: {integrity: sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==} engines: {node: '>=18'} + metro-babel-transformer@0.83.3: + resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==} + engines: {node: '>=20.19.4'} + metro-cache-key@0.80.12: resolution: {integrity: sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==} engines: {node: '>=18'} + metro-cache-key@0.83.3: + resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==} + engines: {node: '>=20.19.4'} + metro-cache@0.80.12: resolution: {integrity: sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==} engines: {node: '>=18'} + metro-cache@0.83.3: + resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==} + engines: {node: '>=20.19.4'} + metro-config@0.80.12: resolution: {integrity: sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==} engines: {node: '>=18'} + metro-config@0.83.3: + resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==} + engines: {node: '>=20.19.4'} + metro-core@0.80.12: resolution: {integrity: sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==} engines: {node: '>=18'} + metro-core@0.83.3: + resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==} + engines: {node: '>=20.19.4'} + metro-file-map@0.80.12: resolution: {integrity: sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==} engines: {node: '>=18'} + metro-file-map@0.83.3: + resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==} + engines: {node: '>=20.19.4'} + metro-minify-terser@0.80.12: resolution: {integrity: sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==} engines: {node: '>=18'} + metro-minify-terser@0.83.3: + resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==} + engines: {node: '>=20.19.4'} + metro-resolver@0.80.12: resolution: {integrity: sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==} engines: {node: '>=18'} + metro-resolver@0.83.3: + resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==} + engines: {node: '>=20.19.4'} + metro-runtime@0.80.12: resolution: {integrity: sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==} engines: {node: '>=18'} + metro-runtime@0.83.3: + resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==} + engines: {node: '>=20.19.4'} + metro-source-map@0.80.12: resolution: {integrity: sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==} engines: {node: '>=18'} + metro-source-map@0.83.3: + resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==} + engines: {node: '>=20.19.4'} + metro-symbolicate@0.80.12: resolution: {integrity: sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==} engines: {node: '>=18'} hasBin: true + metro-symbolicate@0.83.3: + resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==} + engines: {node: '>=20.19.4'} + hasBin: true + metro-transform-plugins@0.80.12: resolution: {integrity: sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==} engines: {node: '>=18'} + metro-transform-plugins@0.83.3: + resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==} + engines: {node: '>=20.19.4'} + metro-transform-worker@0.80.12: resolution: {integrity: sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==} engines: {node: '>=18'} + metro-transform-worker@0.83.3: + resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==} + engines: {node: '>=20.19.4'} + metro@0.80.12: resolution: {integrity: sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==} engines: {node: '>=18'} hasBin: true + metro@0.83.3: + resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==} + engines: {node: '>=20.19.4'} + hasBin: true + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -4900,8 +5207,8 @@ packages: encoding: optional: true - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.2: + resolution: {integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==} engines: {node: '>= 6.13.0'} node-int64@0.4.0: @@ -4944,6 +5251,10 @@ packages: resolution: {integrity: sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==} engines: {node: '>=18'} + ob1@0.83.3: + resolution: {integrity: sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==} + engines: {node: '>=20.19.4'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -5345,6 +5656,10 @@ packages: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} hasBin: true + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -5367,6 +5682,10 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -5374,6 +5693,14 @@ packages: react-devtools-core@5.3.2: resolution: {integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==} + react-devtools-core@6.1.5: + resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-dom@19.2.0: resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: @@ -5419,6 +5746,12 @@ packages: react: '*' react-native: '*' + react-native-web@0.19.13: + resolution: {integrity: sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + react-native@0.74.5: resolution: {integrity: sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw==} engines: {node: '>=18'} @@ -5430,6 +5763,17 @@ packages: '@types/react': optional: true + react-native@0.82.1: + resolution: {integrity: sha512-tFAqcU7Z4g49xf/KnyCEzI4nRTu1Opcx05Ov2helr8ZTg1z7AJR/3sr2rZ+AAVlAs2IXk+B0WOxXGmdD3+4czA==} + engines: {node: '>= 20.19.4'} + hasBin: true + peerDependencies: + '@types/react': ^19.1.1 + react: ^19.1.1 + peerDependenciesMeta: + '@types/react': + optional: true + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -5590,8 +5934,8 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup@4.53.2: - resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5626,15 +5970,27 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.24.0-canary-efb381bbf-20230505: resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} @@ -5673,10 +6029,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.4.0: + resolution: {integrity: sha512-zir1aWzoiax6pbBVjoYVd0O1QQXgIL3eVGBMsBsNmM8Ukq90yGaWlfx0AB9dTS8GPqrOrbXn79vmItCUP9U3BQ==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.3.2: resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} engines: {node: '>=10'} + seroval@1.4.0: + resolution: {integrity: sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==} + engines: {node: '>=10'} + serve-static@1.16.2: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} @@ -5838,6 +6204,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -5904,6 +6274,15 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + stripe@20.0.0: + resolution: {integrity: sha512-EaZeWpbJOCcDytdjKSwdrL5BxzbDGNueiCfHjHXlPdBQvLqoxl6AAivC35SPzTmVXJb5duXQlXFGS45H0+e6Gg==} + engines: {node: '>=16'} + peerDependencies: + '@types/node': '>=16' + peerDependenciesMeta: + '@types/node': + optional: true + strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} @@ -5917,6 +6296,9 @@ packages: react: '>= 16.8.0' react-dom: '>= 16.8.0' + styleq@0.1.3: + resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==} + stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} @@ -5925,8 +6307,8 @@ packages: engines: {node: '>=8'} hasBin: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true @@ -5992,6 +6374,10 @@ packages: engines: {node: '>=10'} hasBin: true + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -6215,8 +6601,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin@2.3.10: - resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} update-browserslist-db@1.1.4: @@ -6301,8 +6687,8 @@ packages: terser: optional: true - vite@7.2.2: - resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -6429,6 +6815,10 @@ packages: write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ws@6.2.3: resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} peerDependencies: @@ -6838,6 +7228,21 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -6868,6 +7273,16 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -6903,6 +7318,16 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -7386,7 +7811,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -7916,13 +8341,13 @@ snapshots: internal-ip: 4.3.0 is-docker: 2.2.1 is-wsl: 2.2.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 json-schema-deref-sync: 0.13.0 lodash.debounce: 4.0.8 md5hex: 1.0.0 minimatch: 3.1.2 node-fetch: 2.7.0 - node-forge: 1.3.1 + node-forge: 1.3.2 npm-package-arg: 7.0.0 open: 8.4.2 ora: 3.4.0 @@ -7959,7 +8384,7 @@ snapshots: '@expo/code-signing-certificates@0.0.5': dependencies: - node-forge: 1.3.1 + node-forge: 1.3.2 nullthrows: 1.1.1 '@expo/config-plugins@8.0.11': @@ -8004,7 +8429,7 @@ snapshots: dependencies: '@expo/sudo-prompt': 9.3.2 debug: 3.2.7 - glob: 10.4.5 + glob: 10.5.0 transitivePeerDependencies: - supports-color @@ -8067,6 +8492,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@expo/metro-runtime@3.2.3(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))': + dependencies: + react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0) + '@expo/osascript@2.3.7': dependencies: '@expo/spawn-async': 1.7.2 @@ -8204,6 +8633,16 @@ snapshots: '@isaacs/ttlcache@1.4.1': {} + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.2 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + '@jest/create-cache-key-function@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -8228,6 +8667,26 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.28.5 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + '@jest/types@24.9.0': dependencies: '@types/istanbul-lib-coverage': 2.0.6 @@ -8239,7 +8698,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 24.10.1 - '@types/yargs': 15.0.19 + '@types/yargs': 15.0.20 chalk: 4.1.2 '@jest/types@29.6.3': @@ -8248,7 +8707,7 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 24.10.1 - '@types/yargs': 17.0.34 + '@types/yargs': 17.0.35 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': @@ -8275,9 +8734,9 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@large-event/api-client@1.0.0(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0)': + '@large-event/api-client@1.0.0(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0)': dependencies: - '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) react: 19.2.0 transitivePeerDependencies: - '@aws-sdk/client-rds-data' @@ -8305,9 +8764,9 @@ snapshots: - sql.js - sqlite3 - '@large-event/api-types@1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0)': + '@large-event/api-types@1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0)': dependencies: - '@large-event/database': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) + '@large-event/database': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) transitivePeerDependencies: - '@aws-sdk/client-rds-data' - '@cloudflare/workers-types' @@ -8335,11 +8794,11 @@ snapshots: - sql.js - sqlite3 - '@large-event/api@1.1.0(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0)': + '@large-event/api@1.1.0(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0)': dependencies: - '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) - '@large-event/database': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) - drizzle-orm: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0) + '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) + '@large-event/database': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) + drizzle-orm: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0) jsonwebtoken: 9.0.2 transitivePeerDependencies: - '@aws-sdk/client-rds-data' @@ -8369,9 +8828,9 @@ snapshots: - sql.js - sqlite3 - '@large-event/database@1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0)': + '@large-event/database@1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0)': dependencies: - drizzle-orm: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0) + drizzle-orm: 0.30.10(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0) pg: 8.16.3 transitivePeerDependencies: - '@aws-sdk/client-rds-data' @@ -8400,11 +8859,11 @@ snapshots: - sql.js - sqlite3 - '@large-event/web-components@1.0.4(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@large-event/web-components@1.0.4(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@types/pg@8.15.6)(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@large-event/api-client': 1.0.0(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) - '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.4)(react@19.2.0) - '@tanstack/react-router': 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@large-event/api-client': 1.0.0(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) + '@large-event/api-types': 1.0.3(@types/pg@8.15.6)(@types/react@19.2.7)(react@19.2.0) + '@tanstack/react-router': 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) transitivePeerDependencies: @@ -8459,10 +8918,10 @@ snapshots: merge-options: 3.0.4 react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0) - '@react-native-async-storage/async-storage@1.24.0(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0))': + '@react-native-async-storage/async-storage@1.24.0(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0))': dependencies: merge-options: 3.0.4 - react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0) + react-native: 0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0) '@react-native-community/cli-clean@13.6.9': dependencies: @@ -8613,6 +9072,8 @@ snapshots: '@react-native/assets-registry@0.74.87': {} + '@react-native/assets-registry@0.82.1': {} + '@react-native/babel-plugin-codegen@0.74.87(@babel/preset-env@7.28.5(@babel/core@7.28.5))': dependencies: '@react-native/codegen': 0.74.87(@babel/preset-env@7.28.5(@babel/core@7.28.5)) @@ -8682,6 +9143,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@react-native/codegen@0.82.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + glob: 7.2.3 + hermes-parser: 0.32.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + yargs: 17.7.2 + '@react-native/community-cli-plugin@0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))': dependencies: '@react-native-community/cli-server-api': 13.6.9 @@ -8704,10 +9175,33 @@ snapshots: - supports-color - utf-8-validate + '@react-native/community-cli-plugin@0.82.1(@react-native-community/cli@13.6.9)': + dependencies: + '@react-native/dev-middleware': 0.82.1 + debug: 4.4.3 + invariant: 2.2.4 + metro: 0.83.3 + metro-config: 0.83.3 + metro-core: 0.83.3 + semver: 7.7.3 + optionalDependencies: + '@react-native-community/cli': 13.6.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@react-native/debugger-frontend@0.74.85': {} '@react-native/debugger-frontend@0.74.87': {} + '@react-native/debugger-frontend@0.82.1': {} + + '@react-native/debugger-shell@0.82.1': + dependencies: + cross-spawn: 7.0.6 + fb-dotslash: 0.5.8 + '@react-native/dev-middleware@0.74.85': dependencies: '@isaacs/ttlcache': 1.4.1 @@ -8750,14 +9244,37 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.74.87': {} - - '@react-native/js-polyfills@0.74.87': {} - - '@react-native/metro-babel-transformer@0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + '@react-native/dev-middleware@0.82.1': dependencies: - '@babel/core': 7.28.5 - '@react-native/babel-preset': 0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.82.1 + '@react-native/debugger-shell': 0.82.1 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 0.2.0 + connect: 3.7.0 + debug: 4.4.3 + invariant: 2.2.4 + nullthrows: 1.1.1 + open: 7.4.2 + serve-static: 1.16.2 + ws: 6.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@react-native/gradle-plugin@0.74.87': {} + + '@react-native/gradle-plugin@0.82.1': {} + + '@react-native/js-polyfills@0.74.87': {} + + '@react-native/js-polyfills@0.82.1': {} + + '@react-native/metro-babel-transformer@0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))': + dependencies: + '@babel/core': 7.28.5 + '@react-native/babel-preset': 0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) hermes-parser: 0.19.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -8768,17 +9285,21 @@ snapshots: '@react-native/normalize-colors@0.74.87': {} + '@react-native/normalize-colors@0.74.89': {} + + '@react-native/normalize-colors@0.82.1': {} + '@react-native/virtualized-lists@0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0) - '@react-native/virtualized-lists@0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0))': + '@react-native/virtualized-lists@0.72.8(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0))': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0) + react-native: 0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0) '@react-native/virtualized-lists@0.74.87(@types/react@18.2.79)(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)': dependencies: @@ -8789,12 +9310,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.79 - '@react-native/virtualized-lists@0.74.87(@types/react@18.2.79)(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0))(react@19.2.0)': + '@react-native/virtualized-lists@0.82.1(@types/react@18.2.79)(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0))(react@19.2.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.0 - react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0) + react-native: 0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0) optionalDependencies: '@types/react': 18.2.79 @@ -8862,70 +9383,70 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/rollup-android-arm-eabi@4.53.2': + '@rollup/rollup-android-arm-eabi@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.53.2': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.53.2': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.53.2': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.53.2': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.53.2': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.2': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.2': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.2': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.2': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.2': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.2': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.2': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.2': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.2': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.53.2': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-openharmony-arm64@4.53.2': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.2': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.2': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.2': + '@rollup/rollup-win32-x64-gnu@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.2': + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@segment/loosely-validate-event@2.0.0': @@ -8951,24 +9472,27 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@tanstack/history@1.133.28': {} + '@stripe/stripe-js@8.5.3': {} + + '@tanstack/history@1.139.0': {} - '@tanstack/query-core@5.90.8': {} + '@tanstack/query-core@5.90.11': {} - '@tanstack/react-query@5.90.8(react@19.2.0)': + '@tanstack/react-query@5.90.11(react@19.2.0)': dependencies: - '@tanstack/query-core': 5.90.8 + '@tanstack/query-core': 5.90.11 react: 19.2.0 - '@tanstack/react-router-devtools@1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.135.2)(@types/node@20.19.25)(csstype@3.1.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.139.6)(@types/node@20.19.25)(csstype@3.2.3)(jiti@1.21.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/react-router': 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.135.2(@tanstack/router-core@1.135.2)(@types/node@20.19.25)(csstype@3.1.3)(jiti@1.21.7)(solid-js@1.9.10)(terser@5.44.1)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.139.6(@tanstack/router-core@1.139.6)(@types/node@20.19.25)(csstype@3.2.3)(jiti@1.21.7)(solid-js@1.9.10)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - vite: 7.2.2(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.4(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) + optionalDependencies: + '@tanstack/router-core': 1.139.6 transitivePeerDependencies: - - '@tanstack/router-core' - '@types/node' - csstype - jiti @@ -8980,15 +9504,14 @@ snapshots: - stylus - sugarss - terser - - tiny-invariant - tsx - yaml - '@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/history': 1.133.28 + '@tanstack/history': 1.139.0 '@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.135.2 + '@tanstack/router-core': 1.139.6 isbot: 5.1.32 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -9002,26 +9525,26 @@ snapshots: react-dom: 19.2.0(react@19.2.0) use-sync-external-store: 1.6.0(react@19.2.0) - '@tanstack/router-core@1.135.2': + '@tanstack/router-core@1.139.6': dependencies: - '@tanstack/history': 1.133.28 + '@tanstack/history': 1.139.0 '@tanstack/store': 0.8.0 cookie-es: 2.0.0 - seroval: 1.3.2 - seroval-plugins: 1.3.3(seroval@1.3.2) + seroval: 1.4.0 + seroval-plugins: 1.4.0(seroval@1.4.0) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.135.2(@tanstack/router-core@1.135.2)(@types/node@20.19.25)(csstype@3.1.3)(jiti@1.21.7)(solid-js@1.9.10)(terser@5.44.1)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.139.6(@tanstack/router-core@1.139.6)(@types/node@20.19.25)(csstype@3.2.3)(jiti@1.21.7)(solid-js@1.9.10)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/router-core': 1.135.2 + '@tanstack/router-core': 1.139.6 clsx: 2.1.1 - goober: 2.1.18(csstype@3.1.3) + goober: 2.1.18(csstype@3.2.3) solid-js: 1.9.10 tiny-invariant: 1.3.3 - vite: 7.2.2(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.4(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - csstype: 3.1.3 + csstype: 3.2.3 transitivePeerDependencies: - '@types/node' - jiti @@ -9035,11 +9558,11 @@ snapshots: - tsx - yaml - '@tanstack/router-generator@1.135.2': + '@tanstack/router-generator@1.139.6': dependencies: - '@tanstack/router-core': 1.135.2 - '@tanstack/router-utils': 1.133.19 - '@tanstack/virtual-file-routes': 1.133.19 + '@tanstack/router-core': 1.139.6 + '@tanstack/router-utils': 1.139.0 + '@tanstack/virtual-file-routes': 1.139.0 prettier: 3.6.2 recast: 0.23.11 source-map: 0.7.6 @@ -9048,7 +9571,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1))': + '@tanstack/router-plugin@1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) @@ -9056,21 +9579,21 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.5 '@babel/types': 7.28.5 - '@tanstack/router-core': 1.135.2 - '@tanstack/router-generator': 1.135.2 - '@tanstack/router-utils': 1.133.19 - '@tanstack/virtual-file-routes': 1.133.19 + '@tanstack/router-core': 1.139.6 + '@tanstack/router-generator': 1.139.6 + '@tanstack/router-utils': 1.139.0 + '@tanstack/virtual-file-routes': 1.139.0 babel-dead-code-elimination: 1.0.10 chokidar: 3.6.0 - unplugin: 2.3.10 + unplugin: 2.3.11 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-router': 1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) vite: 5.4.21(@types/node@20.19.25)(terser@5.44.1) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.133.19': + '@tanstack/router-utils@1.139.0': dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -9083,9 +9606,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-vite-plugin@1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1))': + '@tanstack/router-vite-plugin@1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1))': dependencies: - '@tanstack/router-plugin': 1.135.2(@tanstack/react-router@1.135.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) + '@tanstack/router-plugin': 1.139.6(@tanstack/react-router@1.139.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@5.4.21(@types/node@20.19.25)(terser@5.44.1)) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -9096,7 +9619,7 @@ snapshots: '@tanstack/store@0.8.0': {} - '@tanstack/virtual-file-routes@1.133.19': {} + '@tanstack/virtual-file-routes@1.139.0': {} '@types/babel__core@7.20.5': dependencies: @@ -9125,11 +9648,15 @@ snapshots: '@types/estree@1.0.8': {} + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 24.10.1 + '@types/hammerjs@2.0.46': {} - '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.4)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.4 + '@types/react': 19.2.7 hoist-non-react-statics: 3.3.2 '@types/istanbul-lib-coverage@2.0.6': {} @@ -9178,9 +9705,9 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-dom@19.2.3(@types/react@19.2.4)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.4 + '@types/react': 19.2.7 '@types/react-native@0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0))': dependencies: @@ -9189,9 +9716,9 @@ snapshots: transitivePeerDependencies: - react-native - '@types/react-native@0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0))': + '@types/react-native@0.72.8(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0))': dependencies: - '@react-native/virtualized-lists': 0.72.8(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0)) + '@react-native/virtualized-lists': 0.72.8(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0)) '@types/react': 18.2.79 transitivePeerDependencies: - react-native @@ -9199,19 +9726,19 @@ snapshots: '@types/react@18.2.79': dependencies: '@types/prop-types': 15.7.15 - csstype: 3.1.3 + csstype: 3.2.3 - '@types/react@19.2.4': + '@types/react@19.2.7': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/stack-utils@2.0.3': {} - '@types/styled-components@5.1.35': + '@types/styled-components@5.1.36': dependencies: - '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.4) - '@types/react': 19.2.4 - csstype: 3.1.3 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.7) + '@types/react': 19.2.7 + csstype: 3.2.3 '@types/stylis@4.2.5': {} @@ -9221,11 +9748,11 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@types/yargs@15.0.19': + '@types/yargs@15.0.20': dependencies: '@types/yargs-parser': 21.0.3 - '@types/yargs@17.0.34': + '@types/yargs@17.0.35': dependencies: '@types/yargs-parser': 21.0.3 @@ -9282,6 +9809,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -9396,7 +9925,7 @@ snapshots: autoprefixer@10.4.22(postcss@8.5.6): dependencies: browserslist: 4.28.0 - caniuse-lite: 1.0.30001754 + caniuse-lite: 1.0.30001757 fraction.js: 5.3.4 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -9415,7 +9944,7 @@ snapshots: axios@1.13.2: dependencies: follow-redirects: 1.15.11 - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -9433,6 +9962,36 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@29.7.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.28.5) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.27.1 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.28.0 + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: '@babel/compat-data': 7.28.5 @@ -9446,7 +10005,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color @@ -9469,12 +10028,35 @@ snapshots: babel-plugin-react-native-web@0.19.13: {} + babel-plugin-syntax-hermes-parser@0.32.0: + dependencies: + hermes-parser: 0.32.0 + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.28.5): dependencies: '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.28.5) transitivePeerDependencies: - '@babel/core' + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + babel-preset-expo@11.0.15(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)): dependencies: '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -9492,11 +10074,17 @@ snapshots: - '@babel/preset-env' - supports-color + babel-preset-jest@29.6.3(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + balanced-match@1.0.2: {} base64-js@1.5.1: {} - baseline-browser-mapping@2.8.28: {} + baseline-browser-mapping@2.8.31: {} bcryptjs@3.0.3: {} @@ -9545,9 +10133,9 @@ snapshots: browserslist@4.28.0: dependencies: - baseline-browser-mapping: 2.8.28 - caniuse-lite: 1.0.30001754 - electron-to-chromium: 1.5.250 + baseline-browser-mapping: 2.8.31 + caniuse-lite: 1.0.30001757 + electron-to-chromium: 1.5.260 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) @@ -9588,7 +10176,7 @@ snapshots: dependencies: '@npmcli/fs': 3.1.1 fs-minipass: 3.0.3 - glob: 10.4.5 + glob: 10.5.0 lru-cache: 10.4.3 minipass: 7.1.2 minipass-collect: 2.0.1 @@ -9636,7 +10224,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001754: {} + caniuse-lite@1.0.30001757: {} chalk@2.4.2: dependencies: @@ -9678,6 +10266,17 @@ snapshots: transitivePeerDependencies: - supports-color + chromium-edge-launcher@0.2.0: + dependencies: + '@types/node': 24.10.1 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + ci-info@2.0.0: {} ci-info@3.9.0: {} @@ -9756,6 +10355,8 @@ snapshots: command-exists@1.2.9: {} + commander@12.1.0: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -9826,9 +10427,9 @@ snapshots: cookie-signature@1.2.2: {} - cookie@1.0.2: {} + cookie@1.1.0: {} - core-js-compat@3.46.0: + core-js-compat@3.47.0: dependencies: browserslist: 4.28.0 @@ -9838,7 +10439,7 @@ snapshots: dependencies: import-fresh: 2.0.0 is-directory: 0.3.1 - js-yaml: 3.14.1 + js-yaml: 3.14.2 parse-json: 4.0.0 cross-fetch@3.2.0: @@ -9869,6 +10470,10 @@ snapshots: css-color-keywords@1.0.0: {} + css-in-js-utils@3.1.0: + dependencies: + hyphenate-style-name: 1.1.0 + css-to-react-native@3.2.0: dependencies: camelize: 1.0.1 @@ -9879,6 +10484,8 @@ snapshots: csstype@3.1.3: {} + csstype@3.2.3: {} + d@1.0.2: dependencies: es5-ext: 0.10.64 @@ -10022,10 +10629,10 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.30.10(@types/pg@8.15.6)(@types/react@19.2.4)(pg@8.16.3)(react@19.2.0): + drizzle-orm@0.30.10(@types/pg@8.15.6)(@types/react@19.2.7)(pg@8.16.3)(react@19.2.0): optionalDependencies: '@types/pg': 8.15.6 - '@types/react': 19.2.4 + '@types/react': 19.2.7 pg: 8.16.3 react: 19.2.0 @@ -10043,7 +10650,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.250: {} + electron-to-chromium@1.5.260: {} emoji-regex@8.0.0: {} @@ -10562,6 +11169,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-loops@1.1.4: {} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 @@ -10574,6 +11183,12 @@ snapshots: fastify-plugin@5.1.0: {} + fastify-raw-body@5.0.0: + dependencies: + fastify-plugin: 5.1.0 + raw-body: 3.0.2 + secure-json-parse: 2.7.0 + fastify@5.6.2: dependencies: '@fastify/ajv-compiler': 4.0.5 @@ -10596,6 +11211,8 @@ snapshots: dependencies: reusify: 1.1.0 + fb-dotslash@0.5.8: {} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -10682,7 +11299,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.53.2 + rollup: 4.53.3 flat-cache@3.2.0: dependencies: @@ -10717,7 +11334,7 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -10796,6 +11413,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -10827,7 +11446,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -10880,9 +11499,9 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - goober@2.1.18(csstype@3.1.3): + goober@2.1.18(csstype@3.2.3): dependencies: - csstype: 3.1.3 + csstype: 3.2.3 gopd@1.2.0: {} @@ -10928,10 +11547,14 @@ snapshots: heap@0.2.7: {} + hermes-compiler@0.0.0: {} + hermes-estree@0.19.1: {} hermes-estree@0.23.1: {} + hermes-estree@0.32.0: {} + hermes-parser@0.19.1: dependencies: hermes-estree: 0.19.1 @@ -10940,6 +11563,10 @@ snapshots: dependencies: hermes-estree: 0.23.1 + hermes-parser@0.32.0: + dependencies: + hermes-estree: 0.32.0 + hermes-profile-transformer@0.0.6: dependencies: source-map: 0.7.6 @@ -10964,6 +11591,14 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -10971,8 +11606,21 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} + hyphenate-style-name@1.1.0: {} + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -11004,6 +11652,11 @@ snapshots: ini@1.3.8: {} + inline-style-prefixer@6.0.4: + dependencies: + css-in-js-utils: 3.1.0 + fast-loops: 1.1.4 + internal-ip@4.3.0: dependencies: default-gateway: 4.2.0 @@ -11201,6 +11854,18 @@ snapshots: isobject@3.0.1: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -11218,6 +11883,22 @@ snapshots: jest-get-type@29.6.3: {} + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 24.10.1 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.27.1 @@ -11236,6 +11917,8 @@ snapshots: '@types/node': 24.10.1 jest-util: 29.7.0 + jest-regex-util@29.6.3: {} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -11279,7 +11962,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -11405,7 +12088,7 @@ snapshots: light-my-request@6.6.0: dependencies: - cookie: 1.0.2 + cookie: 1.1.0 process-warning: 4.0.1 set-cookie-parser: 2.7.2 @@ -11564,6 +12247,8 @@ snapshots: memoize-one@5.2.1: {} + memoize-one@6.0.0: {} + memoizee@0.4.17: dependencies: d: 1.0.2 @@ -11594,16 +12279,38 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.83.3: + dependencies: + '@babel/core': 7.28.5 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.32.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.80.12: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.80.12: dependencies: exponential-backoff: 3.1.3 flow-enums-runtime: 0.0.6 metro-core: 0.80.12 + metro-cache@0.83.3: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.83.3 + transitivePeerDependencies: + - supports-color + metro-config@0.80.12: dependencies: connect: 3.7.0 @@ -11619,12 +12326,33 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.83.3: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.83.3 + metro-cache: 0.83.3 + metro-core: 0.83.3 + metro-runtime: 0.83.3 + yaml: 2.8.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-core@0.80.12: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 metro-resolver: 0.80.12 + metro-core@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.83.3 + metro-file-map@0.80.12: dependencies: anymatch: 3.1.3 @@ -11643,20 +12371,48 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.83.3: + dependencies: + debug: 4.4.3 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + metro-minify-terser@0.80.12: dependencies: flow-enums-runtime: 0.0.6 terser: 5.44.1 + metro-minify-terser@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.44.1 + metro-resolver@0.80.12: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.80.12: dependencies: '@babel/runtime': 7.28.4 flow-enums-runtime: 0.0.6 + metro-runtime@0.83.3: + dependencies: + '@babel/runtime': 7.28.4 + flow-enums-runtime: 0.0.6 + metro-source-map@0.80.12: dependencies: '@babel/traverse': 7.28.5 @@ -11671,6 +12427,21 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.83.3: + dependencies: + '@babel/traverse': 7.28.5 + '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.5' + '@babel/types': 7.28.5 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.83.3 + nullthrows: 1.1.1 + ob1: 0.83.3 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.80.12: dependencies: flow-enums-runtime: 0.0.6 @@ -11683,6 +12454,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.83.3 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.80.12: dependencies: '@babel/core': 7.28.5 @@ -11694,6 +12476,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.83.3: + dependencies: + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.80.12: dependencies: '@babel/core': 7.28.5 @@ -11714,6 +12507,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.83.3: + dependencies: + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + flow-enums-runtime: 0.0.6 + metro: 0.83.3 + metro-babel-transformer: 0.83.3 + metro-cache: 0.83.3 + metro-cache-key: 0.83.3 + metro-minify-terser: 0.83.3 + metro-source-map: 0.83.3 + metro-transform-plugins: 0.83.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.80.12: dependencies: '@babel/code-frame': 7.27.1 @@ -11763,6 +12576,53 @@ snapshots: - supports-color - utf-8-validate + metro@0.83.3: + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.3 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.32.0 + image-size: 1.2.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.83.3 + metro-cache: 0.83.3 + metro-cache-key: 0.83.3 + metro-config: 0.83.3 + metro-core: 0.83.3 + metro-file-map: 0.83.3 + metro-resolver: 0.83.3 + metro-runtime: 0.83.3 + metro-source-map: 0.83.3 + metro-symbolicate: 0.83.3 + metro-transform-plugins: 0.83.3 + metro-transform-worker: 0.83.3 + mime-types: 2.1.35 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -11878,7 +12738,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-forge@1.3.1: {} + node-forge@1.3.2: {} node-int64@0.4.0: {} @@ -11918,6 +12778,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.83.3: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -12297,6 +13161,10 @@ snapshots: qrcode-terminal@0.11.0: {} + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -12316,6 +13184,13 @@ snapshots: range-parser@1.2.1: {} + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -12331,6 +13206,20 @@ snapshots: - bufferutil - utf-8-validate + react-devtools-core@6.1.5: + dependencies: + shell-quote: 1.8.3 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + react-dom@18.3.1(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.2 + react-dom@19.2.0(react@19.2.0): dependencies: react: 19.2.0 @@ -12384,6 +13273,21 @@ snapshots: react-native: 0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0) warn-once: 0.1.1 + react-native-web@0.19.13(react-dom@18.3.1(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.28.4 + '@react-native/normalize-colors': 0.74.89 + fbjs: 3.0.5 + inline-style-prefixer: 6.0.4 + memoize-one: 6.0.0 + nullthrows: 1.1.1 + postcss-value-parser: 4.2.0 + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + styleq: 0.1.3 + transitivePeerDependencies: + - encoding + react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@18.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -12434,42 +13338,40 @@ snapshots: - supports-color - utf-8-validate - react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0): + react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native-community/cli': 13.6.9 - '@react-native-community/cli-platform-android': 13.6.9 - '@react-native-community/cli-platform-ios': 13.6.9 - '@react-native/assets-registry': 0.74.87 - '@react-native/codegen': 0.74.87(@babel/preset-env@7.28.5(@babel/core@7.28.5)) - '@react-native/community-cli-plugin': 0.74.87(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5)) - '@react-native/gradle-plugin': 0.74.87 - '@react-native/js-polyfills': 0.74.87 - '@react-native/normalize-colors': 0.74.87 - '@react-native/virtualized-lists': 0.74.87(@types/react@18.2.79)(react-native@0.74.5(@babel/core@7.28.5)(@babel/preset-env@7.28.5(@babel/core@7.28.5))(@types/react@18.2.79)(react@19.2.0))(react@19.2.0) + '@react-native/assets-registry': 0.82.1 + '@react-native/codegen': 0.82.1(@babel/core@7.28.5) + '@react-native/community-cli-plugin': 0.82.1(@react-native-community/cli@13.6.9) + '@react-native/gradle-plugin': 0.82.1 + '@react-native/js-polyfills': 0.82.1 + '@react-native/normalize-colors': 0.82.1 + '@react-native/virtualized-lists': 0.82.1(@types/react@18.2.79)(react-native@0.82.1(@babel/core@7.28.5)(@react-native-community/cli@13.6.9)(@types/react@18.2.79)(react@19.2.0))(react@19.2.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 + babel-jest: 29.7.0(@babel/core@7.28.5) + babel-plugin-syntax-hermes-parser: 0.32.0 base64-js: 1.5.1 - chalk: 4.1.2 - event-target-shim: 5.0.1 + commander: 12.1.0 flow-enums-runtime: 0.0.6 + glob: 7.2.3 + hermes-compiler: 0.0.0 invariant: 2.2.4 jest-environment-node: 29.7.0 - jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.12 - metro-source-map: 0.80.12 - mkdirp: 0.5.6 + metro-runtime: 0.83.3 + metro-source-map: 0.83.3 nullthrows: 1.1.1 - pretty-format: 26.6.2 + pretty-format: 29.7.0 promise: 8.3.0 react: 19.2.0 - react-devtools-core: 5.3.2 + react-devtools-core: 6.1.5 react-refresh: 0.14.2 - react-shallow-renderer: 16.15.0(react@19.2.0) regenerator-runtime: 0.13.11 - scheduler: 0.24.0-canary-efb381bbf-20230505 + scheduler: 0.26.0 + semver: 7.7.3 stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 ws: 6.2.3 @@ -12478,9 +13380,9 @@ snapshots: '@types/react': 18.2.79 transitivePeerDependencies: - '@babel/core' - - '@babel/preset-env' + - '@react-native-community/cli' + - '@react-native/metro-config' - bufferutil - - encoding - supports-color - utf-8-validate @@ -12494,12 +13396,6 @@ snapshots: react: 18.2.0 react-is: 18.3.1 - react-shallow-renderer@16.15.0(react@19.2.0): - dependencies: - object-assign: 4.1.1 - react: 19.2.0 - react-is: 18.3.1 - react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -12654,32 +13550,32 @@ snapshots: dependencies: glob: 7.2.3 - rollup@4.53.2: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.2 - '@rollup/rollup-android-arm64': 4.53.2 - '@rollup/rollup-darwin-arm64': 4.53.2 - '@rollup/rollup-darwin-x64': 4.53.2 - '@rollup/rollup-freebsd-arm64': 4.53.2 - '@rollup/rollup-freebsd-x64': 4.53.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 - '@rollup/rollup-linux-arm-musleabihf': 4.53.2 - '@rollup/rollup-linux-arm64-gnu': 4.53.2 - '@rollup/rollup-linux-arm64-musl': 4.53.2 - '@rollup/rollup-linux-loong64-gnu': 4.53.2 - '@rollup/rollup-linux-ppc64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-musl': 4.53.2 - '@rollup/rollup-linux-s390x-gnu': 4.53.2 - '@rollup/rollup-linux-x64-gnu': 4.53.2 - '@rollup/rollup-linux-x64-musl': 4.53.2 - '@rollup/rollup-openharmony-arm64': 4.53.2 - '@rollup/rollup-win32-arm64-msvc': 4.53.2 - '@rollup/rollup-win32-ia32-msvc': 4.53.2 - '@rollup/rollup-win32-x64-gnu': 4.53.2 - '@rollup/rollup-win32-x64-msvc': 4.53.2 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -12719,20 +13615,30 @@ snapshots: safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} + sax@1.4.3: {} + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + scheduler@0.24.0-canary-efb381bbf-20230505: dependencies: loose-envify: 1.4.0 + scheduler@0.26.0: {} + scheduler@0.27.0: {} + secure-json-parse@2.7.0: {} + secure-json-parse@4.1.0: {} selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.14 - node-forge: 1.3.1 + node-forge: 1.3.2 semver@5.7.2: {} @@ -12782,8 +13688,14 @@ snapshots: dependencies: seroval: 1.3.2 + seroval-plugins@1.4.0(seroval@1.4.0): + dependencies: + seroval: 1.4.0 + seroval@1.3.2: {} + seroval@1.4.0: {} + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 @@ -12899,7 +13811,7 @@ snapshots: solid-js@1.9.10: dependencies: - csstype: 3.1.3 + csstype: 3.2.3 seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) @@ -12946,6 +13858,8 @@ snapshots: statuses@2.0.1: {} + statuses@2.0.2: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -13018,6 +13932,12 @@ snapshots: strip-json-comments@3.1.1: {} + stripe@20.0.0(@types/node@20.19.25): + dependencies: + qs: 6.14.0 + optionalDependencies: + '@types/node': 20.19.25 + strnum@1.1.2: {} structured-headers@0.4.1: {} @@ -13036,6 +13956,8 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 + styleq@0.1.3: {} + stylis@4.3.2: {} sucrase@3.34.0: @@ -13048,14 +13970,14 @@ snapshots: pirates: 4.0.7 ts-interface-checker: 0.1.13 - sucrase@3.35.0: + sucrase@3.35.1: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 + tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 sudo-prompt@9.2.1: {} @@ -13102,7 +14024,7 @@ snapshots: postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.11 - sucrase: 3.35.0 + sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml @@ -13150,6 +14072,12 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -13228,9 +14156,9 @@ snapshots: picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.53.2 + rollup: 4.53.3 source-map: 0.7.6 - sucrase: 3.35.0 + sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 @@ -13366,7 +14294,7 @@ snapshots: unpipe@1.0.0: {} - unplugin@2.3.10: + unplugin@2.3.11: dependencies: '@jridgewell/remapping': 2.3.5 acorn: 8.15.0 @@ -13415,19 +14343,19 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.53.3 optionalDependencies: '@types/node': 20.19.25 fsevents: 2.3.3 terser: 5.44.1 - vite@7.2.2(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1): + vite@7.2.4(@types/node@20.19.25)(jiti@1.21.7)(terser@5.44.1)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 20.19.25 @@ -13551,6 +14479,11 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + ws@6.2.3: dependencies: async-limiter: 1.0.1 diff --git a/src/api/package.json b/src/api/package.json index 125d591..a87e7ee 100644 --- a/src/api/package.json +++ b/src/api/package.json @@ -20,11 +20,13 @@ "@teamd/database": "workspace:*", "drizzle-orm": "^0.30.10", "fastify": "^5.6.2", - "jsonwebtoken": "^9.0.2" + "fastify-raw-body": "^5.0.0", + "jsonwebtoken": "^9.0.2", + "stripe": "^20.0.0" }, "devDependencies": { "@types/jsonwebtoken": "^9.0.10", - "@types/node": "^20.19.24", + "@types/node": "^20.19.25", "tsx": "^4.20.6", "typescript": "^5.9.3" } diff --git a/src/api/src/index.ts b/src/api/src/index.ts index b1c934b..7887465 100644 --- a/src/api/src/index.ts +++ b/src/api/src/index.ts @@ -6,13 +6,15 @@ import Fastify from 'fastify' import cors from '@fastify/cors' import cookie from '@fastify/cookie' +import rawBody from 'fastify-raw-body' import TeamDConfig from '../../../teamd.config.mjs' - +import 'dotenv/config'; // Import routes import { authRoutes } from './routes/auth.js' import { healthRoutes } from './routes/health.js' import { userRoutes } from './routes/users.js' import { instanceRoutes } from './routes/instances.js' +import { paymentsRoutes } from './routes/payments.js' // Configuration from centralized config const PORT = parseInt(process.env.PORT || String(TeamDConfig.api.port)) @@ -38,7 +40,12 @@ const fastify = Fastify({ // Register plugins await fastify.register(cors, { - origin: [...TeamDConfig.cors.allowedOrigins], + origin: [ + ...TeamDConfig.cors.allowedOrigins, + + 'http://localhost:8081', + 'http://127.0.0.1:8081', + ], credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'], @@ -48,11 +55,20 @@ await fastify.register(cookie, { parseOptions: {}, }) +// Make raw request body available on request.rawBody for webhook verification +await fastify.register(rawBody, { + field: 'rawBody', + global: true, + encoding: 'utf8', + runFirst: true, +}) + // Register routes await fastify.register(healthRoutes, { prefix: '/api' }) await fastify.register(authRoutes, { prefix: '/api' }) await fastify.register(userRoutes, { prefix: '/api' }) await fastify.register(instanceRoutes, { prefix: '/api' }) +await fastify.register(paymentsRoutes, { prefix: '/api' }) // Root endpoint fastify.get('/', async (request, reply) => { diff --git a/src/api/src/routes/auth.ts b/src/api/src/routes/auth.ts index a937a2c..8b9dcba 100644 --- a/src/api/src/routes/auth.ts +++ b/src/api/src/routes/auth.ts @@ -3,110 +3,96 @@ */ import type { FastifyInstance } from 'fastify' -import { findUserByEmail, generateToken } from '@large-event/api' -import { db, users } from '@large-event/database' +import { generateToken } from '@large-event/api' import { successResponse, errorResponse, unauthorizedResponse } from '../utils/response.js' import { requireAuth } from '../middleware/auth.js' + +import { db, schema } from '@teamd/database' +import { eq } from 'drizzle-orm' + export async function authRoutes(fastify: FastifyInstance) { - /** - * POST /auth/login - * User login - creates user if doesn't exist (simplified auth for MVP) - */ - fastify.post<{ - Body: { email: string; password?: string } - }>('/auth/login', async (request, reply) => { - const { email, password } = request.body + + // ====================== + // POST /auth/login + // ====================== + fastify.post('/auth/login', async (request, reply) => { + const { email } = request.body + + console.log("/auth/login called with:", email) if (!email) { return errorResponse(reply, 'Email is required', 400, 'VALIDATION_ERROR') } - // Validate email format - const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ - if (!emailRegex.test(email)) { - return errorResponse(reply, 'Invalid email format', 400, 'VALIDATION_ERROR') - } - try { - // Find existing user - account must be pre-created - const user = await findUserByEmail(email) + console.log("Querying TeamD.users...") + + + const user = await db.query.users.findFirst({ + where: eq(schema.users.email, email) + }) + + console.log("Query result:", user) if (!user) { + console.log("No user found for:", email) return errorResponse(reply, 'Account not found. Please contact an administrator.', 404, 'USER_NOT_FOUND') } - // Generate JWT token (user already has isSystemAdmin from database) + console.log("Generating token for:", user.email) const token = generateToken(user) - // Set HTTP-only cookie (shared across main portal and team dashboards) reply.setCookie('auth-token', token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'lax', path: '/', - maxAge: 24 * 60 * 60, // 24 hours - domain: process.env.NODE_ENV === 'production' ? '.large-event.com' : undefined + maxAge: 24 * 60 * 60, }) - return successResponse(reply, { - user, - token, - }) + console.log("Login success for:", user.email) + return successResponse(reply, { user, token }) + } catch (error) { - fastify.log.error('Login error:', error) + console.log(" ERROR inside login:", error) return errorResponse(reply, 'Login failed', 500, 'LOGIN_ERROR') } }) - /** - * POST /auth/logout - * Clear auth cookie - */ + + // ====================== + // POST /auth/logout + // ====================== fastify.post('/auth/logout', async (request, reply) => { reply.clearCookie('auth-token', { path: '/', httpOnly: true, secure: process.env.NODE_ENV === 'production', - sameSite: 'lax', - domain: process.env.NODE_ENV === 'production' ? '.large-event.com' : undefined + sameSite: 'lax' }) + return successResponse(reply, { message: 'Logged out successfully' }) }) - /** - * GET /auth/me - * Get current authenticated user - */ - fastify.get( - '/auth/me', - { - preHandler: [requireAuth], - }, - async (request, reply) => { - const user = request.user - if (!user) { - return unauthorizedResponse(reply) - } + // ====================== + // GET /auth/me + // ====================== + fastify.get('/auth/me', { preHandler: [requireAuth] }, async (request, reply) => { + const user = request.user + if (!user) return unauthorizedResponse(reply) + return successResponse(reply, { user }) + }) - return successResponse(reply, { user }) - } - ) - - /** - * GET /auth/token - * Get current JWT token (for debugging/testing) - */ - fastify.get( - '/auth/token', - { - preHandler: [requireAuth], - }, - async (request, reply) => { - const token = request.cookies['auth-token'] || request.headers.authorization?.substring(7) - - return successResponse(reply, { token }) - } - ) + + // ====================== + // GET /auth/token + // ====================== + fastify.get('/auth/token', { preHandler: [requireAuth] }, async (request, reply) => { + const token = request.cookies['auth-token'] + || request.headers.authorization?.substring(7) + + return successResponse(reply, { token }) + }) } diff --git a/src/api/src/routes/payments.ts b/src/api/src/routes/payments.ts new file mode 100644 index 0000000..de9d82c --- /dev/null +++ b/src/api/src/routes/payments.ts @@ -0,0 +1,205 @@ +import type { FastifyInstance } from "fastify"; +import Stripe from "stripe"; +import { db, sharedSchema, overlaySchema } from "@teamd/database"; +import { eq } from "drizzle-orm"; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY || "", { + apiVersion: "2022-11-15", +}); + +export async function paymentsRoutes(fastify: FastifyInstance) { + fastify.post("/payments/checkout", async (req, reply) => { + const { userId, eventId } = req.body as any; + + if (!userId || !eventId) { + return reply.status(400).send({ + success: false, + error: "userId and eventId are required", + }); + } + + const users = await db + .select() + .from(sharedSchema.users) + .where(eq(sharedSchema.users.id, userId)) + .limit(1); + + if (users.length === 0) { + return reply.status(404).send({ + success: false, + error: "User not found", + }); + } + + const user = users[0]; + + const events = await db + .select() + .from(sharedSchema.events) + .where(eq(sharedSchema.events.id, eventId)) + .limit(1); + + if (events.length === 0) { + return reply.status(404).send({ + success: false, + error: "Event not found", + }); + } + + const event = events[0]; + + try { + const session = await stripe.checkout.sessions.create({ + mode: "payment", + payment_method_types: ["card"], + + line_items: [ + { + price: event.stripePriceId, + quantity: 1, + }, + ], + + payment_intent_data: { + metadata: { + userId: String(userId), + eventId: String(eventId), + name: user.name, + email: user.email, + }, + }, + + metadata: { + userId: String(userId), + eventId: String(eventId), + }, + + success_url: "macsync://payment-success", + cancel_url: "macsync://payment-cancel", + }); + + return { success: true, url: session.url }; + } catch (err: any) { + console.error("Checkout session error:", err); + return reply.status(500).send({ + success: false, + error: err.message, + }); + } + }); + + fastify.post("/payments/webhook", async (req, reply) => { + const sig = req.headers["stripe-signature"] as string | undefined; + + let event: Stripe.Event; + + try { + event = stripe.webhooks.constructEvent( + (req as any).rawBody, + sig || "", + process.env.STRIPE_WEBHOOK_SECRET! + ); + } catch (err: any) { + console.error("Webhook signature failed:", err.message); + return reply.status(400).send({ received: false }); + } + + await db.insert(overlaySchema.stripeWebhooks).values({ + eventId: event.id, + payload: event.type, + processed: false, + }); + + if (event.type === "payment_intent.succeeded") { + const pi = event.data.object as Stripe.PaymentIntent; + + const piId = pi.id; + const userId = Number(pi.metadata.userId); + const eventId = Number(pi.metadata.eventId); + const name = pi.metadata.name; + const email = pi.metadata.email; + + const events = await db + .select() + .from(sharedSchema.events) + .where(eq(sharedSchema.events.id, eventId)) + .limit(1); + + if (events.length === 0) return { received: true }; + const selectedEvent = events[0]; + + const existing = await db + .select() + .from(overlaySchema.payments) + .where(eq(overlaySchema.payments.stripePaymentIntentId, piId)) + .limit(1); + + if (existing.length === 0) { + await db.insert(overlaySchema.payments).values({ + userId, + eventId, + stripePaymentIntentId: piId, + amount: selectedEvent.price, + currency: "cad", + status: "succeeded", + }); + + const [attendee] = await db + .insert(sharedSchema.attendees) + .values({ + name, + email, + userId, + eventId, + }) + .returning({ id: sharedSchema.attendees.id }); + + await db.insert(sharedSchema.qrCodes).values({ + attendeeId: attendee.id, + code: `QR-${piId}`, + }); + } + } + + return { received: true }; + }); + + fastify.get("/payments/latest/:userId", async (req, reply) => { + const userId = Number((req.params as any).userId); + + const rows = await db + .select() + .from(overlaySchema.payments) + .where(eq(overlaySchema.payments.userId, userId)) + .orderBy(overlaySchema.payments.id) + .limit(1); + + return { success: true, data: rows[0] || null }; + }); + + fastify.get("/users/:id/events", async (req, reply) => { + const userId = Number((req.params as any).id); + + try { + const events = await db + .select({ + attendeeId: sharedSchema.attendees.id, + eventId: sharedSchema.attendees.eventId, + name: sharedSchema.events.name, + date: sharedSchema.events.date, + location: sharedSchema.events.location, + }) + .from(sharedSchema.attendees) + .innerJoin( + sharedSchema.events, + eq(sharedSchema.attendees.eventId, sharedSchema.events.id) + ) + .where(eq(sharedSchema.attendees.userId, userId)); + + return { success: true, events }; + } catch (err) { + console.error("Error loading user events:", err); + return reply.status(500).send({ success: false }); + } + }); +} diff --git a/src/database/debug-file.tsx b/src/database/debug-file.tsx new file mode 100644 index 0000000..01c0ab5 --- /dev/null +++ b/src/database/debug-file.tsx @@ -0,0 +1,73 @@ +import { Pool } from "pg"; + +(async () => { + const db = new Pool({ + connectionString: "postgresql://user:password@localhost:5432/large_event_db", + }); + + console.log("Checking tables...\n"); + + // 1. List tables + const tables = await db.query(` + SELECT table_name + FROM information_schema.tables + WHERE table_schema = 'public' + ORDER BY table_name; + `); + + console.log("\n Tables in DB:"); + console.table(tables.rows); + + // 2. EVENTS table + console.log("\n EVENTS TABLE CONTENT:"); + try { + const events = await db.query(`SELECT * FROM events ORDER BY id;`); + console.table(events.rows); + } catch (err: any) { + console.error(" Failed to read events:", err.message); + } + + // 3. USERS table + console.log("\n USERS TABLE CONTENT:"); + try { + const users = await db.query(`SELECT * FROM users ORDER BY id;`); + console.table(users.rows); + } catch (err: any) { + console.error("Failed to read users:", err.message); + } + + // 4. PAYMENTS table + console.log("\n💰 PAYMENTS TABLE CONTENT:"); + try { + const pay = await db.query(`SELECT * FROM payments ORDER BY id;`); + console.table(pay.rows); + } catch (err: any) { + console.error(" Failed to read payments:", err.message); + } + + // 5. WEBHOOKS table + console.log("\n⚡ STRIPE WEBHOOK EVENTS TABLE CONTENT:"); + try { + const webhooks = await db.query(`SELECT * FROM stripe_webhooks ORDER BY created_at DESC;`); + console.table(webhooks.rows); + } catch (err: any) { + console.error(" Failed to read stripe_webhooks:", err.message); + } + // 5. WEBHOOKS table + console.log("\n⚡ STRIPE Attendees EVENTS TABLE CONTENT:"); + try { + const webhooks = await db.query(`SELECT * FROM attendees ORDER BY created_at DESC;`); + console.table(webhooks.rows); + } catch (err: any) { + console.error(" Failed to read attendees:", err.message); + } + console.log("\n⚡ STRIPE QR EVENTS TABLE CONTENT:"); + try { + const webhooks = await db.query(`SELECT * FROM qr_codes ORDER BY created_at DESC;`); + console.table(webhooks.rows); + } catch (err: any) { + console.error(" Failed to read attendees:", err.message); + } + + process.exit(0); +})(); diff --git a/src/database/drizzle/0000_blue_morlun.sql b/src/database/drizzle/0000_blue_morlun.sql new file mode 100644 index 0000000..7d14b07 --- /dev/null +++ b/src/database/drizzle/0000_blue_morlun.sql @@ -0,0 +1,317 @@ +BEGIN; + +-- ============================ +-- USERS +-- ============================ +CREATE TABLE IF NOT EXISTS users ( + id serial PRIMARY KEY, + email varchar(255) UNIQUE NOT NULL, + name varchar(255) NOT NULL, + is_system_admin boolean DEFAULT false, + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- ORGANIZATIONS +-- ============================ +CREATE TABLE IF NOT EXISTS organizations ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + acronym varchar(50), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- INSTANCES +-- ============================ +CREATE TABLE IF NOT EXISTS instances ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + owner_organization_id integer NOT NULL REFERENCES organizations(id), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- USER → ORGANIZATION MEMBERSHIP +-- ============================ +CREATE TABLE IF NOT EXISTS user_organizations ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + organization_id integer NOT NULL REFERENCES organizations(id), + is_organization_admin boolean DEFAULT false, + created_at timestamp DEFAULT now() +); + +-- ============================ +-- USER → INSTANCE ACCESS +-- ============================ +CREATE TABLE IF NOT EXISTS user_instance_access ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + instance_id integer NOT NULL REFERENCES instances(id), + access_level varchar(50) NOT NULL, + granted_by integer REFERENCES users(id), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- EVENTS +-- ============================ +CREATE TABLE IF NOT EXISTS events ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + description text, + date timestamp NOT NULL, + location varchar(255), + image_url varchar(500), + price integer NOT NULL, + stripe_price_id varchar(255), + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- ATTENDEES +-- ============================ +CREATE TABLE IF NOT EXISTS attendees ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + user_id integer REFERENCES users(id), + event_id integer REFERENCES events(id), + email varchar(255), + phone_number varchar(50), + dietary_restrictions text, + program varchar(255), + year varchar(50), + waiver_signed boolean DEFAULT false, + checked_in boolean DEFAULT false, + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- QR CODES +-- ============================ +CREATE TABLE IF NOT EXISTS qr_codes ( + id serial PRIMARY KEY, + code varchar(255) UNIQUE NOT NULL, + attendee_id integer NOT NULL REFERENCES attendees(id), + created_at timestamp DEFAULT now(), + checked_in_at timestamp +); + +-- ============================ +-- NOTIFICATIONS +-- ============================ +CREATE TABLE IF NOT EXISTS notifications ( + id serial PRIMARY KEY, + event_id integer REFERENCES events(id), + message text NOT NULL, + recipients json, + created_at timestamp DEFAULT now() +); + +-- ============================ +-- PAYMENTS (Team D) +-- ============================ +CREATE TABLE IF NOT EXISTS payments ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + event_id integer NOT NULL REFERENCES events(id), + stripe_payment_intent_id varchar(255) NOT NULL, + amount integer NOT NULL, + currency varchar(10) DEFAULT 'cad', + status varchar(50) DEFAULT 'pending', + created_at timestamp DEFAULT now() +); + +-- ============================ +-- STRIPE WEBHOOKS +-- ============================ +CREATE TABLE IF NOT EXISTS stripe_webhooks ( + id serial PRIMARY KEY, + event_id varchar(255) NOT NULL, + payload json, + processed boolean DEFAULT false, + created_at timestamp DEFAULT now() +); + +BEGIN; + +-- ============================ +-- USERS +-- ============================ +CREATE TABLE IF NOT EXISTS users ( + id serial PRIMARY KEY, + email varchar(255) UNIQUE NOT NULL, + name varchar(255) NOT NULL, + is_system_admin boolean DEFAULT false, + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- ORGANIZATIONS +-- ============================ +CREATE TABLE IF NOT EXISTS organizations ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + acronym varchar(50), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- INSTANCES +-- ============================ +CREATE TABLE IF NOT EXISTS instances ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + owner_organization_id integer NOT NULL REFERENCES organizations(id), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- USER → ORGANIZATION MEMBERSHIP +-- ============================ +CREATE TABLE IF NOT EXISTS user_organizations ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + organization_id integer NOT NULL REFERENCES organizations(id), + is_organization_admin boolean DEFAULT false, + created_at timestamp DEFAULT now() +); + +-- ============================ +-- USER → INSTANCE ACCESS +-- ============================ +CREATE TABLE IF NOT EXISTS user_instance_access ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + instance_id integer NOT NULL REFERENCES instances(id), + access_level varchar(50) NOT NULL, + granted_by integer REFERENCES users(id), + created_at timestamp DEFAULT now() +); + +-- ============================ +-- EVENTS (UPDATED SCHEMA) +-- ============================ +DROP TABLE IF EXISTS events CASCADE; + +CREATE TABLE events ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + description text, + date timestamp NOT NULL, + location varchar(255), + image_url varchar(500), -- optional event banner + price integer NOT NULL, -- amount in cents + stripe_price_id varchar(255), -- REQUIRED for Stripe checkout + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- ATTENDEES +-- ============================ +CREATE TABLE IF NOT EXISTS attendees ( + id serial PRIMARY KEY, + name varchar(255) NOT NULL, + user_id integer REFERENCES users(id), + event_id integer REFERENCES events(id), + email varchar(255), + phone_number varchar(50), + dietary_restrictions text, + program varchar(255), + year varchar(50), + waiver_signed boolean DEFAULT false, + checked_in boolean DEFAULT false, + created_at timestamp DEFAULT now(), + updated_at timestamp DEFAULT now() +); + +-- ============================ +-- QR CODES +-- ============================ +CREATE TABLE IF NOT EXISTS qr_codes ( + id serial PRIMARY KEY, + code varchar(255) UNIQUE NOT NULL, + attendee_id integer NOT NULL REFERENCES attendees(id), + created_at timestamp DEFAULT now(), + checked_in_at timestamp +); + +-- ============================ +-- NOTIFICATIONS +-- ============================ +CREATE TABLE IF NOT EXISTS notifications ( + id serial PRIMARY KEY, + event_id integer REFERENCES events(id), + message text NOT NULL, + recipients json, + created_at timestamp DEFAULT now() +); + +-- ============================ +-- PAYMENTS (Team D) +-- ============================ +CREATE TABLE IF NOT EXISTS payments ( + id serial PRIMARY KEY, + user_id integer NOT NULL REFERENCES users(id), + event_id integer NOT NULL REFERENCES events(id), + stripe_payment_intent_id varchar(255) NOT NULL, + amount integer NOT NULL, + currency varchar(10) DEFAULT 'cad', + status varchar(50) DEFAULT 'pending', + created_at timestamp DEFAULT now() +); + +-- ============================ +-- STRIPE WEBHOOKS +-- ============================ +CREATE TABLE IF NOT EXISTS stripe_webhooks ( + id serial PRIMARY KEY, + event_id varchar(255) NOT NULL, + payload json, + processed boolean DEFAULT false, + created_at timestamp DEFAULT now() +); + +-- ============================ +-- SEED USER +-- ============================ +INSERT INTO users (id, email, name) +VALUES (1, 'abyanjaigirdar@hotmail.com', 'Abyan Jaigirdar') +ON CONFLICT (id) DO NOTHING; + + +-- ============================ +-- SEED EVENTS (2 EVENTS) +-- ============================ + +INSERT INTO events (id, name, description, date, location, image_url, price, stripe_price_id) +VALUES +( + 1, + 'MacSync Launch Event', + 'Kickoff event showcasing the new MacSync platform. Food, games, and networking.', + NOW() + INTERVAL '5 days', + 'McMaster Student Centre Atrium', + '', + 1000, -- $10 + 'price_1SXYbvAOwjDlyX8cERueJTh9' +), +( + 2, + 'Engineering Formal 2025', + 'Annual McMaster Engineering Gala. Dinner, dance, awards, photos.', + NOW() + INTERVAL '30 days', + 'David Braley Gymnasium', + '', + 8500, -- $85 + 'price_1SXuX8AOwjDlyX8cyHq5eQ1x' +) +ON CONFLICT (id) DO NOTHING; + +COMMIT; \ No newline at end of file diff --git a/src/database/drizzle/meta/0000_snapshot.json b/src/database/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..1f3bcfa --- /dev/null +++ b/src/database/drizzle/meta/0000_snapshot.json @@ -0,0 +1,118 @@ +{ + "id": "b089ed8a-8cea-4247-b296-64c7e5928b7a", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "6", + "dialect": "postgresql", + "tables": { + "public.payments": { + "name": "payments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "stripe_payment_intent_id": { + "name": "stripe_payment_intent_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "amount": { + "name": "amount", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "currency": { + "name": "currency", + "type": "varchar(10)", + "primaryKey": false, + "notNull": false, + "default": "'cad'" + }, + "status": { + "name": "status", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false, + "default": "'pending'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.stripe_webhooks": { + "name": "stripe_webhooks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "processed": { + "name": "processed", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/database/drizzle/meta/_journal.json b/src/database/drizzle/meta/_journal.json index a3e00a0..3ca181a 100644 --- a/src/database/drizzle/meta/_journal.json +++ b/src/database/drizzle/meta/_journal.json @@ -2,5 +2,12 @@ "version": "6", "dialect": "postgresql", "entries": [ + { + "idx": 0, + "version": "6", + "when": 1764210925756, + "tag": "0000_blue_morlun", + "breakpoints": true + } ] } \ No newline at end of file diff --git a/src/database/package.json b/src/database/package.json index 9803f49..fca1459 100644 --- a/src/database/package.json +++ b/src/database/package.json @@ -21,15 +21,15 @@ "clean": "rm -rf dist" }, "dependencies": { - "@large-event/database": "^1.0.1", + "@large-event/database": "^1.0.3", "drizzle-orm": "^0.30.10", "pg": "^8.16.3" }, "devDependencies": { - "@types/node": "^24.10.0", + "@types/node": "^24.10.1", "@types/pg": "^8.15.6", "drizzle-kit": "^0.21.4", - "tsup": "^8.3.5", + "tsup": "^8.5.1", "tsx": "^4.20.6", "typescript": "^5.9.3" }, diff --git a/src/database/src/index.ts b/src/database/src/index.ts index 0aa01c7..9f5b060 100644 --- a/src/database/src/index.ts +++ b/src/database/src/index.ts @@ -1,22 +1,18 @@ -import { createDatabase, type DatabaseConfig } from '@large-event/database'; -import * as sharedSchema from '@large-event/database/schemas'; +import { createDatabase } from '@large-event/database'; +import * as sharedSchema from './schemas/alltables'; import * as overlaySchema from './overlays'; -export interface TeamDDatabaseConfig extends DatabaseConfig { - useOverlays?: boolean; +export function createTeamDDatabase() { + return createDatabase(); } -export function createTeamDDatabase(config?: TeamDDatabaseConfig) { - const mergedSchema = { - ...sharedSchema, - ...overlaySchema, - }; - - return createDatabase(config); -} +export const schema = { + ...sharedSchema, + ...overlaySchema, +}; export { sharedSchema, overlaySchema }; export const db = createTeamDDatabase(); -export type TeamDDatabase = ReturnType; \ No newline at end of file +export type TeamDDatabase = ReturnType; diff --git a/src/database/src/overlays/index.ts b/src/database/src/overlays/index.ts index 193db41..6e8dc52 100644 --- a/src/database/src/overlays/index.ts +++ b/src/database/src/overlays/index.ts @@ -7,6 +7,7 @@ */ // export * from './team-specific-tables'; +export * from './payments'; // Empty export to make this a module export {}; diff --git a/src/database/src/overlays/payments.ts b/src/database/src/overlays/payments.ts new file mode 100644 index 0000000..19cb5d6 --- /dev/null +++ b/src/database/src/overlays/payments.ts @@ -0,0 +1,20 @@ +import { pgTable, serial, integer, varchar, timestamp, json, boolean } from 'drizzle-orm/pg-core' + +export const payments = pgTable('payments', { + id: serial('id').primaryKey(), + userId: integer('user_id').notNull(), + eventId: integer('event_id').notNull(), + stripePaymentIntentId: varchar('stripe_payment_intent_id', { length: 255 }).notNull(), + amount: integer('amount').notNull(), // cents + currency: varchar('currency', { length: 10 }).default('cad'), + status: varchar('status', { length: 50 }).default('pending'), + createdAt: timestamp('created_at').defaultNow(), +}) + +export const stripeWebhooks = pgTable('stripe_webhooks', { + id: serial('id').primaryKey(), + eventId: varchar('event_id', { length: 255 }).notNull(), + payload: json('payload'), + processed: boolean('processed').default(false), + createdAt: timestamp('created_at').defaultNow(), +}) diff --git a/src/database/src/schemas/alltables.ts b/src/database/src/schemas/alltables.ts new file mode 100644 index 0000000..dc67d19 --- /dev/null +++ b/src/database/src/schemas/alltables.ts @@ -0,0 +1,77 @@ +import { + pgTable, + serial, + text, + varchar, + boolean, + timestamp, + integer, + json, +} from "drizzle-orm/pg-core"; + +// ------------------- USER PROFILE ------------------- +export const users = pgTable("users", { + id: serial("id").primaryKey(), + email: varchar("email", { length: 255 }).notNull().unique(), + name: varchar("name", { length: 255 }).notNull(), + isSystemAdmin: boolean("is_system_admin").default(false), + createdAt: timestamp("created_at").defaultNow(), + updatedAt: timestamp("updated_at").defaultNow(), +}); + +// ------------------- EVENTS (UPDATED SCHEMA) ------------------- +export const events = pgTable("events", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 255 }).notNull(), + description: text("description"), + date: timestamp("date").notNull(), + location: varchar("location", { length: 255 }), + + imageUrl: varchar("image_url", { length: 500 }), // new + + price: integer("price").notNull(), // new (in cents) + stripePriceId: varchar("stripe_price_id", { length: 255 }), // new + + createdAt: timestamp("created_at").defaultNow(), + updatedAt: timestamp("updated_at").defaultNow(), +}); + +// ------------------- ATTENDEES ------------------- +export const attendees = pgTable("attendees", { + id: serial("id").primaryKey(), + name: varchar("name", { length: 255 }).notNull(), + userId: integer("user_id").notNull().references(() => users.id), + eventId: integer("event_id").notNull().references(() => events.id), + + email: varchar("email", { length: 255 }).notNull(), + phoneNumber: varchar("phone_number", { length: 50 }), + dietaryRestrictions: text("dietary_restrictions"), + program: varchar("program", { length: 255 }), + year: varchar("year", { length: 50 }), + + waiverSigned: boolean("waiver_signed").default(false), + checkedIn: boolean("checked_in").default(false), + + createdAt: timestamp("created_at").defaultNow(), + updatedAt: timestamp("updated_at").defaultNow(), +}); + +// ------------------- QR CODES ------------------- +export const qrCodes = pgTable("qr_codes", { + id: serial("id").primaryKey(), + code: varchar("code", { length: 255 }).notNull().unique(), + attendeeId: integer("attendee_id") + .notNull() + .references(() => attendees.id), + createdAt: timestamp("created_at").defaultNow(), + checkedInAt: timestamp("checked_in_at"), +}); + +// ------------------- NOTIFICATIONS ------------------- +export const notifications = pgTable("notifications", { + id: serial("id").primaryKey(), + eventId: integer("event_id").references(() => events.id), + message: text("message").notNull(), + recipients: json("recipients"), + createdAt: timestamp("created_at").defaultNow(), +}); diff --git a/src/mobile-components/package.json b/src/mobile-components/package.json index f255634..1923fae 100644 --- a/src/mobile-components/package.json +++ b/src/mobile-components/package.json @@ -17,12 +17,12 @@ "react-native": ">=0.70.0" }, "dependencies": { - "@react-native-async-storage/async-storage": "^1.23.1", - "axios": "^1.6.8" + "@react-native-async-storage/async-storage": "^1.24.0", + "axios": "^1.13.2" }, "devDependencies": { - "@types/react": "~18.2.45", - "@types/react-native": "^0.72.0", - "typescript": "^5.3.3" + "@types/react": "~18.2.79", + "@types/react-native": "^0.72.8", + "typescript": "^5.9.3" } } diff --git a/src/mobile/.expo/prebuild/cached-packages.json b/src/mobile/.expo/prebuild/cached-packages.json new file mode 100644 index 0000000..c6e5525 --- /dev/null +++ b/src/mobile/.expo/prebuild/cached-packages.json @@ -0,0 +1,4 @@ +{ + "dependencies": "69cbccf4d1de09fa5c8bb6f7a02636f1cdedd183", + "devDependencies": "6df72e281e1b7c7097ff538ea51492b9e8f318c8" +} diff --git a/src/mobile/App.tsx b/src/mobile/App.tsx index 7a191ae..b8d0afc 100644 --- a/src/mobile/App.tsx +++ b/src/mobile/App.tsx @@ -1,21 +1,28 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { StatusBar } from 'expo-status-bar'; import { NavigationContainer } from '@react-navigation/native'; import { AuthProvider } from './contexts/AuthContext'; import { RootNavigator } from './navigation/RootNavigator'; +import * as Linking from 'expo-linking'; -/** - * Team D Standalone Mobile App - * - * This is the standalone version of Team D's mobile app for independent development. - * It includes its own navigation, authentication, and screens. - * - * For library mode (consumed by mobile app), see ../src/index.ts - */ export function App() { + + const linking = { + prefixes: ['macsync://'], + config: { + screens: { + PaymentSuccess: 'payment-success', + Cancel: 'payment-cancel', + Home: 'home', + Main: 'main', + Login: 'login' + } + } + }; + return ( - + diff --git a/src/mobile/app.json b/src/mobile/app.json index 18d124a..44b3bec 100644 --- a/src/mobile/app.json +++ b/src/mobile/app.json @@ -2,9 +2,10 @@ "expo": { "name": "Team D Mobile", "slug": "teamd-mobile", - "version": "1.0.1", + "version": "1.0.2", "orientation": "portrait", "userInterfaceStyle": "light", + "scheme": "macsync", "ios": { "supportsTablet": true, "bundleIdentifier": "com.largeevent.teamd" diff --git a/src/mobile/navigation/RootNavigator.tsx b/src/mobile/navigation/RootNavigator.tsx index c1854ef..b1c9741 100644 --- a/src/mobile/navigation/RootNavigator.tsx +++ b/src/mobile/navigation/RootNavigator.tsx @@ -4,55 +4,84 @@ import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { Ionicons } from '@expo/vector-icons'; import { useAuth } from '../contexts/AuthContext'; + import { LoginScreen } from '../screens/LoginScreen'; import { HomeScreen } from '../screens/HomeScreen'; +import { TestPaymentScreen } from '../screens/TestPaymentScreen'; import { ProfileScreen } from '../screens/ProfileScreen'; +import { PaymentSuccessScreen } from '../screens/PaymentSuccessScreen'; +import { PaymentCancelScreen } from '../screens/PaymentCancelScreen'; +import { EventDetailsScreen } from '../screens/EventDetailsScreen'; const Stack = createNativeStackNavigator(); const Tab = createBottomTabNavigator(); +/** + * Bottom Tab Navigator + */ function TabNavigator() { return ( ({ tabBarIcon: ({ focused, color, size }) => { - let iconName: 'home' | 'home-outline' | 'person' | 'person-outline' | 'ellipse' = 'ellipse'; + let iconName: + | 'home' + | 'home-outline' + | 'person' + | 'person-outline' + | 'card' + | 'card-outline' + | 'ellipse' = 'ellipse'; if (route.name === 'Home') { iconName = focused ? 'home' : 'home-outline'; + } else if (route.name === 'Payments') { + iconName = focused ? 'card' : 'card-outline'; } else if (route.name === 'Profile') { iconName = focused ? 'person' : 'person-outline'; } return ; }, - tabBarActiveTintColor: '#a855f7', + tabBarActiveTintColor: '#861919f6', tabBarInactiveTintColor: 'gray', })} > ); } +/** + * MAIN ROOT NAVIGATOR + * - Handles login vs main + * - Handles deep links to success/cancel + */ export function RootNavigator() { const { isAuthenticated, loading } = useAuth(); - if (loading) { - return null; // Or a loading spinner - } + if (loading) return null; return ( {!isAuthenticated ? ( + // If user is NOT logged in → show login ) : ( - + <> + {/* MAIN APP */} + + + + {/* DEEP LINK SCREENS */} + + {/* */} + )} ); diff --git a/src/mobile/package.json b/src/mobile/package.json index 8857d99..037babc 100644 --- a/src/mobile/package.json +++ b/src/mobile/package.json @@ -5,36 +5,40 @@ "main": "index.js", "scripts": { "start": "expo start", - "android": "expo start --android", - "ios": "expo start --ios", + "android": "expo run:android", + "ios": "expo run:ios", "web": "expo start --web" }, "dependencies": { - "@expo/vector-icons": "^14.0.0", - "@react-native-async-storage/async-storage": "^1.23.1", - "@react-navigation/bottom-tabs": "^6.5.20", + "@expo/metro-runtime": "~3.2.3", + "@expo/vector-icons": "^14.1.0", + "@react-native-async-storage/async-storage": "^1.24.0", + "@react-navigation/bottom-tabs": "^6.6.1", "@react-navigation/native": "^6.1.18", - "@react-navigation/native-stack": "^6.9.26", + "@react-navigation/native-stack": "^6.11.0", + "@stripe/stripe-js": "^8.5.3", "@teamd/mobile-components": "workspace:*", - "axios": "^1.6.8", - "expo": "~51.0.8", + "axios": "^1.13.2", + "expo": "~51.0.39", "expo-constants": "~16.0.2", - "expo-font": "~12.0.4", + "expo-font": "~12.0.10", "expo-linking": "~6.3.1", - "expo-splash-screen": "~0.27.4", + "expo-splash-screen": "~0.27.7", "expo-status-bar": "~1.12.1", "react": "18.2.0", + "react-dom": "^18.3.1", "react-native": "0.74.5", - "react-native-gesture-handler": "~2.16.1", + "react-native-gesture-handler": "~2.16.2", "react-native-reanimated": "~3.10.1", "react-native-safe-area-context": "4.10.5", - "react-native-screens": "~3.31.1" + "react-native-screens": "~3.31.1", + "react-native-web": "~0.19.13" }, "devDependencies": { - "@babel/core": "^7.20.0", + "@babel/core": "^7.28.5", "@types/react": "~18.2.79", - "@types/react-native": "^0.72.0", - "babel-preset-expo": "~11.0.0", - "typescript": "^5.3.3" + "@types/react-native": "^0.72.8", + "babel-preset-expo": "~11.0.15", + "typescript": "^5.9.3" } } diff --git a/src/mobile/screens/EventDetailsScreen.tsx b/src/mobile/screens/EventDetailsScreen.tsx new file mode 100644 index 0000000..ebb0f04 --- /dev/null +++ b/src/mobile/screens/EventDetailsScreen.tsx @@ -0,0 +1,127 @@ +import React from "react"; +import { + View, + Text, + StyleSheet, + Image, + TouchableOpacity, + Linking, +} from "react-native"; +import { SafeAreaView } from "react-native-safe-area-context"; +import { Ionicons } from "@expo/vector-icons"; +import { useNavigation, useRoute } from "@react-navigation/native"; +import { useAuth } from "../contexts/AuthContext"; + +export function EventDetailsScreen() { + const navigation = useNavigation(); + const route = useRoute(); + const { event }: any = route.params; + const { user } = useAuth(); + + const handlePurchase = async () => { + const resp = await fetch("http://localhost:3004/api/payments/checkout", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ userId: user.id, eventId: event.id }), + }); + + const data = await resp.json(); + if (data.url) Linking.openURL(data.url); + }; + + return ( + + + {/* BACK BUTTON */} + navigation.goBack()} + > + + Back + + + {/* HERO IMAGE */} + + + {/* CONTENT */} + + {event.name} + {event.date} + {event.location} + + + {event.description ?? + "Join us for an unforgettable event filled with excitement, energy, and Marauder spirit!"} + + + + + Purchase Ticket ({event.price}) + + + + + + ); +} + +const Maroon = "#7A003C"; + +const styles = StyleSheet.create({ + safe: { + flex: 1, + backgroundColor: "#FFF", + }, + container: { + flex: 1, + }, + backButton: { + flexDirection: "row", + alignItems: "center", + paddingHorizontal: 16, + paddingTop: 6, // not too large, safe area handles the rest + marginBottom: 4, + }, + backText: { + fontSize: 18, + color: Maroon, + fontWeight: "600", + marginLeft: 4, + }, + heroImage: { + width: "100%", + height: 250, + }, + content: { + padding: 20, + }, + title: { + fontSize: 28, + fontWeight: "800", + color: Maroon, + }, + subtitle: { + fontSize: 16, + marginTop: 4, + color: "#777", + }, + description: { + marginTop: 14, + fontSize: 16, + lineHeight: 22, + color: "#444", + }, + purchaseButton: { + marginTop: 26, + backgroundColor: Maroon, + paddingVertical: 14, + borderRadius: 12, + alignItems: "center", + }, + purchaseButtonText: { + color: "#FFF", + fontSize: 18, + fontWeight: "700", + }, +}); diff --git a/src/mobile/screens/HomeScreen.tsx b/src/mobile/screens/HomeScreen.tsx index 448482a..22f17b9 100644 --- a/src/mobile/screens/HomeScreen.tsx +++ b/src/mobile/screens/HomeScreen.tsx @@ -1,42 +1,127 @@ -import React, { useEffect } from 'react'; -import { View, StyleSheet, Platform } from 'react-native'; -import { useAuth } from '../contexts/AuthContext'; -import { TeamDPlaceholder } from '@teamd/mobile-components'; - -/** - * Home Screen - demonstrates using Team D components - * - * This screen imports the TeamDPlaceholder component from the published @teamd/mobile-components package, - * showing how the standalone app can use the same components as mobile app - */ +import React from 'react'; +import { View, Text, StyleSheet, FlatList, TouchableOpacity, Image } from 'react-native'; +import { useNavigation } from '@react-navigation/native'; + +const MOCK_EVENTS = [ + { + id: 1, + name: "MacSync Test Event", + price: "$10", + image: + "https://images.unsplash.com/photo-1531058020387-3be344556be6?w=1200", + date: "Nov 30, 2025", + location: "McMaster Student Centre", + }, + { + id: 2, + name: "Engineering Formal", + price: "$25", + image: + "https://images.unsplash.com/photo-1492684223066-81342ee5ff30?w=1200", + date: "Dec 8, 2025", + location: "David Braley Convention Centre", + }, + { + id: 3, + name: "Hack the Hammer", + price: "FREE", + image: + "https://images.unsplash.com/photo-1531058020387-3be344556be6?w=1200", + date: "Jan 12, 2026", + location: "Burke Science Building", + }, +]; + export function HomeScreen() { - const { user, token, instances } = useAuth(); - - useEffect(() => { - console.log('[HomeScreen] Platform:', Platform.OS); - console.log('[HomeScreen] Auth state:', { - hasUser: !!user, - userEmail: user?.email, - userId: user?.id, - hasToken: !!token, - instancesCount: instances?.length, - }); - }, [user, token, instances]); + const navigation = useNavigation(); return ( - Upcoming Events + + item.id.toString()} + contentContainerStyle={{ paddingBottom: 40 }} + renderItem={({ item }) => ( + navigation.navigate("EventDetails", { event: item })} + > + + + + {item.name} + + {item.date} + {item.location} + + {item.price} + + + )} /> ); } +const McMasterMaroon = "#7A003C"; +const Gold = "#FDBF57"; + const styles = StyleSheet.create({ container: { flex: 1, - backgroundColor: '#f9fafb', + backgroundColor: "#F6F6F6", + paddingTop: 40, + paddingHorizontal: 16, + }, + header: { + fontSize: 26, + fontWeight: "700", + color: McMasterMaroon, + marginBottom: 16, + }, + card: { + backgroundColor: "#FFFFFF", + borderRadius: 16, + marginBottom: 18, + shadowColor: "#000", + shadowOpacity: 0.1, + shadowRadius: 6, + shadowOffset: { width: 0, height: 3 }, + elevation: 4, + overflow: "hidden", + }, + image: { + width: "100%", + height: 170, + }, + cardContent: { + padding: 14, + }, + title: { + fontSize: 20, + fontWeight: "700", + color: McMasterMaroon, + marginBottom: 6, + }, + info: { + fontSize: 14, + color: "#555", + }, + priceTag: { + marginTop: 10, + alignSelf: "flex-start", + backgroundColor: McMasterMaroon, + color: "white", + paddingHorizontal: 12, + paddingVertical: 6, + borderRadius: 12, + fontSize: 14, + fontWeight: "600", }, }); diff --git a/src/mobile/screens/LoginScreen.tsx b/src/mobile/screens/LoginScreen.tsx index 2eab4cc..d554fc7 100644 --- a/src/mobile/screens/LoginScreen.tsx +++ b/src/mobile/screens/LoginScreen.tsx @@ -38,7 +38,7 @@ export function LoginScreen() { behavior={Platform.OS === 'ios' ? 'padding' : 'height'} > - Team D Mobile + Streamliners Standalone Development Mode diff --git a/src/mobile/screens/PaymentSuccessScreen.tsx b/src/mobile/screens/PaymentSuccessScreen.tsx new file mode 100644 index 0000000..30fe975 --- /dev/null +++ b/src/mobile/screens/PaymentSuccessScreen.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import { View, Text, TouchableOpacity, StyleSheet } from "react-native"; +import { useNavigation } from "@react-navigation/native"; + +export function PaymentSuccessScreen() { + const navigation = useNavigation(); + + return ( + + Payment Successful 🎉 + + navigation.navigate("Home")} + > + Close + + + ); +} + +const styles = StyleSheet.create({ + container: { flex:1, justifyContent:"center", alignItems:"center", padding:20 }, + title:{ fontSize:24, fontWeight:"bold", marginBottom:20 }, + button:{ padding:10, backgroundColor:"#7c3aed", borderRadius:6 }, + buttonText:{ color:"white", fontSize:18 } +}); diff --git a/src/mobile/screens/ProfileScreen.tsx b/src/mobile/screens/ProfileScreen.tsx index 3c04bca..ab3dbee 100644 --- a/src/mobile/screens/ProfileScreen.tsx +++ b/src/mobile/screens/ProfileScreen.tsx @@ -1,20 +1,49 @@ -import React from 'react'; +import React, { useState, useCallback } from 'react'; import { View, Text, TouchableOpacity, StyleSheet, ScrollView, + ActivityIndicator, } from 'react-native'; import { useAuth } from '../contexts/AuthContext'; +import { useFocusEffect } from '@react-navigation/native'; export function ProfileScreen() { const { user, instances, logout } = useAuth(); + const [myEvents, setMyEvents] = useState([]); + const [loadingEvents, setLoadingEvents] = useState(true); const handleLogout = async () => { await logout(); }; + const loadEvents = async () => { + if (!user?.id) return; + + setLoadingEvents(true); + + try { + const resp = await fetch( + `http://localhost:3004/api/users/${user.id}/events` + ); + const data = await resp.json(); + setMyEvents(data.events || []); + } catch (err) { + console.log("Failed loading events", err); + } finally { + setLoadingEvents(false); + } + }; + + // This runs every time ProfileScreen becomes visible + useFocusEffect( + useCallback(() => { + loadEvents(); + }, [user?.id]) + ); + return ( @@ -23,20 +52,43 @@ export function ProfileScreen() { User Information + Email: {user?.email} + User ID: {user?.id} + + My Events + + {loadingEvents ? ( + + ) : myEvents.length === 0 ? ( + + You haven’t registered for any events yet. + + ) : ( + myEvents.map((ev) => ( + + {ev.name} + {ev.location} + {ev.date} + + )) + )} + + Instances - You have access to {instances.length} instance{instances.length !== 1 ? 's' : ''} + You have access to {instances.length} instance + {instances.length !== 1 ? 's' : ''} @@ -44,7 +96,6 @@ export function ProfileScreen() { Development Mode You are running Team D's mobile app in standalone development mode. - This allows you to develop and test Team D features independently. @@ -56,63 +107,55 @@ export function ProfileScreen() { } const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#f9fafb', - }, + container: { flex: 1, backgroundColor: '#fdfdfd' }, + header: { padding: 24, - backgroundColor: '#ffffff', + backgroundColor: '#7c2d12', borderBottomWidth: 1, borderBottomColor: '#e5e7eb', }, - title: { - fontSize: 28, - fontWeight: 'bold', - color: '#111827', - }, - section: { - backgroundColor: '#ffffff', - padding: 16, - marginTop: 16, - }, + title: { fontSize: 28, fontWeight: 'bold', color: 'white' }, + + section: { backgroundColor: '#ffffff', padding: 16, marginTop: 16 }, sectionTitle: { fontSize: 18, - fontWeight: '600', - color: '#111827', + fontWeight: '700', + color: '#7c2d12', marginBottom: 12, }, + infoRow: { flexDirection: 'row', justifyContent: 'space-between', paddingVertical: 8, - borderBottomWidth: 1, borderBottomColor: '#f3f4f6', + borderBottomWidth: 1, }, - label: { - fontSize: 14, - color: '#6b7280', - }, - value: { - fontSize: 14, - color: '#111827', - fontWeight: '500', - }, - infoText: { - fontSize: 14, - color: '#6b7280', - lineHeight: 20, + label: { fontSize: 14, color: '#6b7280' }, + value: { fontSize: 14, color: '#111827', fontWeight: '500' }, + + eventCard: { + padding: 12, + backgroundColor: '#fdf4f0', + borderColor: '#7c2d12', + borderWidth: 1, + borderRadius: 8, + marginBottom: 10, }, + eventName: { fontSize: 16, fontWeight: '700', color: '#7c2d12' }, + eventInfo: { fontSize: 14, color: '#4b5563', marginTop: 2 }, + + emptyText: { color: '#6b7280', fontStyle: 'italic' }, + + infoText: { fontSize: 14, color: '#6b7280', lineHeight: 20 }, + logoutButton: { - backgroundColor: '#ef4444', + backgroundColor: '#b91c1c', borderRadius: 8, padding: 16, margin: 24, alignItems: 'center', }, - logoutButtonText: { - color: '#ffffff', - fontSize: 16, - fontWeight: '600', - }, + logoutButtonText: { color: '#ffffff', fontSize: 16, fontWeight: '600' }, }); diff --git a/src/mobile/screens/TestPaymentScreen.tsx b/src/mobile/screens/TestPaymentScreen.tsx new file mode 100644 index 0000000..b41ca61 --- /dev/null +++ b/src/mobile/screens/TestPaymentScreen.tsx @@ -0,0 +1,167 @@ +import React, { useState } from 'react'; +import { View, Text, Button, StyleSheet, Alert, Platform, Linking } from 'react-native'; +import { useAuth } from '../contexts/AuthContext'; +import { loadStripe } from '@stripe/stripe-js'; + +const STRIPE_PUBLISHABLE_KEY = process.env.STRIPE_PUBLISHABLE_KEY; + +const stripePromise = loadStripe(STRIPE_PUBLISHABLE_KEY); + +const API_BASE = 'http://localhost:3004'; + +export function TestPaymentScreen() { + const { user } = useAuth(); + const [loading, setLoading] = useState(false); + + const handlePay = async () => { + setLoading(true); + + const userId = user?.id || 1; + const eventId = 1; + + try { + // 1️ REQUEST CHECKOUT SESSION + const sessionResp = await fetch(`${API_BASE}/api/payments/create_checkout_session`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ userId, eventId }), + }); + + const session = await sessionResp.json(); + + if (!session?.url) { + Alert.alert("Error", "Invalid checkout session"); + return; + } + + if (Platform.OS === "web") { + const stripe = await stripePromise; + if (!stripe) throw new Error("Stripe JS failed to load"); + + window.location.href = session.url; + return; + } + + await Linking.openURL(session.url); + return; + + } catch (err: any) { + Alert.alert("Error", err?.message || "Unexpected error"); + } finally { + setLoading(false); + } + }; + + return ( + + MacSync Test Event + Price: $10.00 + + +