From 3a014a3d208d47f27bfa455d946e7517e60b0545 Mon Sep 17 00:00:00 2001 From: grabbit Date: Mon, 4 Aug 2025 01:02:29 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E9=A1=B5=E9=9D=A2=E5=92=8Cnode?= =?UTF-8?q?=E5=90=8E=E7=AB=AFok=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meteor-frontend/src/contexts/auth-context.tsx | 65 +- meteor-frontend/src/services/devices.ts | 2 +- meteor-frontend/src/services/events.ts | 4 +- meteor-frontend/src/services/subscription.ts | 6 +- .../src/auth/auth.controller.ts | 14 +- meteor-web-backend/src/auth/auth.module.ts | 12 +- meteor-web-backend/src/auth/auth.service.ts | 51 + .../src/auth/dto/register-email.dto.ts | 2 +- .../src/devices/devices.module.ts | 9 +- .../src/events/events.module.ts | 9 +- meteor-web-backend/src/main.ts | 23 +- .../src/payments/payments.service.ts | 19 + package-lock.json | 1494 +++++++++-------- package.json | 7 +- 14 files changed, 1000 insertions(+), 717 deletions(-) diff --git a/meteor-frontend/src/contexts/auth-context.tsx b/meteor-frontend/src/contexts/auth-context.tsx index f4bbad9..dec6419 100644 --- a/meteor-frontend/src/contexts/auth-context.tsx +++ b/meteor-frontend/src/contexts/auth-context.tsx @@ -32,14 +32,47 @@ export function AuthProvider({ children }: AuthProviderProps) { const isAuthenticated = !!user + const refreshTokens = async (): Promise => { + const refreshToken = localStorage.getItem("refreshToken") + if (!refreshToken) { + return false + } + + try { + const response = await fetch("http://localhost:3001/api/v1/auth/refresh", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ refreshToken }), + }) + + if (!response.ok) { + localStorage.removeItem("accessToken") + localStorage.removeItem("refreshToken") + return false + } + + const data = await response.json() + localStorage.setItem("accessToken", data.accessToken) + localStorage.setItem("refreshToken", data.refreshToken) + return true + } catch (error) { + console.error("Failed to refresh tokens:", error) + localStorage.removeItem("accessToken") + localStorage.removeItem("refreshToken") + return false + } + } + const fetchUserProfile = async (): Promise => { - const token = localStorage.getItem("accessToken") + let token = localStorage.getItem("accessToken") if (!token) { return null } try { - const response = await fetch("http://localhost:3000/api/v1/auth/profile", { + let response = await fetch("http://localhost:3001/api/v1/auth/profile", { method: "GET", headers: { "Authorization": `Bearer ${token}`, @@ -47,8 +80,29 @@ export function AuthProvider({ children }: AuthProviderProps) { }, }) + // If token is expired, try to refresh + if (response.status === 401) { + const refreshed = await refreshTokens() + if (!refreshed) { + return null + } + + // Retry with new token + token = localStorage.getItem("accessToken") + if (!token) { + return null + } + + response = await fetch("http://localhost:3001/api/v1/auth/profile", { + method: "GET", + headers: { + "Authorization": `Bearer ${token}`, + "Content-Type": "application/json", + }, + }) + } + if (!response.ok) { - // Token might be invalid, remove it localStorage.removeItem("accessToken") localStorage.removeItem("refreshToken") return null @@ -63,7 +117,6 @@ export function AuthProvider({ children }: AuthProviderProps) { hasActiveSubscription: profileData.hasActiveSubscription, } } catch (error) { - // Network error or other issue console.error("Failed to fetch user profile:", error) return null } @@ -72,7 +125,7 @@ export function AuthProvider({ children }: AuthProviderProps) { const login = async (email: string, password: string) => { setIsLoading(true) try { - const response = await fetch("http://localhost:3000/api/v1/auth/login-email", { + const response = await fetch("http://localhost:3001/api/v1/auth/login-email", { method: "POST", headers: { "Content-Type": "application/json", @@ -113,7 +166,7 @@ export function AuthProvider({ children }: AuthProviderProps) { const register = async (email: string, password: string, displayName: string) => { setIsLoading(true) try { - const response = await fetch("http://localhost:3000/api/v1/auth/register-email", { + const response = await fetch("http://localhost:3001/api/v1/auth/register-email", { method: "POST", headers: { "Content-Type": "application/json", diff --git a/meteor-frontend/src/services/devices.ts b/meteor-frontend/src/services/devices.ts index 3b02758..4aefe6c 100644 --- a/meteor-frontend/src/services/devices.ts +++ b/meteor-frontend/src/services/devices.ts @@ -7,7 +7,7 @@ export const devicesApi = { throw new Error("No access token found") } - const response = await fetch("http://localhost:3000/api/v1/devices", { + const response = await fetch("http://localhost:3001/api/v1/devices", { method: "GET", headers: { "Authorization": `Bearer ${token}`, diff --git a/meteor-frontend/src/services/events.ts b/meteor-frontend/src/services/events.ts index 9326e05..d1a7b84 100644 --- a/meteor-frontend/src/services/events.ts +++ b/meteor-frontend/src/services/events.ts @@ -31,7 +31,7 @@ export const eventsApi = { throw new Error("No access token found") } - const url = new URL("http://localhost:3000/api/v1/events") + const url = new URL("http://localhost:3001/api/v1/events") if (params.limit) { url.searchParams.append("limit", params.limit.toString()) @@ -69,7 +69,7 @@ export const eventsApi = { throw new Error("No access token found") } - const response = await fetch(`http://localhost:3000/api/v1/events/${eventId}`, { + const response = await fetch(`http://localhost:3001/api/v1/events/${eventId}`, { method: "GET", headers: { "Authorization": `Bearer ${token}`, diff --git a/meteor-frontend/src/services/subscription.ts b/meteor-frontend/src/services/subscription.ts index eceb1c7..876d88d 100644 --- a/meteor-frontend/src/services/subscription.ts +++ b/meteor-frontend/src/services/subscription.ts @@ -37,7 +37,7 @@ export const subscriptionApi = { throw new Error("No access token found") } - const response = await fetch("http://localhost:3000/api/v1/payments/subscription", { + const response = await fetch("http://localhost:3001/api/v1/payments/subscription", { method: "GET", headers: { "Authorization": `Bearer ${token}`, @@ -61,7 +61,7 @@ export const subscriptionApi = { throw new Error("No access token found") } - const response = await fetch("http://localhost:3000/api/v1/payments/customer-portal", { + const response = await fetch("http://localhost:3001/api/v1/payments/customer-portal", { method: "POST", headers: { "Authorization": `Bearer ${token}`, @@ -86,7 +86,7 @@ export const subscriptionApi = { throw new Error("No access token found") } - const response = await fetch("http://localhost:3000/api/v1/payments/checkout-session/stripe", { + const response = await fetch("http://localhost:3001/api/v1/payments/checkout-session/stripe", { method: "POST", headers: { "Authorization": `Bearer ${token}`, diff --git a/meteor-web-backend/src/auth/auth.controller.ts b/meteor-web-backend/src/auth/auth.controller.ts index e6b2685..2887ee6 100644 --- a/meteor-web-backend/src/auth/auth.controller.ts +++ b/meteor-web-backend/src/auth/auth.controller.ts @@ -8,6 +8,7 @@ import { HttpCode, HttpStatus, UseGuards, + UnauthorizedException, } from '@nestjs/common'; import { AuthService } from './auth.service'; import { RegisterEmailDto } from './dto/register-email.dto'; @@ -24,7 +25,7 @@ export class AuthController { @Post('register-email') @HttpCode(HttpStatus.CREATED) - async registerWithEmail(@Body(ValidationPipe) registerDto: RegisterEmailDto) { + async registerWithEmail(@Body() registerDto: RegisterEmailDto) { try { const result = await this.authService.registerWithEmail(registerDto); this.metricsService.recordAuthOperation('register', true, 'email'); @@ -37,7 +38,7 @@ export class AuthController { @Post('login-email') @HttpCode(HttpStatus.OK) - async loginWithEmail(@Body(ValidationPipe) loginDto: LoginEmailDto) { + async loginWithEmail(@Body() loginDto: LoginEmailDto) { try { const result = await this.authService.loginWithEmail(loginDto); this.metricsService.recordAuthOperation('login', true, 'email'); @@ -54,4 +55,13 @@ export class AuthController { const userId = req.user.userId; return await this.authService.getUserProfile(userId); } + + @Post('refresh') + @HttpCode(HttpStatus.OK) + async refreshToken(@Body('refreshToken') refreshToken: string) { + if (!refreshToken) { + throw new UnauthorizedException('Refresh token is required'); + } + return await this.authService.refreshToken(refreshToken); + } } diff --git a/meteor-web-backend/src/auth/auth.module.ts b/meteor-web-backend/src/auth/auth.module.ts index 6a03c43..5cffc7b 100644 --- a/meteor-web-backend/src/auth/auth.module.ts +++ b/meteor-web-backend/src/auth/auth.module.ts @@ -8,17 +8,21 @@ import { JwtStrategy } from './strategies/jwt.strategy'; import { UserProfile } from '../entities/user-profile.entity'; import { UserIdentity } from '../entities/user-identity.entity'; import { PaymentsModule } from '../payments/payments.module'; +import { MetricsModule } from '../metrics/metrics.module'; @Module({ imports: [ TypeOrmModule.forFeature([UserProfile, UserIdentity]), PassportModule, - JwtModule.register({ - secret: - process.env.JWT_ACCESS_SECRET || 'default-secret-change-in-production', - signOptions: { expiresIn: process.env.JWT_ACCESS_EXPIRATION || '15m' }, + JwtModule.registerAsync({ + useFactory: () => ({ + secret: + process.env.JWT_ACCESS_SECRET || 'default-secret-change-in-production', + signOptions: { expiresIn: process.env.JWT_ACCESS_EXPIRATION || '2h' }, + }), }), forwardRef(() => PaymentsModule), + MetricsModule, ], controllers: [AuthController], providers: [AuthService, JwtStrategy], diff --git a/meteor-web-backend/src/auth/auth.service.ts b/meteor-web-backend/src/auth/auth.service.ts index 7dc3083..f29caa7 100644 --- a/meteor-web-backend/src/auth/auth.service.ts +++ b/meteor-web-backend/src/auth/auth.service.ts @@ -184,4 +184,55 @@ export class AuthService { }; } } + + async refreshToken(refreshToken: string): Promise<{ + accessToken: string; + refreshToken: string; + }> { + try { + // Verify the refresh token + const payload = this.jwtService.verify(refreshToken, { + secret: process.env.JWT_REFRESH_SECRET || 'default-refresh-secret', + }); + + // Check if user still exists + const userProfile = await this.userProfileRepository.findOne({ + where: { id: payload.userId }, + relations: ['identities'], + }); + + if (!userProfile) { + throw new UnauthorizedException('User not found'); + } + + // Get the email from user identity + const emailIdentity = userProfile.identities.find( + (identity) => identity.provider === 'email', + ); + + if (!emailIdentity) { + throw new UnauthorizedException('User email not found'); + } + + // Generate new tokens + const newPayload = { + userId: userProfile.id, + email: emailIdentity.email, + sub: userProfile.id, + }; + + const newAccessToken = this.jwtService.sign(newPayload); + const newRefreshToken = this.jwtService.sign(newPayload, { + secret: process.env.JWT_REFRESH_SECRET || 'default-refresh-secret', + expiresIn: process.env.JWT_REFRESH_EXPIRATION || '7d', + }); + + return { + accessToken: newAccessToken, + refreshToken: newRefreshToken, + }; + } catch (error) { + throw new UnauthorizedException('Invalid refresh token'); + } + } } diff --git a/meteor-web-backend/src/auth/dto/register-email.dto.ts b/meteor-web-backend/src/auth/dto/register-email.dto.ts index 82c6c98..84a8af3 100644 --- a/meteor-web-backend/src/auth/dto/register-email.dto.ts +++ b/meteor-web-backend/src/auth/dto/register-email.dto.ts @@ -22,5 +22,5 @@ export class RegisterEmailDto { @IsString() @IsNotEmpty({ message: 'Display name is required' }) - displayName?: string; + displayName: string; } diff --git a/meteor-web-backend/src/devices/devices.module.ts b/meteor-web-backend/src/devices/devices.module.ts index 318fe2f..1e5e73a 100644 --- a/meteor-web-backend/src/devices/devices.module.ts +++ b/meteor-web-backend/src/devices/devices.module.ts @@ -1,12 +1,17 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DevicesController } from './devices.controller'; import { DevicesService } from './devices.service'; import { Device } from '../entities/device.entity'; import { InventoryDevice } from '../entities/inventory-device.entity'; +import { UserProfile } from '../entities/user-profile.entity'; +import { PaymentsModule } from '../payments/payments.module'; @Module({ - imports: [TypeOrmModule.forFeature([Device, InventoryDevice])], + imports: [ + TypeOrmModule.forFeature([Device, InventoryDevice, UserProfile]), + forwardRef(() => PaymentsModule), + ], controllers: [DevicesController], providers: [DevicesService], exports: [DevicesService], diff --git a/meteor-web-backend/src/events/events.module.ts b/meteor-web-backend/src/events/events.module.ts index 3a20291..4d1caa4 100644 --- a/meteor-web-backend/src/events/events.module.ts +++ b/meteor-web-backend/src/events/events.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { EventsController } from './events.controller'; import { EventsService } from './events.service'; @@ -6,9 +6,14 @@ import { AwsService } from '../aws/aws.service'; import { RawEvent } from '../entities/raw-event.entity'; import { Device } from '../entities/device.entity'; import { ValidatedEvent } from '../entities/validated-event.entity'; +import { UserProfile } from '../entities/user-profile.entity'; +import { PaymentsModule } from '../payments/payments.module'; @Module({ - imports: [TypeOrmModule.forFeature([RawEvent, Device, ValidatedEvent])], + imports: [ + TypeOrmModule.forFeature([RawEvent, Device, ValidatedEvent, UserProfile]), + forwardRef(() => PaymentsModule), + ], controllers: [EventsController], providers: [EventsService, AwsService], exports: [EventsService, AwsService], diff --git a/meteor-web-backend/src/main.ts b/meteor-web-backend/src/main.ts index 32c4db4..51d69b3 100644 --- a/meteor-web-backend/src/main.ts +++ b/meteor-web-backend/src/main.ts @@ -24,27 +24,30 @@ async function bootstrap() { cwd: process.cwd(), }); - // Configure raw body parsing for webhook endpoints - app.use( - '/api/v1/payments/webhook', - json({ - verify: (req: any, res, buf) => { - req.rawBody = buf; - }, - }), - ); + // fixme: 打开后json反序列化失败 + // // Configure raw body parsing for webhook endpoints + // app.use( + // '/api/v1/payments/webhook', + // json({ + // verify: (req: any, res, buf) => { + // req.rawBody = buf; + // }, + // }), + // ); app.useGlobalPipes( new ValidationPipe({ whitelist: true, forbidNonWhitelisted: true, transform: true, + skipMissingProperties: false, + validationError: { target: false }, }), ); // Enable CORS for frontend app.enableCors({ - origin: 'http://localhost:3001', // Adjust if your frontend runs on different port + origin: 'http://localhost:3000', // Frontend runs on port 3000 credentials: true, }); diff --git a/meteor-web-backend/src/payments/payments.service.ts b/meteor-web-backend/src/payments/payments.service.ts index 1906f49..3576ce7 100644 --- a/meteor-web-backend/src/payments/payments.service.ts +++ b/meteor-web-backend/src/payments/payments.service.ts @@ -182,6 +182,25 @@ export class PaymentsService { }; } + // Development/Test mode: if subscription ID starts with 'sub_test_', return mock data + if (userProfile.paymentProviderSubscriptionId.startsWith('sub_test_')) { + this.logger.log(`Returning mock subscription data for development mode`); + const nextMonth = new Date(); + nextMonth.setMonth(nextMonth.getMonth() + 1); + + return { + hasActiveSubscription: true, + subscriptionStatus: 'active', + currentPlan: { + id: userProfile.paymentProviderSubscriptionId, + priceId: 'price_test_premium', + name: 'Premium Plan (Test)', + }, + nextBillingDate: nextMonth, + customerId: userProfile.paymentProviderCustomerId, + }; + } + try { const provider = this.getProvider('stripe'); const subscription = await provider.getSubscription( diff --git a/package-lock.json b/package-lock.json index 7d2f996..00b2684 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,9 @@ "meteor-web-backend", "meteor-frontend" ], + "dependencies": { + "node-fetch": "^2.7.0" + }, "devDependencies": { "concurrently": "^8.2.2" } @@ -2653,11 +2656,6 @@ "node-int64": "^0.4.0" } }, - "meteor-frontend/node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, "meteor-frontend/node_modules/call-bind": { "version": "1.0.8", "dev": true, @@ -4079,17 +4077,6 @@ "node": ">=10.17.0" } }, - "meteor-frontend/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "meteor-frontend/node_modules/ignore": { "version": "5.3.2", "dev": true, @@ -4156,11 +4143,6 @@ "wrappy": "1" } }, - "meteor-frontend/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, "meteor-frontend/node_modules/internal-slot": { "version": "1.1.0", "dev": true, @@ -5836,14 +5818,6 @@ "node": "*" } }, - "meteor-frontend/node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "meteor-frontend/node_modules/minipass": { "version": "7.1.2", "dev": true, @@ -6022,14 +5996,6 @@ "dev": true, "license": "MIT" }, - "meteor-frontend/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "meteor-frontend/node_modules/object-keys": { "version": "1.1.1", "dev": true, @@ -6118,14 +6084,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "meteor-frontend/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "meteor-frontend/node_modules/onetime": { "version": "5.1.2", "dev": true, @@ -6776,11 +6734,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "meteor-frontend/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, "meteor-frontend/node_modules/saxes": { "version": "6.0.0", "dev": true, @@ -7936,11 +7889,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "meteor-frontend/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, "meteor-frontend/node_modules/write-file-atomic": { "version": "5.0.1", "dev": true, @@ -10596,25 +10544,6 @@ "passport": "^0.5.0 || ^0.6.0 || ^0.7.0" } }, - "meteor-web-backend/node_modules/@nestjs/platform-express": { - "version": "11.1.5", - "license": "MIT", - "dependencies": { - "cors": "2.8.5", - "express": "5.1.0", - "multer": "2.0.2", - "path-to-regexp": "8.2.0", - "tslib": "2.8.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^11.0.0", - "@nestjs/core": "^11.0.0" - } - }, "meteor-web-backend/node_modules/@nestjs/schematics": { "version": "11.0.5", "dev": true, @@ -11405,10 +11334,6 @@ "version": "10.0.0", "license": "MIT" }, - "meteor-web-backend/node_modules/@types/validator": { - "version": "13.15.2", - "license": "MIT" - }, "meteor-web-backend/node_modules/@types/yargs": { "version": "17.0.33", "dev": true, @@ -12034,17 +11959,6 @@ "dev": true, "license": "Apache-2.0" }, - "meteor-web-backend/node_modules/accepts": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/acorn": { "version": "8.15.0", "devOptional": true, @@ -12215,10 +12129,6 @@ "node": ">= 6.0.0" } }, - "meteor-web-backend/node_modules/append-field": { - "version": "1.0.0", - "license": "MIT" - }, "meteor-web-backend/node_modules/arch": { "version": "3.0.0", "dev": true, @@ -12479,24 +12389,6 @@ "readable-stream": "^3.4.0" } }, - "meteor-web-backend/node_modules/body-parser": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, "meteor-web-backend/node_modules/brace-expansion": { "version": "1.1.12", "dev": true, @@ -12602,26 +12494,6 @@ "version": "1.0.1", "license": "BSD-3-Clause" }, - "meteor-web-backend/node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "meteor-web-backend/node_modules/busboy": { - "version": "1.6.0", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "meteor-web-backend/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/cacheable-lookup": { "version": "7.0.0", "dev": true, @@ -12752,19 +12624,6 @@ "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/class-transformer": { - "version": "0.5.1", - "license": "MIT" - }, - "meteor-web-backend/node_modules/class-validator": { - "version": "0.14.2", - "license": "MIT", - "dependencies": { - "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.11.1", - "validator": "^13.9.0" - } - }, "meteor-web-backend/node_modules/cli-cursor": { "version": "3.1.0", "dev": true, @@ -12878,19 +12737,6 @@ "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/concat-stream": { - "version": "2.0.0", - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, "meteor-web-backend/node_modules/content-disposition": { "version": "0.5.4", "dev": true, @@ -12902,32 +12748,11 @@ "node": ">= 0.6" } }, - "meteor-web-backend/node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/convert-source-map": { "version": "2.0.0", "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/cookie": { - "version": "0.7.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/cookie-signature": { - "version": "1.2.2", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "meteor-web-backend/node_modules/cookiejar": { "version": "2.1.4", "dev": true, @@ -12938,17 +12763,6 @@ "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/cors": { - "version": "2.8.5", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "meteor-web-backend/node_modules/cosmiconfig": { "version": "8.3.6", "dev": true, @@ -13107,13 +12921,6 @@ "node": ">=0.4.0" } }, - "meteor-web-backend/node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/detect-newline": { "version": "3.1.0", "dev": true, @@ -13168,10 +12975,6 @@ "safe-buffer": "^5.0.1" } }, - "meteor-web-backend/node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, "meteor-web-backend/node_modules/ejs": { "version": "3.1.10", "dev": true, @@ -13202,13 +13005,6 @@ "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "meteor-web-backend/node_modules/encodeurl": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/enhanced-resolve": { "version": "5.18.2", "dev": true, @@ -13248,10 +13044,6 @@ "node": ">= 0.4" } }, - "meteor-web-backend/node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, "meteor-web-backend/node_modules/escape-string-regexp": { "version": "4.0.0", "dev": true, @@ -13457,13 +13249,6 @@ "node": ">=0.10.0" } }, - "meteor-web-backend/node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/events": { "version": "3.3.0", "dev": true, @@ -13521,56 +13306,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "meteor-web-backend/node_modules/express": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "meteor-web-backend/node_modules/express/node_modules/content-disposition": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/ext-list": { "version": "2.2.2", "dev": true, @@ -13774,21 +13509,6 @@ "node": ">=8" } }, - "meteor-web-backend/node_modules/finalhandler": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/find-up": { "version": "5.0.0", "dev": true, @@ -13946,20 +13666,6 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "meteor-web-backend/node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/fresh": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/fs-extra": { "version": "10.1.0", "dev": true, @@ -14146,27 +13852,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "meteor-web-backend/node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "meteor-web-backend/node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/http2-wrapper": { "version": "2.2.1", "dev": true, @@ -14187,16 +13872,6 @@ "node": ">=10.17.0" } }, - "meteor-web-backend/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "meteor-web-backend/node_modules/ignore": { "version": "5.3.2", "dev": true, @@ -14255,10 +13930,6 @@ "wrappy": "1" } }, - "meteor-web-backend/node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, "meteor-web-backend/node_modules/inspect-with-kind": { "version": "1.0.5", "dev": true, @@ -14267,13 +13938,6 @@ "kind-of": "^6.0.2" } }, - "meteor-web-backend/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "meteor-web-backend/node_modules/is-arrayish": { "version": "0.2.1", "dev": true, @@ -14354,10 +14018,6 @@ "node": ">=0.10.0" } }, - "meteor-web-backend/node_modules/is-promise": { - "version": "4.0.0", - "license": "MIT" - }, "meteor-web-backend/node_modules/is-stream": { "version": "2.0.1", "dev": true, @@ -15248,10 +14908,6 @@ "node": ">= 0.8.0" } }, - "meteor-web-backend/node_modules/libphonenumber-js": { - "version": "1.12.10", - "license": "MIT" - }, "meteor-web-backend/node_modules/lines-and-columns": { "version": "1.2.4", "dev": true, @@ -15386,13 +15042,6 @@ "tmpl": "1.0.5" } }, - "meteor-web-backend/node_modules/media-typer": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/memfs": { "version": "3.5.3", "dev": true, @@ -15404,16 +15053,6 @@ "node": ">= 4.0.0" } }, - "meteor-web-backend/node_modules/merge-descriptors": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "meteor-web-backend/node_modules/merge-stream": { "version": "2.0.0", "dev": true, @@ -15469,23 +15108,6 @@ "node": ">=4.0.0" } }, - "meteor-web-backend/node_modules/mime-db": { - "version": "1.54.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/mime-types": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/mimic-fn": { "version": "2.1.0", "dev": true, @@ -15516,13 +15138,6 @@ "node": "*" } }, - "meteor-web-backend/node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "meteor-web-backend/node_modules/minipass": { "version": "7.1.2", "license": "ISC", @@ -15530,67 +15145,6 @@ "node": ">=16 || 14 >=14.17" } }, - "meteor-web-backend/node_modules/mkdirp": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "meteor-web-backend/node_modules/multer": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.6.0", - "concat-stream": "^2.0.0", - "mkdirp": "^0.5.6", - "object-assign": "^4.1.1", - "type-is": "^1.6.18", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">= 10.16.0" - } - }, - "meteor-web-backend/node_modules/multer/node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/multer/node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/multer/node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/multer/node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/mute-stream": { "version": "2.0.0", "dev": true, @@ -15604,13 +15158,6 @@ "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/negotiator": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/neo-async": { "version": "2.6.2", "dev": true, @@ -15708,30 +15255,6 @@ "node": ">=8" } }, - "meteor-web-backend/node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "meteor-web-backend/node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "meteor-web-backend/node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "meteor-web-backend/node_modules/onetime": { "version": "5.1.2", "dev": true, @@ -15887,13 +15410,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "meteor-web-backend/node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/passport": { "version": "0.7.0", "license": "MIT", @@ -16277,17 +15793,6 @@ "node": ">= 6" } }, - "meteor-web-backend/node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "meteor-web-backend/node_modules/punycode": { "version": "2.3.1", "dev": true, @@ -16349,43 +15854,11 @@ "safe-buffer": "^5.1.0" } }, - "meteor-web-backend/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "meteor-web-backend/node_modules/raw-body": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/react-is": { "version": "18.3.1", "dev": true, "license": "MIT" }, - "meteor-web-backend/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "meteor-web-backend/node_modules/readdirp": { "version": "4.1.2", "dev": true, @@ -16513,20 +15986,6 @@ "node": ">=0.10.0" } }, - "meteor-web-backend/node_modules/router": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "meteor-web-backend/node_modules/run-parallel": { "version": "1.2.0", "dev": true, @@ -16549,28 +16008,6 @@ "queue-microtask": "^1.2.2" } }, - "meteor-web-backend/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "meteor-web-backend/node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, "meteor-web-backend/node_modules/schema-utils": { "version": "3.3.0", "dev": true, @@ -16643,26 +16080,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "meteor-web-backend/node_modules/send": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, "meteor-web-backend/node_modules/serialize-javascript": { "version": "6.0.2", "dev": true, @@ -16671,19 +16088,6 @@ "randombytes": "^2.1.0" } }, - "meteor-web-backend/node_modules/serve-static": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, "meteor-web-backend/node_modules/set-function-length": { "version": "1.2.2", "license": "MIT", @@ -16699,10 +16103,6 @@ "node": ">= 0.4" } }, - "meteor-web-backend/node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, "meteor-web-backend/node_modules/sha.js": { "version": "2.4.12", "license": "(MIT AND BSD-3-Clause)", @@ -16846,19 +16246,6 @@ "node": ">=8" } }, - "meteor-web-backend/node_modules/statuses": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "meteor-web-backend/node_modules/streamsearch": { - "version": "1.1.0", - "engines": { - "node": ">=10.0.0" - } - }, "meteor-web-backend/node_modules/streamx": { "version": "2.22.1", "dev": true, @@ -16871,13 +16258,6 @@ "bare-events": "^2.2.0" } }, - "meteor-web-backend/node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "meteor-web-backend/node_modules/string-length": { "version": "4.0.2", "dev": true, @@ -17330,13 +16710,6 @@ "node": ">=8.0" } }, - "meteor-web-backend/node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "meteor-web-backend/node_modules/ts-api-utils": { "version": "2.1.0", "dev": true, @@ -17536,18 +16909,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "meteor-web-backend/node_modules/type-is": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "meteor-web-backend/node_modules/typed-array-buffer": { "version": "1.0.3", "license": "MIT", @@ -17560,10 +16921,6 @@ "node": ">= 0.4" } }, - "meteor-web-backend/node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, "meteor-web-backend/node_modules/typeorm": { "version": "0.3.25", "license": "MIT", @@ -17831,13 +17188,6 @@ "node": ">= 10.0.0" } }, - "meteor-web-backend/node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/update-browserslist-db": { "version": "1.1.3", "dev": true, @@ -17875,10 +17225,6 @@ "punycode": "^2.1.0" } }, - "meteor-web-backend/node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, "meteor-web-backend/node_modules/utils-merge": { "version": "1.0.1", "license": "MIT", @@ -17915,20 +17261,6 @@ "node": ">=10.12.0" } }, - "meteor-web-backend/node_modules/validator": { - "version": "13.15.15", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "meteor-web-backend/node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "meteor-web-backend/node_modules/walker": { "version": "1.0.8", "dev": true, @@ -18250,10 +17582,6 @@ "node": ">=8" } }, - "meteor-web-backend/node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, "meteor-web-backend/node_modules/write-file-atomic": { "version": "4.0.2", "dev": true, @@ -18271,13 +17599,6 @@ "dev": true, "license": "ISC" }, - "meteor-web-backend/node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "meteor-web-backend/node_modules/yallist": { "version": "3.1.1", "dev": true, @@ -19041,6 +18362,27 @@ } } }, + "node_modules/@nestjs/platform-express": { + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.5.tgz", + "integrity": "sha512-OsoiUBY9Shs5IG3uvDIt9/IDfY5OlvWBESuB/K4Eun8xILw1EK5d5qMfC3d2sIJ+kA3l+kBR1d/RuzH7VprLIg==", + "license": "MIT", + "dependencies": { + "cors": "2.8.5", + "express": "5.1.0", + "multer": "2.0.2", + "path-to-regexp": "8.2.0", + "tslib": "2.8.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^11.0.0", + "@nestjs/core": "^11.0.0" + } + }, "node_modules/@nestjs/schedule": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.0.0.tgz", @@ -19787,6 +19129,25 @@ "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", "license": "MIT" }, + "node_modules/@types/validator": { + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -19820,6 +19181,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", @@ -19835,6 +19202,26 @@ "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", "license": "MIT" }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -19863,6 +19250,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -19941,6 +19354,23 @@ "node": ">=16" } }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", + "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", + "license": "MIT", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.11.1", + "validator": "^13.9.0" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -19985,6 +19415,21 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "node_modules/concurrently": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", @@ -20022,6 +19467,58 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cron": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.0.tgz", @@ -20069,6 +19566,15 @@ } } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -20083,12 +19589,27 @@ "node": ">= 0.4" } }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -20128,6 +19649,63 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/fast-redact": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", @@ -20185,6 +19763,41 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -20285,6 +19898,43 @@ "node": ">= 0.4" } }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -20305,6 +19955,21 @@ ], "license": "BSD-3-Clause" }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -20314,6 +19979,12 @@ "node": ">=8" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/iterare": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", @@ -20323,6 +19994,12 @@ "node": ">=6" } }, + "node_modules/libphonenumber-js": { + "version": "1.12.10", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.10.tgz", + "integrity": "sha512-E91vHJD61jekHHR/RF/E83T/CMoaLXT7cwYA75T4gim4FZjnM6hbJjVIGg7chqlSqRsSvQ3izGmOjHy1SQzcGQ==", + "license": "MIT" + }, "node_modules/load-esm": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.2.tgz", @@ -20367,6 +20044,27 @@ "node": ">= 0.4" } }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/meteor-frontend": { "resolved": "meteor-frontend", "link": true @@ -20375,12 +20073,124 @@ "resolved": "meteor-web-backend", "link": true }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/multer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/nestjs-pino": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/nestjs-pino/-/nestjs-pino-4.4.0.tgz", @@ -20397,6 +20207,35 @@ "rxjs": "^7.1.0" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -20418,6 +20257,36 @@ "node": ">=14.0.0" } }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-to-regexp": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", @@ -20505,6 +20374,19 @@ "node": "^16 || ^18 || >=20" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -20526,6 +20408,44 @@ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", @@ -20550,6 +20470,22 @@ "node": ">=0.10.0" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -20559,6 +20495,26 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -20568,6 +20524,55 @@ "node": ">=10" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shell-quote": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", @@ -20677,6 +20682,32 @@ "node": ">= 10.x" } }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -20785,6 +20816,15 @@ "real-require": "^0.2.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/token-types": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.4.tgz", @@ -20802,6 +20842,12 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -20830,6 +20876,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/uid": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", @@ -20854,6 +20920,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -20867,6 +20948,40 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -20896,6 +21011,21 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 0690211..3918cd2 100644 --- a/package.json +++ b/package.json @@ -29,5 +29,8 @@ "workspaces": [ "meteor-web-backend", "meteor-frontend" - ] -} \ No newline at end of file + ], + "dependencies": { + "node-fetch": "^2.7.0" + } +}