diff --git a/.husky/pre-commit b/.husky/pre-commit index 3b821754..f50f28e7 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,21 +1,10 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -# Run type checking pnpm type-check -# Linting disabled during active development phase -# TODO: Re-enable before production release -# pnpm lint - -# Quick security check (only fail on high/critical vulnerabilities) -echo "🔒 Running security audit..." +echo "Running security audit..." if ! pnpm audit --audit-level=high > /dev/null 2>&1; then - echo "" - echo "⚠️ High or critical security vulnerabilities detected!" - echo "Run 'pnpm audit' to see details and 'pnpm update' to fix." - echo "" - # Uncomment the line below to block commits with vulnerabilities: - # exit 1 + echo "High or critical security vulnerabilities detected!" + echo "Run 'pnpm audit' to see details." fi - diff --git a/apps/bff/Dockerfile b/apps/bff/Dockerfile index 8e15d8b2..5c4544b7 100644 --- a/apps/bff/Dockerfile +++ b/apps/bff/Dockerfile @@ -6,8 +6,8 @@ # ============================================================================= ARG NODE_VERSION=22 -ARG PNPM_VERSION=10.15.0 -ARG PRISMA_VERSION=6.16.0 +ARG PNPM_VERSION=10.25.0 +ARG PRISMA_VERSION=7.1.0 # ============================================================================= # Stage 1: Builder diff --git a/apps/bff/package.json b/apps/bff/package.json index f124994c..a88fe40e 100644 --- a/apps/bff/package.json +++ b/apps/bff/package.json @@ -40,9 +40,9 @@ "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.1.9", "@nestjs/throttler": "^6.5.0", - "@prisma/client": "^6.19.0", + "@prisma/adapter-pg": "^7.1.0", + "@prisma/client": "^7.1.0", "@sendgrid/mail": "^8.1.6", - "@types/ssh2-sftp-client": "^9.0.6", "bcrypt": "^6.0.0", "bullmq": "^5.65.1", "cookie-parser": "^1.4.7", @@ -57,6 +57,7 @@ "passport": "^0.7.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", + "pg": "^8.16.3", "pino": "^10.1.0", "pino-http": "^11.0.0", "pino-pretty": "^13.1.3", @@ -80,18 +81,18 @@ "@types/node": "^24.10.2", "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.38", + "@types/pg": "^8.15.6", + "@types/ssh2-sftp-client": "^9.0.6", "@types/supertest": "^6.0.3", "jest": "^30.2.0", - "prisma": "^6.19.0", + "prisma": "^7.1.0", "source-map-support": "^0.5.21", "supertest": "^7.1.4", "ts-jest": "^29.4.6", "ts-loader": "^9.5.4", "ts-node": "^10.9.2", "tsx": "^4.21.0", - "ttypescript": "^1.5.15", - "typescript": "^5.9.3", - "typescript-transform-paths": "^3.5.5" + "typescript": "^5.9.3" }, "jest": { "moduleFileExtensions": [ diff --git a/apps/bff/prisma/prisma.config.ts b/apps/bff/prisma/prisma.config.ts new file mode 100644 index 00000000..4e42188b --- /dev/null +++ b/apps/bff/prisma/prisma.config.ts @@ -0,0 +1,29 @@ +import { defineConfig } from "prisma"; +import { PrismaPg } from "@prisma/adapter-pg"; +import { Pool } from "pg"; + +/** + * Prisma 7 Configuration + * + * This configuration file is required for Prisma 7+ where the datasource URL + * is no longer specified in schema.prisma. Instead, connection configuration + * is provided here for migrations and in the PrismaClient constructor for runtime. + * + * @see https://pris.ly/d/config-datasource + * @see https://pris.ly/d/prisma7-client-config + */ +export default defineConfig({ + earlyAccess: true, + schema: "./schema.prisma", + migrate: { + adapter: async () => { + const connectionString = process.env.DATABASE_URL; + if (!connectionString) { + throw new Error("DATABASE_URL environment variable is required for migrations"); + } + const pool = new Pool({ connectionString }); + return new PrismaPg(pool); + }, + }, +}); + diff --git a/apps/bff/prisma/schema.prisma b/apps/bff/prisma/schema.prisma index fa6ed33f..64afc3f9 100644 --- a/apps/bff/prisma/schema.prisma +++ b/apps/bff/prisma/schema.prisma @@ -15,7 +15,8 @@ generator client { datasource db { provider = "postgresql" - url = env("DATABASE_URL") + // Note: Prisma 7+ requires connection URL to be passed via adapter in PrismaClient constructor + // See prisma.config.ts for migration configuration } model User { diff --git a/apps/bff/src/infra/database/prisma.service.ts b/apps/bff/src/infra/database/prisma.service.ts index 64f29f0f..a7ccd313 100644 --- a/apps/bff/src/infra/database/prisma.service.ts +++ b/apps/bff/src/infra/database/prisma.service.ts @@ -1,13 +1,54 @@ -import { Injectable, OnModuleInit, OnModuleDestroy } from "@nestjs/common"; +import { Injectable, OnModuleInit, OnModuleDestroy, Logger } from "@nestjs/common"; import { PrismaClient } from "@prisma/client"; +import { Pool } from "pg"; +import { PrismaPg } from "@prisma/adapter-pg"; +/** + * Prisma Service + * + * Prisma 7+ requires passing an adapter for database connections instead of + * specifying the URL in the schema file. This service creates a PostgreSQL + * connection pool and passes it to the PrismaClient via the PrismaPg adapter. + * + * @see https://pris.ly/d/prisma7-client-config + */ @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + private readonly logger = new Logger(PrismaService.name); + private readonly pool: Pool; + + constructor() { + const connectionString = process.env.DATABASE_URL; + if (!connectionString) { + throw new Error("DATABASE_URL environment variable is required"); + } + + // Create a connection pool for PostgreSQL + const pool = new Pool({ + connectionString, + // Connection pool settings optimized for NestJS + max: 10, // Maximum number of clients in the pool + idleTimeoutMillis: 30000, // Close idle clients after 30 seconds + connectionTimeoutMillis: 5000, // Return an error after 5 seconds if connection fails + }); + + // Create the Prisma PostgreSQL adapter + const adapter = new PrismaPg(pool); + + // Initialize PrismaClient with the adapter + super({ adapter }); + + this.pool = pool; + } + async onModuleInit() { await this.$connect(); + this.logger.log("Database connection established"); } async onModuleDestroy() { await this.$disconnect(); + await this.pool.end(); + this.logger.log("Database connection closed"); } } diff --git a/apps/bff/tsconfig.json b/apps/bff/tsconfig.json index 329468f0..04cb5534 100644 --- a/apps/bff/tsconfig.json +++ b/apps/bff/tsconfig.json @@ -1,39 +1,25 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - // NestJS specific settings + "module": "CommonJS", + "moduleResolution": "Node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "strictPropertyInitialization": false, - - // Path mappings for clean imports "baseUrl": ".", "paths": { "@/*": ["src/*"], - "@bff/core/*": ["src/core/*"], - "@bff/infra/*": ["src/infra/*"], - "@bff/modules/*": ["src/modules/*"], - "@bff/integrations/*": ["src/integrations/*"], - "@customer-portal/validation": ["../../packages/validation/dist/index"], - "@customer-portal/validation/*": ["../../packages/validation/dist/*"] + "@bff/*": ["src/*"] }, - "rootDirs": [ - "src", - "../../packages/validation/dist", - "../../packages/validation/src" - ], - - // Type checking "noEmit": true, - "types": ["node"], - "typeRoots": ["./node_modules/@types"] + "types": ["node", "jest"] }, "ts-node": { "transpileOnly": true, "compilerOptions": { - "module": "commonjs" + "module": "CommonJS" } }, - "include": ["src/**/*", "scripts/**/*", "test/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*", "test/**/*"], + "exclude": ["node_modules", "dist", "prisma"] } diff --git a/apps/portal/next-env.d.ts b/apps/portal/next-env.d.ts index 830fb594..9edff1c7 100644 --- a/apps/portal/next-env.d.ts +++ b/apps/portal/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -/// +import "./.next/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/portal/next.config.mjs b/apps/portal/next.config.mjs index 23265fa7..8f652e17 100644 --- a/apps/portal/next.config.mjs +++ b/apps/portal/next.config.mjs @@ -1,111 +1,78 @@ /* eslint-env node */ import bundleAnalyzer from "@next/bundle-analyzer"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const workspaceRoot = path.resolve(__dirname, "..", ".."); const withBundleAnalyzer = bundleAnalyzer({ enabled: process.env.ANALYZE === "true", }); -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - /** @type {import('next').NextConfig} */ const nextConfig = { - // Enable standalone output only for production deployment output: process.env.NODE_ENV === "production" ? "standalone" : undefined, - // Ensure workspace packages are transpiled correctly - transpilePackages: ["@customer-portal/domain", "@customer-portal/validation"], - - // Tell Next to NOT bundle these server-only libs serverExternalPackages: [ "pino", "pino-pretty", "pino-abstract-transport", "thread-stream", "sonic-boom", - // Avoid flaky vendor-chunk resolution during dev for small utils "tailwind-merge", ], - // Turbopack configuration (Next.js 15.5+) - // Note: public turbopack options are limited; aliasing is handled via tsconfig/webpack resolutions + turbopack: { + resolveAlias: { + "@customer-portal/domain": path.join(workspaceRoot, "packages/domain/dist"), + }, + }, + + webpack(config) { + config.resolve.alias = { + ...config.resolve.alias, + "@customer-portal/domain": path.join(workspaceRoot, "packages/domain/dist"), + }; + return config; + }, - // Environment variables validation env: { NEXT_PUBLIC_API_BASE: process.env.NEXT_PUBLIC_API_BASE, NEXT_PUBLIC_APP_NAME: process.env.NEXT_PUBLIC_APP_NAME, NEXT_PUBLIC_APP_VERSION: process.env.NEXT_PUBLIC_APP_VERSION, }, - // Image optimization images: { - remotePatterns: [ - { - protocol: "https", - hostname: "**", - }, - ], + remotePatterns: [{ protocol: "https", hostname: "**" }], }, - // Disable ESLint blocking during production builds to avoid CI/CD failures - eslint: { - ignoreDuringBuilds: true, - }, - - // API rewrites for development - proxy /api/* to BFF - // This is the standard Next.js pattern that mirrors production (nginx proxy) async rewrites() { - // Only apply rewrites in development; production uses nginx if (process.env.NODE_ENV !== "production") { - return [ - { - source: "/api/:path*", - destination: "http://localhost:4000/api/:path*", - }, - ]; + return [{ source: "/api/:path*", destination: "http://localhost:4000/api/:path*" }]; } return []; }, - // Security headers async headers() { + const isDev = process.env.NODE_ENV === "development"; return [ { - // Apply security headers to all routes source: "/(.*)", headers: [ - { - key: "X-Frame-Options", - value: "DENY", - }, - { - key: "X-Content-Type-Options", - value: "nosniff", - }, - { - key: "Referrer-Policy", - value: "strict-origin-when-cross-origin", - }, - { - key: "X-XSS-Protection", - value: "1; mode=block", - }, - // Content Security Policy - allows Next.js inline scripts/styles + { key: "X-Frame-Options", value: "DENY" }, + { key: "X-Content-Type-Options", value: "nosniff" }, + { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" }, + { key: "X-XSS-Protection", value: "1; mode=block" }, { key: "Content-Security-Policy", value: [ "default-src 'self'", - // Next.js requires unsafe-inline for hydration scripts "script-src 'self' 'unsafe-inline' 'unsafe-eval'", - // Next.js/Tailwind requires unsafe-inline for styles "style-src 'self' 'unsafe-inline'", "img-src 'self' data: https:", "font-src 'self' data:", - // Allow API connections (include localhost for development) - // Allow localhost in development for API calls to BFF - `connect-src 'self' https: ${process.env.NODE_ENV === "development" ? "http://localhost:*" : ""}`, + `connect-src 'self' https:${isDev ? " http://localhost:*" : ""}`, "frame-ancestors 'none'", ].join("; "), }, @@ -114,44 +81,15 @@ const nextConfig = { ]; }, - // Production optimizations compiler: { - // Remove console.logs in production removeConsole: process.env.NODE_ENV === "production", }, - // Experimental flags experimental: { - externalDir: true, - optimizePackageImports: ["@heroicons/react", "lucide-react", "@tanstack/react-query"], + optimizePackageImports: ["@heroicons/react", "@tanstack/react-query"], }, - webpack(config) { - const workspaceRoot = path.resolve(__dirname, "..", ".."); - config.resolve.alias = { - ...config.resolve.alias, - "@customer-portal/domain": path.join(workspaceRoot, "packages/domain"), - "@customer-portal/validation": path.join(workspaceRoot, "packages/validation/src"), - }; - const preferredExtensions = [".ts", ".tsx", ".mts", ".cts"]; - const existingExtensions = config.resolve.extensions || []; - config.resolve.extensions = [...new Set([...preferredExtensions, ...existingExtensions])]; - config.resolve.extensionAlias = { - ...(config.resolve.extensionAlias || {}), - ".js": [".ts", ".tsx", ".js"], - ".mjs": [".mts", ".ts", ".tsx", ".mjs"], - }; - config.module.rules.push({ - test: /packages\/domain\/.*\.js$/, - type: "javascript/esm", - }); - return config; - }, - - // Keep type checking enabled; monorepo paths provide types typescript: { ignoreBuildErrors: false }, - - // Prefer Turbopack; no custom webpack override needed }; export default withBundleAnalyzer(nextConfig); diff --git a/apps/portal/package.json b/apps/portal/package.json index b1558caf..3d5089ec 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -6,7 +6,7 @@ "predev": "node ./scripts/dev-prep.mjs", "dev": "next dev -p ${NEXT_PORT:-3000}", "build": "next build", - "build:turbo": "next build --turbopack", + "build:webpack": "next build --webpack", "build:analyze": "ANALYZE=true next build", "analyze": "npm run build:analyze", "start": "next start -p ${NEXT_PORT:-3000}", @@ -25,7 +25,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", - "next": "15.5.7", + "next": "16.0.8", "react": "19.2.1", "react-dom": "19.2.1", "tailwind-merge": "^3.4.0", @@ -35,7 +35,7 @@ "zustand": "^5.0.9" }, "devDependencies": { - "@next/bundle-analyzer": "^15.5.7", + "@next/bundle-analyzer": "^16.0.8", "@tailwindcss/postcss": "^4.1.17", "@types/node": "^24.10.2", "@types/react": "^19.2.7", diff --git a/apps/portal/tsconfig.json b/apps/portal/tsconfig.json index 6b35b98e..10b60af0 100644 --- a/apps/portal/tsconfig.json +++ b/apps/portal/tsconfig.json @@ -1,27 +1,17 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "target": "ES2022", + "lib": ["ES2024", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "Bundler", "jsx": "preserve", "noEmit": true, - "moduleResolution": "node", - "lib": ["ES2022", "DOM", "DOM.Iterable"], "plugins": [{ "name": "next" }], "baseUrl": ".", "paths": { - "@/*": ["./src/*"], - "@/components/*": ["./src/components/*"], - "@/core/*": ["./src/core/*"], - "@/features/*": ["./src/features/*"], - "@/shared/*": ["./src/shared/*"], - "@/styles/*": ["./src/styles/*"], - "@/types/*": ["./src/types/*"], - "@/lib/*": ["./src/lib/*"], - "@customer-portal/domain": ["../../packages/domain/index.ts"], - "@customer-portal/domain/*": ["../../packages/domain/*"], - "@customer-portal/validation": ["../../packages/validation/src"], - "@customer-portal/validation/*": ["../../packages/validation/src/*"] - }, - "allowJs": false + "@/*": ["./src/*"] + } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] diff --git a/eslint.config.mjs b/eslint.config.mjs index fa6a6947..a8fbb221 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,13 +1,12 @@ /* eslint-env node */ import process from "node:process"; +import path from "node:path"; import js from "@eslint/js"; import tseslint from "typescript-eslint"; import prettier from "eslint-plugin-prettier"; import { FlatCompat } from "@eslint/eslintrc"; -import path from "node:path"; import globals from "globals"; -// Use FlatCompat to consume Next.js' legacy shareable configs under apps/portal const compat = new FlatCompat({ baseDirectory: path.resolve("apps/portal") }); export default [ @@ -23,35 +22,28 @@ export default [ ], }, - // Base JS recommendations for all files + // Base JS recommendations js.configs.recommended, - // Prettier integration (warn-only) + // Prettier integration { plugins: { prettier }, - rules: { - "prettier/prettier": "warn", - }, + rules: { "prettier/prettier": "warn" }, }, - // TypeScript (type-checked) for TS files only - ...tseslint.configs.recommendedTypeChecked.map(config => ({ + // TypeScript type-checked rules for all TS files + ...tseslint.configs.recommendedTypeChecked.map((config) => ({ ...config, files: ["**/*.ts", "**/*.tsx"], languageOptions: { ...(config.languageOptions || {}), - globals: { - ...globals.node, - }, + globals: { ...globals.node }, }, })), + + // Backend & domain packages { - files: [ - "apps/bff/**/*.ts", - "packages/domain/**/*.ts", - "packages/logging/**/*.ts", - "packages/validation/**/*.ts", - ], + files: ["apps/bff/**/*.ts", "packages/domain/**/*.ts"], languageOptions: { parserOptions: { projectService: true, @@ -60,17 +52,14 @@ export default [ }, rules: { "@typescript-eslint/consistent-type-imports": "error", - "@typescript-eslint/no-unused-vars": [ - "warn", - { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, - ], + "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }], "no-console": ["warn", { allow: ["warn", "error"] }], }, }, - // Enforce consistent strict rules across shared as well + // Strict rules for shared packages { - files: ["packages/**/*.{ts,tsx}"], + files: ["packages/**/*.ts"], rules: { "@typescript-eslint/no-redundant-type-constituents": "error", "@typescript-eslint/no-explicit-any": "error", @@ -80,15 +69,17 @@ export default [ }, }, - // Next.js app: apply Next's recommended config; TS rules only on TS files - ...compat - .extends("next/core-web-vitals") - .map(config => ({ ...config, files: ["apps/portal/**/*.{js,jsx,ts,tsx}"] })), - ...compat - .extends("next/typescript") - .map(config => ({ ...config, files: ["apps/portal/**/*.{ts,tsx}"] })), + // Next.js app config + ...compat.extends("next/core-web-vitals").map((config) => ({ + ...config, + files: ["apps/portal/**/*.{js,jsx,ts,tsx}"], + })), + ...compat.extends("next/typescript").map((config) => ({ + ...config, + files: ["apps/portal/**/*.{ts,tsx}"], + })), - // Ensure type-aware rules in portal have parser services + // Portal type-aware rules { files: ["apps/portal/**/*.{ts,tsx}"], languageOptions: { @@ -102,41 +93,31 @@ export default [ }, }, - // Authenticated pages should rely on the shared route-group layout at (authenticated)/layout.tsx. + // Prevent hard navigation in authenticated pages { files: ["apps/portal/src/app/(authenticated)/**/*.{ts,tsx}"], rules: { - // Prefer Next.js and router, forbid window/location hard reload in portal pages "no-restricted-syntax": [ "error", { selector: "MemberExpression[object.name='window'][property.name='location']", - message: "Use next/link or useRouter for navigation, not window.location.", - }, - { - selector: - "MemberExpression[object.name='location'][property.name=/^(href|assign|replace)$/]", - message: "Use next/link or useRouter for navigation, not location.*.", + message: "Use next/link or useRouter for navigation.", }, ], }, }, - // Allow the shared layout file itself to import the layout component + + // Exceptions for specific files { files: ["apps/portal/src/app/(authenticated)/layout.tsx"], - rules: { - "no-restricted-imports": "off", - }, + rules: { "no-restricted-imports": "off" }, }, - // Allow controlled window.location usage for invoice SSO download { files: ["apps/portal/src/app/(authenticated)/billing/invoices/[id]/page.tsx"], - rules: { - "no-restricted-syntax": "off", - }, + rules: { "no-restricted-syntax": "off" }, }, - // Enforce layered type system architecture + // Enforce domain imports architecture { files: ["apps/portal/src/**/*.{ts,tsx}", "apps/bff/src/**/*.ts"], rules: { @@ -146,52 +127,15 @@ export default [ patterns: [ { group: ["@customer-portal/domain/**/src/**"], - message: - "Don't import from domain package internals. Use @customer-portal/domain/ or its Providers namespace instead.", - }, - { - group: ["**/utils/ui-state*"], - message: - "ui-state.ts has been removed. Use patterns from @customer-portal/domain instead.", - }, - { - group: ["@/types"], - message: - "Avoid importing from @/types. Import types directly from @customer-portal/domain/ or define locally.", + message: "Import from @customer-portal/domain/ instead of internals.", }, ], }, ], - // Prevent defining deprecated type patterns - "no-restricted-syntax": [ - "error", - { - selector: - "TSInterfaceDeclaration[id.name=/^(LegacyAsyncState|PaginatedState|FilteredState)$/]", - message: - "These legacy state types are deprecated. Use AsyncState, PaginatedAsyncState, or FilterState from @customer-portal/domain instead.", - }, - { - selector: - "TSTypeAliasDeclaration[id.name=/^(LegacyAsyncState|PaginatedState|FilteredState)$/]", - message: - "These legacy state types are deprecated. Use AsyncState, PaginatedAsyncState, or FilterState from @customer-portal/domain instead.", - }, - ], }, }, - // Node globals for Next config file - { - files: ["apps/portal/next.config.mjs"], - languageOptions: { - globals: { - ...globals.node, - }, - }, - }, - - // BFF: strict rules enforced + prevent domain type duplication + // BFF strict type safety { files: ["apps/bff/**/*.ts"], rules: { @@ -203,40 +147,14 @@ export default [ "@typescript-eslint/no-unsafe-argument": "error", "@typescript-eslint/require-await": "error", "@typescript-eslint/no-floating-promises": "error", - "no-restricted-syntax": [ - "error", - { - selector: - "TSInterfaceDeclaration[id.name=/^(Invoice|InvoiceItem|Subscription|PaymentMethod|SimDetails)$/]", - message: - "Don't re-declare domain types in application code. Import from @customer-portal/domain/ instead.", - }, - { - selector: - "TSTypeAliasDeclaration[id.name=/^(Invoice|InvoiceItem|Subscription|PaymentMethod|SimDetails)$/]", - message: - "Don't re-declare domain types in application code. Import from @customer-portal/domain/ instead.", - }, - ], }, }, - // Integration packages: must use domain providers and avoid legacy packages + // Node globals for config files { - files: ["packages/integrations/**/src/**/*.ts"], - rules: { - "no-restricted-imports": [ - "error", - { - patterns: [ - { - group: ["@customer-portal/contracts", "@customer-portal/contracts/*", "@customer-portal/schemas", "@customer-portal/schemas/*"], - message: - "Legacy contracts/schemas packages have been removed. Import from @customer-portal/domain//providers instead.", - }, - ], - }, - ], + files: ["*.config.mjs", "apps/portal/next.config.mjs"], + languageOptions: { + globals: { ...globals.node }, }, }, ]; diff --git a/package.json b/package.json index 75679407..b82c1254 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,9 @@ }, "packageManager": "pnpm@10.25.0+sha512.5e82639027af37cf832061bcc6d639c219634488e0f2baebe785028a793de7b525ffcd3f7ff574f5e9860654e098fe852ba8ac5dd5cefe1767d23a020a92f501", "scripts": { - "predev": "pnpm --filter @customer-portal/domain build", "dev": "./scripts/dev/manage.sh apps", - "dev:all": "pnpm --parallel --filter @customer-portal/domain --filter @customer-portal/portal --filter @customer-portal/bff run dev", - "build": "pnpm --recursive run build", + "dev:all": "pnpm --filter @customer-portal/domain build && pnpm --parallel --filter @customer-portal/portal --filter @customer-portal/bff run dev", + "build": "pnpm --filter @customer-portal/domain build && pnpm --recursive --filter=!@customer-portal/domain run build", "start": "pnpm --parallel --filter @customer-portal/portal --filter @customer-portal/bff run start", "test": "pnpm --recursive run test", "lint": "pnpm --recursive run lint", @@ -20,23 +19,14 @@ "format": "prettier -w .", "format:check": "prettier -c .", "prepare": "husky", - "type-check": "pnpm type-check:packages && pnpm type-check:apps", - "type-check:workspace": "tsc -b --noEmit", - "type-check:packages": "pnpm --workspace-concurrency=1 --filter @customer-portal/domain --filter @customer-portal/validation --filter @customer-portal/logging run type-check", - "type-check:apps": "pnpm --workspace-concurrency=1 --filter @customer-portal/bff --filter @customer-portal/portal run type-check", + "type-check": "pnpm --filter @customer-portal/domain run type-check && pnpm --filter @customer-portal/bff --filter @customer-portal/portal run type-check", "clean": "pnpm --recursive run clean", "dev:start": "./scripts/dev/manage.sh start", "dev:stop": "./scripts/dev/manage.sh stop", "dev:restart": "./scripts/dev/manage.sh restart", - "analyze": "pnpm --filter @customer-portal/portal run analyze", - "bundle-analyze": "./scripts/bundle-analyze.sh", "dev:tools": "./scripts/dev/manage.sh tools", - "dev:apps": "./scripts/dev/manage.sh apps", "dev:logs": "./scripts/dev/manage.sh logs", "dev:status": "./scripts/dev/manage.sh status", - "dev:migrate": "./scripts/dev/manage.sh migrate", - "dev:studio": "./scripts/dev/manage.sh studio", - "dev:reset": "./scripts/dev/manage.sh reset", "prod:deploy": "./scripts/prod/manage.sh deploy", "prod:start": "./scripts/prod/manage.sh start", "prod:stop": "./scripts/prod/manage.sh stop", @@ -48,38 +38,29 @@ "prod:backup": "./scripts/prod/manage.sh backup", "prod:cleanup": "./scripts/prod/manage.sh cleanup", "db:migrate": "pnpm --filter @customer-portal/bff run db:migrate", + "db:generate": "pnpm --filter @customer-portal/bff run db:generate", "db:studio": "pnpm --filter @customer-portal/bff run db:studio", "db:reset": "pnpm --filter @customer-portal/bff run db:reset", - "update:check": "pnpm outdated --recursive", - "update:all": "pnpm update --recursive --latest && pnpm audit && pnpm type-check", - "update:safe": "pnpm update --recursive && pnpm audit && pnpm type-check", "security:audit": "pnpm audit", - "security:audit-fix": "pnpm audit --fix || pnpm update --recursive && pnpm audit", "security:check": "pnpm audit --audit-level=high", - "dev:watch": "pnpm --parallel --filter @customer-portal/domain --filter @customer-portal/portal --filter @customer-portal/bff run dev", - "plesk:images": "bash ./scripts/plesk/build-images.sh", - "postinstall": "husky install || true" + "update:check": "pnpm outdated --recursive", + "update:safe": "pnpm update --recursive && pnpm audit && pnpm type-check", + "analyze": "pnpm --filter @customer-portal/portal run analyze", + "plesk:images": "bash ./scripts/plesk/build-images.sh" }, "devDependencies": { "@eslint/eslintrc": "^3.3.3", "@eslint/js": "^9.39.1", "@types/node": "^24.10.2", "eslint": "^9.39.1", - "eslint-config-next": "15.5.0", + "eslint-config-next": "16.0.8", "eslint-plugin-prettier": "^5.5.4", "globals": "^16.5.0", "husky": "^9.1.7", - "pino": "^10.1.0", "prettier": "^3.7.4", - "sharp": "^0.34.5", "tsx": "^4.21.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.49.0", - "zod": "^4.1.13" - }, - "dependencies": { - "@types/ssh2-sftp-client": "^9.0.6", - "ssh2-sftp-client": "^12.0.1" + "typescript-eslint": "^8.49.0" }, "pnpm": { "overrides": { diff --git a/packages/domain/package.json b/packages/domain/package.json index 1a4012f2..0e83887f 100644 --- a/packages/domain/package.json +++ b/packages/domain/package.json @@ -1,7 +1,7 @@ { "name": "@customer-portal/domain", "version": "1.0.0", - "type": "commonjs", + "type": "module", "description": "Unified domain layer with contracts, schemas, and provider mappers", "private": true, "sideEffects": false, @@ -11,34 +11,118 @@ "dist" ], "exports": { - ".": "./dist/index.js", - "./auth": "./dist/auth/index.js", - "./auth/*": "./dist/auth/*.js", - "./billing": "./dist/billing/index.js", - "./billing/*": "./dist/billing/*.js", - "./catalog": "./dist/catalog/index.js", - "./catalog/*": "./dist/catalog/*.js", - "./common": "./dist/common/index.js", - "./common/*": "./dist/common/*.js", - "./customer": "./dist/customer/index.js", - "./customer/*": "./dist/customer/*.js", - "./dashboard": "./dist/dashboard/index.js", - "./dashboard/*": "./dist/dashboard/*.js", - "./mappings": "./dist/mappings/index.js", - "./mappings/*": "./dist/mappings/*.js", - "./orders": "./dist/orders/index.js", - "./orders/*": "./dist/orders/*.js", - "./payments": "./dist/payments/index.js", - "./payments/*": "./dist/payments/*.js", - "./sim": "./dist/sim/index.js", - "./sim/*": "./dist/sim/*.js", - "./sim/providers/freebit": "./dist/sim/providers/freebit/index.js", - "./subscriptions": "./dist/subscriptions/index.js", - "./subscriptions/*": "./dist/subscriptions/*.js", - "./support": "./dist/support/index.js", - "./support/*": "./dist/support/*.js", - "./toolkit": "./dist/toolkit/index.js", - "./toolkit/*": "./dist/toolkit/*.js" + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./auth": { + "import": "./dist/auth/index.js", + "types": "./dist/auth/index.d.ts" + }, + "./auth/*": { + "import": "./dist/auth/*.js", + "types": "./dist/auth/*.d.ts" + }, + "./billing": { + "import": "./dist/billing/index.js", + "types": "./dist/billing/index.d.ts" + }, + "./billing/*": { + "import": "./dist/billing/*.js", + "types": "./dist/billing/*.d.ts" + }, + "./catalog": { + "import": "./dist/catalog/index.js", + "types": "./dist/catalog/index.d.ts" + }, + "./catalog/*": { + "import": "./dist/catalog/*.js", + "types": "./dist/catalog/*.d.ts" + }, + "./common": { + "import": "./dist/common/index.js", + "types": "./dist/common/index.d.ts" + }, + "./common/*": { + "import": "./dist/common/*.js", + "types": "./dist/common/*.d.ts" + }, + "./customer": { + "import": "./dist/customer/index.js", + "types": "./dist/customer/index.d.ts" + }, + "./customer/*": { + "import": "./dist/customer/*.js", + "types": "./dist/customer/*.d.ts" + }, + "./dashboard": { + "import": "./dist/dashboard/index.js", + "types": "./dist/dashboard/index.d.ts" + }, + "./dashboard/*": { + "import": "./dist/dashboard/*.js", + "types": "./dist/dashboard/*.d.ts" + }, + "./mappings": { + "import": "./dist/mappings/index.js", + "types": "./dist/mappings/index.d.ts" + }, + "./mappings/*": { + "import": "./dist/mappings/*.js", + "types": "./dist/mappings/*.d.ts" + }, + "./orders": { + "import": "./dist/orders/index.js", + "types": "./dist/orders/index.d.ts" + }, + "./orders/*": { + "import": "./dist/orders/*.js", + "types": "./dist/orders/*.d.ts" + }, + "./payments": { + "import": "./dist/payments/index.js", + "types": "./dist/payments/index.d.ts" + }, + "./payments/*": { + "import": "./dist/payments/*.js", + "types": "./dist/payments/*.d.ts" + }, + "./sim": { + "import": "./dist/sim/index.js", + "types": "./dist/sim/index.d.ts" + }, + "./sim/*": { + "import": "./dist/sim/*.js", + "types": "./dist/sim/*.d.ts" + }, + "./sim/providers/freebit": { + "import": "./dist/sim/providers/freebit/index.js", + "types": "./dist/sim/providers/freebit/index.d.ts" + }, + "./subscriptions": { + "import": "./dist/subscriptions/index.js", + "types": "./dist/subscriptions/index.d.ts" + }, + "./subscriptions/*": { + "import": "./dist/subscriptions/*.js", + "types": "./dist/subscriptions/*.d.ts" + }, + "./support": { + "import": "./dist/support/index.js", + "types": "./dist/support/index.d.ts" + }, + "./support/*": { + "import": "./dist/support/*.js", + "types": "./dist/support/*.d.ts" + }, + "./toolkit": { + "import": "./dist/toolkit/index.js", + "types": "./dist/toolkit/index.d.ts" + }, + "./toolkit/*": { + "import": "./dist/toolkit/*.js", + "types": "./dist/toolkit/*.d.ts" + } }, "scripts": { "prebuild": "pnpm run clean", diff --git a/packages/domain/tsconfig.json b/packages/domain/tsconfig.json index 58d29130..fdbf3b7e 100644 --- a/packages/domain/tsconfig.json +++ b/packages/domain/tsconfig.json @@ -4,7 +4,10 @@ "composite": true, "outDir": "./dist", "rootDir": ".", - "tsBuildInfoFile": "./dist/.tsbuildinfo" + "tsBuildInfoFile": "./dist/.tsbuildinfo", + "module": "ESNext", + "moduleResolution": "Bundler", + "verbatimModuleSyntax": false }, "include": [ "auth/**/*", @@ -13,15 +16,15 @@ "common/**/*", "customer/**/*", "dashboard/**/*", - "providers/**/*", "mappings/**/*", "orders/**/*", "payments/**/*", + "providers/**/*", "sim/**/*", "subscriptions/**/*", "support/**/*", "toolkit/**/*", "index.ts" ], - "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] + "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8769f392..2fad3e24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,13 +11,6 @@ overrides: importers: .: - dependencies: - '@types/ssh2-sftp-client': - specifier: ^9.0.6 - version: 9.0.6 - ssh2-sftp-client: - specifier: ^12.0.1 - version: 12.0.1 devDependencies: '@eslint/eslintrc': specifier: ^3.3.3 @@ -32,8 +25,8 @@ importers: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: 15.5.0 - version: 15.5.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 16.0.8 + version: 16.0.8(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-prettier: specifier: ^5.5.4 version: 5.5.4(@types/eslint@9.6.1)(eslint@9.39.1(jiti@2.6.1))(prettier@3.7.4) @@ -43,15 +36,9 @@ importers: husky: specifier: ^9.1.7 version: 9.1.7 - pino: - specifier: ^10.1.0 - version: 10.1.0 prettier: specifier: ^3.7.4 version: 3.7.4 - sharp: - specifier: ^0.34.5 - version: 0.34.5 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -61,9 +48,6 @@ importers: typescript-eslint: specifier: ^8.49.0 version: 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - zod: - specifier: ^4.1.13 - version: 4.1.13 apps/bff: dependencies: @@ -94,15 +78,15 @@ importers: '@nestjs/throttler': specifier: ^6.5.0 version: 6.5.0(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(reflect-metadata@0.2.2) + '@prisma/adapter-pg': + specifier: ^7.1.0 + version: 7.1.0 '@prisma/client': - specifier: ^6.19.0 - version: 6.19.0(prisma@6.19.0(typescript@5.9.3))(typescript@5.9.3) + specifier: ^7.1.0 + version: 7.1.0(prisma@7.1.0(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3))(typescript@5.9.3) '@sendgrid/mail': specifier: ^8.1.6 version: 8.1.6 - '@types/ssh2-sftp-client': - specifier: ^9.0.6 - version: 9.0.6 bcrypt: specifier: ^6.0.0 version: 6.0.0 @@ -145,6 +129,9 @@ importers: passport-local: specifier: ^1.0.0 version: 1.0.0 + pg: + specifier: ^8.16.3 + version: 8.16.3 pino: specifier: ^10.1.0 version: 10.1.0 @@ -209,6 +196,12 @@ importers: '@types/passport-local': specifier: ^1.0.38 version: 1.0.38 + '@types/pg': + specifier: ^8.15.6 + version: 8.15.6 + '@types/ssh2-sftp-client': + specifier: ^9.0.6 + version: 9.0.6 '@types/supertest': specifier: ^6.0.3 version: 6.0.3 @@ -216,8 +209,8 @@ importers: specifier: ^30.2.0 version: 30.2.0(@types/node@24.10.2)(ts-node@10.9.2(@types/node@24.10.2)(typescript@5.9.3)) prisma: - specifier: ^6.19.0 - version: 6.19.0(typescript@5.9.3) + specifier: ^7.1.0 + version: 7.1.0(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3) source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -236,15 +229,9 @@ importers: tsx: specifier: ^4.21.0 version: 4.21.0 - ttypescript: - specifier: ^1.5.15 - version: 1.5.15(ts-node@10.9.2(@types/node@24.10.2)(typescript@5.9.3))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 - typescript-transform-paths: - specifier: ^3.5.5 - version: 3.5.5(typescript@5.9.3) apps/portal: dependencies: @@ -270,8 +257,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 next: - specifier: 15.5.7 - version: 15.5.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: 16.0.8 + version: 16.0.8(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: 19.2.1 version: 19.2.1 @@ -295,8 +282,8 @@ importers: version: 5.0.9(@types/react@19.2.7)(react@19.2.1) devDependencies: '@next/bundle-analyzer': - specifier: ^15.5.7 - version: 15.5.7 + specifier: ^16.0.8 + version: 16.0.8 '@tailwindcss/postcss': specifier: ^4.1.17 version: 4.1.17 @@ -545,6 +532,18 @@ packages: '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + '@chevrotain/cst-dts-gen@10.5.0': + resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} + + '@chevrotain/gast@10.5.0': + resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} + + '@chevrotain/types@10.5.0': + resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} + + '@chevrotain/utils@10.5.0': + resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -557,6 +556,20 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + '@electric-sql/pglite-socket@0.0.6': + resolution: {integrity: sha512-6RjmgzphIHIBA4NrMGJsjNWK4pu+bCWJlEWlwcxFTVY3WT86dFpKwbZaGWZV6C5Rd7sCk1Z0CI76QEfukLAUXw==} + hasBin: true + peerDependencies: + '@electric-sql/pglite': 0.3.2 + + '@electric-sql/pglite-tools@0.2.7': + resolution: {integrity: sha512-9dAccClqxx4cZB+Ar9B+FZ5WgxDc/Xvl9DPrTWv+dYTf0YNubLzi4wHHRGRGhrJv15XwnyKcGOZAP1VXSneSUg==} + peerDependencies: + '@electric-sql/pglite': 0.3.2 + + '@electric-sql/pglite@0.3.2': + resolution: {integrity: sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==} + '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} @@ -774,6 +787,12 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' + '@hono/node-server@1.19.6': + resolution: {integrity: sha512-Shz/KjlIeAhfiuE93NDKVdZ7HdBVLQAfdbaXEaoAVO3ic9ibRSLGIQGkcBbFyuLr+7/1D5ZCINM8B+6IvXeMtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1207,6 +1226,10 @@ packages: '@microsoft/tsdoc@0.15.1': resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + '@mrleebo/prisma-ast@0.12.1': + resolution: {integrity: sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==} + engines: {node: '>=16'} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} cpu: [arm64] @@ -1375,59 +1398,59 @@ packages: '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 reflect-metadata: ^0.1.13 || ^0.2.0 - '@next/bundle-analyzer@15.5.7': - resolution: {integrity: sha512-bKCGI9onUYyLaAQKvJOTeSv1vt3CYtF4Or+CRlCP/1Yu8NR9W4A2kd4qBs2OYFbT+/38fKg8BIPNt7IcMLKZCA==} + '@next/bundle-analyzer@16.0.8': + resolution: {integrity: sha512-LFWHAWdurTCpqLq1ZRUah1nuDK8cti6kN8vj4wqIW3yAnq3BDgJeNgMMUmeLLzR9C81AnVKfSZFBEhn+aUpe/g==} - '@next/env@15.5.7': - resolution: {integrity: sha512-4h6Y2NyEkIEN7Z8YxkA27pq6zTkS09bUSYC0xjd0NpwFxjnIKeZEeH591o5WECSmjpUhLn3H2QLJcDye3Uzcvg==} + '@next/env@16.0.8': + resolution: {integrity: sha512-xP4WrQZuj9MdmLJy3eWFHepo+R3vznsMSS8Dy3wdA7FKpjCiesQ6DxZvdGziQisj0tEtCgBKJzjcAc4yZOgLEQ==} - '@next/eslint-plugin-next@15.5.0': - resolution: {integrity: sha512-+k83U/fST66eQBjTltX2T9qUYd43ntAe+NZ5qeZVTQyTiFiHvTLtkpLKug4AnZAtuI/lwz5tl/4QDJymjVkybg==} + '@next/eslint-plugin-next@16.0.8': + resolution: {integrity: sha512-1miV0qXDcLUaOdHridVPCh4i39ElRIAraseVIbb3BEqyZ5ol9sPyjTP/GNTPV5rBxqxjF6/vv5zQTVbhiNaLqA==} - '@next/swc-darwin-arm64@15.5.7': - resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} + '@next/swc-darwin-arm64@16.0.8': + resolution: {integrity: sha512-yjVMvTQN21ZHOclQnhSFbjBTEizle+1uo4NV6L4rtS9WO3nfjaeJYw+H91G+nEf3Ef43TaEZvY5mPWfB/De7tA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.7': - resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} + '@next/swc-darwin-x64@16.0.8': + resolution: {integrity: sha512-+zu2N3QQ0ZOb6RyqQKfcu/pn0UPGmg+mUDqpAAEviAcEVEYgDckemOpiMRsBP3IsEKpcoKuNzekDcPczEeEIzA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.7': - resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} + '@next/swc-linux-arm64-gnu@16.0.8': + resolution: {integrity: sha512-LConttk+BeD0e6RG0jGEP9GfvdaBVMYsLJ5aDDweKiJVVCu6sGvo+Ohz9nQhvj7EQDVVRJMCGhl19DmJwGr6bQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.7': - resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} + '@next/swc-linux-arm64-musl@16.0.8': + resolution: {integrity: sha512-JaXFAlqn8fJV+GhhA9lpg6da/NCN/v9ub98n3HoayoUSPOVdoxEEt86iT58jXqQCs/R3dv5ZnxGkW8aF4obMrQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.7': - resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} + '@next/swc-linux-x64-gnu@16.0.8': + resolution: {integrity: sha512-O7M9it6HyNhsJp3HNAsJoHk5BUsfj7hRshfptpGcVsPZ1u0KQ/oVy8oxF7tlwxA5tR43VUP0yRmAGm1us514ng==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.7': - resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} + '@next/swc-linux-x64-musl@16.0.8': + resolution: {integrity: sha512-8+KClEC/GLI2dLYcrWwHu5JyC5cZYCFnccVIvmxpo6K+XQt4qzqM5L4coofNDZYkct/VCCyJWGbZZDsg6w6LFA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.7': - resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} + '@next/swc-win32-arm64-msvc@16.0.8': + resolution: {integrity: sha512-rpQ/PgTEgH68SiXmhu/cJ2hk9aZ6YgFvspzQWe2I9HufY6g7V02DXRr/xrVqOaKm2lenBFPNQ+KAaeveywqV+A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.7': - resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} + '@next/swc-win32-x64-msvc@16.0.8': + resolution: {integrity: sha512-jWpWjWcMQu2iZz4pEK2IktcfR+OA9+cCG8zenyLpcW8rN4rzjfOzH4yj/b1FiEAZHKS+5Vq8+bZyHi+2yqHbFA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1474,35 +1497,63 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@prisma/client@6.19.0': - resolution: {integrity: sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g==} - engines: {node: '>=18.18'} + '@prisma/adapter-pg@7.1.0': + resolution: {integrity: sha512-DSAnUwkKfX4bUzhkrjGN4IBQzwg0nvFw2W17H0Oa532I5w9nLtTJ9mAEGDs1nUBEGRAsa0c7qsf8CSgfJ4DsBQ==} + + '@prisma/client-runtime-utils@7.1.0': + resolution: {integrity: sha512-39xmeBrNTN40FzF34aJMjfX1PowVCqoT3UKUWBBSP3aXV05NRqGBC3x2wCDs96ti6ZgdiVzqnRDHtbzU8X+lPQ==} + + '@prisma/client@7.1.0': + resolution: {integrity: sha512-qf7GPYHmS/xybNiSOpzv9wBo+UwqfL2PeyX+08v+KVHDI0AlSCQIh5bBySkH3alu06NX9wy98JEnckhMHoMFfA==} + engines: {node: ^20.19 || ^22.12 || >=24.0} peerDependencies: prisma: '*' - typescript: '>=5.1.0' + typescript: '>=5.4.0' peerDependenciesMeta: prisma: optional: true typescript: optional: true - '@prisma/config@6.19.0': - resolution: {integrity: sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg==} + '@prisma/config@7.1.0': + resolution: {integrity: sha512-Uz+I43Wn1RYNHtuYtOhOnUcNMWp2Pd3GUDDKs37xlHptCGpzEG3MRR9L+8Y2ISMsMI24z/Ni+ww6OB/OO8M0sQ==} - '@prisma/debug@6.19.0': - resolution: {integrity: sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA==} + '@prisma/debug@6.8.2': + resolution: {integrity: sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==} - '@prisma/engines-version@6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773': - resolution: {integrity: sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ==} + '@prisma/debug@7.1.0': + resolution: {integrity: sha512-pPAckG6etgAsEBusmZiFwM9bldLSNkn++YuC4jCTJACdK5hLOVnOzX7eSL2FgaU6Gomd6wIw21snUX2dYroMZQ==} - '@prisma/engines@6.19.0': - resolution: {integrity: sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw==} + '@prisma/dev@0.15.0': + resolution: {integrity: sha512-KhWaipnFlS/fWEs6I6Oqjcy2S08vKGmxJ5LexqUl/3Ve0EgLUsZwdKF0MvqPM5F5ttw8GtfZarjM5y7VLwv9Ow==} - '@prisma/fetch-engine@6.19.0': - resolution: {integrity: sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ==} + '@prisma/driver-adapter-utils@7.1.0': + resolution: {integrity: sha512-AlVLzeXkw81+47MvQ9M8DvTiHkRfJ8xzklTbYjpskb0cTTDVHboTI/OVwT6Wcep/bNvfLKJYO0nylBiM5rxgww==} - '@prisma/get-platform@6.19.0': - resolution: {integrity: sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA==} + '@prisma/engines-version@7.1.0-6.ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba': + resolution: {integrity: sha512-qZUevUh+yPhGT28rDQnV8V2kLnFjirzhVD67elRPIJHRsUV/mkII10HSrJrhK/U2GYgAxXR2VEREtq7AsfS8qw==} + + '@prisma/engines@7.1.0': + resolution: {integrity: sha512-KQlraOybdHAzVv45KWKJzpR9mJLkib7/TyApQpqrsL7FUHfgjIcy8jrVGt3iNfG6/GDDl+LNlJ84JSQwIfdzxA==} + + '@prisma/fetch-engine@7.1.0': + resolution: {integrity: sha512-GZYF5Q8kweXWGfn87hTu17kw7x1DgnehgKoE4Zg1BmHYF3y1Uu0QRY/qtSE4veH3g+LW8f9HKqA0tARG66bxxQ==} + + '@prisma/get-platform@6.8.2': + resolution: {integrity: sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==} + + '@prisma/get-platform@7.1.0': + resolution: {integrity: sha512-lq8hMdjKiZftuT5SssYB3EtQj8+YjL24/ZTLflQqzFquArKxBcyp6Xrblto+4lzIKJqnpOjfMiBjMvl7YuD7+Q==} + + '@prisma/query-plan-executor@6.18.0': + resolution: {integrity: sha512-jZ8cfzFgL0jReE1R10gT8JLHtQxjWYLiQ//wHmVYZ2rVkFHoh0DT8IXsxcKcFlfKN7ak7k6j0XMNn2xVNyr5cA==} + + '@prisma/studio-core@0.8.2': + resolution: {integrity: sha512-/iAEWEUpTja+7gVMu1LtR2pPlvDmveAwMHdTWbDeGlT7yiv0ZTCPpmeAGdq/Y9aJ9Zj1cEGBXGRbmmNPj022PQ==} + peerDependencies: + '@types/react': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -1537,9 +1588,6 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.15.0': - resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} - '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -1793,6 +1841,9 @@ packages: '@types/passport@1.0.17': resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==} + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -2216,6 +2267,10 @@ packages: avro-js@1.12.1: resolution: {integrity: sha512-P8gTa620GdU/p1XXkWJup9Nkth3aEExgw8+0eyrKBrFLBW587iXOKyQfQ+TkgzyxUcMm8wo45KmPKujvPPRpsQ==} + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + axe-core@4.11.0: resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} engines: {node: '>=4'} @@ -2372,6 +2427,9 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chevrotain@10.5.0: + resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2799,10 +2857,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.5.0: - resolution: {integrity: sha512-Yl4hlOdBqstAuHnlBfx2RimBzWQwysM2SJNu5EzYVa2qS2ItPs7lgxL0sJJDudEx5ZZHfWPZ/6U8+FtDFWs7/w==} + eslint-config-next@16.0.8: + resolution: {integrity: sha512-8J5cOAboXIV3f8OD6BOyj7Fik6n/as7J4MboiUSExWruf/lCu1OPR3ZVSdnta6WhzebrmAATEmNSBZsLWA6kbg==} peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + eslint: '>=9.0.0' typescript: '>=3.3.1' peerDependenciesMeta: typescript: @@ -2875,9 +2933,9 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -3131,6 +3189,9 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -3151,6 +3212,9 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3197,6 +3261,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + globals@16.5.0: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} @@ -3212,6 +3280,9 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + grammex@3.1.12: + resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} + gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -3255,6 +3326,16 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + hono@4.10.6: + resolution: {integrity: sha512-BIdolzGpDO9MQ4nu3AUuDwHZZ+KViNm+EZ75Ae55eMXMqLVhDFqEMXxtUe9Qh8hjL+pIna/frs2j6Y2yD5Ua/g==} + engines: {node: '>=16.9.0'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3265,6 +3346,9 @@ packages: http-parser-js@0.5.10: resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} + http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -3423,6 +3507,9 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3800,6 +3887,10 @@ packages: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3879,6 +3970,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru.min@1.1.3: + resolution: {integrity: sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + luxon@3.7.2: resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} @@ -4009,6 +4104,14 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + mysql2@3.15.3: + resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.4: + resolution: {integrity: sha512-/qfG0Kk/bLJIvej4FcPQ2KYUJP8iQdU1CTxysNb/U2wUNb+/4K485yeio8iNoiwfqJnsTInXoRPTza0dZWHVJQ==} + engines: {node: '>=8.0.0'} + nan@2.24.0: resolution: {integrity: sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==} @@ -4052,9 +4155,9 @@ packages: '@nestjs/swagger': optional: true - next@15.5.7: - resolution: {integrity: sha512-+t2/0jIJ48kUpGKkdlhgkv+zPTEOoXyr60qXe68eB/pl3CMJaLeIGjzp5D6Oqt25hCBiBTt8wEeeAzfJvUKnPQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + next@16.0.8: + resolution: {integrity: sha512-LmcZzG04JuzNXi48s5P+TnJBsTGPJunViNKV/iE4uM6kstjTQsQhvsAv+xF6MJxU2Pr26tl15eVbp0jQnsv6/g==} + engines: {node: '>=20.9.0'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -4293,6 +4396,40 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + pg-cloudflare@1.2.7: + resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} + + pg-connection-string@2.9.1: + resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.10.1: + resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.10.3: + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.16.3: + resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4355,6 +4492,30 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres@3.4.7: + resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} + engines: {node: '>=12'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4372,13 +4533,16 @@ packages: resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - prisma@6.19.0: - resolution: {integrity: sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw==} - engines: {node: '>=18.18'} + prisma@7.1.0: + resolution: {integrity: sha512-dy/3urE4JjhdiW5b09pGjVhGI7kPESK2VlCDrCqeYK5m5SslAtG5FCGnZWP7E8Sdg+Ow1wV2mhJH5RTFL5gEsw==} + engines: {node: ^20.19 || ^22.12 || >=24.0} hasBin: true peerDependencies: - typescript: '>=5.1.0' + better-sqlite3: '>=9.0.0' + typescript: '>=5.4.0' peerDependenciesMeta: + better-sqlite3: + optional: true typescript: optional: true @@ -4388,6 +4552,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} @@ -4481,10 +4648,16 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} + regexp-to-ast@0.5.0: + resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + remeda@2.21.3: + resolution: {integrity: sha512-XXrZdLA10oEOQhLLzEJEiFFSKi21REGAkHdImIb4rt/XXy8ORGXh5HCcpUOsElfPNDb+X6TA/+wkh+p2KffYmg==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4521,6 +4694,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -4597,6 +4774,9 @@ packages: resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} engines: {node: '>= 18'} + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + sequin@0.1.1: resolution: {integrity: sha512-hJWMZRwP75ocoBM+1/YaCsvS0j5MTPeBHJkS2/wruehl9xwtX30HlDF1Gt6UZ8HHHY8SJa2/IL+jo+JJCd59rA==} engines: {node: '>=0.4.0'} @@ -4695,6 +4875,10 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + ssh2-sftp-client@12.0.1: resolution: {integrity: sha512-ICJ1L2PmBel2Q2ctbyxzTFZCPKSHYYD6s2TFZv7NXmZDrDNGk8lHBb/SK2WgXLMXNANH78qoumeJzxlWZqSqWg==} engines: {node: '>=18.20.4'} @@ -4717,6 +4901,9 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -4994,13 +5181,6 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - ttypescript@1.5.15: - resolution: {integrity: sha512-48ykDNHzFnPMnv4hYX1P8Q84TvCZyL1QlFxeuxsuZ48X2+ameBgPenvmCkHJtoOSxpoWTWi8NcgNrRnVDOmfSg==} - hasBin: true - peerDependencies: - ts-node: '>=8.0.2' - typescript: '>=3.2.2' - tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -5060,11 +5240,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - typescript-transform-paths@3.5.5: - resolution: {integrity: sha512-RMK86wKe/4+ad+3kMT9SKAs3K0tUHLe7hF+MLbD6VpC9VUmFuKorhf3pHz+qO5GdS4mUp2ncNUo14j6ws9UvBQ==} - peerDependencies: - typescript: '>=3.6.5' - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -5138,6 +5313,14 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + valibot@1.2.0: + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + peerDependencies: + typescript: '>=5' + peerDependenciesMeta: + typescript: + optional: true + validator@13.15.23: resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==} engines: {node: '>= 0.10'} @@ -5299,6 +5482,15 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + zeptomatch@2.0.2: + resolution: {integrity: sha512-H33jtSKf8Ijtb5BW6wua3G5DhnFjbFML36eFu+VdOoVY4HD9e7ggjqdM6639B+L87rjnR6Y+XeRzBXZdy52B/g==} + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@4.1.13: resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} @@ -5575,6 +5767,21 @@ snapshots: '@borewit/text-codec@0.1.1': {} + '@chevrotain/cst-dts-gen@10.5.0': + dependencies: + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/gast@10.5.0': + dependencies: + '@chevrotain/types': 10.5.0 + lodash: 4.17.21 + + '@chevrotain/types@10.5.0': {} + + '@chevrotain/utils@10.5.0': {} + '@colors/colors@1.5.0': optional: true @@ -5584,6 +5791,16 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} + '@electric-sql/pglite-socket@0.0.6(@electric-sql/pglite@0.3.2)': + dependencies: + '@electric-sql/pglite': 0.3.2 + + '@electric-sql/pglite-tools@0.2.7(@electric-sql/pglite@0.3.2)': + dependencies: + '@electric-sql/pglite': 0.3.2 + + '@electric-sql/pglite@0.3.2': {} + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -5740,6 +5957,10 @@ snapshots: dependencies: react: 19.2.1 + '@hono/node-server@1.19.6(hono@4.10.6)': + dependencies: + hono: 4.10.6 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -5751,7 +5972,8 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/colour@1.0.0': {} + '@img/colour@1.0.0': + optional: true '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: @@ -6229,6 +6451,11 @@ snapshots: '@microsoft/tsdoc@0.15.1': optional: true + '@mrleebo/prisma-ast@0.12.1': + dependencies: + chevrotain: 10.5.0 + lilconfig: 2.1.0 + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true @@ -6404,41 +6631,41 @@ snapshots: '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2) reflect-metadata: 0.2.2 - '@next/bundle-analyzer@15.5.7': + '@next/bundle-analyzer@16.0.8': dependencies: webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil - utf-8-validate - '@next/env@15.5.7': {} + '@next/env@16.0.8': {} - '@next/eslint-plugin-next@15.5.0': + '@next/eslint-plugin-next@16.0.8': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.7': + '@next/swc-darwin-arm64@16.0.8': optional: true - '@next/swc-darwin-x64@15.5.7': + '@next/swc-darwin-x64@16.0.8': optional: true - '@next/swc-linux-arm64-gnu@15.5.7': + '@next/swc-linux-arm64-gnu@16.0.8': optional: true - '@next/swc-linux-arm64-musl@15.5.7': + '@next/swc-linux-arm64-musl@16.0.8': optional: true - '@next/swc-linux-x64-gnu@15.5.7': + '@next/swc-linux-x64-gnu@16.0.8': optional: true - '@next/swc-linux-x64-musl@15.5.7': + '@next/swc-linux-x64-musl@16.0.8': optional: true - '@next/swc-win32-arm64-msvc@15.5.7': + '@next/swc-win32-arm64-msvc@16.0.8': optional: true - '@next/swc-win32-x64-msvc@15.5.7': + '@next/swc-win32-x64-msvc@16.0.8': optional: true '@noble/hashes@1.8.0': {} @@ -6474,12 +6701,24 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@prisma/client@6.19.0(prisma@6.19.0(typescript@5.9.3))(typescript@5.9.3)': + '@prisma/adapter-pg@7.1.0': + dependencies: + '@prisma/driver-adapter-utils': 7.1.0 + pg: 8.16.3 + postgres-array: 3.0.4 + transitivePeerDependencies: + - pg-native + + '@prisma/client-runtime-utils@7.1.0': {} + + '@prisma/client@7.1.0(prisma@7.1.0(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3))(typescript@5.9.3)': + dependencies: + '@prisma/client-runtime-utils': 7.1.0 optionalDependencies: - prisma: 6.19.0(typescript@5.9.3) + prisma: 7.1.0(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3) typescript: 5.9.3 - '@prisma/config@6.19.0': + '@prisma/config@7.1.0': dependencies: c12: 3.1.0 deepmerge-ts: 7.1.5 @@ -6488,26 +6727,66 @@ snapshots: transitivePeerDependencies: - magicast - '@prisma/debug@6.19.0': {} + '@prisma/debug@6.8.2': {} - '@prisma/engines-version@6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773': {} + '@prisma/debug@7.1.0': {} - '@prisma/engines@6.19.0': + '@prisma/dev@0.15.0(typescript@5.9.3)': dependencies: - '@prisma/debug': 6.19.0 - '@prisma/engines-version': 6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773 - '@prisma/fetch-engine': 6.19.0 - '@prisma/get-platform': 6.19.0 + '@electric-sql/pglite': 0.3.2 + '@electric-sql/pglite-socket': 0.0.6(@electric-sql/pglite@0.3.2) + '@electric-sql/pglite-tools': 0.2.7(@electric-sql/pglite@0.3.2) + '@hono/node-server': 1.19.6(hono@4.10.6) + '@mrleebo/prisma-ast': 0.12.1 + '@prisma/get-platform': 6.8.2 + '@prisma/query-plan-executor': 6.18.0 + foreground-child: 3.3.1 + get-port-please: 3.1.2 + hono: 4.10.6 + http-status-codes: 2.3.0 + pathe: 2.0.3 + proper-lockfile: 4.1.2 + remeda: 2.21.3 + std-env: 3.9.0 + valibot: 1.2.0(typescript@5.9.3) + zeptomatch: 2.0.2 + transitivePeerDependencies: + - typescript - '@prisma/fetch-engine@6.19.0': + '@prisma/driver-adapter-utils@7.1.0': dependencies: - '@prisma/debug': 6.19.0 - '@prisma/engines-version': 6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773 - '@prisma/get-platform': 6.19.0 + '@prisma/debug': 7.1.0 - '@prisma/get-platform@6.19.0': + '@prisma/engines-version@7.1.0-6.ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba': {} + + '@prisma/engines@7.1.0': dependencies: - '@prisma/debug': 6.19.0 + '@prisma/debug': 7.1.0 + '@prisma/engines-version': 7.1.0-6.ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba + '@prisma/fetch-engine': 7.1.0 + '@prisma/get-platform': 7.1.0 + + '@prisma/fetch-engine@7.1.0': + dependencies: + '@prisma/debug': 7.1.0 + '@prisma/engines-version': 7.1.0-6.ab635e6b9d606fa5c8fb8b1a7f909c3c3c1c98ba + '@prisma/get-platform': 7.1.0 + + '@prisma/get-platform@6.8.2': + dependencies: + '@prisma/debug': 6.8.2 + + '@prisma/get-platform@7.1.0': + dependencies: + '@prisma/debug': 7.1.0 + + '@prisma/query-plan-executor@6.18.0': {} + + '@prisma/studio-core@0.8.2(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + dependencies: + '@types/react': 19.2.7 + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) '@protobufjs/aspromise@1.1.2': {} @@ -6534,8 +6813,6 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.15.0': {} - '@scarf/scarf@1.4.0': optional: true @@ -6805,6 +7082,12 @@ snapshots: dependencies: '@types/express': 5.0.6 + '@types/pg@8.15.6': + dependencies: + '@types/node': 24.10.2 + pg-protocol: 1.10.3 + pg-types: 2.2.0 + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -7269,6 +7552,8 @@ snapshots: dependencies: underscore: 1.13.7 + aws-ssl-profiles@1.1.2: {} + axe-core@4.11.0: {} axios@1.13.2: @@ -7478,6 +7763,15 @@ snapshots: chardet@2.1.1: {} + chevrotain@10.5.0: + dependencies: + '@chevrotain/cst-dts-gen': 10.5.0 + '@chevrotain/gast': 10.5.0 + '@chevrotain/types': 10.5.0 + '@chevrotain/utils': 10.5.0 + lodash: 4.17.21 + regexp-to-ast: 0.5.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -7925,22 +8219,22 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.5.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + eslint-config-next@16.0.8(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@next/eslint-plugin-next': 15.5.0 - '@rushstack/eslint-patch': 1.15.0 - '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@next/eslint-plugin-next': 16.0.8 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) + globals: 16.4.0 + typescript-eslint: 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: + - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color @@ -8036,9 +8330,16 @@ snapshots: optionalDependencies: '@types/eslint': 9.6.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@2.6.1)): dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 eslint: 9.39.1(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.1.13 + zod-validation-error: 4.0.2(zod@4.1.13) + transitivePeerDependencies: + - supports-color eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): dependencies: @@ -8409,6 +8710,10 @@ snapshots: functions-have-names@1.2.3: {} + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -8430,6 +8735,8 @@ snapshots: get-package-type@0.1.0: {} + get-port-please@3.1.2: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -8492,6 +8799,8 @@ snapshots: globals@14.0.0: {} + globals@16.4.0: {} + globals@16.5.0: {} globalthis@1.0.4: @@ -8503,6 +8812,8 @@ snapshots: graceful-fs@4.2.11: {} + grammex@3.1.12: {} + gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -8542,6 +8853,14 @@ snapshots: help-me@5.0.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + hono@4.10.6: {} + html-escaper@2.0.2: {} http-errors@2.0.1: @@ -8554,6 +8873,8 @@ snapshots: http-parser-js@0.5.10: {} + http-status-codes@2.3.0: {} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -8723,6 +9044,8 @@ snapshots: is-promise@4.0.0: {} + is-property@1.0.2: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -9299,6 +9622,8 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 + lilconfig@2.1.0: {} + lines-and-columns@1.2.4: {} load-esm@1.0.3: {} @@ -9358,6 +9683,8 @@ snapshots: dependencies: yallist: 3.1.1 + lru.min@1.1.3: {} + luxon@3.7.2: {} magic-string@0.30.17: @@ -9476,6 +9803,22 @@ snapshots: mute-stream@2.0.0: {} + mysql2@3.15.3: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.0 + long: 5.3.2 + lru.min: 1.1.3 + named-placeholders: 1.1.4 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.4: + dependencies: + lru.min: 1.1.3 + nan@2.24.0: optional: true @@ -9505,24 +9848,24 @@ snapshots: optionalDependencies: '@nestjs/swagger': 11.2.0(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2) - next@15.5.7(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.0.8(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: - '@next/env': 15.5.7 + '@next/env': 16.0.8 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001760 postcss: 8.4.31 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(react@19.2.1) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.7 - '@next/swc-darwin-x64': 15.5.7 - '@next/swc-linux-arm64-gnu': 15.5.7 - '@next/swc-linux-arm64-musl': 15.5.7 - '@next/swc-linux-x64-gnu': 15.5.7 - '@next/swc-linux-x64-musl': 15.5.7 - '@next/swc-win32-arm64-msvc': 15.5.7 - '@next/swc-win32-x64-msvc': 15.5.7 + '@next/swc-darwin-arm64': 16.0.8 + '@next/swc-darwin-x64': 16.0.8 + '@next/swc-linux-arm64-gnu': 16.0.8 + '@next/swc-linux-arm64-musl': 16.0.8 + '@next/swc-linux-x64-gnu': 16.0.8 + '@next/swc-linux-x64-musl': 16.0.8 + '@next/swc-win32-arm64-msvc': 16.0.8 + '@next/swc-win32-x64-msvc': 16.0.8 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -9747,6 +10090,41 @@ snapshots: perfect-debounce@1.0.0: {} + pg-cloudflare@1.2.7: + optional: true + + pg-connection-string@2.9.1: {} + + pg-int8@1.0.1: {} + + pg-pool@3.10.1(pg@8.16.3): + dependencies: + pg: 8.16.3 + + pg-protocol@1.10.3: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.16.3: + dependencies: + pg-connection-string: 2.9.1 + pg-pool: 3.10.1(pg@8.16.3) + pg-protocol: 1.10.3 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.2.7 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -9830,6 +10208,20 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-array@3.0.4: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres@3.4.7: {} + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -9844,14 +10236,21 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prisma@6.19.0(typescript@5.9.3): + prisma@7.1.0(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.3): dependencies: - '@prisma/config': 6.19.0 - '@prisma/engines': 6.19.0 + '@prisma/config': 7.1.0 + '@prisma/dev': 0.15.0(typescript@5.9.3) + '@prisma/engines': 7.1.0 + '@prisma/studio-core': 0.8.2(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + mysql2: 3.15.3 + postgres: 3.4.7 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: + - '@types/react' - magicast + - react + - react-dom process-warning@5.0.0: {} @@ -9861,6 +10260,12 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -9962,6 +10367,8 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + regexp-to-ast@0.5.0: {} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -9971,6 +10378,10 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + remeda@2.21.3: + dependencies: + type-fest: 4.41.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -10002,6 +10413,8 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + reusify@1.1.0: {} router@2.2.0: @@ -10104,6 +10517,8 @@ snapshots: transitivePeerDependencies: - supports-color + seq-queue@0.0.5: {} + sequin@0.1.1: {} serialize-javascript@6.0.2: @@ -10173,6 +10588,7 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 + optional: true shebang-command@2.0.0: dependencies: @@ -10244,6 +10660,8 @@ snapshots: split2@4.2.0: {} + sqlstring@2.3.3: {} + ssh2-sftp-client@12.0.1: dependencies: concat-stream: 2.0.0 @@ -10267,6 +10685,8 @@ snapshots: statuses@2.0.2: {} + std-env@3.9.0: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -10367,10 +10787,12 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 - styled-jsx@5.1.6(react@19.2.1): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1): dependencies: client-only: 0.0.1 react: 19.2.1 + optionalDependencies: + '@babel/core': 7.28.5 superagent@10.2.3: dependencies: @@ -10564,12 +10986,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - ttypescript@1.5.15(ts-node@10.9.2(@types/node@24.10.2)(typescript@5.9.3))(typescript@5.9.3): - dependencies: - resolve: 1.22.11 - ts-node: 10.9.2(@types/node@24.10.2)(typescript@5.9.3) - typescript: 5.9.3 - tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -10645,11 +11061,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-transform-paths@3.5.5(typescript@5.9.3): - dependencies: - minimatch: 9.0.5 - typescript: 5.9.3 - typescript@5.9.3: {} uglify-js@3.19.3: @@ -10728,6 +11139,10 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + valibot@1.2.0(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + validator@13.15.23: optional: true @@ -10942,6 +11357,14 @@ snapshots: yoctocolors-cjs@2.1.3: {} + zeptomatch@2.0.2: + dependencies: + grammex: 3.1.12 + + zod-validation-error@4.0.2(zod@4.1.13): + dependencies: + zod: 4.1.13 + zod@4.1.13: {} zustand@5.0.9(@types/react@19.2.7)(react@19.2.1): diff --git a/tsconfig.base.json b/tsconfig.base.json index 3735fd92..39a9cf64 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,39 +1,20 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - // Language and Environment (Node.js 22 supports ES2023 features) - "target": "ES2023", - "lib": ["ES2023"], - "module": "commonjs", - "moduleResolution": "node", - - // Type Checking - Strict Mode + "target": "ES2024", + "lib": ["ES2024"], "strict": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noImplicitOverride": true, - "noUncheckedIndexedAccess": false, - "noUnusedLocals": false, - "noUnusedParameters": false, - - // Modules "esModuleInterop": true, - "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "isolatedModules": true, - - // Emit "declaration": true, "declarationMap": true, "sourceMap": true, - "removeComments": true, - - // Interop Constraints - "allowJs": false, "skipLibCheck": true, - - // Completeness "incremental": true } } diff --git a/tsconfig.json b/tsconfig.json index 913e83a2..38e9ffad 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,10 +3,6 @@ "files": [], "references": [ { "path": "./packages/domain" }, - { "path": "./packages/logging" }, - { "path": "./packages/validation" }, - { "path": "./packages/integrations/whmcs" }, - { "path": "./packages/integrations/freebit" }, { "path": "./apps/bff" }, { "path": "./apps/portal" } ]